





# Lint as: python3
import sys
from collections.abc import Mapping
from typing import TYPE_CHECKING

import numpy as np
import pyarrow as pa

from .. import config
from ..utils.py_utils import map_nested
from .formatting import TensorFormatter


if TYPE_CHECKING:
    import torch

class    lowerCAmelCase							(					TensorFormatter[Mapping, """torch.Tensor""", Mapping]			):
 def __init__(      self  :      str			,     UpperCAmelCase  :      str=None			,     **UpperCAmelCase  :      int	)			->	Optional[Any]:
     super().__init__(features=UpperCAmelCase	)
     lowerCamelCase__    :      int					 =		torch_tensor_kwargs
     import torch  # noqa import torch at initialization
 def      A_	(      self  :      Union[str, Any]			,     UpperCAmelCase  :      List[Any]	)			->	Optional[Any]:
     import torch

     if isinstance(UpperCAmelCase			,     UpperCAmelCase	) and column:
         if all(
             isinstance(UpperCAmelCase			,     torch.Tensor	) and x.shape == column[0].shape and x.dtype == column[0].dtype
             for x in column	):
             return torch.stack(UpperCAmelCase	)
     return column
 def      A_	(      self  :      str			,     UpperCAmelCase  :      Dict	)			->	List[Any]:
     import torch

     if isinstance(UpperCAmelCase			,     (str, bytes, type(UpperCAmelCase	))	):
         return value
     elif isinstance(UpperCAmelCase			,     (np.character, np.ndarray)	) and np.issubdtype(value.dtype			,     np.character	):
         return value.tolist()

     lowerCamelCase__    :      Union[str, Any]					 =		{}

     if isinstance(UpperCAmelCase			,     (np.number, np.ndarray)	) and np.issubdtype(value.dtype			,     np.integer	):
         lowerCamelCase__    :      Optional[Any]					 =		{'dtype': torch.intaa}
     elif isinstance(UpperCAmelCase			,     (np.number, np.ndarray)	) and np.issubdtype(value.dtype			,     np.floating	):
         lowerCamelCase__    :      List[Any]					 =		{'dtype': torch.floataa}
     elif config.PIL_AVAILABLE and "PIL" in sys.modules:
         import PIL.Image

         if isinstance(UpperCAmelCase			,     PIL.Image.Image	):
             lowerCamelCase__    :      List[str]					 =		np.asarray(UpperCAmelCase	)
     return torch.tensor(UpperCAmelCase			,     **{**default_dtype, **self.torch_tensor_kwargs}	)
 def      A_	(      self  :      str			,     UpperCAmelCase  :      Tuple	)			->	Optional[Any]:
     import torch

     # support for torch, tf, jax etc.
     if hasattr(UpperCAmelCase			,     '__array__'	) and not isinstance(UpperCAmelCase			,     torch.Tensor	):
         lowerCamelCase__    :      Optional[int]					 =		data_struct.__array__()
     # support for nested types like struct of list of struct
     if isinstance(UpperCAmelCase			,     np.ndarray	):
         if data_struct.dtype == object:  # torch tensors cannot be instantied from an array of objects
             return self._consolidate([self.recursive_tensorize(UpperCAmelCase	) for substruct in data_struct]	)
     elif isinstance(UpperCAmelCase			,     (list, tuple)	):
         return self._consolidate([self.recursive_tensorize(UpperCAmelCase	) for substruct in data_struct]	)
     return self._tensorize(UpperCAmelCase	)
 def      A_	(      self  :      List[str]			,     UpperCAmelCase  :      dict	)			->	List[str]:
     return map_nested(self._recursive_tensorize			,     UpperCAmelCase			,     map_list=UpperCAmelCase	)
 def      A_	(      self  :      Tuple			,     UpperCAmelCase  :      pa.Table	)			->	Mapping:
     lowerCamelCase__    :      Tuple					 =		self.numpy_arrow_extractor().extract_row(UpperCAmelCase	)
     lowerCamelCase__    :      List[Any]					 =		self.python_features_decoder.decode_row(UpperCAmelCase	)
     return self.recursive_tensorize(UpperCAmelCase	)
 def      A_	(      self  :      List[str]			,     UpperCAmelCase  :      pa.Table	)			->	"torch.Tensor":
     lowerCamelCase__    :      Optional[int]					 =		self.numpy_arrow_extractor().extract_column(UpperCAmelCase	)
     lowerCamelCase__    :      Optional[Any]					 =		self.python_features_decoder.decode_column(UpperCAmelCase			,     pa_table.column_names[0]	)
     lowerCamelCase__    :      int					 =		self.recursive_tensorize(UpperCAmelCase	)
     lowerCamelCase__    :      List[Any]					 =		self._consolidate(UpperCAmelCase	)
     return column







 def      A_	(      self  :      Optional[int]			,     UpperCAmelCase  :      pa.Table	)			->	Mapping:
     lowerCamelCase__    :      Optional[int]					 =		self.numpy_arrow_extractor().extract_batch(UpperCAmelCase	)
     lowerCamelCase__    :      List[Any]					 =		self.python_features_decoder.decode_batch(UpperCAmelCase	)
     lowerCamelCase__    :      Any					 =		self.recursive_tensorize(UpperCAmelCase	)
     for column_name in batch:
         lowerCamelCase__    :      Optional[Any]					 =		self._consolidate(batch[column_name]	)
     return batch












import flax.linen as nn
import jax
import jax.numpy as jnp

