

"""simple docstring"""






from typing import TYPE_CHECKING

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


lowerCamelCase__				:  int													=  {
    '''configuration_flaubert''': ['''FLAUBERT_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''FlaubertConfig''', '''FlaubertOnnxConfig'''],
    '''tokenization_flaubert''': ['''FlaubertTokenizer'''],
}

try:
						if not is_torch_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						lowerCamelCase__				:  List[Any]													=  [
						    '''FLAUBERT_PRETRAINED_MODEL_ARCHIVE_LIST''',
						    '''FlaubertForMultipleChoice''',
						    '''FlaubertForQuestionAnswering''',
						    '''FlaubertForQuestionAnsweringSimple''',
						    '''FlaubertForSequenceClassification''',
						    '''FlaubertForTokenClassification''',
						    '''FlaubertModel''',
						    '''FlaubertWithLMHeadModel''',
						    '''FlaubertPreTrainedModel''',
						]

try:
						if not is_tf_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						lowerCamelCase__				:  List[str]													=  [
						    '''TF_FLAUBERT_PRETRAINED_MODEL_ARCHIVE_LIST''',
						    '''TFFlaubertForMultipleChoice''',
						    '''TFFlaubertForQuestionAnsweringSimple''',
						    '''TFFlaubertForSequenceClassification''',
						    '''TFFlaubertForTokenClassification''',
						    '''TFFlaubertModel''',
						    '''TFFlaubertPreTrainedModel''',
						    '''TFFlaubertWithLMHeadModel''',
						]


if TYPE_CHECKING:
						from .configuration_flaubert import FLAUBERT_PRETRAINED_CONFIG_ARCHIVE_MAP, FlaubertConfig, FlaubertOnnxConfig
						from .tokenization_flaubert import FlaubertTokenizer

						try:
												if not is_torch_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_flaubert import (
												    FLAUBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
												    FlaubertForMultipleChoice,
												    FlaubertForQuestionAnswering,
												    FlaubertForQuestionAnsweringSimple,
												    FlaubertForSequenceClassification,
												    FlaubertForTokenClassification,
												    FlaubertModel,
												    FlaubertPreTrainedModel,
												    FlaubertWithLMHeadModel,
												)

						try:
												if not is_tf_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_tf_flaubert import (
												    TF_FLAUBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
												    TFFlaubertForMultipleChoice,
												    TFFlaubertForQuestionAnsweringSimple,
												    TFFlaubertForSequenceClassification,
												    TFFlaubertForTokenClassification,
												    TFFlaubertModel,
												    TFFlaubertPreTrainedModel,
												    TFFlaubertWithLMHeadModel,
												)

else:
						import sys

						lowerCamelCase__				:  Tuple													=  _LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)








"""simple docstring"""






from __future__ import annotations
def       UpperCamelCase					(			_lowerCAmelCase     :						list,  _lowerCAmelCase     :						list )				->			list:
	_UpperCAmelCase    :							List[Any]									=					[None] * (len(_lowerCAmelCase ) + len(_lowerCAmelCase ))

	_UpperCAmelCase    :							Union[str, Any]									=					0  # pointer to current index for left Half
	_UpperCAmelCase    :							str									=					0  # pointer to current index for the right Half
	_UpperCAmelCase    :							Optional[int]									=					0  # pointer to current index for the sorted array Half

	while pointera < len(_lowerCAmelCase ) and pointera < len(_lowerCAmelCase ):
		if left_half[pointera] < right_half[pointera]:
			_UpperCAmelCase    :							Tuple									=					left_half[pointera]
			pointera += 1
			index += 1
		else:
			_UpperCAmelCase    :							int									=					right_half[pointera]
			pointera += 1
			index += 1
	while pointera < len(_lowerCAmelCase ):
		_UpperCAmelCase    :							Tuple									=					left_half[pointera]
		pointera += 1
		index += 1

	while pointera < len(_lowerCAmelCase ):
		_UpperCAmelCase    :							Union[str, Any]									=					right_half[pointera]
		pointera += 1
		index += 1

	return sorted_array
def       UpperCamelCase					(			_lowerCAmelCase     :						list )				->			list:
	if len(_lowerCAmelCase ) <= 1:
		return array
	# the actual formula to calculate the middle element = left + (right - left) // 2
	# this avoids integer overflow in case of large N
	_UpperCAmelCase    :							Any									=					0 + (len(_lowerCAmelCase ) - 0) // 2

	# Split the array into halves till the array length becomes equal to One
	# merge the arrays of single length returned by mergeSort function and
	# pass them into the merge arrays function which merges the array
	_UpperCAmelCase    :							Optional[Any]									=					array[:middle]
	_UpperCAmelCase    :							Optional[int]									=					array[middle:]

	return merge(merge_sort(_lowerCAmelCase ),  merge_sort(_lowerCAmelCase ) )


if __name__ == "__main__":
						import doctest

						doctest.testmod()





