

"""simple docstring"""


import unittest

import numpy as np

from transformers.testing_utils import require_torch, require_vision
from transformers.utils import is_torch_available, is_vision_available

from ...test_image_processing_common import ImageProcessingSavingTestMixin, prepare_image_inputs


if is_torch_available():
  import torch

if is_vision_available():
  from PIL import Image

  from transformers import LevitImageProcessor





class lowerCamelCase__   (				unittest.TestCase    ):



    '''simple docstring'''




    def __init__( self ,lowerCamelCase_ ,lowerCamelCase_=7 ,lowerCamelCase_=3 ,lowerCamelCase_=1_8 ,lowerCamelCase_=3_0 ,lowerCamelCase_=4_0_0 ,lowerCamelCase_=True ,lowerCamelCase_=None ,lowerCamelCase_=True ,lowerCamelCase_=None ,lowerCamelCase_=True ,lowerCamelCase_=[0.5, 0.5, 0.5] ,lowerCamelCase_=[0.5, 0.5, 0.5] ,)    ->      Tuple:
          A				  =		size if size is not None else {'shortest_edge': 1_8}
          A				  =		crop_size if crop_size is not None else {'height': 1_8, 'width': 1_8}
          A				  =		parent
          A				  =		batch_size
          A				  =		num_channels
          A				  =		image_size
          A				  =		min_resolution
          A				  =		max_resolution
          A				  =		do_resize
          A				  =		size
          A				  =		do_center_crop
          A				  =		crop_size
          A				  =		do_normalize
          A				  =		image_mean
          A				  =		image_std




    def UpperCamelCase__		( self    )    ->      List[Any]:
          return {
              "image_mean": self.image_mean,
              "image_std": self.image_std,
              "do_normalize": self.do_normalize,
              "do_resize": self.do_resize,
              "do_center_crop": self.do_center_crop,
              "size": self.size,
              "crop_size": self.crop_size,
          }





@require_torch
@require_vision
class lowerCamelCase__   (				SCREAMING_SNAKE_CASE_     ,   unittest.TestCase    ):



    '''simple docstring'''




    _lowerCamelCase					=   LevitImageProcessor if is_vision_available() else None




    def UpperCamelCase__		( self    )    ->      Tuple:
          A				  =		LevitImageProcessingTester(self    )




    @property
    def UpperCamelCase__		( self    )    ->      Any:
          return self.image_processor_tester.prepare_image_processor_dict()




    def UpperCamelCase__		( self    )    ->      int:
          A				  =		self.image_processing_class(**self.image_processor_dict    )
          self.assertTrue(hasattr(snake_case__ ,"""image_mean"""    )    )
          self.assertTrue(hasattr(snake_case__ ,"""image_std"""    )    )
          self.assertTrue(hasattr(snake_case__ ,"""do_normalize"""    )    )
          self.assertTrue(hasattr(snake_case__ ,"""do_resize"""    )    )
          self.assertTrue(hasattr(snake_case__ ,"""do_center_crop"""    )    )
          self.assertTrue(hasattr(snake_case__ ,"""size"""    )    )




    def UpperCamelCase__		( self    )    ->      int:
          A				  =		self.image_processing_class.from_dict(self.image_processor_dict    )
          self.assertEqual(image_processor.size ,{"""shortest_edge""": 1_8}    )
          self.assertEqual(image_processor.crop_size ,{"""height""": 1_8, """width""": 1_8}    )

          A				  =		self.image_processing_class.from_dict(self.image_processor_dict ,size=4_2 ,crop_size=8_4    )
          self.assertEqual(image_processor.size ,{"""shortest_edge""": 4_2}    )
          self.assertEqual(image_processor.crop_size ,{"""height""": 8_4, """width""": 8_4}    )




    def UpperCamelCase__		( self    )    ->      Tuple:
          pass




    def UpperCamelCase__		( self    )    ->      Tuple:
          A				  =		self.image_processing_class(**self.image_processor_dict    )
          # create random PIL images
          A				  =		prepare_image_inputs(self.image_processor_tester ,equal_resolution=snake_case__    )
          for image in image_inputs:
                self.assertIsInstance(snake_case__ ,Image.Image    )

          # Test not batched input
          A				  =		image_processing(image_inputs[0] ,return_tensors="""pt"""    ).pixel_values
          self.assertEqual(
              encoded_images.shape ,(
                  1,
                  self.image_processor_tester.num_channels,
                  self.image_processor_tester.crop_size["""height"""],
                  self.image_processor_tester.crop_size["""width"""],
              ) ,)

          # Test batched
          A				  =		image_processing(snake_case__ ,return_tensors="""pt"""    ).pixel_values
          self.assertEqual(
              encoded_images.shape ,(
                  self.image_processor_tester.batch_size,
                  self.image_processor_tester.num_channels,
                  self.image_processor_tester.crop_size["""height"""],
                  self.image_processor_tester.crop_size["""width"""],
              ) ,)




    def UpperCamelCase__		( self    )    ->      Optional[Any]:
          A				  =		self.image_processing_class(**self.image_processor_dict    )
          # create random numpy tensors
          A				  =		prepare_image_inputs(self.image_processor_tester ,equal_resolution=snake_case__ ,numpify=snake_case__    )
          for image in image_inputs:
                self.assertIsInstance(snake_case__ ,np.ndarray    )

          # Test not batched input
          A				  =		image_processing(image_inputs[0] ,return_tensors="""pt"""    ).pixel_values
          self.assertEqual(
              encoded_images.shape ,(
                  1,
                  self.image_processor_tester.num_channels,
                  self.image_processor_tester.crop_size["""height"""],
                  self.image_processor_tester.crop_size["""width"""],
              ) ,)

          # Test batched
          A				  =		image_processing(snake_case__ ,return_tensors="""pt"""    ).pixel_values
          self.assertEqual(
              encoded_images.shape ,(
                  self.image_processor_tester.batch_size,
                  self.image_processor_tester.num_channels,
                  self.image_processor_tester.crop_size["""height"""],
                  self.image_processor_tester.crop_size["""width"""],
              ) ,)




    def UpperCamelCase__		( self    )    ->      List[str]:
          A				  =		self.image_processing_class(**self.image_processor_dict    )
          # create random PyTorch tensors
          A				  =		prepare_image_inputs(self.image_processor_tester ,equal_resolution=snake_case__ ,torchify=snake_case__    )
          for image in image_inputs:
                self.assertIsInstance(snake_case__ ,torch.Tensor    )

          # Test not batched input
          A				  =		image_processing(image_inputs[0] ,return_tensors="""pt"""    ).pixel_values
          self.assertEqual(
              encoded_images.shape ,(
                  1,
                  self.image_processor_tester.num_channels,
                  self.image_processor_tester.crop_size["""height"""],
                  self.image_processor_tester.crop_size["""width"""],
              ) ,)

          # Test batched
          A				  =		image_processing(snake_case__ ,return_tensors="""pt"""    ).pixel_values
          self.assertEqual(
              encoded_images.shape ,(
                  self.image_processor_tester.batch_size,
                  self.image_processor_tester.num_channels,
                  self.image_processor_tester.crop_size["""height"""],
                  self.image_processor_tester.crop_size["""width"""],
              ) ,)








