

from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


_lowerCamelCase       :     str           =							{
    "configuration_openai": ["OPENAI_GPT_PRETRAINED_CONFIG_ARCHIVE_MAP", "OpenAIGPTConfig"],
    "tokenization_openai": ["OpenAIGPTTokenizer"],
}

try:
     if not is_tokenizers_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     _lowerCamelCase       :     Union[str, Any]           =							["OpenAIGPTTokenizerFast"]

try:
     if not is_torch_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     _lowerCamelCase       :     str           =							[
         "OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST",
         "OpenAIGPTDoubleHeadsModel",
         "OpenAIGPTForSequenceClassification",
         "OpenAIGPTLMHeadModel",
         "OpenAIGPTModel",
         "OpenAIGPTPreTrainedModel",
         "load_tf_weights_in_openai_gpt",
     ]

try:
     if not is_tf_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     _lowerCamelCase       :     Optional[int]           =							[
         "TF_OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST",
         "TFOpenAIGPTDoubleHeadsModel",
         "TFOpenAIGPTForSequenceClassification",
         "TFOpenAIGPTLMHeadModel",
         "TFOpenAIGPTMainLayer",
         "TFOpenAIGPTModel",
         "TFOpenAIGPTPreTrainedModel",
     ]


if TYPE_CHECKING:
     from .configuration_openai import OPENAI_GPT_PRETRAINED_CONFIG_ARCHIVE_MAP, OpenAIGPTConfig
     from .tokenization_openai import OpenAIGPTTokenizer

     try:
          if not is_tokenizers_available():
               raise OptionalDependencyNotAvailable()
     except OptionalDependencyNotAvailable:
          pass
     else:
          from .tokenization_openai_fast import OpenAIGPTTokenizerFast

     try:
          if not is_torch_available():
               raise OptionalDependencyNotAvailable()
     except OptionalDependencyNotAvailable:
          pass
     else:
          from .modeling_openai import (
              OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST,
              OpenAIGPTDoubleHeadsModel,
              OpenAIGPTForSequenceClassification,
              OpenAIGPTLMHeadModel,
              OpenAIGPTModel,
              OpenAIGPTPreTrainedModel,
              load_tf_weights_in_openai_gpt,
          )

     try:
          if not is_tf_available():
               raise OptionalDependencyNotAvailable()
     except OptionalDependencyNotAvailable:
          pass
     else:
          from .modeling_tf_openai import (
              TF_OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST,
              TFOpenAIGPTDoubleHeadsModel,
              TFOpenAIGPTForSequenceClassification,
              TFOpenAIGPTLMHeadModel,
              TFOpenAIGPTMainLayer,
              TFOpenAIGPTModel,
              TFOpenAIGPTPreTrainedModel,
          )

else:
     import sys

     _lowerCamelCase       :     Optional[Any]           =							_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)








from functools import lru_cache

@lru_cache
def     a__  (	UpperCAmelCase							:    int    )						->		int:
  if not isinstance(UpperCAmelCase       ,				UpperCAmelCase    ):
    raise TypeError('''k must be an integer.'''    )
  if k < 0:
    raise ValueError('''k integer must be greater or equal to zero.'''    )
  if k == 0:
    return 0
  elif k == 1:
    return 1
  else:
    return fibonacci(k - 1    ) + fibonacci(k - 2    )

def     a__  (	UpperCAmelCase							:    list       ,				UpperCAmelCase							:    int    )						->		int:
  UpperCAmelCase :							List[str]								=				len(UpperCAmelCase    )
  # Find m such that F_m >= n where F_i is the i_th fibonacci number.
  UpperCAmelCase :							Any								=				0
  while True:
    if fibonacci(UpperCAmelCase    ) >= len_list:
      UpperCAmelCase :							Optional[Any]								=				i
      break
    i += 1
  UpperCAmelCase :							List[Any]								=				0
  while fibb_k > 0:
    UpperCAmelCase :							List[str]								=				min(
        offset + fibonacci(fibb_k - 1    )       ,				len_list - 1    )  # Prevent out of range
    UpperCAmelCase :							Optional[Any]								=				arr[index_k]
    if item_k_1 == val:
      return index_k
    elif val < item_k_1:
      fibb_k -= 1
    elif val > item_k_1:
      offset += fibonacci(fibb_k - 1    )
      fibb_k -= 2
  else:
    return -1


if __name__ == "__main__":
     import doctest

     doctest.testmod()





