"""simple docstring"""


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


a							={
    'configuration_marian': ['MARIAN_PRETRAINED_CONFIG_ARCHIVE_MAP', 'MarianConfig', 'MarianOnnxConfig'],
}

try:
	if not is_sentencepiece_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	a							=['MarianTokenizer']

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	a							=[
	    'MARIAN_PRETRAINED_MODEL_ARCHIVE_LIST',
	    'MarianForCausalLM',
	    'MarianModel',
	    'MarianMTModel',
	    'MarianPreTrainedModel',
	]

try:
	if not is_tf_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	a							=['TFMarianModel', 'TFMarianMTModel', 'TFMarianPreTrainedModel']

try:
	if not is_flax_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	a							=['FlaxMarianModel', 'FlaxMarianMTModel', 'FlaxMarianPreTrainedModel']

if TYPE_CHECKING:
	from .configuration_marian import MARIAN_PRETRAINED_CONFIG_ARCHIVE_MAP, MarianConfig, MarianOnnxConfig

	try:
		if not is_sentencepiece_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .tokenization_marian import MarianTokenizer

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_marian import (
		    MARIAN_PRETRAINED_MODEL_ARCHIVE_LIST,
		    MarianForCausalLM,
		    MarianModel,
		    MarianMTModel,
		    MarianPreTrainedModel,
		)

	try:
		if not is_tf_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_tf_marian import TFMarianModel, TFMarianMTModel, TFMarianPreTrainedModel

	try:
		if not is_flax_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_flax_marian import FlaxMarianModel, FlaxMarianMTModel, FlaxMarianPreTrainedModel

else:
	import sys

	a							=_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)



"""simple docstring"""


import copy

from transformers.configuration_utils import PretrainedConfig
from transformers.utils import logging


a							=logging.get_logger(__name__)






class    __UpperCAmelCase						(	__lowerCAmelCase	):
				A__      :   Any  							=       '''hybrid-clip'''
				A__      :   Optional[Any]  							=       True

				def __init__(      self	, _lowerCamelCase=512	, **_lowerCamelCase      ):
										super().__init__(**_lowerCamelCase      )

										if "text_config" not in kwargs:
																raise ValueError("`text_config` can not be `None`."      )

										if "vision_config" not in kwargs:
																raise ValueError("`vision_config` can not be `None`."      )

										lowerCamelCase__					=kwargs.pop("text_config"      )
										lowerCamelCase__					=kwargs.pop("vision_config"      )

										lowerCamelCase__					=text_config.pop("model_type"      )
										lowerCamelCase__					=vision_config.pop("model_type"      )

										from transformers import AutoConfig

										lowerCamelCase__					=AutoConfig.for_model(_lowerCamelCase	, **_lowerCamelCase      )

										if vision_model_type == "clip":
																lowerCamelCase__					=AutoConfig.for_model(_lowerCamelCase	, **_lowerCamelCase      ).vision_config
										elif vision_model_type == "clip_vision_model":
																from transformers import CLIPVisionConfig

																lowerCamelCase__					=CLIPVisionConfig(**_lowerCamelCase      )
										else:
																lowerCamelCase__					=AutoConfig.for_model(_lowerCamelCase	, **_lowerCamelCase      )

										lowerCamelCase__					=projection_dim
										lowerCamelCase__					=1.0

				@classmethod
				def 		_a	(      cls	, _lowerCamelCase	, _lowerCamelCase	, **_lowerCamelCase      ):
										return cls(text_config=text_config.to_dict()	, vision_config=vision_config.to_dict()	, **_lowerCamelCase      )






				def 		_a	(      self      ):
										lowerCamelCase__					=copy.deepcopy(self.__dict__      )
										lowerCamelCase__					=self.text_config.to_dict()
										lowerCamelCase__					=self.vision_config.to_dict()
										lowerCamelCase__					=self.__class__.model_type
										return output