class    lowerCAmelCase							(					nn.Module			):
 UpperCAmelCase__													=		42
 UpperCAmelCase__													=		jnp.floataa
 def      A_	(      self  :      Any	)			->	Any:
     lowerCamelCase__    :      str					 =		nn.Conv(
         self.out_channels			,     kernel_size=(3, 3)			,     strides=(1, 1)			,     padding=((1, 1), (1, 1))			,     dtype=self.dtype			,     )







 def __call__(      self  :      int			,     UpperCAmelCase  :      Dict	)			->	Optional[Any]:
     lowerCamelCase__ ,							lowerCamelCase__ ,							lowerCamelCase__ ,							lowerCamelCase__    :      str					 =		hidden_states.shape
     lowerCamelCase__    :      Union[str, Any]					 =		jax.image.resize(
         UpperCAmelCase			,     shape=(batch, height * 2, width * 2, channels)			,     method='nearest'			,     )
     lowerCamelCase__    :      Optional[Any]					 =		self.conv(UpperCAmelCase	)
     return hidden_states


class    lowerCAmelCase							(					nn.Module			):
 UpperCAmelCase__													=		42
 UpperCAmelCase__													=		jnp.floataa
 def      A_	(      self  :      List[str]	)			->	int:
     lowerCamelCase__    :      Tuple					 =		nn.Conv(
         self.out_channels			,     kernel_size=(3, 3)			,     strides=(2, 2)			,     padding=((1, 1), (1, 1))			,     dtype=self.dtype			,     )







 def __call__(      self  :      str			,     UpperCAmelCase  :      Union[str, Any]	)			->	Optional[Any]:
     # pad = ((0, 0), (0, 1), (0, 1), (0, 0))  # pad height and width dim
     # hidden_states = jnp.pad(hidden_states, pad_width=pad)
     lowerCamelCase__    :      Optional[Any]					 =		self.conv(UpperCAmelCase	)
     return hidden_states


class    lowerCAmelCase							(					nn.Module			):
 UpperCAmelCase__													=		42
 UpperCAmelCase__													=		None
 UpperCAmelCase__													=		0.0
 UpperCAmelCase__													=		None
 UpperCAmelCase__													=		jnp.floataa
 def      A_	(      self  :      List[str]	)			->	Union[str, Any]:
     lowerCamelCase__    :      Optional[Any]					 =		self.in_channels if self.out_channels is None else self.out_channels

     lowerCamelCase__    :      Tuple					 =		nn.GroupNorm(num_groups=32			,     epsilon=1e-5	)
     lowerCamelCase__    :      int					 =		nn.Conv(
         UpperCAmelCase			,     kernel_size=(3, 3)			,     strides=(1, 1)			,     padding=((1, 1), (1, 1))			,     dtype=self.dtype			,     )

     lowerCamelCase__    :      Union[str, Any]					 =		nn.Dense(UpperCAmelCase			,     dtype=self.dtype	)

     lowerCamelCase__    :      Union[str, Any]					 =		nn.GroupNorm(num_groups=32			,     epsilon=1e-5	)
     lowerCamelCase__    :      List[Any]					 =		nn.Dropout(self.dropout_prob	)
     lowerCamelCase__    :      Tuple					 =		nn.Conv(
         UpperCAmelCase			,     kernel_size=(3, 3)			,     strides=(1, 1)			,     padding=((1, 1), (1, 1))			,     dtype=self.dtype			,     )

     lowerCamelCase__    :      Optional[Any]					 =		self.in_channels != out_channels if self.use_nin_shortcut is None else self.use_nin_shortcut

     lowerCamelCase__    :      Union[str, Any]					 =		None
     if use_nin_shortcut:
         lowerCamelCase__    :      Dict					 =		nn.Conv(
             UpperCAmelCase			,     kernel_size=(1, 1)			,     strides=(1, 1)			,     padding='VALID'			,     dtype=self.dtype			,     )







 def __call__(      self  :      Optional[Any]			,     UpperCAmelCase  :      str			,     UpperCAmelCase  :      Union[str, Any]			,     UpperCAmelCase  :      int=True	)			->	Optional[int]:
     lowerCamelCase__    :      Union[str, Any]					 =		hidden_states
     lowerCamelCase__    :      List[Any]					 =		self.norma(UpperCAmelCase	)
     lowerCamelCase__    :      List[Any]					 =		nn.swish(UpperCAmelCase	)
     lowerCamelCase__    :      Any					 =		self.conva(UpperCAmelCase	)

     lowerCamelCase__    :      Optional[Any]					 =		self.time_emb_proj(nn.swish(UpperCAmelCase	)	)
     lowerCamelCase__    :      List[str]					 =		jnp.expand_dims(jnp.expand_dims(UpperCAmelCase			,     1	)			,     1	)
     lowerCamelCase__    :      List[str]					 =		hidden_states + temb

     lowerCamelCase__    :      Optional[Any]					 =		self.norma(UpperCAmelCase	)
     lowerCamelCase__    :      List[str]					 =		nn.swish(UpperCAmelCase	)
     lowerCamelCase__    :      Optional[int]					 =		self.dropout(UpperCAmelCase			,     UpperCAmelCase	)
     lowerCamelCase__    :      str					 =		self.conva(UpperCAmelCase	)

     if self.conv_shortcut is not None:
         lowerCamelCase__    :      Dict					 =		self.conv_shortcut(UpperCAmelCase	)

     return hidden_states + residual





