


"""simple docstring"""



import unittest

from transformers import is_vision_available
from transformers.pipelines import pipeline
from transformers.testing_utils import (
    is_pipeline_test,
    nested_simplify,
    require_tf,
    require_torch,
    require_vision,
    slow,
)

from .test_pipelines_common import ANY


if is_vision_available():
  from PIL import Image
else:







  class _lowerCAmelCase    :







     @staticmethod
     def 			lowerCamelCase		(     *UpperCamelCase__						,     **UpperCamelCase__						)     ->		Dict:

         '''simple docstring'''




         pass







@is_pipeline_test
@require_vision
class _lowerCAmelCase    (				unittest.TestCase     ):







   @require_torch
   def 			lowerCamelCase		(     self						)     ->		Union[str, Any]:

       '''simple docstring'''




       snake_case   :				Optional[int]				 =   pipeline(
           model="hf-internal-testing/tiny-random-clip-zero-shot-image-classification"						,     )
       snake_case   :				str				 =   Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"						)
       snake_case   :				Optional[Any]				 =   image_classifier(UpperCamelCase__						,     candidate_labels=["a", "b", "c"]						)

       # The floating scores are so close, we enter floating error approximation and the order is not guaranteed across
       # python and torch versions.
       self.assertIn(
           nested_simplify(UpperCamelCase__						)						,     [
               [{"score": 0.333, "label": "a"}, {"score": 0.333, "label": "b"}, {"score": 0.333, "label": "c"}],
               [{"score": 0.333, "label": "a"}, {"score": 0.333, "label": "c"}, {"score": 0.333, "label": "b"}],
           ]						,     )

       snake_case   :				Optional[Any]				 =   image_classifier([image] * 5						,     candidate_labels=["A", "B", "C"]						,     batch_size=2						)
       self.assertEqual(
           nested_simplify(UpperCamelCase__						)						,     [
               [
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
               ],
               [
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
               ],
               [
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
               ],
               [
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
               ],
               [
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
               ],
           ]						,     )







   @require_tf
   def 			lowerCamelCase		(     self						)     ->		List[Any]:

       '''simple docstring'''




       snake_case   :				str				 =   pipeline(
           model="hf-internal-testing/tiny-random-clip-zero-shot-image-classification"						,     framework="tf"						)
       snake_case   :				int				 =   Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"						)
       snake_case   :				List[Any]				 =   image_classifier(UpperCamelCase__						,     candidate_labels=["a", "b", "c"]						)

       self.assertEqual(
           nested_simplify(UpperCamelCase__						)						,     [{"score": 0.333, "label": "a"}, {"score": 0.333, "label": "b"}, {"score": 0.333, "label": "c"}]						,     )

       snake_case   :				str				 =   image_classifier([image] * 5						,     candidate_labels=["A", "B", "C"]						,     batch_size=2						)
       self.assertEqual(
           nested_simplify(UpperCamelCase__						)						,     [
               [
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
               ],
               [
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
               ],
               [
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
               ],
               [
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
               ],
               [
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
                   {"score": 0.333, "label": ANY(UpperCamelCase__						)},
               ],
           ]						,     )







   @slow
   @require_torch
   def 			lowerCamelCase		(     self						)     ->		Union[str, Any]:

       '''simple docstring'''




       snake_case   :				str				 =   pipeline(
           task="zero-shot-image-classification"						,     model="openai/clip-vit-base-patch32"						,     )
       # This is an image of 2 cats with remotes and no planes
       snake_case   :				Any				 =   Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"						)
       snake_case   :				Union[str, Any]				 =   image_classifier(UpperCamelCase__						,     candidate_labels=["cat", "plane", "remote"]						)

       self.assertEqual(
           nested_simplify(UpperCamelCase__						)						,     [
               {"score": 0.511, "label": "remote"},
               {"score": 0.485, "label": "cat"},
               {"score": 0.004, "label": "plane"},
           ]						,     )

       snake_case   :				Tuple				 =   image_classifier([image] * 5						,     candidate_labels=["cat", "plane", "remote"]						,     batch_size=2						)
       self.assertEqual(
           nested_simplify(UpperCamelCase__						)						,     [
               [
                   {"score": 0.511, "label": "remote"},
                   {"score": 0.485, "label": "cat"},
                   {"score": 0.004, "label": "plane"},
               ],
           ]
           * 5						,     )







   @slow
   @require_tf
   def 			lowerCamelCase		(     self						)     ->		str:

       '''simple docstring'''




       snake_case   :				List[Any]				 =   pipeline(
           task="zero-shot-image-classification"						,     model="openai/clip-vit-base-patch32"						,     framework="tf"						)
       # This is an image of 2 cats with remotes and no planes
       snake_case   :				Tuple				 =   Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"						)
       snake_case   :				Optional[Any]				 =   image_classifier(UpperCamelCase__						,     candidate_labels=["cat", "plane", "remote"]						)
       self.assertEqual(
           nested_simplify(UpperCamelCase__						)						,     [
               {"score": 0.511, "label": "remote"},
               {"score": 0.485, "label": "cat"},
               {"score": 0.004, "label": "plane"},
           ]						,     )

       snake_case   :				List[str]				 =   image_classifier([image] * 5						,     candidate_labels=["cat", "plane", "remote"]						,     batch_size=2						)
       self.assertEqual(
           nested_simplify(UpperCamelCase__						)						,     [
               [
                   {"score": 0.511, "label": "remote"},
                   {"score": 0.485, "label": "cat"},
                   {"score": 0.004, "label": "plane"},
               ],
           ]
           * 5						,     )









