



'''simple docstring'''

import torch
from transformers import PreTrainedModel, XLMRobertaConfig, XLMRobertaModel



class 		lowerCamelCase__      (						_UpperCAmelCase     ):




					'''simple docstring'''



					A_						    =						"""M-CLIP"""




					def __init__(  self				:	Optional[Any]     ,  UpperCamelCase_				:	Union[str, Any]=1024     ,  UpperCamelCase_				:	Optional[int]=768     ,  **UpperCamelCase_				:	List[str]					)  ->       List[Any]:



						'''simple docstring'''





						_lowercase					:       Tuple       =		transformerDimSize
						_lowercase					:       int       =		imageDimSize
						super().__init__(**lowerCamelCase_					)






class 		lowerCamelCase__      (						_UpperCAmelCase     ):




					'''simple docstring'''



					A_						    =						MCLIPConfig




					def __init__(  self				:	Optional[int]     ,  UpperCamelCase_				:	List[Any]     ,  *UpperCamelCase_				:	str     ,  **UpperCamelCase_				:	str					)  ->       Union[str, Any]:



						'''simple docstring'''





						super().__init__(lowerCamelCase_     ,  *lowerCamelCase_     ,  **lowerCamelCase_					)
						_lowercase					:       Optional[int]       =		XLMRobertaModel(lowerCamelCase_					)
						_lowercase					:       Optional[int]       =		torch.nn.Linear(
						    in_features=config.transformerDimensions     ,  out_features=config.numDims					)




					def 						__UpperCAmelCase     (  self				:	int     ,  UpperCamelCase_				:	Any     ,  UpperCamelCase_				:	Dict					)  ->       Optional[Any]:



						'''simple docstring'''





						_lowercase					:       Union[str, Any]       =		self.transformer(input_ids=lowerCamelCase_     ,  attention_mask=lowerCamelCase_					)[0]
						_lowercase					:       List[str]       =		(embs * attention_mask.unsqueeze(2					)).sum(dim=1					) / attention_mask.sum(dim=1					)[:, None]
						return self.LinearTransformation(lowerCamelCase_					), embs





'''simple docstring'''

from typing import TYPE_CHECKING

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


_A				:    Optional[Any]     						={'''configuration_xlnet''': ['''XLNET_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''XLNetConfig''']}

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

try:
		if not is_tokenizers_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		_A				:    str     						=['''XLNetTokenizerFast''']

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		_A				:    Any     						=[
		    '''XLNET_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''XLNetForMultipleChoice''',
		    '''XLNetForQuestionAnswering''',
		    '''XLNetForQuestionAnsweringSimple''',
		    '''XLNetForSequenceClassification''',
		    '''XLNetForTokenClassification''',
		    '''XLNetLMHeadModel''',
		    '''XLNetModel''',
		    '''XLNetPreTrainedModel''',
		    '''load_tf_weights_in_xlnet''',
		]

try:
		if not is_tf_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		_A				:    str     						=[
		    '''TF_XLNET_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''TFXLNetForMultipleChoice''',
		    '''TFXLNetForQuestionAnsweringSimple''',
		    '''TFXLNetForSequenceClassification''',
		    '''TFXLNetForTokenClassification''',
		    '''TFXLNetLMHeadModel''',
		    '''TFXLNetMainLayer''',
		    '''TFXLNetModel''',
		    '''TFXLNetPreTrainedModel''',
		]


if TYPE_CHECKING:
		from .configuration_xlnet import XLNET_PRETRAINED_CONFIG_ARCHIVE_MAP, XLNetConfig

		try:
				if not is_sentencepiece_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .tokenization_xlnet import XLNetTokenizer

		try:
				if not is_tokenizers_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .tokenization_xlnet_fast import XLNetTokenizerFast

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_xlnet import (
				    XLNET_PRETRAINED_MODEL_ARCHIVE_LIST,
				    XLNetForMultipleChoice,
				    XLNetForQuestionAnswering,
				    XLNetForQuestionAnsweringSimple,
				    XLNetForSequenceClassification,
				    XLNetForTokenClassification,
				    XLNetLMHeadModel,
				    XLNetModel,
				    XLNetPreTrainedModel,
				    load_tf_weights_in_xlnet,
				)

		try:
				if not is_tf_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_tf_xlnet import (
				    TF_XLNET_PRETRAINED_MODEL_ARCHIVE_LIST,
				    TFXLNetForMultipleChoice,
				    TFXLNetForQuestionAnsweringSimple,
				    TFXLNetForSequenceClassification,
				    TFXLNetForTokenClassification,
				    TFXLNetLMHeadModel,
				    TFXLNetMainLayer,
				    TFXLNetModel,
				    TFXLNetPreTrainedModel,
				)

else:
		import sys

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