





#
# This a `torch.distributed` diagnostics script that checks that all GPUs in the cluster (one or
# many nodes) can talk to each other via nccl and allocate gpu memory.
#
# To run first adjust the number of processes and nodes:
#
# python -m torch.distributed.run --nproc_per_node 2 --nnodes 1 torch-distributed-gpu-test.py
#
# You may need to add --master_addr $MASTER_ADDR --master_port $MASTER_PORT if using a custom addr:port
#
# You can also use the rdzv API: --rdzv_endpoint $MASTER_ADDR:$MASTER_PORT --rdzv_backend c10d
#
# use torch.distributed.launch instead of torch.distributed.run for torch < 1.9
#
# If you get a hanging in `barrier` calls you have some network issues, you may try to debug this with:
#
# NCCL_DEBUG=INFO python -m torch.distributed.run --nproc_per_node 2 --nnodes 1 torch-distributed-gpu-test.py
#
# which should tell you what's going on behind the scenes.
#
#
# This script can be run via `srun` in the SLURM environment as well. Here is a SLURM script that
# runs on 2 nodes of 4 gpus per node:
#
# #SBATCH --job-name=test-nodes        # name
# #SBATCH --nodes=2                    # nodes
# #SBATCH --ntasks-per-node=1          # crucial - only 1 task per dist per node!
# #SBATCH --cpus-per-task=10           # number of cores per tasks
# #SBATCH --gres=gpu:4                 # number of gpus
# #SBATCH --time 0:05:00               # maximum execution time (HH:MM:SS)
# #SBATCH --output=%x-%j.out           # output file name
#
# GPUS_PER_NODE=4
# MASTER_ADDR=$(scontrol show hostnames $SLURM_JOB_NODELIST | head -n 1)
# MASTER_PORT=6000
#
# srun --jobid $SLURM_JOBID bash -c 'python -m torch.distributed.run \
# --nproc_per_node $GPUS_PER_NODE --nnodes $SLURM_NNODES --node_rank $SLURM_PROCID \
# --master_addr $MASTER_ADDR --master_port $MASTER_PORT \
# torch-distributed-gpu-test.py'
#

import fcntl
import os
import socket

import torch
import torch.distributed as dist







def   __lowerCamelCase   (				*__a  :List[str]       )						->							Union[str, Any]:






		"""simple docstring"""

		with open(__a       ,	"""r"""       ) as fh:
				fcntl.flock(__a       ,	fcntl.LOCK_EX       )
				try:
						print(*__a       )
				finally:
						fcntl.flock(__a       ,	fcntl.LOCK_UN       )


A       :   Optional[int]					= int(os.environ['''LOCAL_RANK'''])
torch.cuda.set_device(local_rank)
A       :   List[str]					= torch.device('''cuda''', local_rank)
A       :   Tuple					= socket.gethostname()

A       :   Optional[Any]					= F'''[{hostname}-{local_rank}]'''

try:
					# test distributed
					dist.init_process_group('''nccl''')
					dist.all_reduce(torch.ones(1).to(device), op=dist.ReduceOp.SUM)
					dist.barrier()

					# test cuda is available and can allocate memory
					torch.cuda.is_available()
					torch.ones(1).cuda(local_rank)

					# global rank
					A       :   Dict					= dist.get_rank()
					A       :   str					= dist.get_world_size()

					printflock(F'''{gpu} is OK (global rank: {rank}/{world_size})''')

					dist.barrier()
					if rank == 0:
										printflock(F'''pt={torch.__version__}, cuda={torch.version.cuda}, nccl={torch.cuda.nccl.version()}''')

except Exception:
					printflock(F'''{gpu} is broken''')
					raise










import json
import os
import shutil
import tempfile
import unittest

import numpy as np
import pytest

from transformers import CLIPTokenizer, CLIPTokenizerFast
from transformers.models.clip.tokenization_clip 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 CLIPImageProcessor, CLIPProcessor


