o
    Zh                     @   s.   d dl mZ d dlmZ G dd dejZdS )    )partialNc                       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| jtt jfi |g|R  S t j|i |S )N)gradient_checkpointingZtrainingZ_gradient_checkpointing_funcr   super__call__)selfargskwargs	__class__ K/var/www/auris/lib/python3.10/site-packages/transformers/modeling_layers.pyr   -   s   "z#GradientCheckpointingLayer.__call__)__name__
__module____qualname____doc__r   r   __classcell__r   r   r
   r   r      s    r   )	functoolsr   Ztorch.nnnnModuler   r   r   r   r   <module>   s   