





'''simple docstring'''
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   (    __a				,      __a				,      __a				,      __a     )						->			List[str]:



					'''simple docstring'''






					UpperCamelCase__     :Dict							      =				FunnelConfig.from_json_file(__a     )
					print(f'''Building PyTorch model from configuration: {config}'''     )
					UpperCamelCase__     :List[Any]							      =				FunnelBaseModel(__a     ) if base_model else FunnelModel(__a     )

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

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


if __name__ == "__main__":
		__snake_case							   =  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.'''
		)
		__snake_case							   =  parser.parse_args()
		convert_tf_checkpoint_to_pytorch(
		    args.tf_checkpoint_path, args.config_file, args.pytorch_dump_path, args.base_model
		)



'''simple docstring'''
class      lowercase			:

		"""simple docstring"""

		def __init__(	self					,     UpperCamelCase_							):

							'''simple docstring'''


							UpperCamelCase__     :Union[str, Any]							      =				n
							UpperCamelCase__     :Tuple							      =				[None] * self.n
							UpperCamelCase__     :str							      =				0  # index of the first element
							UpperCamelCase__     :List[Any]							      =				0
							UpperCamelCase__     :Dict							      =				0




		def __len__(	self							):

							'''simple docstring'''


							return self.size




		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							return self.size == 0




		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							return False if self.is_empty() else self.array[self.front]




		def 					lowerCAmelCase__       (	self					,     UpperCamelCase_							):

							'''simple docstring'''


							if self.size >= self.n:
												raise Exception('''QUEUE IS FULL'''							)

							UpperCamelCase__     :List[Any]							      =				data
							UpperCamelCase__     :List[Any]							      =				(self.rear + 1) % self.n
							self.size += 1
							return self




		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							if self.size == 0:
												raise Exception('''UNDERFLOW'''							)

							UpperCamelCase__     :Dict							      =				self.array[self.front]
							UpperCamelCase__     :Union[str, Any]							      =				None
							UpperCamelCase__     :Union[str, Any]							      =				(self.front + 1) % self.n
							self.size -= 1
							return temp