


"""simple docstring"""


# This code is adapted from OpenAI's release
# https://github.com/openai/human-eval/blob/master/human_eval/execution.py

import contextlib
import faulthandler
import io
import multiprocessing
import os
import platform
import signal
import tempfile


def _lowerCamelCase	(		_UpperCamelCase    , _UpperCamelCase    , _UpperCamelCase    , _UpperCamelCase      ):

			'''simple docstring'''




			__lowerCAmelCase				    =			multiprocessing.Manager()
			__lowerCAmelCase				    =			manager.list()

			__lowerCAmelCase				    =			multiprocessing.Process(target=_UpperCamelCase    , args=(check_program, result, timeout)      )
			p.start()
			p.join(timeout=timeout + 1      )
			if p.is_alive():
						p.kill()

			if not result:
						result.append("timed out"      )

			return {
			    "task_id": task_id,
			    "passed": result[0] == "passed",
			    "result": result[0],
			    "completion_id": completion_id,
			}


def _lowerCamelCase	(		_UpperCamelCase    , _UpperCamelCase    , _UpperCamelCase      ):

			'''simple docstring'''




			with create_tempdir():
						# These system calls are needed when cleaning up tempdir.
						import os
						import shutil

						__lowerCAmelCase				    =			shutil.rmtree
						__lowerCAmelCase				    =			os.rmdir
						__lowerCAmelCase				    =			os.chdir

						# Disable functionalities that can make destructive changes to the test.
						reliability_guard()

						# Run program.
						try:
									__lowerCAmelCase				    =			{}
									with swallow_io():
												with time_limit(_UpperCamelCase      ):
															exec(_UpperCamelCase    , _UpperCamelCase      )
									result.append("passed"      )
						except TimeoutException:
									result.append("timed out"      )
						except BaseException as e:
									result.append(f"failed: {e}"      )

						# Needed for cleaning up.
						__lowerCAmelCase				    =			rmtree
						__lowerCAmelCase				    =			rmdir
						__lowerCAmelCase				    =			chdir


@contextlib.contextmanager
def _lowerCamelCase	(		_UpperCamelCase      ):

			'''simple docstring'''




			def signal_handler(_UpperCamelCase    , _UpperCamelCase      ):
						raise TimeoutException("Timed out!"      )

			signal.setitimer(signal.ITIMER_REAL    , _UpperCamelCase      )
			signal.signal(signal.SIGALRM    , _UpperCamelCase      )
			try:
						yield
			finally:
						signal.setitimer(signal.ITIMER_REAL    , 0      )


@contextlib.contextmanager
def _lowerCamelCase	(		):

			'''simple docstring'''




			__lowerCAmelCase				    =			WriteOnlyStringIO()
			with contextlib.redirect_stdout(_UpperCamelCase      ):
						with contextlib.redirect_stderr(_UpperCamelCase      ):
									with redirect_stdin(_UpperCamelCase      ):
												yield


@contextlib.contextmanager
def _lowerCamelCase	(		):

			'''simple docstring'''




			with tempfile.TemporaryDirectory() as dirname:
						with chdir(_UpperCamelCase      ):
									yield dirname
class   _UpperCamelCase  (   lowerCAmelCase__		):
							'''simple docstring'''







							pass
class   _UpperCamelCase  (   io.StringIO		):
							'''simple docstring'''







							def 			snake_case				(     self    ,   *__a    ,   **__a	):
										raise OSError

							def 			snake_case				(     self    ,   *__a    ,   **__a	):
										raise OSError

							def 			snake_case				(     self    ,   *__a    ,   **__a	):
										raise OSError



							def 			snake_case				(     self    ,   *__a    ,   **__a	):
										return False
class   _UpperCamelCase  (   contextlib._RedirectStream		):  # type: ignore
							'''simple docstring'''







							__UpperCAmelCase						:    Dict				      ="""stdin"""


@contextlib.contextmanager
def _lowerCamelCase	(		_UpperCamelCase      ):

			'''simple docstring'''




			if root == ".":
						yield
						return
			__lowerCAmelCase				    =			os.getcwd()
			os.chdir(_UpperCamelCase      )
			try:
						yield
			except BaseException as exc:
						raise exc
			finally:
						os.chdir(_UpperCamelCase      )


def _lowerCamelCase	(		_UpperCamelCase=None      ):

			'''simple docstring'''




			if maximum_memory_bytes is not None:
						import resource

						resource.setrlimit(resource.RLIMIT_AS    , (maximum_memory_bytes, maximum_memory_bytes)      )
						resource.setrlimit(resource.RLIMIT_DATA    , (maximum_memory_bytes, maximum_memory_bytes)      )
						if not platform.uname().system == "Darwin":
									resource.setrlimit(resource.RLIMIT_STACK    , (maximum_memory_bytes, maximum_memory_bytes)      )

			faulthandler.disable()

			import builtins

			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None

			import os

			__lowerCAmelCase				    =			"1"

			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None

			import shutil

			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None

			import subprocess

			__lowerCAmelCase				    =			None  # type: ignore

			__lowerCAmelCase				    =			None

			import sys

			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None
			__lowerCAmelCase				    =			None






