Ë
    îÍ:j.-  ã                   ó,  — d dl mZ d dlmZ d dlZd dlmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZ ddlmZ dd	lmZmZmZmZ  ej.                  e«      Z G d
„ dej4                  «      Ze G d„ d«      «       Ze G d„ d«      «       Ze G d„ d«      «       Zy)é    )Úpartial)ÚOptionalNé   )ÚCache)ÚBaseModelOutputWithPastÚQuestionAnsweringModelOutputÚ SequenceClassifierOutputWithPastÚTokenClassifierOutput)Ú	AutoModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingc                   ó&   ‡ — e Zd ZdZdZˆ fd„Zˆ x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                 óÖ  •— | j                   rÎ| j                  rÂd}| j                  j                  }d|› d�}d|v r|d   rd|d<   |dz  }d}d|v r|d   �d |d<   |dz  }d}d	|v r|d	   �d |d	<   |d
z  }d}d|v r|d   �d |d<   |dz  }d}|r)|j	                  d«      dz   }t
        j                  |«        | j                  t        t        ‰| �(  fi |¤Žg|¢­Ž S t        ‰| �(  |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_onceÚ_gradient_checkpointing_funcr   ÚsuperÚ__call__)ÚselfÚargsÚkwargsÚdo_warnÚ
layer_nameÚmessager   s         €úq/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/transformers/modeling_layers.pyr#   z#GradientCheckpointingLayer.__call__<   sM  ø€ Ø×&Ò&¨4¯=ª=ØˆGØŸ™×0Ñ0ˆJØOÐPZÈ|Ð[dÐeˆGà˜fÑ$¨°Ò)<Ø&+��{Ñ#ØÐ0Ñ0�Ø�ð   6Ñ)¨fÐ5EÑ.FÐ.RØ+/�Ð'Ñ(ØÐ4Ñ4�Ø�à  FÑ*¨vÐ6GÑ/HÐ/TØ,0�Ð(Ñ)ØÐ5Ñ5�Ø�à˜vÑ%¨&°Ñ*>Ð*JØ'+��|Ñ$ØÐ0Ñ0�Ø�ñ Ø!Ÿ.™.¨Ó-°Ñ3�Ü×#Ñ# GÔ,à4�4×4Ñ4´W¼U¹WÑ=MÑ5XÐQWÑ5XÐ`Ð[_Ò`Ð`Ü‰wÑ Ð0¨Ñ0Ð0ó    )r   Ú
__module__Ú__qualname__Ú__doc__r   r#   Ú__classcell__©r   s   @r*   r   r   #   s   ø„ ñð, #Ð÷"1ð "1r+   r   c                   ó  ‡ — e Zd ZdZˆ fd„Zee	 	 	 	 	 	 	 ddeej                     deej                     deej                     dee   deej                     deej                     d	ee   d
ee   defd„«       «       Zˆ xZS )Ú GenericForSequenceClassificationÚmodelc                 ó  •— t         ‰| �  |«       |j                  | _        t        | | j                  t        j                  |«      «       t        j                  |j                  | j                  d¬«      | _
        | j                  «        y )NF)Úbias)r"   Ú__init__Ú
num_labelsÚsetattrÚbase_model_prefixr   Úfrom_configÚnnÚLinearÚhidden_sizeÚscoreÚ	post_init©r$   Úconfigr   s     €r*   r6   z)GenericForSequenceClassification.__init__e   sd   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä��d×,Ñ,¬i×.CÑ.CÀFÓ.KÔLÜ—Y‘Y˜v×1Ñ1°4·?±?ÈÔOˆŒ
ð 	�‰Õr+   Ú	input_idsÚattention_maskÚposition_idsr   Úinputs_embedsÚlabelsr   r&   Úreturnc           	      ó¶  —  t        | | j                  «      |f|||||dœ|¤Ž}	|	j                  }
| j                  |
«      }|�|j                  d   }n|j                  d   }| j
                  j                  €|dk7  rt        d«      ‚| j
                  j                  €d}nÃ|�“|| j
                  j                  k7  j                  |j                  t        j                  «      }t        j                  |j                  d   |j                  t        j                  ¬«      }||z  j                  d«      }n.d}t        j                  | j                   j"                  › d�«       |t        j                  ||j                  ¬«      |f   }d }|�| j%                  |||| j
                  ¬	«      }t'        |||	j(                  |	j*                  |	j,                  ¬
