U
    &c                     @   s:   d dl Z d dlZddlmZ eeZG dd deZdS )    N   )PretrainedConfigc                       sB   e Zd ZdZdZ fddZeeeedddZdd	 Z	  Z
S )
EncoderDecoderConfiga  
        :class:`~transformers.EncoderDecoderConfig` is the configuration class to store the configuration of a `EncoderDecoderModel`.

        It is used to instantiate an Encoder Decoder model according to the specified arguments, defining the encoder and decoder configs.
        Configuration objects inherit from  :class:`~transformers.PretrainedConfig`
        and can be used to control the model outputs.
        See the documentation for :class:`~transformers.PretrainedConfig` for more information.

        Args:
            kwargs (`optional`):
                Remaining dictionary of keyword arguments. Notably:
                    encoder (:class:`PretrainedConfig`, optional, defaults to `None`):
                        An instance of a configuration object that defines the encoder config.
                    encoder (:class:`PretrainedConfig`, optional, defaults to `None`):
                        An instance of a configuration object that defines the decoder config.

        Example::

            from transformers import BertConfig, EncoderDecoderConfig, EncoderDecoderModel

            # Initializing a BERT bert-base-uncased style configuration
            config_encoder = BertConfig()
            config_decoder = BertConfig()

            config = EncoderDecoderConfig.from_encoder_decoder_configs(config_encoder, config_decoder)

            # Initializing a Bert2Bert model from the bert-base-uncased style configurations
            model = EncoderDecoderModel(config=config)

            # Accessing the model configuration
            config_encoder = model.config.encoder
            config_decoder  = model.config.decoder
    Zencoder_decoderc                    s   t  jf | d|krd|ks&td|d}|d}|d}|d}ddlm} |j|f|| _|j|f|| _d| _	d S )Nencoderdecoderz<Config has to be initialized with encoder and decoder config
model_typer   )
AutoConfigT)
super__init__AssertionErrorpopZtransformersr   Z	for_modelr   r   Zis_encoder_decoder)selfkwargsencoder_configZencoder_model_typedecoder_configZdecoder_model_typer   	__class__ N/tmp/pip-unpacked-wheel-ymerj3tt/transformers/configuration_encoder_decoder.pyr
   >   s    



zEncoderDecoderConfig.__init__)r   r   returnc                 C   s   | |  |  dS )a  
        Instantiate a :class:`~transformers.EncoderDecoderConfig` (or a derived class) from a pre-trained encoder model configuration and decoder model configuration.

        Returns:
            :class:`EncoderDecoderConfig`: An instance of a configuration object
        )r   r   )to_dict)clsr   r   r   r   r   from_encoder_decoder_configsN   s    
z1EncoderDecoderConfig.from_encoder_decoder_configsc                 C   s8   t | j}| j |d< | j |d< | jj|d< |S )z
        Serializes this instance to a Python dictionary. Override the default `to_dict()` from `PretrainedConfig`.

        Returns:
            :obj:`Dict[str, any]`: Dictionary of all the attributes that make up this configuration instance,
        r   r   r   )copydeepcopy__dict__r   r   r   r   r   )r   outputr   r   r   r   Z   s
    zEncoderDecoderConfig.to_dict)__name__
__module____qualname____doc__r   r
   classmethodr   r   r   __classcell__r   r   r   r   r      s   ! r   )r   loggingZconfiguration_utilsr   	getLoggerr   loggerr   r   r   r   r   <module>   s   
