




'''simple docstring'''



# tests directory-specific settings - this file is run automatically
# by pytest before any tests are run

import doctest
import sys
import warnings
from os.path import abspath, dirname, join

import _pytest

from transformers.testing_utils import HfDoctestModule, HfDocTestParser


# allow having multiple repository checkouts and not needing to remember to rerun
# 'pip install -e .[dev]' when switching between checkouts and running tests.
UpperCamelCase_    	=				abspath(join(dirname(__file__), "src"))
sys.path.insert(1, git_repo_path)

# silence FutureWarning warnings in tests since often we can't act on them until
# they become normal warnings - i.e. the tests still need to test the current functionality
warnings.simplefilter(action="ignore", category=FutureWarning)




def   lowercase__(			__UpperCamelCase:					Any    ):

      """simple docstring"""






      config.addinivalue_line(
          'markers'      ,'is_pt_tf_cross_test: mark test to run only when PT and TF interactions are tested'    )
      config.addinivalue_line(
          'markers'      ,'is_pt_flax_cross_test: mark test to run only when PT and FLAX interactions are tested'    )
      config.addinivalue_line('markers'      ,'is_pipeline_test: mark test to run only when pipelines are tested'    )
      config.addinivalue_line('markers'      ,'is_staging_test: mark test to run only in the staging environment'    )
      config.addinivalue_line('markers'      ,'accelerate_tests: mark test that require accelerate'    )
      config.addinivalue_line('markers'      ,'tool_tests: mark the tool tests that are run on their specific schedule'    )




def   lowercase__(			__UpperCamelCase:					List[str]    ):

      """simple docstring"""






      from transformers.testing_utils import pytest_addoption_shared

      pytest_addoption_shared(__UpperCamelCase    )




def   lowercase__(			__UpperCamelCase:					Optional[int]    ):

      """simple docstring"""






      from transformers.testing_utils import pytest_terminal_summary_main

      SCREAMING_SNAKE_CASE   :      str    					=						terminalreporter.config.getoption('--make-reports'    )
      if make_reports:
            pytest_terminal_summary_main(__UpperCamelCase      ,id=__UpperCamelCase    )




def   lowercase__(			__UpperCamelCase:					Tuple      ,__UpperCamelCase:					Optional[Any]    ):

      """simple docstring"""






      if exitstatus == 5:
            SCREAMING_SNAKE_CASE   :      Any    					=						0


# Doctest custom flag to ignore output.
UpperCamelCase_    	=				doctest.register_optionflag("IGNORE_RESULT")

UpperCamelCase_    	=				doctest.OutputChecker






class 							_a				(			SCREAMING_SNAKE_CASE ):





       '''simple docstring'''






       def        UpperCamelCase_							(      self,							A,							A,							A  ):







             '''simple docstring'''







             if IGNORE_RESULT & optionflags:
                   return True
             return OutputChecker.check_output(self,							A,							A,							A  )

UpperCamelCase_    	=				CustomOutputChecker
UpperCamelCase_    	=				HfDoctestModule





UpperCamelCase_    	=				HfDocTestParser






import os
from shutil import copyfile
from typing import List, Optional, Tuple

from ...tokenization_utils import AddedToken
from ...tokenization_utils_fast import PreTrainedTokenizerFast
from ...utils import is_sentencepiece_available, logging


if is_sentencepiece_available():
						from .tokenization_big_bird import BigBirdTokenizer
else:
						__UpperCamelCase     		=							None

__UpperCamelCase     		=							logging.get_logger(__name__)
__UpperCamelCase     		=							{'vocab_file': 'spiece.model', 'tokenizer_file': 'tokenizer.json'}

__UpperCamelCase     		=							{
    'vocab_file': {
        'google/bigbird-roberta-base': 'https://huggingface.co/google/bigbird-roberta-base/resolve/main/spiece.model',
        'google/bigbird-roberta-large': (
            'https://huggingface.co/google/bigbird-roberta-large/resolve/main/spiece.model'
        ),
        'google/bigbird-base-trivia-itc': (
            'https://huggingface.co/google/bigbird-base-trivia-itc/resolve/main/spiece.model'
        ),
    },
    'tokenizer_file': {
        'google/bigbird-roberta-base': (
            'https://huggingface.co/google/bigbird-roberta-base/resolve/main/tokenizer.json'
        ),
        'google/bigbird-roberta-large': (
            'https://huggingface.co/google/bigbird-roberta-large/resolve/main/tokenizer.json'
        ),
        'google/bigbird-base-trivia-itc': (
            'https://huggingface.co/google/bigbird-base-trivia-itc/resolve/main/tokenizer.json'
        ),
    },
}

__UpperCamelCase     		=							{
    'google/bigbird-roberta-base': 4_0_9_6,
    'google/bigbird-roberta-large': 4_0_9_6,
    'google/bigbird-base-trivia-itc': 4_0_9_6,
}


__UpperCamelCase     		=							'▁'







