Ë
    GêñiÔ,  ã                   ó   — 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j0                  «      Ze G d„ d«      «       Ze G d„ d«      «       Ze G d„ d«      «       Zy)é    )ÚpartialNé   )Ú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         €ú^/var/www/pod-logistic/pod-ai/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j                  dz  dej                  dz  dej                  dz  de
dz  dej                  dz  d	ej                  dz  d
edz  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)   r5   z)GenericForSequenceClassification.__init__d   sd   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä��d×,Ñ,¬i×.CÑ.CÀFÓ.KÔLÜ—Y‘Y˜v×1Ñ1°4·?±?ÈÔOˆŒ
ð 	�‰Õr*   NÚ	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©rB   rC   r   rD   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.`)rJ   )ÚlogitsrE   Úpooled_logitsr@   )ÚlossrL   r   Úhidden_statesÚ
attentions)Úgetattrr8   Úlast_hidden_stater=   Úshaper@   Úpad_token_idÚ
ValueErrorÚtorJ   ÚtorchÚint32ÚarangeÚargmaxr   r   r   r   Úloss_functionr   r   rO   rP   )r#   rA   rB   rC   r   rD   rE   r   r%   Útransformer_outputsrO   rL   Ú
batch_sizeÚlast_non_pad_tokenÚnon_pad_maskÚtoken_indicesrM   rN   s                     r)   Úforwardz(GenericForSequenceClassification.forwardn   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,   r8   r5   r   r   rW   Ú
LongTensorÚTensorr   ÚFloatTensorÚboolr   r   r   ra   r.   r/   s   @r)   r1   r1   `   sÜ   ø„ àÐôð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%ñ8
à×#Ñ# dÑ*ð8
ð Ÿ™ tÑ+ð8
ð ×&Ñ&¨Ñ-ð	8
ð
  ™ð8
ð ×(Ñ(¨4Ñ/ð8
ð × Ñ  4Ñ'ð8
ð ˜$‘;ð8
ð Ð+Ñ,ð8
ð 
*ò8
ó ó ô8
r*   r1   c                   ó&  ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 dde	j                  dz  de	j                  dz  de	j                  dz  d	edz  d
e	j                  dz  de	j                  dz  de	j                  dz  dee   defd„«       «       Zˆ xZS )ÚGenericForQuestionAnsweringr2   c                 óâ   •— t         ‰| �  |«       t        | | j                  t	        j
                  |«      «       t        j                  |j                  d«      | _	        | j                  «        y )Né   )r!   r5   r7   r8   r
   r9   r:   r;   r<   Ú
qa_outputsr>   r?   s     €r)   r5   z$GenericForQuestionAnswering.__init__¯   sQ   ø€ Ü‰Ñ˜Ô ä��d×,Ñ,¬i×.CÑ.CÀFÓ.KÔLÜŸ)™) F×$6Ñ$6¸Ó:ˆŒð 	�‰Õr*   c                 óB   — t        | | j                  «      j                  S ©N©rQ   r8   Úembed_tokens)r#   s    r)   Úget_input_embeddingsz0GenericForQuestionAnswering.get_input_embeddings¸   s   € Ü�t˜T×3Ñ3Ó4×AÑAÐAr*   c                 ó:   — |t        | | j                  «      _        y rm   rn   )r#   Úvalues     r)   Úset_input_embeddingsz0GenericForQuestionAnswering.set_input_embeddings»   s   € Ø=BŒ��d×,Ñ,Ó-Õ:r*   NrA   rB   rC   r   rD   Ústart_positionsÚend_positionsr%   rF   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)rB   rC   r   rD   r   rI   )Údim)rN   Ústart_logitsÚ
end_logitsrO   rP   )rQ   r8   rR   rk   ÚsplitÚsqueezeÚ
contiguousr[   r   rO   rP   )r#   rA   rB   rC   r   rD   rt   ru   r%   ÚoutputsÚsequence_outputrL   rx   ry   rN   s                  r)   ra   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*   rb   )r   r+   r,   r8   r5   rp   rs   r   r   rW   rc   rd   r   re   r   r   r   ra   r.   r/   s   @r)   rh   rh   «   sï   ø„ àÐôòBòCð Øð .2Ø.2Ø04Ø(,Ø26Ø37Ø15ñ%
à×#Ñ# dÑ*ð%
ð Ÿ™ tÑ+ð%
ð ×&Ñ&¨Ñ-ð	%
ð
  ™ð%
ð ×(Ñ(¨4Ñ/ð%
ð ×)Ñ)¨DÑ0ð%
ð ×'Ñ'¨$Ñ.ð%
ð Ð+Ñ,ð%
ð 
&ò%
ó ó ô%
r*   rh   c                   ó  ‡ — e Zd ZdZˆ fd„Zee	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  de
dz  dej                  dz  d	ej                  dz  d
edz  dee   defd„«       «       Zˆ xZS )ÚGenericForTokenClassificationr2   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!   r5   r6   r7   r8   r
   r9   rQ   r‚   rƒ   r:   ÚDropoutÚdropoutr;   r<   r=   r>   )r#   r@   r‚   r   s      €r)   r5   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*   NrA   rB   rC   r   rD   rE   r   r%   rF   c           	      ó,  —  t        | | j                  «      |f|||||dœ|¤Ž}	|	j                  }
| j                  |
«      }
| j	                  |
«      }d }|�| j                  ||| j                  «      }t        |||	j                  |	j                  ¬«      S )NrH   )rN   rL   rO   rP   )
rQ   r8   rR   r…   r=   r[   r@   r	   rO   rP   )r#   rA   rB   rC   r   rD   rE   r   r%   r}   r~   rL   rN   s                r)   ra   z%GenericForTokenClassification.forwardý   s°   € ð ,Q¬7°4¸×9OÑ9OÓ+PØð,
à)Ø%Ø+Ø'Øñ,
ð ñ,
ˆð "×3Ñ3ˆØŸ,™, Ó7ˆØ—‘˜OÓ,ˆàˆØÐØ×%Ñ% f¨f°d·k±kÓBˆDä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r*   rb   )r   r+   r,   r8   r5   r   r   rW   rc   rd   r   re   rf   r   r   r	   ra   r.   r/   s   @r)   r€   r€   è   sÜ   ø„ àÐôð" Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%ñ!
à×#Ñ# dÑ*ð!
ð Ÿ™ tÑ+ð!
ð ×&Ñ&¨Ñ-ð	!
ð
  ™ð!
ð ×(Ñ(¨4Ñ/ð!
ð × Ñ  4Ñ'ð!
ð ˜$‘;ð!
ð Ð+Ñ,ð!
ð 
ò!
ó ó ô!
r*   r€   )Ú	functoolsr   rW   Útorch.nnr:   Úcache_utilsr   Úmodeling_outputsr   r   r   r	   Úmodels.autor
   Úprocessing_utilsr   Úutilsr   r   r   r   Ú
get_loggerr   r   ÚModuler   r1   rh   r€   © r*   r)   ú<module>r‘      s    ðõ ã Ý å ÷ó õ #Ý $ß PÓ Pð 
ˆ×	Ñ	˜HÓ	%€ô;1 §¡ô ;1ð| ÷G
ð G
ó ðG
ðT ÷9
ð 9
ó ð9
ðx ÷7
ð 7
ó ñ7
r*   