

import argparse

import torch

from transformers import FunnelBaseModel, FunnelConfig, FunnelModel, load_tf_weights_in_funnel
from transformers.utils import logging


logging.set_verbosity_info()







def 			A_      (    _UpperCAmelCase				,	_UpperCAmelCase				,	_UpperCAmelCase				,	_UpperCAmelCase    ):
						# Initialise PyTorch model
						SCREAMING_SNAKE_CASE_: Tuple  		=       FunnelConfig.from_json_file(_UpperCAmelCase    )
						print(f"Building PyTorch model from configuration: {config}"    )
						SCREAMING_SNAKE_CASE_: Optional[Any]  		=       FunnelBaseModel(_UpperCAmelCase    ) if base_model else FunnelModel(_UpperCAmelCase    )

						# Load weights from tf checkpoint
						load_tf_weights_in_funnel(_UpperCAmelCase				,	_UpperCAmelCase				,	_UpperCAmelCase    )

						# Save pytorch-model
						print(f"Save PyTorch model to {pytorch_dump_path}"    )
						torch.save(model.state_dict()				,	_UpperCAmelCase    )


if __name__ == "__main__":
						lowerCAmelCase							:  Union[str, Any]   	=						argparse.ArgumentParser()
						# Required parameters
						parser.add_argument(
						    """--tf_checkpoint_path""", default=None, type=str, required=True, help="""Path to the TensorFlow checkpoint path."""
						)
						parser.add_argument(
						    """--config_file""",
						    default=None,
						    type=str,
						    required=True,
						    help="""The config json file corresponding to the pre-trained model. \nThis specifies the model architecture.""",
						)
						parser.add_argument(
						    """--pytorch_dump_path""", default=None, type=str, required=True, help="""Path to the output PyTorch model."""
						)
						parser.add_argument(
						    """--base_model""", action="""store_true""", help="""Whether you want just the base model (no decoder) or not."""
						)
						lowerCAmelCase							:  Optional[int]   	=						parser.parse_args()
						convert_tf_checkpoint_to_pytorch(
						    args.tf_checkpoint_path, args.config_file, args.pytorch_dump_path, args.base_model
						)










import flax.linen as nn
import jax
import jax.numpy as jnp
class  SCREAMING_SNAKE_CASE__  (				nn.Module			):
      snake_case__				:     int
      snake_case__				:     jnp.dtype        =						jnp.floataa
      def        SCREAMING_SNAKE_CASE							(       self				:       str     )		->			int:
             a_					:		Dict							=  nn.Conv(
                 self.out_channels     ,							kernel_size=(3, 3)     ,							strides=(1, 1)     ,							padding=((1, 1), (1, 1))     ,							dtype=self.dtype     ,							)

      def __call__(       self				:       Tuple     ,							SCREAMING_SNAKE_CASE__				:       Optional[Any]     )		->			Optional[int]:
             a_							,		a_							,		a_							,		a_					:		Union[str, Any]							=  hidden_states.shape
             a_					:		List[str]							=  jax.image.resize(
                 SCREAMING_SNAKE_CASE__     ,							shape=(batch, height * 2, width * 2, channels)     ,							method='nearest'     ,							)
             a_					:		Any							=  self.conv(SCREAMING_SNAKE_CASE__     )
             return hidden_states
class  SCREAMING_SNAKE_CASE__  (				nn.Module			):
      snake_case__				:     int
      snake_case__				:     jnp.dtype        =						jnp.floataa
      def        SCREAMING_SNAKE_CASE							(       self				:       List[str]     )		->			Optional[int]:
             a_					:		Optional[int]							=  nn.Conv(
                 self.out_channels     ,							kernel_size=(3, 3)     ,							strides=(2, 2)     ,							padding=((1, 1), (1, 1))     ,							dtype=self.dtype     ,							)

      def __call__(       self				:       Any     ,							SCREAMING_SNAKE_CASE__				:       int     )		->			Optional[int]:
             # pad = ((0, 0), (0, 1), (0, 1), (0, 0))  # pad height and width dim
             # hidden_states = jnp.pad(hidden_states, pad_width=pad)
             a_					:		str							=  self.conv(SCREAMING_SNAKE_CASE__     )
             return hidden_states
class  SCREAMING_SNAKE_CASE__  (				nn.Module			):
      snake_case__				:     int
      snake_case__				:     int        =						None
      snake_case__				:     float        =						0.0
      snake_case__				:     bool        =						None
      snake_case__				:     jnp.dtype        =						jnp.floataa
      def        SCREAMING_SNAKE_CASE							(       self				:       Tuple     )		->			Dict:
             a_					:		List[str]							=  self.in_channels if self.out_channels is None else self.out_channels

             a_					:		Optional[int]							=  nn.GroupNorm(num_groups=3_2     ,							epsilon=1E-5     )
             a_					:		Any							=  nn.Conv(
                 SCREAMING_SNAKE_CASE__     ,							kernel_size=(3, 3)     ,							strides=(1, 1)     ,							padding=((1, 1), (1, 1))     ,							dtype=self.dtype     ,							)

             a_					:		Optional[int]							=  nn.Dense(SCREAMING_SNAKE_CASE__     ,							dtype=self.dtype     )

             a_					:		Union[str, Any]							=  nn.GroupNorm(num_groups=3_2     ,							epsilon=1E-5     )
             a_					:		int							=  nn.Dropout(self.dropout_prob     )
             a_					:		Optional[Any]							=  nn.Conv(
                 SCREAMING_SNAKE_CASE__     ,							kernel_size=(3, 3)     ,							strides=(1, 1)     ,							padding=((1, 1), (1, 1))     ,							dtype=self.dtype     ,							)

             a_					:		List[str]							=  self.in_channels != out_channels if self.use_nin_shortcut is None else self.use_nin_shortcut

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

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

             a_					:		int							=  self.time_emb_proj(nn.swish(SCREAMING_SNAKE_CASE__     )     )
             a_					:		List[str]							=  jnp.expand_dims(jnp.expand_dims(SCREAMING_SNAKE_CASE__     ,							1     )     ,							1     )
             a_					:		Optional[int]							=  hidden_states + temb

             a_					:		List[str]							=  self.norma(SCREAMING_SNAKE_CASE__     )
             a_					:		Tuple							=  nn.swish(SCREAMING_SNAKE_CASE__     )
             a_					:		Optional[int]							=  self.dropout(SCREAMING_SNAKE_CASE__     ,							SCREAMING_SNAKE_CASE__     )
             a_					:		List[Any]							=  self.conva(SCREAMING_SNAKE_CASE__     )

             if self.conv_shortcut is not None:
                    a_					:		List[str]							=  self.conv_shortcut(SCREAMING_SNAKE_CASE__     )

             return hidden_states + residual


