






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


if is_torch_available():
					import torch

if is_vision_available():
					from PIL import Image

					from transformers import BlipImageProcessor





class        a__      (	unittest.TestCase		):






		def __init__(      self							, lowercase__							, lowercase__=7							, lowercase__=3							, lowercase__=18							, lowercase__=30							, lowercase__=400							, lowercase__=True							, lowercase__=None							, lowercase__=True							, lowercase__=False							, lowercase__=[0.4814_5466, 0.457_8275, 0.4082_1073]							, lowercase__=[0.2686_2954, 0.2613_0258, 0.2757_7711]							, lowercase__=True							, )				->				Dict:
				__A    =							size if size is not None else {"height": 20, "width": 20}
				__A    =							parent
				__A    =							batch_size
				__A    =							num_channels
				__A    =							image_size
				__A    =							min_resolution
				__A    =							max_resolution
				__A    =							do_resize
				__A    =							size
				__A    =							do_normalize
				__A    =							image_mean
				__A    =							image_std
				__A    =							do_pad
				__A    =							do_convert_rgb






		def 					_lowerCamelCase					(      self						)				->				Tuple:
				return {
				    "do_resize": self.do_resize,
				    "size": self.size,
				    "do_normalize": self.do_normalize,
				    "image_mean": self.image_mean,
				    "image_std": self.image_std,
				    "do_convert_rgb": self.do_convert_rgb,
				    "do_pad": self.do_pad,
				}






		def 					_lowerCamelCase					(      self							, lowercase__=False							, lowercase__=False							, lowercase__=False						)				->				str:
				assert not (numpify and torchify), "You cannot specify both numpy and PyTorch tensors at the same time"

				if equal_resolution:
						__A    =							[]
						for i in range(self.batch_size						):
								image_inputs.append(
								    np.random.randint(
								        255							, size=(self.num_channels, self.max_resolution, self.max_resolution)							, dtype=np.uinta						)						)
				else:
						__A    =							[]
						for i in range(self.batch_size						):
								__A ,   __A    =							np.random.choice(np.arange(self.min_resolution							, self.max_resolution						)							, 2						)
								image_inputs.append(np.random.randint(255							, size=(self.num_channels, width, height)							, dtype=np.uinta						)						)

				if not numpify and not torchify:
						# PIL expects the channel dimension as last dimension
						__A    =							[Image.fromarray(np.moveaxis(lowercase__							, 0							, -1						)						) for x in image_inputs]

				if torchify:
						__A    =							[torch.from_numpy(lowercase__						) for x in image_inputs]

				return image_inputs





@require_torch
@require_vision
class        a__      (	lowerCAmelCase__	,       unittest.TestCase		):
		UpperCAmelCase_							:       List[Any] 					= BlipImageProcessor if is_vision_available() else None






		def 					_lowerCamelCase					(      self						)				->				Tuple:
				__A    =							BlipImageProcessingTester(self						)






		@property
		def 					_lowerCamelCase					(      self						)				->				Optional[Any]:
				return self.image_processor_tester.prepare_image_processor_dict()






		def 					_lowerCamelCase					(      self						)				->				str:
				__A    =							self.image_processing_class(**self.image_processor_dict						)
				self.assertTrue(hasattr(lowercase__							, "do_resize"						)						)
				self.assertTrue(hasattr(lowercase__							, "size"						)						)
				self.assertTrue(hasattr(lowercase__							, "do_normalize"						)						)
				self.assertTrue(hasattr(lowercase__							, "image_mean"						)						)
				self.assertTrue(hasattr(lowercase__							, "image_std"						)						)
				self.assertTrue(hasattr(lowercase__							, "do_convert_rgb"						)						)






		def 					_lowerCamelCase					(      self						)				->				Tuple:
				pass






		def 					_lowerCamelCase					(      self						)				->				Optional[Any]:
				# Initialize image_processor
				__A    =							self.image_processing_class(**self.image_processor_dict						)
				# create random PIL images
				__A    =							self.image_processor_tester.prepare_inputs(equal_resolution=lowercase__						)
				for image in image_inputs:
						self.assertIsInstance(lowercase__							, Image.Image						)

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

				# Test batched
				__A    =							image_processor(lowercase__							, 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.size["height"],
				        self.image_processor_tester.size["width"],
				    )							, )






		def 					_lowerCamelCase					(      self						)				->				Optional[int]:
				# Initialize image_processor
				__A    =							self.image_processing_class(**self.image_processor_dict						)
				# create random numpy tensors
				__A    =							self.image_processor_tester.prepare_inputs(equal_resolution=lowercase__							, numpify=lowercase__						)
				for image in image_inputs:
						self.assertIsInstance(lowercase__							, np.ndarray						)

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

				# Test batched
				__A    =							image_processor(lowercase__							, 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.size["height"],
				        self.image_processor_tester.size["width"],
				    )							, )






		def 					_lowerCamelCase					(      self						)				->				Any:
				# Initialize image_processor
				__A    =							self.image_processing_class(**self.image_processor_dict						)
				# create random PyTorch tensors
				__A    =							self.image_processor_tester.prepare_inputs(equal_resolution=lowercase__							, torchify=lowercase__						)
				for image in image_inputs:
						self.assertIsInstance(lowercase__							, torch.Tensor						)

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

				# Test batched
				__A    =							image_processor(lowercase__							, 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.size["height"],
				        self.image_processor_tester.size["width"],
				    )							, )





