o
    i                     @   sD   d dl mZ d dlmZ d dlmZ eeZG dd dej	Z
dS )    )partialN)loggingc                       s$   e Zd ZdZdZ fddZ  ZS )GradientCheckpointingLayera  Base class for layers with gradient checkpointing.

    This class enables gradient checkpointing functionality for a layer. By default, gradient checkpointing is disabled
    (`gradient_checkpointing = False`). When `model.set_gradient_checkpointing()` is called, gradient checkpointing is
    enabled by setting `gradient_checkpointing = True` and assigning a checkpointing function to `_gradient_checkpointing_func`.

    Important:

        When using gradient checkpointing with `use_reentrant=True`, inputs that require gradients (e.g. hidden states)
        must be passed as positional arguments (`*args`) rather than keyword arguments to properly propagate gradients.

        Example:

            ```python
            >>> # Correct - hidden_states passed as positional arg
            >>> out = self.layer(hidden_states, attention_mask=attention_mask)

            >>> # Incorrect - hidden_states passed as keyword arg
            >>> out = self.layer(hidden_states=hidden_states, attention_mask=attention_mask)
            ```
    Fc                    s  | j r| jrd}| jj}d| d}d|v r$|d r$d|d< |d7 }d}d|v r8|d d ur8d |d< |d7 }d}d	|v rL|d	 d urLd |d	< |d
7 }d}d|v r`|d d ur`d |d< |d7 }d}|rn|dd }t| | jtt	 j
fi |g|R  S t	 j
|i |S )NFz7Caching is incompatible with gradient checkpointing in z	. Setting	use_cachez `use_cache=False`,Tpast_key_valuez `past_key_value=None`,past_key_valuesz `past_key_values=None`,
layer_pastz `layer_past=None`,,.)gradient_checkpointingtraining	__class____name__rstriploggerwarning_gradient_checkpointing_funcr   super__call__)selfargskwargsdo_warn
layer_namemessager    _/home/ubuntu/maya3_transcribe/venv/lib/python3.10/site-packages/transformers/modeling_layers.pyr   2   s2   
"z#GradientCheckpointingLayer.__call__)r   
__module____qualname____doc__r   r   __classcell__r   r   r   r   r      s    r   )	functoolsr   torch.nnnntransformers.utilsr   
get_loggerr   r   Moduler   r   r   r   r   <module>   s
   
