from typing import TYPE_CHECKING

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


UpperCamelCase_ :     str          =  {
    '''configuration_big_bird''': ['''BIG_BIRD_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''BigBirdConfig''', '''BigBirdOnnxConfig'''],
}

try:
		if not is_sentencepiece_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		UpperCamelCase_ :     Tuple          =  ['''BigBirdTokenizer''']

try:
		if not is_tokenizers_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		UpperCamelCase_ :     Optional[Any]          =  ['''BigBirdTokenizerFast''']

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		UpperCamelCase_ :     List[str]          =  [
		    '''BIG_BIRD_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''BigBirdForCausalLM''',
		    '''BigBirdForMaskedLM''',
		    '''BigBirdForMultipleChoice''',
		    '''BigBirdForPreTraining''',
		    '''BigBirdForQuestionAnswering''',
		    '''BigBirdForSequenceClassification''',
		    '''BigBirdForTokenClassification''',
		    '''BigBirdLayer''',
		    '''BigBirdModel''',
		    '''BigBirdPreTrainedModel''',
		    '''load_tf_weights_in_big_bird''',
		]

try:
		if not is_flax_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		UpperCamelCase_ :     Dict          =  [
		    '''FlaxBigBirdForCausalLM''',
		    '''FlaxBigBirdForMaskedLM''',
		    '''FlaxBigBirdForMultipleChoice''',
		    '''FlaxBigBirdForPreTraining''',
		    '''FlaxBigBirdForQuestionAnswering''',
		    '''FlaxBigBirdForSequenceClassification''',
		    '''FlaxBigBirdForTokenClassification''',
		    '''FlaxBigBirdModel''',
		    '''FlaxBigBirdPreTrainedModel''',
		]

if TYPE_CHECKING:
		from .configuration_big_bird import BIG_BIRD_PRETRAINED_CONFIG_ARCHIVE_MAP, BigBirdConfig, BigBirdOnnxConfig

		try:
				if not is_sentencepiece_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .tokenization_big_bird import BigBirdTokenizer

		try:
				if not is_tokenizers_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .tokenization_big_bird_fast import BigBirdTokenizerFast

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_big_bird import (
				    BIG_BIRD_PRETRAINED_MODEL_ARCHIVE_LIST,
				    BigBirdForCausalLM,
				    BigBirdForMaskedLM,
				    BigBirdForMultipleChoice,
				    BigBirdForPreTraining,
				    BigBirdForQuestionAnswering,
				    BigBirdForSequenceClassification,
				    BigBirdForTokenClassification,
				    BigBirdLayer,
				    BigBirdModel,
				    BigBirdPreTrainedModel,
				    load_tf_weights_in_big_bird,
				)

		try:
				if not is_flax_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_flax_big_bird import (
				    FlaxBigBirdForCausalLM,
				    FlaxBigBirdForMaskedLM,
				    FlaxBigBirdForMultipleChoice,
				    FlaxBigBirdForPreTraining,
				    FlaxBigBirdForQuestionAnswering,
				    FlaxBigBirdForSequenceClassification,
				    FlaxBigBirdForTokenClassification,
				    FlaxBigBirdModel,
				    FlaxBigBirdPreTrainedModel,
				)

else:
		import sys

		UpperCamelCase_ :     Union[str, Any]          =  _LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)

from __future__ import annotations

import sys




def 				_snake_case     (       lowerCAmelCase							:       int     ):
		"""simple docstring"""







		if n < 0:
				raise ValueError("Negative arguments are not supported"     )
		return _fib(lowerCAmelCase     )[0]




def 				_snake_case     (       lowerCAmelCase							:       int     ):
		"""simple docstring"""







		if n == 0:  # (F(0), F(1))
				return (0, 1)

		# F(2n) = F(n)[2F(n+1) − F(n)]
		# F(2n+1) = F(n+1)^2+F(n)^2
		SCREAMING_SNAKE_CASE_				,   SCREAMING_SNAKE_CASE_  :		Dict    				=   _fib(n // 2     )
		SCREAMING_SNAKE_CASE_  :		Optional[Any]    				=   a * (b * 2 - a)
		SCREAMING_SNAKE_CASE_  :		List[str]    				=   a * a + b * b
		return (d, c + d) if n % 2 else (c, d)


if __name__ == "__main__":
		__lowerCamelCase :     str          =  int(sys.argv[1])
		print(f'''fibonacci({n}) is {fibonacci(n)}''')
