





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,
)


lowercase_		:				Optional[Any]				=						{
    '''configuration_xlm_roberta''': [
        '''XLM_ROBERTA_PRETRAINED_CONFIG_ARCHIVE_MAP''',
        '''XLMRobertaConfig''',
        '''XLMRobertaOnnxConfig''',
    ],
}

try:
		if not is_sentencepiece_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowercase_		:				Any				=						['''XLMRobertaTokenizer''']

try:
		if not is_tokenizers_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowercase_		:				Optional[int]				=						['''XLMRobertaTokenizerFast''']

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowercase_		:				int				=						[
		    '''XLM_ROBERTA_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''XLMRobertaForCausalLM''',
		    '''XLMRobertaForMaskedLM''',
		    '''XLMRobertaForMultipleChoice''',
		    '''XLMRobertaForQuestionAnswering''',
		    '''XLMRobertaForSequenceClassification''',
		    '''XLMRobertaForTokenClassification''',
		    '''XLMRobertaModel''',
		    '''XLMRobertaPreTrainedModel''',
		]

try:
		if not is_tf_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowercase_		:				Optional[int]				=						[
		    '''TF_XLM_ROBERTA_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''TFXLMRobertaForCausalLM''',
		    '''TFXLMRobertaForMaskedLM''',
		    '''TFXLMRobertaForMultipleChoice''',
		    '''TFXLMRobertaForQuestionAnswering''',
		    '''TFXLMRobertaForSequenceClassification''',
		    '''TFXLMRobertaForTokenClassification''',
		    '''TFXLMRobertaModel''',
		    '''TFXLMRobertaPreTrainedModel''',
		]

try:
		if not is_flax_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowercase_		:				str				=						[
		    '''FLAX_XLM_ROBERTA_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''FlaxXLMRobertaForMaskedLM''',
		    '''FlaxXLMRobertaForCausalLM''',
		    '''FlaxXLMRobertaForMultipleChoice''',
		    '''FlaxXLMRobertaForQuestionAnswering''',
		    '''FlaxXLMRobertaForSequenceClassification''',
		    '''FlaxXLMRobertaForTokenClassification''',
		    '''FlaxXLMRobertaModel''',
		    '''FlaxXLMRobertaPreTrainedModel''',
		]

if TYPE_CHECKING:
		from .configuration_xlm_roberta import (
		    XLM_ROBERTA_PRETRAINED_CONFIG_ARCHIVE_MAP,
		    XLMRobertaConfig,
		    XLMRobertaOnnxConfig,
		)

		try:
				if not is_sentencepiece_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .tokenization_xlm_roberta import XLMRobertaTokenizer

		try:
				if not is_tokenizers_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .tokenization_xlm_roberta_fast import XLMRobertaTokenizerFast

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_xlm_roberta import (
				    XLM_ROBERTA_PRETRAINED_MODEL_ARCHIVE_LIST,
				    XLMRobertaForCausalLM,
				    XLMRobertaForMaskedLM,
				    XLMRobertaForMultipleChoice,
				    XLMRobertaForQuestionAnswering,
				    XLMRobertaForSequenceClassification,
				    XLMRobertaForTokenClassification,
				    XLMRobertaModel,
				    XLMRobertaPreTrainedModel,
				)

		try:
				if not is_tf_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_tf_xlm_roberta import (
				    TF_XLM_ROBERTA_PRETRAINED_MODEL_ARCHIVE_LIST,
				    TFXLMRobertaForCausalLM,
				    TFXLMRobertaForMaskedLM,
				    TFXLMRobertaForMultipleChoice,
				    TFXLMRobertaForQuestionAnswering,
				    TFXLMRobertaForSequenceClassification,
				    TFXLMRobertaForTokenClassification,
				    TFXLMRobertaModel,
				    TFXLMRobertaPreTrainedModel,
				)

		try:
				if not is_flax_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_flax_xlm_roberta import (
				    FLAX_XLM_ROBERTA_PRETRAINED_MODEL_ARCHIVE_LIST,
				    FlaxXLMRobertaForCausalLM,
				    FlaxXLMRobertaForMaskedLM,
				    FlaxXLMRobertaForMultipleChoice,
				    FlaxXLMRobertaForQuestionAnswering,
				    FlaxXLMRobertaForSequenceClassification,
				    FlaxXLMRobertaForTokenClassification,
				    FlaxXLMRobertaModel,
				    FlaxXLMRobertaPreTrainedModel,
				)

else:
		import sys

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












import re

from flax.core.frozen_dict import freeze
from flax.traverse_util import flatten_dict, unflatten_dict
from jax.experimental import PartitionSpec as P


# Sentinels
lowercase_		:				Optional[int]				=						object()

# For specifying empty leaf dict `{}`
lowercase_		:				List[Any]				=						object()

def       A__(		__lowerCAmelCase	,			__lowerCAmelCase ):
				_snake_case :			Optional[Any]  						=   tuple((re.compile(x + '$' ) for x in qs) )
				for i in range(len(__lowerCAmelCase ) - len(__lowerCAmelCase ) + 1 ):
								_snake_case :			Tuple  						=   [x.match(__lowerCAmelCase ) for x, y in zip(__lowerCAmelCase	,			ks[i:] )]
								if matches and all(__lowerCAmelCase ):
												return True
				return False

def       A__(		__lowerCAmelCase ):
				def replace(__lowerCAmelCase	,			__lowerCAmelCase ):
								for rule, replacement in rules:
												if _match(__lowerCAmelCase	,			__lowerCAmelCase ):
																return replacement
								return val

				return replace

def       A__(		):
				return [
				    # embeddings
				    (("transformer", "wpe", "embedding"), P('mp'	,			__lowerCAmelCase )),
				    (("transformer", "wte", "embedding"), P('mp'	,			__lowerCAmelCase )),
				    # atention
				    (("attention", "(q_proj|k_proj|v_proj)", "kernel"), P(__lowerCAmelCase	,			'mp' )),
				    (("attention", "out_proj", "kernel"), P('mp'	,			__lowerCAmelCase )),
				    (("attention", "out_proj", "bias"), None),
				    # mlp
				    (("mlp", "c_fc", "kernel"), P(__lowerCAmelCase	,			'mp' )),
				    (("mlp", "c_fc", "bias"), P('mp' )),
				    (("mlp", "c_proj", "kernel"), P('mp'	,			__lowerCAmelCase )),
				    (("mlp", "c_proj", "bias"), None),
				    # layer norms
				    ((r"ln_\d+", "bias"), None),
				    ((r"\d+", r"ln_\d+", "scale"), None),
				    (("ln_f", "bias"), None),
				    (("ln_f", "scale"), None),
				]

def       A__(		__lowerCAmelCase ):
				_snake_case :			Optional[Any]  						=   _get_partition_rules()
				_snake_case :			Optional[Any]  						=   _replacement_rules(__lowerCAmelCase )
				_snake_case :			str  						=   {k: _unmatched for k in flatten_dict(__lowerCAmelCase )}
				_snake_case :			str  						=   {k: replace(__lowerCAmelCase	,			__lowerCAmelCase ) for k, v in initd.items()}
				assert _unmatched not in result.values(), "Incomplete partition spec."
				return freeze(unflatten_dict(__lowerCAmelCase ) )