"""simple docstring"""



import argparse
import os
import pickle
import sys

import torch

from transformers import TransfoXLConfig, TransfoXLLMHeadModel, load_tf_weights_in_transfo_xl
from transformers.models.transfo_xl import tokenization_transfo_xl as data_utils
from transformers.models.transfo_xl.tokenization_transfo_xl import CORPUS_NAME, VOCAB_FILES_NAMES
from transformers.utils import CONFIG_NAME, WEIGHTS_NAME, logging


logging.set_verbosity_info()

# We do this to be able to load python 2 datasets pickles
# See e.g. https://stackoverflow.com/questions/2121874/python-pickling-after-changing-a-modules-directory/2121918#2121918
__snake_case             =   data_utils.TransfoXLTokenizer
__snake_case             =   data_utils.TransfoXLCorpus
__snake_case             =   data_utils
__snake_case             =   data_utils







def   __lowerCAmelCase						(						lowercase  :  Optional[int]						,							lowercase  :  int						,							lowercase  :  List[Any]						,							lowercase  :  Union[str, Any]			)     ->						List[Any]:


    """simple docstring"""





    if transfo_xl_dataset_file:
        # Convert a pre-processed corpus (see original TensorFlow repo)
        with open(lowercase						,							"rb"			) as fp:
            snake_case   :				int				 =   pickle.load(lowercase						,							encoding="latin1"			)
        # Save vocabulary and dataset cache as Dictionaries (should be better than pickles for the long-term)
        snake_case   :				int				 =   pytorch_dump_folder_path + "/" + VOCAB_FILES_NAMES["pretrained_vocab_file"]
        print(F'Save vocabulary to {pytorch_vocab_dump_path}'			)
        snake_case   :				str				 =   corpus.vocab.__dict__
        torch.save(lowercase						,							lowercase			)

        snake_case   :				str				 =   corpus.__dict__
        corpus_dict_no_vocab.pop("vocab"						,							lowercase			)
        snake_case   :				Dict				 =   pytorch_dump_folder_path + "/" + CORPUS_NAME
        print(F'Save dataset to {pytorch_dataset_dump_path}'			)
        torch.save(lowercase						,							lowercase			)

    if tf_checkpoint_path:
        # Convert a pre-trained TensorFlow model
        snake_case   :				Union[str, Any]				 =   os.path.abspath(lowercase			)
        snake_case   :				str				 =   os.path.abspath(lowercase			)

        print(F'Converting Transformer XL checkpoint from {tf_path} with config at {config_path}.'			)
        # Initialise PyTorch model
        if transfo_xl_config_file == "":
            snake_case   :				int				 =   TransfoXLConfig()
        else:
            snake_case   :				Optional[int]				 =   TransfoXLConfig.from_json_file(lowercase			)
        print(F'Building PyTorch model from configuration: {config}'			)
        snake_case   :				str				 =   TransfoXLLMHeadModel(lowercase			)

        snake_case   :				str				 =   load_tf_weights_in_transfo_xl(lowercase						,							lowercase						,							lowercase			)
        # Save pytorch-model
        snake_case   :				Union[str, Any]				 =   os.path.join(lowercase						,							lowercase			)
        snake_case   :				Optional[Any]				 =   os.path.join(lowercase						,							lowercase			)
        print(F'Save PyTorch model to {os.path.abspath(lowercase			)}'			)
        torch.save(model.state_dict()						,							lowercase			)
        print(F'Save configuration file to {os.path.abspath(lowercase			)}'			)
        with open(lowercase						,							"w"						,							encoding="utf-8"			) as f:
            f.write(config.to_json_string()			)


if __name__ == "__main__":
  __snake_case             =   argparse.ArgumentParser()
  parser.add_argument(
      """--pytorch_dump_folder_path""",
      default=None,
      type=str,
      required=True,
      help="""Path to the folder to store the PyTorch model or dataset/vocab.""",
  )
  parser.add_argument(
      """--tf_checkpoint_path""",
      default="""""",
      type=str,
      help="""An optional path to a TensorFlow checkpoint path to be converted.""",
  )
  parser.add_argument(
      """--transfo_xl_config_file""",
      default="""""",
      type=str,
      help=(
          """An optional config json file corresponding to the pre-trained BERT model. \n"""
          """This specifies the model architecture."""
      ),
  )
  parser.add_argument(
      """--transfo_xl_dataset_file""",
      default="""""",
      type=str,
      help="""An optional dataset file to be converted in a vocabulary.""",
  )
  __snake_case             =   parser.parse_args()
  convert_transfo_xl_checkpoint_to_pytorch(
      args.tf_checkpoint_path,
      args.transfo_xl_config_file,
      args.pytorch_dump_folder_path,
      args.transfo_xl_dataset_file,
  )





