




'''simple docstring'''





import json
import os
import random
import shutil
import tempfile
import unittest

import numpy as np
import pytest

from transformers import BertTokenizer, BertTokenizerFast
from transformers.models.bert.tokenization_bert import VOCAB_FILES_NAMES
from transformers.testing_utils import require_vision
from transformers.utils import IMAGE_PROCESSOR_NAME, is_vision_available


if is_vision_available():
   from PIL import Image

   from transformers import FlavaImageProcessor, FlavaProcessor
   from transformers.models.flava.image_processing_flava import (
       FLAVA_CODEBOOK_MEAN,
       FLAVA_CODEBOOK_STD,
       FLAVA_IMAGE_MEAN,
       FLAVA_IMAGE_STD,
   )

@require_vision
class      _a       (		unittest.TestCase							):

     '''simple docstring'''





     def        _lowercase			(				self					)							->    str:
          _snake_case							=   tempfile.mkdtemp()

          # fmt: off
          _snake_case							=   ["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]", "want", "##want", "##ed", "wa", "un", "runn", "##ing", ",", "low", "lowest"]
          # fmt: on
          _snake_case							=   os.path.join(self.tmpdirname      ,VOCAB_FILES_NAMES["vocab_file"]					)

          with open(self.vocab_file      ,"w"      ,encoding="utf-8"					) as fp:
               fp.write("".join([x + "\n" for x in vocab_tokens]					)					)

          _snake_case							=   {
              "image_mean": FLAVA_IMAGE_MEAN,
              "image_std": FLAVA_IMAGE_STD,
              "do_normalize": True,
              "do_resize": True,
              "size": 224,
              "do_center_crop": True,
              "crop_size": 224,
              "input_size_patches": 14,
              "total_mask_patches": 75,
              "mask_group_max_patches": None,
              "mask_group_min_patches": 16,
              "mask_group_min_aspect_ratio": 0.3,
              "mask_group_max_aspect_ratio": None,
              "codebook_do_resize": True,
              "codebook_size": 112,
              "codebook_do_center_crop": True,
              "codebook_crop_size": 112,
              "codebook_do_map_pixels": True,
              "codebook_do_normalize": True,
              "codebook_image_mean": FLAVA_CODEBOOK_MEAN,
              "codebook_image_std": FLAVA_CODEBOOK_STD,
          }

          _snake_case							=   os.path.join(self.tmpdirname      ,_SCREAMING_SNAKE_CASE					)
          with open(self.image_processor_file      ,"w"      ,encoding="utf-8"					) as fp:
               json.dump(_SCREAMING_SNAKE_CASE      ,_SCREAMING_SNAKE_CASE					)






     def        _lowercase			(				self      ,**_SCREAMING_SNAKE_CASE					)							->    Dict:
          return BertTokenizer.from_pretrained(self.tmpdirname      ,**_SCREAMING_SNAKE_CASE					)






     def        _lowercase			(				self      ,**_SCREAMING_SNAKE_CASE					)							->    Tuple:
          return BertTokenizerFast.from_pretrained(self.tmpdirname      ,**_SCREAMING_SNAKE_CASE					)






     def        _lowercase			(				self      ,**_SCREAMING_SNAKE_CASE					)							->    Dict:
          return FlavaImageProcessor.from_pretrained(self.tmpdirname      ,**_SCREAMING_SNAKE_CASE					)






     def        _lowercase			(				self					)							->    Optional[Any]:
          shutil.rmtree(self.tmpdirname					)






     def        _lowercase			(				self					)							->    Dict:
          _snake_case							=   [np.random.randint(255      ,size=(3, 30, 400)      ,dtype=np.uinta					)]

          _snake_case							=   [Image.fromarray(np.moveaxis(_SCREAMING_SNAKE_CASE      ,0      ,-1					)					) for x in image_inputs]

          return image_inputs






     def        _lowercase			(				self					)							->    Tuple:
          _snake_case							=   self.get_tokenizer()
          _snake_case							=   self.get_rust_tokenizer()
          _snake_case							=   self.get_image_processor()

          _snake_case							=   FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE      ,image_processor=_SCREAMING_SNAKE_CASE					)
          processor_slow.save_pretrained(self.tmpdirname					)
          _snake_case							=   FlavaProcessor.from_pretrained(self.tmpdirname      ,use_fast=_SCREAMING_SNAKE_CASE					)

          _snake_case							=   FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE      ,image_processor=_SCREAMING_SNAKE_CASE					)
          processor_fast.save_pretrained(self.tmpdirname					)
          _snake_case							=   FlavaProcessor.from_pretrained(self.tmpdirname					)

          self.assertEqual(processor_slow.tokenizer.get_vocab()      ,tokenizer_slow.get_vocab()					)
          self.assertEqual(processor_fast.tokenizer.get_vocab()      ,tokenizer_fast.get_vocab()					)
          self.assertEqual(tokenizer_slow.get_vocab()      ,tokenizer_fast.get_vocab()					)
          self.assertIsInstance(processor_slow.tokenizer      ,_SCREAMING_SNAKE_CASE					)
          self.assertIsInstance(processor_fast.tokenizer      ,_SCREAMING_SNAKE_CASE					)

          self.assertEqual(processor_slow.image_processor.to_json_string()      ,image_processor.to_json_string()					)
          self.assertEqual(processor_fast.image_processor.to_json_string()      ,image_processor.to_json_string()					)
          self.assertIsInstance(processor_slow.image_processor      ,_SCREAMING_SNAKE_CASE					)
          self.assertIsInstance(processor_fast.image_processor      ,_SCREAMING_SNAKE_CASE					)






     def        _lowercase			(				self					)							->    List[Any]:
          _snake_case							=   FlavaProcessor(tokenizer=self.get_tokenizer()      ,image_processor=self.get_image_processor()					)
          processor.save_pretrained(self.tmpdirname					)

          _snake_case							=   self.get_tokenizer(bos_token="(BOS)"      ,eos_token="(EOS)"					)
          _snake_case							=   self.get_image_processor(do_normalize=_SCREAMING_SNAKE_CASE      ,padding_value=1.0					)

          _snake_case							=   FlavaProcessor.from_pretrained(
              self.tmpdirname      ,bos_token="(BOS)"      ,eos_token="(EOS)"      ,do_normalize=_SCREAMING_SNAKE_CASE      ,padding_value=1.0					)

          self.assertEqual(processor.tokenizer.get_vocab()      ,tokenizer_add_kwargs.get_vocab()					)
          self.assertIsInstance(processor.tokenizer      ,_SCREAMING_SNAKE_CASE					)

          self.assertEqual(processor.image_processor.to_json_string()      ,image_processor_add_kwargs.to_json_string()					)
          self.assertIsInstance(processor.image_processor      ,_SCREAMING_SNAKE_CASE					)






     def        _lowercase			(				self					)							->    str:
          _snake_case							=   self.get_image_processor()
          _snake_case							=   self.get_tokenizer()

          _snake_case							=   FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE      ,image_processor=_SCREAMING_SNAKE_CASE					)

          _snake_case							=   self.prepare_image_inputs()

          _snake_case							=   image_processor(_SCREAMING_SNAKE_CASE      ,return_tensors="np"					)
          _snake_case							=   processor(images=_SCREAMING_SNAKE_CASE      ,return_tensors="np"					)

          for key in input_feat_extract.keys():
               self.assertAlmostEqual(input_feat_extract[key].sum()      ,input_processor[key].sum()      ,delta=1e-2					)

          # With rest of the args
          random.seed(1_234					)
          _snake_case							=   image_processor(
              _SCREAMING_SNAKE_CASE      ,return_image_mask=_SCREAMING_SNAKE_CASE      ,return_codebook_pixels=_SCREAMING_SNAKE_CASE      ,return_tensors="np"					)
          random.seed(1_234					)
          _snake_case							=   processor(
              images=_SCREAMING_SNAKE_CASE      ,return_image_mask=_SCREAMING_SNAKE_CASE      ,return_codebook_pixels=_SCREAMING_SNAKE_CASE      ,return_tensors="np"					)

          for key in input_feat_extract.keys():
               self.assertAlmostEqual(input_feat_extract[key].sum()      ,input_processor[key].sum()      ,delta=1e-2					)






     def        _lowercase			(				self					)							->    Any:
          _snake_case							=   self.get_image_processor()
          _snake_case							=   self.get_tokenizer()

          _snake_case							=   FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE      ,image_processor=_SCREAMING_SNAKE_CASE					)

          _snake_case							=   "lower newer"

          _snake_case							=   processor(text=_SCREAMING_SNAKE_CASE					)

          _snake_case							=   tokenizer(_SCREAMING_SNAKE_CASE					)

          for key in encoded_tok.keys():
               self.assertListEqual(encoded_tok[key]      ,encoded_processor[key]					)






     def        _lowercase			(				self					)							->    Union[str, Any]:
          _snake_case							=   self.get_image_processor()
          _snake_case							=   self.get_tokenizer()

          _snake_case							=   FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE      ,image_processor=_SCREAMING_SNAKE_CASE					)

          _snake_case							=   "lower newer"
          _snake_case							=   self.prepare_image_inputs()

          _snake_case							=   processor(text=_SCREAMING_SNAKE_CASE      ,images=_SCREAMING_SNAKE_CASE					)

          self.assertListEqual(list(inputs.keys()					)      ,["input_ids", "token_type_ids", "attention_mask", "pixel_values"]					)

          # add extra args
          _snake_case							=   processor(text=_SCREAMING_SNAKE_CASE      ,images=_SCREAMING_SNAKE_CASE      ,return_codebook_pixels=_SCREAMING_SNAKE_CASE      ,return_image_mask=_SCREAMING_SNAKE_CASE					)

          self.assertListEqual(
              list(inputs.keys()					)      ,[
                  "input_ids",
                  "token_type_ids",
                  "attention_mask",
                  "pixel_values",
                  "codebook_pixel_values",
                  "bool_masked_pos",
              ]      ,)

          # test if it raises when no input is passed
          with pytest.raises(_SCREAMING_SNAKE_CASE					):
               processor()






     def        _lowercase			(				self					)							->    str:
          _snake_case							=   self.get_image_processor()
          _snake_case							=   self.get_tokenizer()

          _snake_case							=   FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE      ,image_processor=_SCREAMING_SNAKE_CASE					)

          _snake_case							=   [[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

          _snake_case							=   processor.batch_decode(_SCREAMING_SNAKE_CASE					)
          _snake_case							=   tokenizer.batch_decode(_SCREAMING_SNAKE_CASE					)

          self.assertListEqual(_SCREAMING_SNAKE_CASE      ,_SCREAMING_SNAKE_CASE					)






     def        _lowercase			(				self					)							->    Any:
          _snake_case							=   self.get_image_processor()
          _snake_case							=   self.get_tokenizer()

          _snake_case							=   FlavaProcessor(tokenizer=_SCREAMING_SNAKE_CASE      ,image_processor=_SCREAMING_SNAKE_CASE					)

          _snake_case							=   "lower newer"
          _snake_case							=   self.prepare_image_inputs()

          _snake_case							=   processor(text=_SCREAMING_SNAKE_CASE      ,images=_SCREAMING_SNAKE_CASE					)

          self.assertListEqual(list(inputs.keys()					)      ,processor.model_input_names					)








'''simple docstring'''





import argparse
import os


UpperCamelCase_		:    Union[str, Any]									=		{
    '''pytorch''': {
        '''1.13''': {
            '''torch''': '''1.13.1''',
            '''torchvision''': '''0.14.1''',
            '''torchaudio''': '''0.13.1''',
            '''python''': 3.9,
            '''cuda''': '''cu116''',
            '''install''': (
                '''python3 -m pip install --no-cache-dir -U torch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1'''
                ''' --extra-index-url https://download.pytorch.org/whl/cu116'''
            ),
            '''base_image''': '''nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04''',
        },
        '''1.12''': {
            '''torch''': '''1.12.1''',
            '''torchvision''': '''0.13.1''',
            '''torchaudio''': '''0.12.1''',
            '''python''': 3.9,
            '''cuda''': '''cu113''',
            '''install''': (
                '''python3 -m pip install --no-cache-dir -U torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1'''
                ''' --extra-index-url https://download.pytorch.org/whl/cu113'''
            ),
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''1.11''': {
            '''torch''': '''1.11.0''',
            '''torchvision''': '''0.12.0''',
            '''torchaudio''': '''0.11.0''',
            '''python''': 3.9,
            '''cuda''': '''cu113''',
            '''install''': (
                '''python3 -m pip install --no-cache-dir -U torch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0'''
                ''' --extra-index-url https://download.pytorch.org/whl/cu113'''
            ),
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''1.10''': {
            '''torch''': '''1.10.2''',
            '''torchvision''': '''0.11.3''',
            '''torchaudio''': '''0.10.2''',
            '''python''': 3.9,
            '''cuda''': '''cu113''',
            '''install''': (
                '''python3 -m pip install --no-cache-dir -U torch==1.10.2 torchvision==0.11.3 torchaudio==0.10.2'''
                ''' --extra-index-url https://download.pytorch.org/whl/cu113'''
            ),
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        # torchaudio < 0.10 has no CUDA-enabled binary distributions
        '''1.9''': {
            '''torch''': '''1.9.1''',
            '''torchvision''': '''0.10.1''',
            '''torchaudio''': '''0.9.1''',
            '''python''': 3.9,
            '''cuda''': '''cu111''',
            '''install''': (
                '''python3 -m pip install --no-cache-dir -U torch==1.9.1 torchvision==0.10.1 torchaudio==0.9.1'''
                ''' --extra-index-url https://download.pytorch.org/whl/cu111'''
            ),
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
    },
    '''tensorflow''': {
        '''2.11''': {
            '''tensorflow''': '''2.11.1''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.11.1''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.10''': {
            '''tensorflow''': '''2.10.1''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.10.1''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.9''': {
            '''tensorflow''': '''2.9.3''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.9.3''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.8''': {
            '''tensorflow''': '''2.8.2''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.8.2''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.7''': {
            '''tensorflow''': '''2.7.3''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.7.3''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.6''': {
            '''tensorflow''': '''2.6.5''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.6.5''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.5''': {
            '''tensorflow''': '''2.5.3''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.5.3''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
    },
}


if __name__ == "__main__":
   UpperCamelCase_		:    Optional[Any]									=		argparse.ArgumentParser('''Choose the framework and version to install''')
   parser.add_argument(
       '''--framework''', help='''The framework to install. Should be `torch` or `tensorflow`''', type=str, required=True
   )
   parser.add_argument('''--version''', help='''The version of the framework to install.''', type=str, required=True)
   UpperCamelCase_		:    Tuple									=		parser.parse_args()

   UpperCamelCase_		:    Optional[int]									=		past_versions_testing[args.framework][args.version]

   os.system(F'echo "export INSTALL_CMD=\'{info["install"]}\'" >> ~/.profile')
   print(F'echo "export INSTALL_CMD=\'{info["install"]}\'" >> ~/.profile')

   UpperCamelCase_		:    List[Any]									=		''''''
   if args.framework == "pytorch":
      UpperCamelCase_		:    str									=		info['''cuda''']
   os.system(F'echo \"export CUDA=\'{cuda}\'\" >> ~/.profile')
   print(F'echo \"export CUDA=\'{cuda}\'\" >> ~/.profile')