@require_vision
class     A     (unittest.TestCase       ):
			'''simple docstring'''




			def   a_			(     self  :       Optional[int]  )      ->      Dict:







					"""simple docstring"""






					A__     =  tempfile.mkdtemp()

					# fmt: off
					A__     =  ["""l""", """o""", """w""", """e""", """r""", """s""", """t""", """i""", """d""", """n""", """lo""", """l</w>""", """w</w>""", """r</w>""", """t</w>""", """low</w>""", """er</w>""", """lowest</w>""", """newer</w>""", """wider""", """<unk>""", """<|startoftext|>""", """<|endoftext|>"""]
					# fmt: on
					A__     =  dict(zip(__lowerCAmelCase				,      range(len(__lowerCAmelCase  )  )  )  )
					A__     =  ["""#version: 0.2""", """l o""", """lo w</w>""", """e r</w>""", """"""]
					A__     =  {"""unk_token""": """<unk>"""}

					A__     =  os.path.join(self.tmpdirname				,      VOCAB_FILES_NAMES["""vocab_file"""]  )
					A__     =  os.path.join(self.tmpdirname				,      VOCAB_FILES_NAMES["""merges_file"""]  )
					with open(self.vocab_file				,      """w"""				,      encoding="""utf-8"""  ) as fp:
							fp.write(json.dumps(__lowerCAmelCase  ) + """\n"""  )
					with open(self.merges_file				,      """w"""				,      encoding="""utf-8"""  ) as fp:
							fp.write("""\n""".join(__lowerCAmelCase  )  )

					A__     =  {
					    """do_resize""": True,
					    """size""": 20,
					    """do_center_crop""": True,
					    """crop_size""": 18,
					    """do_normalize""": True,
					    """image_mean""": [0.4_8_1_4_5_4_6_6, 0.4_5_7_8_2_7_5, 0.4_0_8_2_1_0_7_3],
					    """image_std""": [0.2_6_8_6_2_9_5_4, 0.2_6_1_3_0_2_5_8, 0.2_7_5_7_7_7_1_1],
					}
					A__     =  os.path.join(self.tmpdirname				,      __lowerCAmelCase  )
					with open(self.image_processor_file				,      """w"""				,      encoding="""utf-8"""  ) as fp:
							json.dump(__lowerCAmelCase				,      __lowerCAmelCase  )






			def   a_			(     self  :       str				,      **__lowerCAmelCase  :       Optional[int]  )      ->      str:







					"""simple docstring"""






					return CLIPTokenizer.from_pretrained(self.tmpdirname				,      **__lowerCAmelCase  )






			def   a_			(     self  :       Dict				,      **__lowerCAmelCase  :       List[Any]  )      ->      Optional[int]:







					"""simple docstring"""






					return CLIPTokenizerFast.from_pretrained(self.tmpdirname				,      **__lowerCAmelCase  )






			def   a_			(     self  :       List[Any]				,      **__lowerCAmelCase  :       List[Any]  )      ->      Tuple:







					"""simple docstring"""






					return CLIPImageProcessor.from_pretrained(self.tmpdirname				,      **__lowerCAmelCase  )






			def   a_			(     self  :       Optional[Any]  )      ->      str:







					"""simple docstring"""






					shutil.rmtree(self.tmpdirname  )






			def   a_			(     self  :       int  )      ->      Tuple:







					"""simple docstring"""






					A__     =  [np.random.randint(2_55				,      size=(3, 30, 4_00)				,      dtype=np.uinta  )]

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

					return image_inputs






			def   a_			(     self  :       List[str]  )      ->      Optional[int]:







					"""simple docstring"""






					A__     =  self.get_tokenizer()
					A__     =  self.get_rust_tokenizer()
					A__     =  self.get_image_processor()

					A__     =  CLIPProcessor(tokenizer=__lowerCAmelCase				,      image_processor=__lowerCAmelCase  )
					processor_slow.save_pretrained(self.tmpdirname  )
					A__     =  CLIPProcessor.from_pretrained(self.tmpdirname				,      use_fast=__lowerCAmelCase  )

					A__     =  CLIPProcessor(tokenizer=__lowerCAmelCase				,      image_processor=__lowerCAmelCase  )
					processor_fast.save_pretrained(self.tmpdirname  )
					A__     =  CLIPProcessor.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				,      __lowerCAmelCase  )
					self.assertIsInstance(processor_fast.tokenizer				,      __lowerCAmelCase  )

					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				,      __lowerCAmelCase  )
					self.assertIsInstance(processor_fast.image_processor				,      __lowerCAmelCase  )






			def   a_			(     self  :       int  )      ->      Any:







					"""simple docstring"""






					A__     =  CLIPProcessor(tokenizer=self.get_tokenizer()				,      image_processor=self.get_image_processor()  )
					processor.save_pretrained(self.tmpdirname  )

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

					A__     =  CLIPProcessor.from_pretrained(
					    self.tmpdirname				,      bos_token="""(BOS)"""				,      eos_token="""(EOS)"""				,      do_normalize=__lowerCAmelCase				,      padding_value=1.0  )

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

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






			def   a_			(     self  :       List[Any]  )      ->      Union[str, Any]:







					"""simple docstring"""






					A__     =  self.get_image_processor()
					A__     =  self.get_tokenizer()

					A__     =  CLIPProcessor(tokenizer=__lowerCAmelCase				,      image_processor=__lowerCAmelCase  )

					A__     =  self.prepare_image_inputs()

					A__     =  image_processor(__lowerCAmelCase				,      return_tensors="""np"""  )
					A__     =  processor(images=__lowerCAmelCase				,      return_tensors="""np"""  )

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






			def   a_			(     self  :       Union[str, Any]  )      ->      Tuple:







					"""simple docstring"""






					A__     =  self.get_image_processor()
					A__     =  self.get_tokenizer()

					A__     =  CLIPProcessor(tokenizer=__lowerCAmelCase				,      image_processor=__lowerCAmelCase  )

					A__     =  """lower newer"""

					A__     =  processor(text=__lowerCAmelCase  )

					A__     =  tokenizer(__lowerCAmelCase  )

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






			def   a_			(     self  :       str  )      ->      Optional[Any]:







					"""simple docstring"""






					A__     =  self.get_image_processor()
					A__     =  self.get_tokenizer()

					A__     =  CLIPProcessor(tokenizer=__lowerCAmelCase				,      image_processor=__lowerCAmelCase  )

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

					A__     =  processor(text=__lowerCAmelCase				,      images=__lowerCAmelCase  )

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

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






			def   a_			(     self  :       Optional[int]  )      ->      Tuple:







					"""simple docstring"""






					A__     =  self.get_image_processor()
					A__     =  self.get_tokenizer()

					A__     =  CLIPProcessor(tokenizer=__lowerCAmelCase				,      image_processor=__lowerCAmelCase  )

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

					A__     =  processor.batch_decode(__lowerCAmelCase  )
					A__     =  tokenizer.batch_decode(__lowerCAmelCase  )

					self.assertListEqual(__lowerCAmelCase				,      __lowerCAmelCase  )







			def   a_			(     self  :       Dict  )      ->      str:







					"""simple docstring"""






					A__     =  self.get_image_processor()
					A__     =  self.get_tokenizer()

					A__     =  CLIPProcessor(tokenizer=__lowerCAmelCase				,      image_processor=__lowerCAmelCase  )

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

					A__     =  processor(text=__lowerCAmelCase				,      images=__lowerCAmelCase  )

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