import json
from typing import List, Optional, Tuple

from tokenizers import normalizers

from ...tokenization_utils_fast import PreTrainedTokenizerFast
from .tokenization_lxmert import LxmertTokenizer


__lowerCamelCase							=       {"""vocab_file""": """vocab.txt""", """tokenizer_file""": """tokenizer.json"""}

__lowerCamelCase							=       {
    """vocab_file""": {
        """unc-nlp/lxmert-base-uncased""": """https://huggingface.co/unc-nlp/lxmert-base-uncased/resolve/main/vocab.txt""",
    },
    """tokenizer_file""": {
        """unc-nlp/lxmert-base-uncased""": (
            """https://huggingface.co/unc-nlp/lxmert-base-uncased/resolve/main/tokenizer.json"""
        ),
    },
}

__lowerCamelCase							=       {
    """unc-nlp/lxmert-base-uncased""": 5_12,
}

__lowerCamelCase							=       {
    """unc-nlp/lxmert-base-uncased""": {"""do_lower_case""": True},
}






class   UpperCAmelCase		(						A_ ):
   A__					:		Any						     =     VOCAB_FILES_NAMES
   A__					:		Optional[int]						     =     PRETRAINED_VOCAB_FILES_MAP
   A__					:		Tuple						     =     PRETRAINED_INIT_CONFIGURATION
   A__					:		Tuple						     =     PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
   A__					:		List[Any]						     =     LxmertTokenizer



   def __init__(self		:					Dict    ,						snake_case__		:					Tuple=None    ,						snake_case__		:					Optional[Any]=None    ,						snake_case__		:					Optional[Any]=True    ,						snake_case__		:					Tuple="[UNK]"    ,						snake_case__		:					Optional[Any]="[SEP]"    ,						snake_case__		:					Optional[Any]="[PAD]"    ,						snake_case__		:					List[Any]="[CLS]"    ,						snake_case__		:					Tuple="[MASK]"    ,						snake_case__		:					Dict=True    ,						snake_case__		:					Union[str, Any]=None    ,						**snake_case__		:					Dict    ,						)		->	Optional[int]:


          '''simple docstring'''


          super().__init__(
              snake_case__    ,						tokenizer_file=snake_case__    ,						do_lower_case=snake_case__    ,						unk_token=snake_case__    ,						sep_token=snake_case__    ,						pad_token=snake_case__    ,						cls_token=snake_case__    ,						mask_token=snake_case__    ,						tokenize_chinese_chars=snake_case__    ,						strip_accents=snake_case__    ,						**snake_case__    ,						)

          snake_case       :   int							=      json.loads(self.backend_tokenizer.normalizer.__getstate__() )
          if (
              normalizer_state.get("lowercase"    ,						snake_case__ ) != do_lower_case
              or normalizer_state.get("strip_accents"    ,						snake_case__ ) != strip_accents
              or normalizer_state.get("handle_chinese_chars"    ,						snake_case__ ) != tokenize_chinese_chars
          ):
                 snake_case       :   Union[str, Any]							=      getattr(snake_case__    ,						normalizer_state.pop("type" ) )
                 snake_case       :   str							=      do_lower_case
                 snake_case       :   List[Any]							=      strip_accents
                 snake_case       :   Optional[int]							=      tokenize_chinese_chars
                 snake_case       :   int							=      normalizer_class(**snake_case__ )

          snake_case       :   Optional[Any]							=      do_lower_case



   def 				_SCREAMING_SNAKE_CASE   (self		:					Union[str, Any]    ,						snake_case__		:					Optional[Any]    ,						snake_case__		:					Dict=None )		->	Any:


          '''simple docstring'''


          snake_case       :   Optional[int]							=      [self.cls_token_id] + token_ids_a + [self.sep_token_id]

          if token_ids_a:
                 output += token_ids_a + [self.sep_token_id]

          return output



   def 				_SCREAMING_SNAKE_CASE   (self		:					Optional[int]    ,						snake_case__		:					List[int]    ,						snake_case__		:					Optional[List[int]] = None )		->	List[int]:


          '''simple docstring'''


          snake_case       :   Optional[Any]							=      [self.sep_token_id]
          snake_case       :   Optional[Any]							=      [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 				_SCREAMING_SNAKE_CASE   (self		:					Any    ,						snake_case__		:					str    ,						snake_case__		:					Optional[str] = None )		->	Tuple[str]:


          '''simple docstring'''


          snake_case       :   List[Any]							=      self._tokenizer.model.save(snake_case__    ,						name=snake_case__ )
          return tuple(snake_case__ )





