




'''simple docstring'''



import copy

from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ..auto.configuration_auto import AutoConfig
from ..clip.configuration_clip import CLIPVisionConfig


UpperCAmelCase_       :  Union[str, Any]      =		logging.get_logger(__name__)





class     lowerCAmelCase   ( __lowerCAmelCase):
       __lowercase  :      Optional[Any]        =			'''vision-text-dual-encoder'''
       __lowercase  :      Optional[Any]        =			True


       def __init__(   self    ,  __SCREAMING_SNAKE_CASE=512    ,  __SCREAMING_SNAKE_CASE=2.6_592    ,  **__SCREAMING_SNAKE_CASE  )      ->  str:



            '''simple docstring'''




            super().__init__(**__SCREAMING_SNAKE_CASE  )

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

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

            __snake_case    					=  kwargs.pop('''vision_config'''  )
            __snake_case    					=  kwargs.pop('''text_config'''  )

            __snake_case    					=  vision_config.pop('''model_type'''  )
            __snake_case    					=  text_config.pop('''model_type'''  )

            if vision_model_type == "clip":
                 __snake_case    					=  AutoConfig.for_model(__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  ).vision_config
            elif vision_model_type == "clip_vision_model":
                 __snake_case    					=  CLIPVisionConfig(**__SCREAMING_SNAKE_CASE  )
            else:
                 __snake_case    					=  AutoConfig.for_model(__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )

            __snake_case    					=  AutoConfig.for_model(__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )

            __snake_case    					=  projection_dim
            __snake_case    					=  logit_scale_init_value


       @classmethod
       def       lowerCAmelCase      (   cls    ,  __SCREAMING_SNAKE_CASE    ,  __SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )      ->  Tuple:



            '''simple docstring'''




            return cls(vision_config=vision_config.to_dict()    ,  text_config=text_config.to_dict()    ,  **__SCREAMING_SNAKE_CASE  )




       def       lowerCAmelCase      (   self  )      ->  Optional[Any]:



            '''simple docstring'''




            __snake_case    					=  copy.deepcopy(self.__dict__  )
            __snake_case    					=  self.vision_config.to_dict()
            __snake_case    					=  self.text_config.to_dict()
            __snake_case    					=  self.__class__.model_type
            return output












'''simple docstring'''



from ..utils import deprecate
from .attention_processor import (  # noqa: F401
    Attention,
    AttentionProcessor,
    AttnAddedKVProcessor,
    AttnProcessor2_0,
    LoRAAttnProcessor,
    LoRALinearLayer,
    LoRAXFormersAttnProcessor,
    SlicedAttnAddedKVProcessor,
    SlicedAttnProcessor,
    XFormersAttnProcessor,
)
from .attention_processor import AttnProcessor as AttnProcessorRename  # noqa: F401


deprecate(
    '''cross_attention''',
    '''0.20.0''',
    '''Importing from cross_attention is deprecated. Please import from diffusers.models.attention_processor instead.''',
    standard_warn=False,
)


UpperCAmelCase_       :  Optional[int]      =		AttentionProcessor





class     lowerCAmelCase   ( __lowerCAmelCase):


       def __init__(   self    ,  *__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )      ->  Optional[int]:



            '''simple docstring'''




            __snake_case    					=  F'''{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"  )  )} instead.'''
            deprecate('''cross_attention'''    ,  '''0.20.0'''    ,  __SCREAMING_SNAKE_CASE    ,  standard_warn=__SCREAMING_SNAKE_CASE  )
            super().__init__(*__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )





class     lowerCAmelCase   ( __lowerCAmelCase):


       def __init__(   self    ,  *__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )      ->  Any:



            '''simple docstring'''




            __snake_case    					=  F'''{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"  )  )} instead.'''
            deprecate('''cross_attention'''    ,  '''0.20.0'''    ,  __SCREAMING_SNAKE_CASE    ,  standard_warn=__SCREAMING_SNAKE_CASE  )
            super().__init__(*__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )





class     lowerCAmelCase   ( __lowerCAmelCase):


       def __init__(   self    ,  *__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )      ->  Tuple:



            '''simple docstring'''




            __snake_case    					=  F'''{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"  )  )} instead.'''
            deprecate('''cross_attention'''    ,  '''0.20.0'''    ,  __SCREAMING_SNAKE_CASE    ,  standard_warn=__SCREAMING_SNAKE_CASE  )
            super().__init__(*__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )





class     lowerCAmelCase   ( __lowerCAmelCase):


       def __init__(   self    ,  *__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )      ->  Optional[Any]:



            '''simple docstring'''




            __snake_case    					=  F'''{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"  )  )} instead.'''
            deprecate('''cross_attention'''    ,  '''0.20.0'''    ,  __SCREAMING_SNAKE_CASE    ,  standard_warn=__SCREAMING_SNAKE_CASE  )
            super().__init__(*__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )





class     lowerCAmelCase   ( __lowerCAmelCase):


       def __init__(   self    ,  *__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )      ->  Optional[int]:



            '''simple docstring'''




            __snake_case    					=  F'''{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"  )  )} instead.'''
            deprecate('''cross_attention'''    ,  '''0.20.0'''    ,  __SCREAMING_SNAKE_CASE    ,  standard_warn=__SCREAMING_SNAKE_CASE  )
            super().__init__(*__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )





class     lowerCAmelCase   ( __lowerCAmelCase):


       def __init__(   self    ,  *__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )      ->  Tuple:



            '''simple docstring'''




            __snake_case    					=  F'''{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"  )  )} instead.'''
            deprecate('''cross_attention'''    ,  '''0.20.0'''    ,  __SCREAMING_SNAKE_CASE    ,  standard_warn=__SCREAMING_SNAKE_CASE  )
            super().__init__(*__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )





class     lowerCAmelCase   ( __lowerCAmelCase):


       def __init__(   self    ,  *__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )      ->  int:



            '''simple docstring'''




            __snake_case    					=  F'''{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"  )  )} instead.'''
            deprecate('''cross_attention'''    ,  '''0.20.0'''    ,  __SCREAMING_SNAKE_CASE    ,  standard_warn=__SCREAMING_SNAKE_CASE  )
            super().__init__(*__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )





class     lowerCAmelCase   ( __lowerCAmelCase):


       def __init__(   self    ,  *__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )      ->  List[str]:



            '''simple docstring'''




            __snake_case    					=  F'''{self.__class__.__name__} is deprecated and will be removed in `0.20.0`. Please use `from diffusers.models.attention_processor import {"".join(self.__class__.__name__.split("Cross"  )  )} instead.'''
            deprecate('''cross_attention'''    ,  '''0.20.0'''    ,  __SCREAMING_SNAKE_CASE    ,  standard_warn=__SCREAMING_SNAKE_CASE  )
            super().__init__(*__SCREAMING_SNAKE_CASE    ,  **__SCREAMING_SNAKE_CASE  )