'''simple docstring'''







from argparse import ArgumentParser, Namespace

from ..utils import logging
from . import BaseTransformersCLICommand






def       lowercase					(_A       ):







       """simple docstring"""







       return ConvertCommand(
           args.model_type ,    args.tf_checkpoint ,    args.pytorch_dump_output ,    args.config ,    args.finetuning_task_name       )


lowerCAmelCase     :  Optional[int]											=    """
transformers can only be used from the commandline to convert TensorFlow models in PyTorch, In that case, it requires
TensorFlow to be installed. Please see https://www.tensorflow.org/install/ for installation instructions.
"""
class 						UpperCamelCase__       (			SCREAMING_SNAKE_CASE_						):



     """simple docstring"""






     @staticmethod
     def a						(			snake_case__ ):

            '''simple docstring'''

            _lowerCAmelCase     :				str       =							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=snake_case__   ,						required=snake_case__   ,						help='Model\'s type.' )
            train_parser.add_argument(
                '--tf_checkpoint'   ,						type=snake_case__   ,						required=snake_case__   ,						help='TensorFlow checkpoint path or folder.' )
            train_parser.add_argument(
                '--pytorch_dump_output'   ,						type=snake_case__   ,						required=snake_case__   ,						help='Path to the PyTorch saved model output.' )
            train_parser.add_argument('--config'   ,						type=snake_case__   ,						default=''   ,						help='Configuration file path or folder.' )
            train_parser.add_argument(
                '--finetuning_task_name'   ,						type=snake_case__   ,						default=snake_case__   ,						help='Optional fine-tuning task name if the TF model was a finetuned model.'   ,						)
            train_parser.set_defaults(func=snake_case__ )







     def __init__(			self   ,						snake_case__   ,						snake_case__   ,						snake_case__   ,						snake_case__   ,						snake_case__   ,						*snake_case__   ,						):

            '''simple docstring'''

            _lowerCAmelCase     :				str       =							logging.get_logger('transformers-cli/converting' )

            self._logger.info(F'Loading model {model_type}' )
            _lowerCAmelCase     :				Any       =							model_type
            _lowerCAmelCase     :				Any       =							tf_checkpoint
            _lowerCAmelCase     :				List[str]       =							pytorch_dump_output
            _lowerCAmelCase     :				int       =							config
            _lowerCAmelCase     :				str       =							finetuning_task_name







     def a						(			self ):

            '''simple docstring'''

            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(snake_case__ )

                   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(snake_case__ )

                   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(snake_case__ )

                   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(snake_case__ )

                   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(snake_case__ )

                   if "ckpt" in self._tf_checkpoint.lower():
                          _lowerCAmelCase     :				List[Any]       =							self._tf_checkpoint
                          _lowerCAmelCase     :				Optional[int]       =							''
                   else:
                          _lowerCAmelCase     :				int       =							self._tf_checkpoint
                          _lowerCAmelCase     :				Dict       =							''
                   convert_transfo_xl_checkpoint_to_pytorch(
                       snake_case__   ,						self._config   ,						self._pytorch_dump_output   ,						snake_case__ )
            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(snake_case__ )

                   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(snake_case__ )

                   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]' )