@require_torch
@require_vision
class        a__      (	lowerCAmelCase__	,       unittest.TestCase		):
		UpperCAmelCase_							:       List[str] 					= BlipImageProcessor if is_vision_available() else None






		def 					_lowerCamelCase					(      self						)				->				Optional[Any]:
				__A    =							BlipImageProcessingTester(self							, num_channels=4						)
				__A    =							3






		@property
		def 					_lowerCamelCase					(      self						)				->				int:
				return self.image_processor_tester.prepare_image_processor_dict()






		def 					_lowerCamelCase					(      self						)				->				str:
				__A    =							self.image_processing_class(**self.image_processor_dict						)
				self.assertTrue(hasattr(lowercase__							, "do_resize"						)						)
				self.assertTrue(hasattr(lowercase__							, "size"						)						)
				self.assertTrue(hasattr(lowercase__							, "do_normalize"						)						)
				self.assertTrue(hasattr(lowercase__							, "image_mean"						)						)
				self.assertTrue(hasattr(lowercase__							, "image_std"						)						)
				self.assertTrue(hasattr(lowercase__							, "do_convert_rgb"						)						)






		def 					_lowerCamelCase					(      self						)				->				Union[str, Any]:
				pass






		def 					_lowerCamelCase					(      self						)				->				List[Any]:
				# Initialize image_processor
				__A    =							self.image_processing_class(**self.image_processor_dict						)
				# create random PIL images
				__A    =							self.image_processor_tester.prepare_inputs(equal_resolution=lowercase__						)
				for image in image_inputs:
						self.assertIsInstance(lowercase__							, Image.Image						)

				# Test not batched input
				__A    =							image_processor(image_inputs[0]							, return_tensors="pt"						).pixel_values
				self.assertEqual(
				    encoded_images.shape							, (
				        1,
				        self.expected_encoded_image_num_channels,
				        self.image_processor_tester.size["height"],
				        self.image_processor_tester.size["width"],
				    )							, )

				# Test batched
				__A    =							image_processor(lowercase__							, return_tensors="pt"						).pixel_values
				self.assertEqual(
				    encoded_images.shape							, (
				        self.image_processor_tester.batch_size,
				        self.expected_encoded_image_num_channels,
				        self.image_processor_tester.size["height"],
				        self.image_processor_tester.size["width"],
				    )							, )








import argparse
import os


UpperCAmelCase__    :      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__    :      Tuple       					=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__    :      List[str]       					=parser.parse_args()

							UpperCAmelCase__    :      Dict       					=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__    :      Optional[int]       					=info['''cuda''']
							os.system(F"echo \"export CUDA='{cuda}'\" >> ~/.profile")
							print(F"echo \"export CUDA='{cuda}'\" >> ~/.profile")





