


from argparse import ArgumentParser, Namespace

from ..utils import logging
from . import BaseTransformersCLICommand


def        _UpperCamelCase							(      lowercase__      ):
						return ConvertCommand(
						    args.model_type    ,       args.tf_checkpoint    ,       args.pytorch_dump_output    ,       args.config    ,       args.finetuning_task_name      )


__lowerCAmelCase	: Optional[Any]  				='\ntransformers can only be used from the commandline to convert TensorFlow models in PyTorch, In that case, it requires\nTensorFlow to be installed. Please see https://www.tensorflow.org/install/ for installation instructions.\n'
class        _lowercase      (			A__       ):






				'''simple docstring'''



				@staticmethod
				def 		__magic_name__(       lowerCAmelCase__			:ArgumentParser	)		->			Any:
										__SCREAMING_SNAKE_CASE						:     List[Any]					=		parser.add_parser(
										    '''convert'''			,			help='''CLI tool to run convert model from original author checkpoints to Transformers PyTorch checkpoints.'''			,			)
										train_parser.add_argument('''--model_type'''			,			type=lowerCAmelCase__			,			required=lowerCAmelCase__			,			help='''Model\'s type.'''	)
										train_parser.add_argument(
										    '''--tf_checkpoint'''			,			type=lowerCAmelCase__			,			required=lowerCAmelCase__			,			help='''TensorFlow checkpoint path or folder.'''	)
										train_parser.add_argument(
										    '''--pytorch_dump_output'''			,			type=lowerCAmelCase__			,			required=lowerCAmelCase__			,			help='''Path to the PyTorch saved model output.'''	)
										train_parser.add_argument('''--config'''			,			type=lowerCAmelCase__			,			default=''''''			,			help='''Configuration file path or folder.'''	)
										train_parser.add_argument(
										    '''--finetuning_task_name'''			,			type=lowerCAmelCase__			,			default=lowerCAmelCase__			,			help='''Optional fine-tuning task name if the TF model was a finetuned model.'''			,			)
										train_parser.set_defaults(func=lowerCAmelCase__	)


				def __init__(       self			:int			,			lowerCAmelCase__			:str			,			lowerCAmelCase__			:str			,			lowerCAmelCase__			:str			,			lowerCAmelCase__			:str			,			lowerCAmelCase__			:str			,			*lowerCAmelCase__			:List[Any]			,			)		->			Dict:
										__SCREAMING_SNAKE_CASE						:     str					=		logging.get_logger('''transformers-cli/converting'''	)

										self._logger.info(f'''Loading model {model_type}'''	)
										__SCREAMING_SNAKE_CASE						:     Optional[int]					=		model_type
										__SCREAMING_SNAKE_CASE						:     str					=		tf_checkpoint
										__SCREAMING_SNAKE_CASE						:     Optional[int]					=		pytorch_dump_output
										__SCREAMING_SNAKE_CASE						:     str					=		config
										__SCREAMING_SNAKE_CASE						:     Optional[int]					=		finetuning_task_name



				def 		__magic_name__(       self			:int	)		->			List[str]:
										if self._model_type == "albert":
																try:
																						from ..models.albert.convert_albert_original_tf_checkpoint_to_pytorch import (
																						    convert_tf_checkpoint_to_pytorch,
																						)
																except ImportError:
																						raise ImportError(lowerCAmelCase__	)

																convert_tf_checkpoint_to_pytorch(self._tf_checkpoint			,			self._config			,			self._pytorch_dump_output	)
										elif self._model_type == "bert":
																try:
																						from ..models.bert.convert_bert_original_tf_checkpoint_to_pytorch import (
																						    convert_tf_checkpoint_to_pytorch,
																						)
																except ImportError:
																						raise ImportError(lowerCAmelCase__	)

																convert_tf_checkpoint_to_pytorch(self._tf_checkpoint			,			self._config			,			self._pytorch_dump_output	)
										elif self._model_type == "funnel":
																try:
																						from ..models.funnel.convert_funnel_original_tf_checkpoint_to_pytorch import (
																						    convert_tf_checkpoint_to_pytorch,
																						)
																except ImportError:
																						raise ImportError(lowerCAmelCase__	)

																convert_tf_checkpoint_to_pytorch(self._tf_checkpoint			,			self._config			,			self._pytorch_dump_output	)
										elif self._model_type == "t5":
																try:
																						from ..models.ta.convert_ta_original_tf_checkpoint_to_pytorch import convert_tf_checkpoint_to_pytorch
																except ImportError:
																						raise ImportError(lowerCAmelCase__	)

																convert_tf_checkpoint_to_pytorch(self._tf_checkpoint			,			self._config			,			self._pytorch_dump_output	)
										elif self._model_type == "gpt":
																from ..models.openai.convert_openai_original_tf_checkpoint_to_pytorch import (
																    convert_openai_checkpoint_to_pytorch,
																)

																convert_openai_checkpoint_to_pytorch(self._tf_checkpoint			,			self._config			,			self._pytorch_dump_output	)
										elif self._model_type == "transfo_xl":
																try:
																						from ..models.transfo_xl.convert_transfo_xl_original_tf_checkpoint_to_pytorch import (
																						    convert_transfo_xl_checkpoint_to_pytorch,
																						)
																except ImportError:
																						raise ImportError(lowerCAmelCase__	)

																if "ckpt" in self._tf_checkpoint.lower():
																						__SCREAMING_SNAKE_CASE						:     Dict					=		self._tf_checkpoint
																						__SCREAMING_SNAKE_CASE						:     int					=		''''''
																else:
																						__SCREAMING_SNAKE_CASE						:     int					=		self._tf_checkpoint
																						__SCREAMING_SNAKE_CASE						:     List[Any]					=		''''''
																convert_transfo_xl_checkpoint_to_pytorch(
																    lowerCAmelCase__			,			self._config			,			self._pytorch_dump_output			,			lowerCAmelCase__	)
										elif self._model_type == "gpt2":
																try:
																						from ..models.gpta.convert_gpta_original_tf_checkpoint_to_pytorch import (
																						    convert_gpta_checkpoint_to_pytorch,
																						)
																except ImportError:
																						raise ImportError(lowerCAmelCase__	)

																convert_gpta_checkpoint_to_pytorch(self._tf_checkpoint			,			self._config			,			self._pytorch_dump_output	)
										elif self._model_type == "xlnet":
																try:
																						from ..models.xlnet.convert_xlnet_original_tf_checkpoint_to_pytorch import (
																						    convert_xlnet_checkpoint_to_pytorch,
																						)
																except ImportError:
																						raise ImportError(lowerCAmelCase__	)

																convert_xlnet_checkpoint_to_pytorch(
																    self._tf_checkpoint			,			self._config			,			self._pytorch_dump_output			,			self._finetuning_task_name	)
										elif self._model_type == "xlm":
																from ..models.xlm.convert_xlm_original_pytorch_checkpoint_to_pytorch import (
																    convert_xlm_checkpoint_to_pytorch,
																)

																convert_xlm_checkpoint_to_pytorch(self._tf_checkpoint			,			self._pytorch_dump_output	)
										elif self._model_type == "lxmert":
																from ..models.lxmert.convert_lxmert_original_tf_checkpoint_to_pytorch import (
																    convert_lxmert_checkpoint_to_pytorch,
																)

																convert_lxmert_checkpoint_to_pytorch(self._tf_checkpoint			,			self._pytorch_dump_output	)
										elif self._model_type == "rembert":
																from ..models.rembert.convert_rembert_tf_checkpoint_to_pytorch import (
																    convert_rembert_tf_checkpoint_to_pytorch,
																)

																convert_rembert_tf_checkpoint_to_pytorch(self._tf_checkpoint			,			self._config			,			self._pytorch_dump_output	)
										else:
																raise ValueError(
																    '''--model_type should be selected in the list [bert, gpt, gpt2, t5, transfo_xl, xlnet, xlm, lxmert]'''	)







def _a				(	lowerCamelCase:   dict )	->						bool:







      '''simple docstring'''






      __A          =				set()
      # To detect a back edge, keep track of vertices currently in the recursion stack
      __A          =				set()
      return any(
          node not in visited and depth_first_search(lowerCamelCase					,				lowerCamelCase					,				lowerCamelCase					,				lowerCamelCase )
          for node in graph )



def _a				(	lowerCamelCase:   dict					,				lowerCamelCase:   int					,				lowerCamelCase:   set					,				lowerCamelCase:   set )	->						bool:







      '''simple docstring'''






      visited.add(lowerCamelCase )
      rec_stk.add(lowerCamelCase )

      for node in graph[vertex]:
            if node not in visited:
                  if depth_first_search(lowerCamelCase					,				lowerCamelCase					,				lowerCamelCase					,				lowerCamelCase ):
                        return True
            elif node in rec_stk:
                  return True

    # The node needs to be removed from recursion stack before function ends
      rec_stk.remove(lowerCamelCase )
      return False


if __name__ == "__main__":
       from doctest import testmod

       testmod()