«      S )N©rC   rD   r   rE   r   r   r   z=Cannot handle batch sizes > 1 if no padding token is defined.éÿÿÿÿ)ÚdeviceÚdtypezŠ will not detect padding tokens in `inputs_embeds`. Results may be unexpected if using padding tokens in conjunction with `inputs_embeds.`)rK   )ÚlogitsrF   Úpooled_logitsrA   )ÚlossrM   r   Úhidden_statesÚ
attentions)Úgetattrr9   Úlast_hidden_stater>   ÚshaperA   Úpad_token_idÚ
ValueErrorÚtorK   ÚtorchÚint32ÚarangeÚargmaxr   r    r   r   Úloss_functionr	   r   rP   rQ   )r$   rB   rC   rD   r   rE   rF   r   r&   Útransformer_outputsrP   rM   Ú
batch_sizeÚlast_non_pad_tokenÚnon_pad_maskÚtoken_indicesrN   rO   s                     r*   Úforwardz(GenericForSequenceClassification.forwardo   sÐ  € ð 8]´w¸tÀT×E[ÑE[Ó7\Øð8
à)Ø%Ø+Ø'Øñ8
ð ñ8
Ðð ,×=Ñ=ˆØ—‘˜MÓ*ˆàÐ Ø"Ÿ™¨Ñ+‰Jà&×,Ñ,¨QÑ/ˆJà�;‰;×#Ñ#Ð+°
¸a²ÜÐ\Ó]Ð]Ø�;‰;×#Ñ#Ð+Ø!#ÑØÐ"à%¨¯©×)AÑ)AÑA×EÑEÀfÇmÁmÔUZ×U`ÑU`ÓaˆLÜ!ŸL™L¨¯©¸Ñ)<ÀVÇ]Á]ÔZ_×ZeÑZeÔfˆMØ"/°,Ñ">×!FÑ!FÀrÓ!JÑà!#ÐÜ×ÑØ—>‘>×*Ñ*Ð+ð ,Zð Zôð
 œuŸ|™|¨J¸v¿}¹}ÔMÐOaÐaÑbˆàˆØÐØ×%Ñ%¨V¸FÐR_Ðhl×hsÑhsÐ%ÓtˆDä/ØØ Ø/×?Ñ?Ø-×;Ñ;Ø*×5Ñ5ô
ð 	
r+   ©NNNNNNN)r   r,   r-   r9   r6   r   r   r   rX   Ú
LongTensorÚTensorr   ÚFloatTensorÚboolr   r   r	   rb   r/   r0   s   @r*   r2   r2   a   sÜ   ø„ àÐôð Øð 15Ø15Ø37Ø+/Ø59Ø-1Ø$(ñ8
à˜E×,Ñ,Ñ-ð8
ð ! §¡Ñ.ð8
ð ˜u×/Ñ/Ñ0ð	8
ð
 " %™ð8
ð   × 1Ñ 1Ñ2ð8
ð ˜×)Ñ)Ñ*ð8
ð ˜D‘>ð8
ð Ð+Ñ,ð8
ð 
*ò8
ó ó ô8
r+   r2   c                   ó&  ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 dde	e
j                     de	e
j                     de	e
j                     de	e   d	e	e
j                     d
e	e
j                     de	e
j                     dee   defd„«       «       Zˆ xZS )ÚGenericForQuestionAnsweringr3   c                 óâ   •— t         ‰| �  |«       t        | | j                  t	        j
                  |«      «       t        j                  |j                  d«      | _	        | j                  «        y )Né   )r"   r6   r8   r9   r   r:   r;   r<   r=   Ú
qa_outputsr?   r@   s     €r*   r6   z$GenericForQuestionAnswering.__init__°   sQ   ø€ Ü‰Ñ˜Ô ä��d×,Ñ,¬i×.CÑ.CÀFÓ.KÔLÜŸ)™) F×$6Ñ$6¸Ó:ˆŒð 	�‰Õr+   c                 óB   — t        | | j                  «      j                  S ©N©rR   r9   Úembed_tokens)r$   s    r*   Úget_input_embeddingsz0GenericForQuestionAnswering.get_input_embeddings¹   s   € Ü�t˜T×3Ñ3Ó4×AÑAÐAr+   c                 ó:   — |t        | | j                  «      _        y rn   ro   )r$   Úvalues     r*   Úset_input_embeddingsz0GenericForQuestionAnswering.set_input_embeddings¼   s   € Ø=BŒ��d×,Ñ,Ó-Õ:r+   rB   rC   rD   r   rE   Ústart_positionsÚend_positionsr&   rG   c                 ó¨  —  t        | | j                  «      |f||||dœ|¤Ž}	|	j                  }
| j                  |
«      }|j	                  dd¬«      \  }}|j                  d«      j                  «       }|j                  d«      j                  «       }d }|�|� | j                  ||||fi |¤Ž}t        ||||	j                  |	j                  ¬«      S )N)rC   rD   r   rE   r   rJ   )Údim)rO   Ústart_logitsÚ
end_logitsrP   rQ   )rR   r9   rS   rl   ÚsplitÚsqueezeÚ
contiguousr\   r   rP   rQ   )r$   rB   rC   rD   r   rE   ru   rv   r&   ÚoutputsÚsequence_outputrM   ry   rz   rO   s                  r*   rb   z#GenericForQuestionAnswering.forward¿   s÷   € ð ,Q¬7°4¸×9OÑ9OÓ+PØð,
à)Ø%Ø+Ø'ñ,
ð ñ,
ˆð "×3Ñ3ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆØÐ&¨=Ð+DØ%�4×%Ñ% l°JÀÐQ^ÑiÐbhÑiˆDä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r+   rc   )r   r,   r-   r9   r6   rq   rt   r   r   r   rX   rd   re   r   rf   r   r   r   rb   r/   r0   s   @r*   ri   ri   ¬   sï   ø„ àÐôòBòCð Øð 15Ø15Ø37Ø+/Ø59Ø6:Ø48ñ%
à˜E×,Ñ,Ñ-ð%
ð ! §¡Ñ.ð%
ð ˜u×/Ñ/Ñ0ð	%
ð
 " %™ð%
