"""simple docstring"""


from functools import lru_cache


@lru_cache
def   __UpperCAmelCase     (	_snake_case		:       int       ):


   if not isinstance(_snake_case,				_snake_case       ):
      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   __UpperCAmelCase     (	_snake_case		:       list,				_snake_case		:       int       ):
   _lowercase							     =       len(_snake_case       )
   # Find m such that F_m >= n where F_i is the i_th fibonacci number.
   _lowercase							     =       0
   while True:
      if fibonacci(_snake_case       ) >= len_list:
         _lowercase							     =       i
         break
      i += 1
   _lowercase							     =       0
   while fibb_k > 0:
      _lowercase							     =       min(
          offset + fibonacci(fibb_k - 1       ),				len_list - 1       )  # Prevent out of range
      _lowercase							     =       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()






'''simple docstring'''






from typing import TYPE_CHECKING

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


__UpperCamelCase      :   List[str]								=     {'''configuration_gptj''': ['''GPTJ_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''GPTJConfig''', '''GPTJOnnxConfig''']}

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	__UpperCamelCase      :   List[Any]								=     [
	    '''GPTJ_PRETRAINED_MODEL_ARCHIVE_LIST''',
	    '''GPTJForCausalLM''',
	    '''GPTJForQuestionAnswering''',
	    '''GPTJForSequenceClassification''',
	    '''GPTJModel''',
	    '''GPTJPreTrainedModel''',
	]

try:
	if not is_tf_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	__UpperCamelCase      :   Optional[int]								=     [
	    '''TFGPTJForCausalLM''',
	    '''TFGPTJForQuestionAnswering''',
	    '''TFGPTJForSequenceClassification''',
	    '''TFGPTJModel''',
	    '''TFGPTJPreTrainedModel''',
	]

try:
	if not is_flax_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	__UpperCamelCase      :   Union[str, Any]								=     [
	    '''FlaxGPTJForCausalLM''',
	    '''FlaxGPTJModel''',
	    '''FlaxGPTJPreTrainedModel''',
	]


if TYPE_CHECKING:
	from .configuration_gptj import GPTJ_PRETRAINED_CONFIG_ARCHIVE_MAP, GPTJConfig, GPTJOnnxConfig

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_gptj import (
		    GPTJ_PRETRAINED_MODEL_ARCHIVE_LIST,
		    GPTJForCausalLM,
		    GPTJForQuestionAnswering,
		    GPTJForSequenceClassification,
		    GPTJModel,
		    GPTJPreTrainedModel,
		)

	try:
		if not is_tf_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_tf_gptj import (
		    TFGPTJForCausalLM,
		    TFGPTJForQuestionAnswering,
		    TFGPTJForSequenceClassification,
		    TFGPTJModel,
		    TFGPTJPreTrainedModel,
		)

	try:
		if not is_flax_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_flax_gptj import FlaxGPTJForCausalLM, FlaxGPTJModel, FlaxGPTJPreTrainedModel

else:
	import sys

	__UpperCamelCase      :   List[str]								=     _LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)
