




'''simple docstring'''



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 CLIPSegProcessor, ViTImageProcessor






@require_vision
class 							_a				(			unittest.TestCase ):





       '''simple docstring'''






       def        UpperCamelCase_							(      self  ):







             '''simple docstring'''







             SCREAMING_SNAKE_CASE   :      str    					=						tempfile.mkdtemp()

             # fmt: off
             SCREAMING_SNAKE_CASE   :      Any    					=						['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
             SCREAMING_SNAKE_CASE   :      List[Any]    					=						dict(zip(A,							range(len(A  )  )  )  )
             SCREAMING_SNAKE_CASE   :      Tuple    					=						['#version: 0.2', 'l o', 'lo w</w>', 'e r</w>', '']
             SCREAMING_SNAKE_CASE   :      Any    					=						{'unk_token': '<unk>'}

             SCREAMING_SNAKE_CASE   :      List[Any]    					=						os.path.join(self.tmpdirname,							VOCAB_FILES_NAMES['vocab_file']  )
             SCREAMING_SNAKE_CASE   :      Optional[int]    					=						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(A  ) + '\n'  )
             with open(self.merges_file,							'w',							encoding='utf-8'  ) as fp:
                   fp.write('\n'.join(A  )  )

             SCREAMING_SNAKE_CASE   :      Optional[Any]    					=						{
                 'do_resize': True,
                 'size': 20,
                 'do_center_crop': True,
                 'crop_size': 18,
                 'do_normalize': True,
                 'image_mean': [0.48_14_54_66, 0.4_57_82_75, 0.40_82_10_73],
                 'image_std': [0.26_86_29_54, 0.26_13_02_58, 0.27_57_77_11],
             }
             SCREAMING_SNAKE_CASE   :      Optional[int]    					=						os.path.join(self.tmpdirname,							A  )
             with open(self.image_processor_file,							'w',							encoding='utf-8'  ) as fp:
                   json.dump(A,							A  )







       def        UpperCamelCase_							(      self,							**A  ):







             '''simple docstring'''







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







       def        UpperCamelCase_							(      self,							**A  ):







             '''simple docstring'''







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







       def        UpperCamelCase_							(      self,							**A  ):







             '''simple docstring'''







             return ViTImageProcessor.from_pretrained(self.tmpdirname,							**A  )







       def        UpperCamelCase_							(      self  ):







             '''simple docstring'''







             shutil.rmtree(self.tmpdirname  )







       def        UpperCamelCase_							(      self  ):







             '''simple docstring'''







             SCREAMING_SNAKE_CASE   :      Any    					=						[np.random.randint(255,							size=(3, 30, 400),							dtype=np.uinta  )]

             SCREAMING_SNAKE_CASE   :      Union[str, Any]    					=						[Image.fromarray(np.moveaxis(A,							0,							-1  )  ) for x in image_inputs]

             return image_inputs







       def        UpperCamelCase_							(      self  ):







             '''simple docstring'''







             SCREAMING_SNAKE_CASE   :      Optional[Any]    					=						self.get_tokenizer()
             SCREAMING_SNAKE_CASE   :      Dict    					=						self.get_rust_tokenizer()
             SCREAMING_SNAKE_CASE   :      Dict    					=						self.get_image_processor()

             SCREAMING_SNAKE_CASE   :      Tuple    					=						CLIPSegProcessor(tokenizer=A,							image_processor=A  )
             processor_slow.save_pretrained(self.tmpdirname  )
             SCREAMING_SNAKE_CASE   :      Dict    					=						CLIPSegProcessor.from_pretrained(self.tmpdirname,							use_fast=A  )

             SCREAMING_SNAKE_CASE   :      List[Any]    					=						CLIPSegProcessor(tokenizer=A,							image_processor=A  )
             processor_fast.save_pretrained(self.tmpdirname  )
             SCREAMING_SNAKE_CASE   :      str    					=						CLIPSegProcessor.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,							A  )
             self.assertIsInstance(processor_fast.tokenizer,							A  )

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







       def        UpperCamelCase_							(      self  ):







             '''simple docstring'''







             SCREAMING_SNAKE_CASE   :      Tuple    					=						CLIPSegProcessor(tokenizer=self.get_tokenizer(),							image_processor=self.get_image_processor()  )
             processor.save_pretrained(self.tmpdirname  )

             SCREAMING_SNAKE_CASE   :      str    					=						self.get_tokenizer(bos_token='(BOS)',							eos_token='(EOS)'  )
             SCREAMING_SNAKE_CASE   :      Union[str, Any]    					=						self.get_image_processor(do_normalize=A,							padding_value=1.0  )

             SCREAMING_SNAKE_CASE   :      Union[str, Any]    					=						CLIPSegProcessor.from_pretrained(
                 self.tmpdirname,							bos_token='(BOS)',							eos_token='(EOS)',							do_normalize=A,							padding_value=1.0  )

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

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







       def        UpperCamelCase_							(      self  ):







             '''simple docstring'''







             SCREAMING_SNAKE_CASE   :      Dict    					=						self.get_image_processor()
             SCREAMING_SNAKE_CASE   :      int    					=						self.get_tokenizer()

             SCREAMING_SNAKE_CASE   :      Union[str, Any]    					=						CLIPSegProcessor(tokenizer=A,							image_processor=A  )

             SCREAMING_SNAKE_CASE   :      Optional[int]    					=						self.prepare_image_inputs()

             SCREAMING_SNAKE_CASE   :      str    					=						image_processor(A,							return_tensors='np'  )
             SCREAMING_SNAKE_CASE   :      Optional[int]    					=						processor(images=A,							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        UpperCamelCase_							(      self  ):







             '''simple docstring'''







             SCREAMING_SNAKE_CASE   :      Tuple    					=						self.get_image_processor()
             SCREAMING_SNAKE_CASE   :      Optional[int]    					=						self.get_tokenizer()

             SCREAMING_SNAKE_CASE   :      int    					=						CLIPSegProcessor(tokenizer=A,							image_processor=A  )

             SCREAMING_SNAKE_CASE   :      str    					=						'lower newer'

             SCREAMING_SNAKE_CASE   :      Dict    					=						processor(text=A  )

             SCREAMING_SNAKE_CASE   :      Union[str, Any]    					=						tokenizer(A  )

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







       def        UpperCamelCase_							(      self  ):







             '''simple docstring'''







             SCREAMING_SNAKE_CASE   :      Dict    					=						self.get_image_processor()
             SCREAMING_SNAKE_CASE   :      Tuple    					=						self.get_tokenizer()

             SCREAMING_SNAKE_CASE   :      int    					=						CLIPSegProcessor(tokenizer=A,							image_processor=A  )

             SCREAMING_SNAKE_CASE   :      List[Any]    					=						'lower newer'
             SCREAMING_SNAKE_CASE   :      Any    					=						self.prepare_image_inputs()

             SCREAMING_SNAKE_CASE   :      Any    					=						processor(text=A,							images=A  )

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

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







       def        UpperCamelCase_							(      self  ):







             '''simple docstring'''







             SCREAMING_SNAKE_CASE   :      Optional[int]    					=						self.get_image_processor()
             SCREAMING_SNAKE_CASE   :      Any    					=						self.get_tokenizer()

             SCREAMING_SNAKE_CASE   :      Tuple    					=						CLIPSegProcessor(tokenizer=A,							image_processor=A  )

             SCREAMING_SNAKE_CASE   :      str    					=						self.prepare_image_inputs()
             SCREAMING_SNAKE_CASE   :      str    					=						self.prepare_image_inputs()

             SCREAMING_SNAKE_CASE   :      Union[str, Any]    					=						processor(images=A,							visual_prompt=A  )

             self.assertListEqual(list(inputs.keys()  ),							['pixel_values', 'conditional_pixel_values']  )

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







       def        UpperCamelCase_							(      self  ):







             '''simple docstring'''







             SCREAMING_SNAKE_CASE   :      List[str]    					=						self.get_image_processor()
             SCREAMING_SNAKE_CASE   :      Dict    					=						self.get_tokenizer()

             SCREAMING_SNAKE_CASE   :      List[Any]    					=						CLIPSegProcessor(tokenizer=A,							image_processor=A  )

             SCREAMING_SNAKE_CASE   :      Any    					=						[[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

             SCREAMING_SNAKE_CASE   :      Optional[int]    					=						processor.batch_decode(A  )
             SCREAMING_SNAKE_CASE   :      List[str]    					=						tokenizer.batch_decode(A  )

             self.assertListEqual(A,							A  )






import re
import time
from typing import Optional

import IPython.display as disp

from ..trainer_callback import TrainerCallback
from ..trainer_utils import IntervalStrategy, has_length



def 							UpperCamelCase_( lowerCamelCase_					)       ->		int:
    _lowercase			:				List[str] 						=						int(lowerCamelCase_					)
    _lowercase						,							_lowercase						,							_lowercase			:				Optional[Any] 						=						t // 3600, (t // 60) % 60, t % 60
    return F'''{h}:{m:02d}:{s:02d}''' if h != 0 else F'''{m:02d}:{s:02d}'''



def 							UpperCamelCase_( lowerCamelCase_				,					lowerCamelCase_				,					lowerCamelCase_				,					lowerCamelCase_				,					lowerCamelCase_=300					)       ->		Dict:
    # docstyle-ignore
    return F'''
    <div>
      {prefix}
      <progress value=\'{value}\' max=\'{total}\' style=\'width:{width}px; height:20px; vertical-align: middle;\'></progress>
      {label}
    </div>
    '''



def 							UpperCamelCase_( lowerCamelCase_					)       ->		Any:
    _lowercase			:				int 						=						'<table border="1" class="dataframe">\n'
    html_code += """  <thead>\n <tr style="text-align: left;">\n"""
    for i in items[0]:
        html_code += F'''      <th>{i}</th>\n'''
    html_code += "    </tr>\n  </thead>\n  <tbody>\n"
    for line in items[1:]:
        html_code += "    <tr>\n"
        for elt in line:
            _lowercase			:				Any 						=						F'''{elt:.6f}''' if isinstance(lowerCamelCase_				,					lowerCamelCase_					) else str(lowerCamelCase_					)
            html_code += F'''      <td>{elt}</td>\n'''
        html_code += "    </tr>\n"
    html_code += "  </tbody>\n</table><p>"
    return html_code






class _lowerCamelCase:
       lowercase_					:      str       					=     5
       lowercase_					:      str       					=     0.2
       def __init__(   self, lowerCamelCase, lowerCamelCase = None, lowerCamelCase = True, lowerCamelCase = None, lowerCamelCase = 3_00, )			->  Optional[Any]:




           """simple docstring"""

           _lowercase			:				Optional[int] 						=						total
           _lowercase			:				Optional[int] 						=						'' if prefix is None else prefix
           _lowercase			:				Tuple 						=						leave
           _lowercase			:				str 						=						parent
           _lowercase			:				str 						=						width
           _lowercase			:				List[Any] 						=						None
           _lowercase			:				List[str] 						=						None
           _lowercase			:				Tuple 						=						None
       def      UpperCamelCase	(   self, lowerCamelCase, lowerCamelCase = False, lowerCamelCase = None)			->  Dict:




           """simple docstring"""

           _lowercase			:				Any 						=						value
           if comment is not None:
               _lowercase			:				Union[str, Any] 						=						comment
           if self.last_value is None:
               _lowercase			:				Dict 						=						time.time()
               _lowercase			:				Tuple 						=						value
               _lowercase			:				str 						=						None
               _lowercase			:				Optional[int] 						=						self.warmup
               _lowercase			:				Optional[Any] 						=						1
               self.update_bar(lowerCamelCase)
           elif value <= self.last_value and not force_update:
               return
           elif force_update or self.first_calls > 0 or value >= min(self.last_value + self.wait_for, self.total):
               if self.first_calls > 0:
                   self.first_calls -= 1
               _lowercase			:				List[str] 						=						time.time()
               _lowercase			:				Tuple 						=						current_time - self.start_time
               # We could have value = self.start_value if the update is called twixe with the same start value.
               if value > self.start_value:
                   _lowercase			:				Dict 						=						self.elapsed_time / (value - self.start_value)
               else:
                   _lowercase			:				int 						=						None
               if value >= self.total:
                   _lowercase			:				Dict 						=						self.total
                   _lowercase			:				List[str] 						=						None
                   if not self.leave:
                       self.close()
               elif self.average_time_per_item is not None:
                   _lowercase			:				Optional[int] 						=						self.average_time_per_item * (self.total - value)
               self.update_bar(lowerCamelCase)
               _lowercase			:				int 						=						value
               _lowercase			:				Tuple 						=						current_time
               if self.average_time_per_item is None:
                   _lowercase			:				str 						=						1
               else:
                   _lowercase			:				int 						=						max(int(self.update_every / self.average_time_per_item), 1)
       def      UpperCamelCase	(   self, lowerCamelCase, lowerCamelCase=None)			->  Optional[Any]:




           """simple docstring"""

           _lowercase			:				List[Any] 						=						' ' * (len(str(self.total)) - len(str(lowerCamelCase))) + str(lowerCamelCase)
           if self.elapsed_time is None:
               _lowercase			:				int 						=						F'''[{spaced_value}/{self.total} : < :'''
           elif self.predicted_remaining is None:
               _lowercase			:				Union[str, Any] 						=						F'''[{spaced_value}/{self.total} {format_time(self.elapsed_time)}'''
           else:
               _lowercase			:				Union[str, Any] 						=						(
                   F'''[{spaced_value}/{self.total} {format_time(self.elapsed_time)} <'''
                   F''' {format_time(self.predicted_remaining)}'''
               )
               self.label += F''', {1/self.average_time_per_item:.2f} it/s'''
           self.label += "]" if self.comment is None or len(self.comment) == 0 else F''', {self.comment}]'''
           self.display()
       def      UpperCamelCase	(   self)			->  List[Any]:




           """simple docstring"""

           _lowercase			:				Any 						=						html_progress_bar(self.value, self.total, self.prefix, self.label, self.width)
           if self.parent is not None:
               # If this is a child bar, the parent will take care of the display.
               self.parent.display()
               return
           if self.output is None:
               _lowercase			:				Optional[Any] 						=						disp.display(disp.HTML(self.html_code), display_id=lowerCamelCase)
           else:
               self.output.update(disp.HTML(self.html_code))




       def      UpperCamelCase	(   self)			->  Optional[Any]:




           """simple docstring"""

           if self.parent is None and self.output is not None:
               self.output.update(disp.HTML(''))






class _lowerCamelCase(		_a  ):
       def __init__(   self, lowerCamelCase, lowerCamelCase=None)			->  int:




           """simple docstring"""

           super().__init__(lowerCamelCase)
           _lowercase			:				Optional[Any] 						=						None if column_names is None else [column_names]
           _lowercase			:				Any 						=						None
       def      UpperCamelCase	(   self)			->  List[Any]:




           """simple docstring"""

           _lowercase			:				Any 						=						html_progress_bar(self.value, self.total, self.prefix, self.label, self.width)
           if self.inner_table is not None:
               self.html_code += text_to_html_table(self.inner_table)
           if self.child_bar is not None:
               self.html_code += self.child_bar.html_code
           if self.output is None:
               _lowercase			:				Dict 						=						disp.display(disp.HTML(self.html_code), display_id=lowerCamelCase)
           else:
               self.output.update(disp.HTML(self.html_code))
       def      UpperCamelCase	(   self, lowerCamelCase)			->  Dict:




           """simple docstring"""

           if self.inner_table is None:
               _lowercase			:				Dict 						=						[list(values.keys()), list(values.values())]
           else:
               _lowercase			:				Tuple 						=						self.inner_table[0]
               if len(self.inner_table) == 1:
                   # We give a chance to update the column names at the first iteration
                   for key in values.keys():
                       if key not in columns:
                           columns.append(lowerCamelCase)
                   _lowercase			:				str 						=						columns
               self.inner_table.append([values[c] for c in columns])
       def      UpperCamelCase	(   self, lowerCamelCase, lowerCamelCase=None, lowerCamelCase=3_00)			->  Union[str, Any]:




           """simple docstring"""

           _lowercase			:				List[str] 						=						NotebookProgressBar(lowerCamelCase, prefix=lowerCamelCase, parent=self, width=lowerCamelCase)
           return self.child_bar




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




           """simple docstring"""

           _lowercase			:				Optional[Any] 						=						None
           self.display()






class _lowerCamelCase(		_a  ):
       def __init__(   self)			->  List[Any]:




           """simple docstring"""

           _lowercase			:				Union[str, Any] 						=						None
           _lowercase			:				Dict 						=						None
           _lowercase			:				Dict 						=						False
       def      UpperCamelCase	(   self, lowerCamelCase, lowerCamelCase, lowerCamelCase, **lowerCamelCase)			->  Dict:




           """simple docstring"""

           _lowercase			:				Dict 						=						'Epoch' if args.evaluation_strategy == IntervalStrategy.EPOCH else 'Step'
           _lowercase			:				Dict 						=						0
           _lowercase			:				Tuple 						=						0
           _lowercase			:				int 						=						[self.first_column] + ['Training Loss']
           if args.evaluation_strategy != IntervalStrategy.NO:
               column_names.append('Validation Loss')
           _lowercase			:				Union[str, Any] 						=						NotebookTrainingTracker(state.max_steps, lowerCamelCase)
       def      UpperCamelCase	(   self, lowerCamelCase, lowerCamelCase, lowerCamelCase, **lowerCamelCase)			->  Union[str, Any]:




           """simple docstring"""

           _lowercase			:				Any 						=						int(state.epoch) if int(state.epoch) == state.epoch else F'''{state.epoch:.2f}'''
           self.training_tracker.update(
               state.global_step + 1, comment=F'''Epoch {epoch}/{state.num_train_epochs}''', force_update=self._force_next_update, )
           _lowercase			:				str 						=						False
       def      UpperCamelCase	(   self, lowerCamelCase, lowerCamelCase, lowerCamelCase, lowerCamelCase=None, **lowerCamelCase)			->  Any:




           """simple docstring"""

           if not has_length(lowerCamelCase):
               return
           if self.prediction_bar is None:
               if self.training_tracker is not None:
                   _lowercase			:				Optional[int] 						=						self.training_tracker.add_child(len(lowerCamelCase))
               else:
                   _lowercase			:				Optional[int] 						=						NotebookProgressBar(len(lowerCamelCase))
               self.prediction_bar.update(1)
           else:
               self.prediction_bar.update(self.prediction_bar.value + 1)
       def      UpperCamelCase	(   self, lowerCamelCase, lowerCamelCase, lowerCamelCase, **lowerCamelCase)			->  Optional[int]:




           """simple docstring"""

           if self.prediction_bar is not None:
               self.prediction_bar.close()
           _lowercase			:				Any 						=						None
       def      UpperCamelCase	(   self, lowerCamelCase, lowerCamelCase, lowerCamelCase, lowerCamelCase=None, **lowerCamelCase)			->  List[Any]:




           """simple docstring"""

           if args.evaluation_strategy == IntervalStrategy.NO and "loss" in logs:
               _lowercase			:				Dict 						=						{'Training Loss': logs['loss']}
               # First column is necessarily Step sine we're not in epoch eval strategy
               _lowercase			:				List[Any] 						=						state.global_step
               self.training_tracker.write_line(lowerCamelCase)
       def      UpperCamelCase	(   self, lowerCamelCase, lowerCamelCase, lowerCamelCase, lowerCamelCase=None, **lowerCamelCase)			->  List[str]:




           """simple docstring"""

           if self.training_tracker is not None:
               _lowercase			:				Tuple 						=						{'Training Loss': 'No log', 'Validation Loss': 'No log'}
               for log in reversed(state.log_history):
                   if "loss" in log:
                       _lowercase			:				int 						=						log['loss']
                       break

               if self.first_column == "Epoch":
                   _lowercase			:				Union[str, Any] 						=						int(state.epoch)
               else:
                   _lowercase			:				Optional[Any] 						=						state.global_step
               _lowercase			:				str 						=						'eval'
               for k in metrics:
                   if k.endswith('_loss'):
                       _lowercase			:				str 						=						re.sub(R'\_loss$', '', lowerCamelCase)
               _lowercase			:				Tuple 						=						metrics.pop('total_flos', lowerCamelCase)
               _lowercase			:				List[str] 						=						metrics.pop('epoch', lowerCamelCase)
               _lowercase			:				List[Any] 						=						metrics.pop(F'''{metric_key_prefix}_runtime''', lowerCamelCase)
               _lowercase			:				Dict 						=						metrics.pop(F'''{metric_key_prefix}_samples_per_second''', lowerCamelCase)
               _lowercase			:				Tuple 						=						metrics.pop(F'''{metric_key_prefix}_steps_per_second''', lowerCamelCase)
               _lowercase			:				List[str] 						=						metrics.pop(F'''{metric_key_prefix}_jit_compilation_time''', lowerCamelCase)
               for k, v in metrics.items():
                   if k == F'''{metric_key_prefix}_loss''':
                       _lowercase			:				Union[str, Any] 						=						v
                   else:
                       _lowercase			:				Optional[Any] 						=						k.split('_')
                       _lowercase			:				Optional[int] 						=						' '.join([part.capitalize() for part in splits[1:]])
                       _lowercase			:				Tuple 						=						v
               self.training_tracker.write_line(lowerCamelCase)
               self.training_tracker.remove_child()
               _lowercase			:				str 						=						None
               # Evaluation takes a long time so we should force the next update.
               _lowercase			:				Optional[Any] 						=						True




       def      UpperCamelCase	(   self, lowerCamelCase, lowerCamelCase, lowerCamelCase, **lowerCamelCase)			->  Union[str, Any]:




           """simple docstring"""

           self.training_tracker.update(
               state.global_step, comment=F'''Epoch {int(state.epoch)}/{state.num_train_epochs}''', force_update=lowerCamelCase)
           _lowercase			:				Any 						=						None