class 							lowerCamelCase__						(				UpperCAmelCase   ):






			"""simple docstring"""






			_UpperCamelCase		:       Dict 			=		VOCAB_FILES_NAMES
			_UpperCamelCase		:       int 			=		PRETRAINED_VOCAB_FILES_MAP
			_UpperCamelCase		:       List[Any] 			=		PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
			_UpperCamelCase		:       Optional[Any] 			=		BigBirdTokenizer
			_UpperCamelCase		:       Dict 			=		['input_ids', 'attention_mask']
			_UpperCamelCase		:       List[int] 			=		[]




			def __init__(				self   ,    snake_case=None   ,    snake_case=None   ,    snake_case="<unk>"   ,    snake_case="<s>"   ,    snake_case="</s>"   ,    snake_case="<pad>"   ,    snake_case="[SEP]"   ,    snake_case="[MASK]"   ,    snake_case="[CLS]"   ,    **snake_case   ,    ):

						'''simple docstring'''


						UpperCamelCase__       =							AddedToken(snake_case   ,    lstrip=snake_case   ,    rstrip=snake_case  ) if isinstance(snake_case   ,    snake_case  ) else bos_token
						UpperCamelCase__       =							AddedToken(snake_case   ,    lstrip=snake_case   ,    rstrip=snake_case  ) if isinstance(snake_case   ,    snake_case  ) else eos_token
						UpperCamelCase__       =							AddedToken(snake_case   ,    lstrip=snake_case   ,    rstrip=snake_case  ) if isinstance(snake_case   ,    snake_case  ) else unk_token
						UpperCamelCase__       =							AddedToken(snake_case   ,    lstrip=snake_case   ,    rstrip=snake_case  ) if isinstance(snake_case   ,    snake_case  ) else pad_token
						UpperCamelCase__       =							AddedToken(snake_case   ,    lstrip=snake_case   ,    rstrip=snake_case  ) if isinstance(snake_case   ,    snake_case  ) else cls_token
						UpperCamelCase__       =							AddedToken(snake_case   ,    lstrip=snake_case   ,    rstrip=snake_case  ) if isinstance(snake_case   ,    snake_case  ) else sep_token

						# Mask token behave like a normal word, i.e. include the space before it
						UpperCamelCase__       =							AddedToken(snake_case   ,    lstrip=snake_case   ,    rstrip=snake_case  ) if isinstance(snake_case   ,    snake_case  ) else mask_token

						super().__init__(
						    snake_case   ,    tokenizer_file=snake_case   ,    bos_token=snake_case   ,    eos_token=snake_case   ,    unk_token=snake_case   ,    sep_token=snake_case   ,    pad_token=snake_case   ,    cls_token=snake_case   ,    mask_token=snake_case   ,    **snake_case   ,    )

						UpperCamelCase__       =							vocab_file
						UpperCamelCase__       =							False if not self.vocab_file else True




			def 					snake_case__					(				self   ,    snake_case   ,    snake_case = None  ):

						'''simple docstring'''


						UpperCamelCase__       =							[self.sep_token_id]
						UpperCamelCase__       =							[self.cls_token_id]
						if token_ids_a is None:
									return cls + token_ids_a + sep
						return cls + token_ids_a + sep + token_ids_a + sep




			def 					snake_case__					(				self   ,    snake_case   ,    snake_case = None   ,    snake_case = False  ):

						'''simple docstring'''


						if already_has_special_tokens:
									if token_ids_a is not None:
												raise ValueError(
												    "You should not supply a second sequence if the provided sequence of "
												    "ids is already formatted with special tokens for the model."  )
									return [1 if x in [self.sep_token_id, self.cls_token_id] else 0 for x in token_ids_a]

						if token_ids_a is None:
									return [1] + ([0] * len(snake_case  )) + [1]
						return [1] + ([0] * len(snake_case  )) + [1] + ([0] * len(snake_case  )) + [1]




			def 					snake_case__					(				self   ,    snake_case   ,    snake_case = None  ):

						'''simple docstring'''


						UpperCamelCase__       =							[self.sep_token_id]
						UpperCamelCase__       =							[self.cls_token_id]

						if token_ids_a is None:
									return len(cls + token_ids_a + sep  ) * [0]
						return len(cls + token_ids_a + sep  ) * [0] + len(token_ids_a + sep  ) * [1]







			def 					snake_case__					(				self   ,    snake_case   ,    snake_case = None  ):

						'''simple docstring'''


						if not self.can_save_slow_tokenizer:
									raise ValueError(
									    "Your fast tokenizer does not have the necessary information to save the vocabulary for a slow "
									    "tokenizer."  )

						if not os.path.isdir(snake_case  ):
									logger.error(F'''Vocabulary path ({save_directory}) should be a directory'''  )
									return
						UpperCamelCase__       =							os.path.join(
						    snake_case   ,    (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["vocab_file"]  )

						if os.path.abspath(self.vocab_file  ) != os.path.abspath(snake_case  ):
									copyfile(self.vocab_file   ,    snake_case  )

						return (out_vocab_file,)


