


"""simple docstring"""







from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tf_available, is_torch_available


a__				:							List[Any]						=     {
    '''configuration_transfo_xl''': ['''TRANSFO_XL_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''TransfoXLConfig'''],
    '''tokenization_transfo_xl''': ['''TransfoXLCorpus''', '''TransfoXLTokenizer'''],
}

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		a__				:							Tuple						=     [
		    '''TRANSFO_XL_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''AdaptiveEmbedding''',
		    '''TransfoXLForSequenceClassification''',
		    '''TransfoXLLMHeadModel''',
		    '''TransfoXLModel''',
		    '''TransfoXLPreTrainedModel''',
		    '''load_tf_weights_in_transfo_xl''',
		]

try:
		if not is_tf_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		a__				:							Any						=     [
		    '''TF_TRANSFO_XL_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''TFAdaptiveEmbedding''',
		    '''TFTransfoXLForSequenceClassification''',
		    '''TFTransfoXLLMHeadModel''',
		    '''TFTransfoXLMainLayer''',
		    '''TFTransfoXLModel''',
		    '''TFTransfoXLPreTrainedModel''',
		]


if TYPE_CHECKING:
		from .configuration_transfo_xl import TRANSFO_XL_PRETRAINED_CONFIG_ARCHIVE_MAP, TransfoXLConfig
		from .tokenization_transfo_xl import TransfoXLCorpus, TransfoXLTokenizer

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_transfo_xl import (
				    TRANSFO_XL_PRETRAINED_MODEL_ARCHIVE_LIST,
				    AdaptiveEmbedding,
				    TransfoXLForSequenceClassification,
				    TransfoXLLMHeadModel,
				    TransfoXLModel,
				    TransfoXLPreTrainedModel,
				    load_tf_weights_in_transfo_xl,
				)

		try:
				if not is_tf_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_tf_transfo_xl import (
				    TF_TRANSFO_XL_PRETRAINED_MODEL_ARCHIVE_LIST,
				    TFAdaptiveEmbedding,
				    TFTransfoXLForSequenceClassification,
				    TFTransfoXLLMHeadModel,
				    TFTransfoXLMainLayer,
				    TFTransfoXLModel,
				    TFTransfoXLPreTrainedModel,
				)

else:
		import sys

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



def 						_snake_case(    SCREAMING_SNAKE_CASE__			:	Optional[Any]    ,			SCREAMING_SNAKE_CASE__			:	Union[str, Any]      )							->      Tuple:





    '''simple docstring'''






    A__          =   0
    A__          =   len(SCREAMING_SNAKE_CASE__      ) - 1

    while left <= right:
        # avoid divided by 0 during interpolation
        if sorted_collection[left] == sorted_collection[right]:
            if sorted_collection[left] == item:
                return left
            else:
                return None

        A__          =   left + ((item - sorted_collection[left]) * (right - left)) // (
            sorted_collection[right] - sorted_collection[left]
        )

        # out of range check
        if point < 0 or point >= len(SCREAMING_SNAKE_CASE__      ):
            return None

        A__          =   sorted_collection[point]
        if current_item == item:
            return point
        else:
            if point < left:
                A__          =   left
                A__          =   point
            elif point > right:
                A__          =   right
                A__          =   point
            else:
                if item < current_item:
                    A__          =   point - 1
                else:
                    A__          =   point + 1
    return None
def 						_snake_case(    SCREAMING_SNAKE_CASE__			:	Optional[Any]    ,			SCREAMING_SNAKE_CASE__			:	List[str]    ,			SCREAMING_SNAKE_CASE__			:	Optional[Any]    ,			SCREAMING_SNAKE_CASE__			:	List[str]      )							->      str:





    '''simple docstring'''






    if sorted_collection[left] == sorted_collection[right]:
        if sorted_collection[left] == item:
            return left
        else:
            return None

    A__          =   left + ((item - sorted_collection[left]) * (right - left)) // (
        sorted_collection[right] - sorted_collection[left]
    )

    # out of range check
    if point < 0 or point >= len(SCREAMING_SNAKE_CASE__      ):
        return None

    if sorted_collection[point] == item:
        return point
    elif point < left:
        return interpolation_search_by_recursion(SCREAMING_SNAKE_CASE__    ,			SCREAMING_SNAKE_CASE__    ,			SCREAMING_SNAKE_CASE__    ,			SCREAMING_SNAKE_CASE__      )
    elif point > right:
        return interpolation_search_by_recursion(SCREAMING_SNAKE_CASE__    ,			SCREAMING_SNAKE_CASE__    ,			SCREAMING_SNAKE_CASE__    ,			SCREAMING_SNAKE_CASE__      )
    else:
        if sorted_collection[point] > item:
            return interpolation_search_by_recursion(
                SCREAMING_SNAKE_CASE__    ,			SCREAMING_SNAKE_CASE__    ,			SCREAMING_SNAKE_CASE__    ,			point - 1      )
        else:
            return interpolation_search_by_recursion(
                SCREAMING_SNAKE_CASE__    ,			SCREAMING_SNAKE_CASE__    ,			point + 1    ,			SCREAMING_SNAKE_CASE__      )
def 						_snake_case(    SCREAMING_SNAKE_CASE__			:	Tuple      )							->      Tuple:





    '''simple docstring'''






    if collection != sorted(SCREAMING_SNAKE_CASE__      ):
        raise ValueError('Collection must be ascending sorted'      )
    return True


if __name__ == "__main__":
     import sys
     lowercase_       		=  0
     if debug == 1:
          lowercase_       		=  [10, 30, 40, 45, 50, 66, 77, 93]
          try:
               __assert_sorted(collection)
          except ValueError:
               sys.exit("Sequence must be ascending sorted to apply interpolation search")
          lowercase_       		=  67

     lowercase_       		=  interpolation_search(collection, target)
     if result is not None:
          print(f"""{target} found at positions: {result}""")
     else:
          print("Not found")

