

'''simple docstring'''






from typing import List, Optional, Tuple

from tokenizers import pre_tokenizers

from ...tokenization_utils_fast import PreTrainedTokenizerFast
from ...utils import logging
from .tokenization_clip import CLIPTokenizer


snake_case_       =       logging.get_logger(__name__)

snake_case_       =       {'''vocab_file''': '''vocab.json''', '''merges_file''': '''merges.txt''', '''tokenizer_file''': '''tokenizer.json'''}

snake_case_       =       {
    '''vocab_file''': {
        '''openai/clip-vit-base-patch32''': '''https://huggingface.co/openai/clip-vit-base-patch32/resolve/main/vocab.json''',
    },
    '''merges_file''': {
        '''openai/clip-vit-base-patch32''': '''https://huggingface.co/openai/clip-vit-base-patch32/resolve/main/merges.txt''',
    },
    '''tokenizer_file''': {
        '''openai/clip-vit-base-patch32''': (
            '''https://huggingface.co/openai/clip-vit-base-patch32/resolve/main/tokenizer.json'''
        ),
    },
}

snake_case_       =       {
    '''openai/clip-vit-base-patch32''': 7_7,
}
class 	SCREAMING_SNAKE_CASE__			(				a_      ):
    _A			    =							VOCAB_FILES_NAMES
    _A			    =							PRETRAINED_VOCAB_FILES_MAP
    _A			    =							PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
    _A			    =							["input_ids", "attention_mask"]
    _A			    =							CLIPTokenizer




    def __init__(					self				,     lowercase__=None				,     lowercase__=None				,     lowercase__=None				,     lowercase__="<|endoftext|>"				,     lowercase__="<|startoftext|>"				,     lowercase__="<|endoftext|>"				,     lowercase__="<|endoftext|>"				,     **lowercase__				,     ):






          """simple docstring"""






          super().__init__(
              lowercase__				,     lowercase__				,     tokenizer_file=lowercase__				,     unk_token=lowercase__				,     bos_token=lowercase__				,     eos_token=lowercase__				,     pad_token=lowercase__				,     **lowercase__				,     )

          if not isinstance(self.backend_tokenizer.pre_tokenizer				,     pre_tokenizers.Sequence			):
                raise ValueError(
                    "The `backend_tokenizer` provided does not match the expected format. The CLIP tokenizer has been"
                    " heavily modified from transformers version 4.17.0. You need to convert the tokenizer you are using"
                    " to be compatible with this version.The easiest way to do so is"
                    " `CLIPTokenizerFast.from_pretrained(\"path_to_local_folder_or_hub_repo, from_slow=True)`. If you want"
                    " to use your existing tokenizer, you will have to revert to a version prior to 4.17.0 of"
                    " transformers."			)

          self._wrap_decode_method_backend_tokenizer()




    def   __lowerCamelCase      (					self			):






          """simple docstring"""






          SCREAMING_SNAKE_CASE_      :			str     =       self.backend_tokenizer.decode

          def new_decode_method(*lowercase__				,     **lowercase__			):
                SCREAMING_SNAKE_CASE_      :			List[str]     =       orig_decode_method(*lowercase__				,     **lowercase__			)
                SCREAMING_SNAKE_CASE_      :			List[Any]     =       text.replace(self.backend_tokenizer.model.end_of_word_suffix				,     " "			).strip()
                return text

          SCREAMING_SNAKE_CASE_      :			str     =       new_decode_method




    def   __lowerCamelCase      (					self				,     lowercase__				,     lowercase__ = None			):






          """simple docstring"""






          SCREAMING_SNAKE_CASE_      :			Any     =       [self.bos_token_id]
          SCREAMING_SNAKE_CASE_      :			List[Any]     =       [self.eos_token_id]

          if token_ids_a is None:
                return bos_token + token_ids_a + eos_token
          return bos_token + token_ids_a + eos_token + eos_token + token_ids_a + eos_token




    def   __lowerCamelCase      (					self				,     lowercase__				,     lowercase__ = None			):






          """simple docstring"""






          SCREAMING_SNAKE_CASE_      :			List[Any]     =       [self.bos_token_id]
          SCREAMING_SNAKE_CASE_      :			Dict     =       [self.eos_token_id]

          if token_ids_a is None:
                return len(bos_token + token_ids_a + eos_token			) * [0]
          return len(bos_token + token_ids_a + eos_token + eos_token + token_ids_a + eos_token			) * [0]







    def   __lowerCamelCase      (					self				,     lowercase__				,     lowercase__ = None			):






          """simple docstring"""






          SCREAMING_SNAKE_CASE_      :			str     =       self._tokenizer.model.save(lowercase__				,     name=lowercase__			)
          return tuple(lowercase__			)





'''simple docstring'''







from __future__ import annotations






def       lowerCAmelCase__       (				lowerCamelCase     :			list   ):
       _A     :	Union[str, Any]      =					sorted(lowerCamelCase   )
       _A     :	Tuple      =					len(lowerCamelCase   )
       _A     :	int      =					length >> 1
       return (
           (sorted_list[mid_index] + sorted_list[mid_index - 1]) / 2
           if length % 2 == 0
           else sorted_list[mid_index]
       )






def       lowerCAmelCase__       (				):
       import doctest

       doctest.testmod()


if __name__ == "__main__":
   main()