ð   × 1Ñ 1Ñ2ð%
ð " %×"2Ñ"2Ñ3ð%
ð   × 0Ñ 0Ñ1ð%
ð Ð+Ñ,ð%
ð 
&ò%
ó ó ô%
r+   ri   c                   ó  ‡ — e Zd ZdZˆ fd„Zee	 	 	 	 	 	 	 ddeej                     deej                     deej                     dee   deej                     deej                     d	ee   d
ee   defd„«       «       Zˆ xZS )ÚGenericForTokenClassificationr3   c                 ó¸  •— t         ‰| �  |«       |j                  | _        t        | | j                  t        j                  |«      «       t        |dd «      �|j                  }nt        |dd «      �|j                  }nd}t        j                  |«      | _        t        j                  |j                  |j                  «      | _        | j!                  «        y )NÚclassifier_dropoutÚhidden_dropoutgš™™™™™¹?)r"   r6   r7   r8   r9   r   r:   rR   rƒ   r„   r;   ÚDropoutÚdropoutr<   r=   r>   r?   )r$   rA   rƒ   r   s      €r*   r6   z&GenericForTokenClassification.__init__í   s³   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä��d×,Ñ,¬i×.CÑ.CÀFÓ.KÔLÜ�6Ð/°Ó6ÐBØ!'×!:Ñ!:ÑÜ�VÐ-¨tÓ4Ð@Ø!'×!6Ñ!6Ñà!$ÐÜ—z‘zÐ"4Ó5ˆŒÜ—Y‘Y˜v×1Ñ1°6×3DÑ3DÓEˆŒ
ð 	�‰Õr+   rB   rC   rD   r   rE   rF   r   r&   rG   c           	      ó,  —  t        | | j                  «      |f|||||dœ|¤Ž}	|	j                  }
| j                  |
«      }
| j	                  |
«      }d }|�| j                  ||| j                  «      }t        |||	j                  |	j                  ¬«      S )NrI   )rO   rM   rP   rQ   )
rR   r9   rS   r†   r>   r\   rA   r
   rP   rQ   )r$   rB   rC   rD   r   rE   rF   r   r&   r~   r   rM   rO   s                r*   rb   z%GenericForTokenClassification.forwardþ   s°   € ð ,Q¬7°4¸×9OÑ9OÓ+PØð,
à)Ø%Ø+Ø'Øñ,
ð ñ,
ˆð "×3Ñ3ˆØŸ,™, Ó7ˆØ—‘˜OÓ,ˆàˆØÐØ×%Ñ% f¨f°d·k±kÓBˆDä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r+   rc   )r   r,   r-   r9   r6   r   r   r   rX   rd   re   r   rf   rg   r   r   r
   rb   r/   r0   s   @r*   r�   r�   é   sÜ   ø„ àÐôð" Øð 15Ø15Ø37Ø+/Ø59Ø-1Ø$(ñ!
à˜E×,Ñ,Ñ-ð!
ð ! §¡Ñ.ð!
ð ˜u×/Ñ/Ñ0ð	!
ð
 " %™ð!
ð   × 1Ñ 1Ñ2ð!
ð ˜×)Ñ)Ñ*ð!
ð ˜D‘>ð!
ð Ð+Ñ,ð!
ð 
ò!
ó ó ô!
r+   r�   )Ú	functoolsr   Útypingr   rX   Útorch.nnr;   Úcache_utilsr   Úmodeling_outputsr   r   r	   r
   Úmodels.autor   Úprocessing_utilsr   Úutilsr   r   r   r   Ú
get_loggerr   r   ÚModuler   r2   ri   r�   © r+   r*   ú<module>r“      s£   ðõ Ý ã Ý å ÷ó õ #Ý $ß PÓ Pð 
ˆ×	Ñ	˜HÓ	%€ô;1 §¡ô ;1ð| ÷G
ð G
ó ðG
ðT ÷9
ð 9
ó ð9
ðx ÷7
ð 7
ó ñ7
r+   