ó
    ˆŽ¡j·Ÿ  ã                   ór  • S r SSKJr  SSKrSSKJr  SSKJrJrJr  SSK	J
r  SSKJr  SS	KJr  SS
KJrJrJrJrJrJr  SSKJrJr  SSKJr  SSKJr  SSKJrJ r J!r!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(  \"RR                  " \*5      r+\RX                  r- " S S\R\                  5      r/ SCS\R\                  S\R`                  S\R`                  S\R`                  S\R`                  S-  S\1S\14S jjr2 " S S\R\                  5      r3 " S S \R\                  5      r4 " S! S"\R\                  5      r5 " S# S$\R\                  5      r6 " S% S&\R\                  5      r7 " S' S(\5      r8 " S) S*\R\                  5      r9 " S+ S,\R\                  5      r: " S- S.\R\                  5      r; " S/ S0\R\                  5      r< " S1 S2\R\                  5      r=\  " S3 S4\5      5       r>\  " S5 S6\>5      5       r?\  " S7 S8\>5      5       r@\ " S9S:9 " S; S<\>5      5       rA\ " S=S:9 " S> S?\>5      5       rB\  " S@ SA\>5      5       rC/ SBQrDg)DzPyTorch LayoutLM model.é    )ÚCallableN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚMaskedLMOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚLayoutLMConfigc                   ó@   ^ • \ rS rSrSrU 4S jr     SS jrSrU =r$ )ÚLayoutLMEmbeddingsé0   zGConstruct the embeddings from word, position and token_type embeddings.c                 óò  >• [         TU ]  5         [        R                  " UR                  UR
                  UR                  S9U l        [        R                  " UR                  UR
                  5      U l	        [        R                  " UR                  UR
                  5      U l        [        R                  " UR                  UR
                  5      U l        [        R                  " UR                  UR
                  5      U l        [        R                  " UR                  UR
                  5      U l        [        R                  " UR                  UR
                  5      U l        [#        UR
                  UR$                  S9U l        [        R(                  " UR*                  5      U l        [        R.                  " [0        R2                  " UR                  5      R5                  S5      SS9U l        g )N)Úpadding_idx©Úeps©r   éÿÿÿÿF)Ú
persistent)ÚsuperÚ__init__r   Ú	EmbeddingÚ
vocab_sizeÚhidden_sizeÚpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚmax_2d_position_embeddingsÚx_position_embeddingsÚy_position_embeddingsÚh_position_embeddingsÚw_position_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚLayoutLMLayerNormÚlayer_norm_epsÚ	LayerNormÚDropoutÚhidden_dropout_probÚdropoutÚBufferÚtorchÚarangeÚexpandÚposition_ids©ÚselfÚconfigÚ	__class__s     €Ú¼C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/layoutlm/modeling_layoutlm.pyr)   ÚLayoutLMEmbeddings.__init__3   sT  ø€ Ü‰ÑÔÜ!Ÿ|š|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÑsˆÔÜ#%§<¢<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¢\°&×2SÑ2SÐU[×UgÑUgÓ%hˆÔ"Ü%'§\¢\°&×2SÑ2SÐU[×UgÑUgÓ%hˆÔ"Ü%'§\¢\°&×2SÑ2SÐU[×UgÑUgÓ%hˆÔ"Ü%'§\¢\°&×2SÑ2SÐU[×UgÑUgÓ%hˆÔ"Ü%'§\¢\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"ä*¨6×+=Ñ+=À6×CXÑCXÑYˆŒÜ—z’z &×"<Ñ"<Ó=ˆŒäŸIšI¤e§l¢l°6×3QÑ3QÓ&R×&YÑ&YÐZaÓ&bÐotÑuˆÕó    c                 ó°  • Ub  UR                  5       nOUR                  5       S S nUS   nUb  UR                  OUR                  nUc  U R                  S S 2S U24   nUc$  [        R                  " U[        R
                  US9nUc  U R                  U5      nUn	U R                  U5      n
 U R                  US S 2S S 2S4   5      nU R                  US S 2S S 2S4   5      nU R                  US S 2S S 2S4   5      nU R                  US S 2S S 2S4   5      nU R                  US S 2S S 2S4   US S 2S S 2S4   -
  5      nU R                  US S 2S S 2S4   US S 2S S 2S4   -
  5      nU R                  U5      nU	U
-   U-   U-   U-   U-   U-   U-   U-   nU R                  U5      nU R                  U5      nU$ ! [         a  n[        S5      UeS nAff = f)Nr&   r   ©ÚdtypeÚdevicer   é   r   z:The `bbox`coordinate values should be within 0-1000 range.)ÚsizerM   rB   r?   ÚzerosÚlongr.   r0   r2   r3   Ú
IndexErrorr4   r5   r7   r:   r=   )rD   Ú	input_idsÚbboxÚtoken_type_idsrB   Úinputs_embedsÚinput_shapeÚ
seq_lengthrM   Úwords_embeddingsr0   Úleft_position_embeddingsÚupper_position_embeddingsÚright_position_embeddingsÚlower_position_embeddingsÚer4   r5   r7   Ú
embeddingss                       rG   ÚforwardÚLayoutLMEmbeddings.forwardB   s1  € ð Ñ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
à%.Ñ%:�×!Ò!À×@TÑ@TˆàÑØ×,Ñ,ªQ°°°¨^Ñ<ˆLàÑ!Ü"Ÿ[š[¨¼E¿J¹JÈvÑVˆNàÑ Ø ×0Ñ0°Ó;ˆMà(ÐØ"×6Ñ6°|ÓDÐð	bØ'+×'AÑ'AÀ$ÂqÊ!ÈQÀwÁ-Ó'PÐ$Ø(,×(BÑ(BÀ4ÊÊ1ÈaÈÁ=Ó(QÐ%Ø(,×(BÑ(BÀ4ÊÊ1ÈaÈÁ=Ó(QÐ%Ø(,×(BÑ(BÀ4ÊÊ1ÈaÈÁ=Ó(QÐ%ð !%× :Ñ :¸4ÂÂ1ÀaÀ¹=È4ÒPQÒSTÐVWÐPWÉ=Ñ;XÓ YÐØ $× :Ñ :¸4ÂÂ1ÀaÀ¹=È4ÒPQÒSTÐVWÐPWÉ=Ñ;XÓ YÐØ $× :Ñ :¸>Ó JÐð Ø!ñ"à&ñ'ð (ñ(ð (ñ	(ð
 (ñ(ð $ñ$ð $ñ$ð $ñ$ð 	ð —^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐøô) ó 	bÜÐYÓZÐ`aÐaûð	bús   Â/A,F: Æ:
GÇGÇG)
r:   r=   r4   r0   rB   r7   r5   r.   r2   r3   )NNNNN)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r)   r`   Ú__static_attributes__Ú__classcell__©rF   s   @rG   r   r   0   s'   ø† ÙQõvð" ØØØØ÷5ò 5rI   r   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingr=   c                 ó°  • [         R                  " XR                  SS5      5      U-  nUb  X„-   n[        R                  R                  US[         R                  S9R                  UR                  5      n[        R                  R                  X†U R                  S9n[         R                  " Xƒ5      n	U	R                  SS5      R                  5       n	X˜4$ )NrN   r   r&   )ÚdimrL   )ÚpÚtrainingr   )r?   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxÚfloat32ÚtorL   r=   rs   Ú
contiguous)
rj   rk   rl   rm   rn   ro   r=   ÚkwargsÚattn_weightsÚattn_outputs
             rG   Úeager_attention_forwardr~   {   s°   € ô —<’< §}¡}°Q¸Ó':Ó;¸gÑE€LØÑ!Ø#Ñ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÐS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ð[€Lä—,’,˜|Ó3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KØÐ$Ð$rI   c                   ó´   ^ • \ rS rSrU 4S jr S
S\R                  S\R                  S-  S\\	   S\
\R                  \R                  S-  4   4S jjrS	rU =r$ )ÚLayoutLMSelfAttentioné’   c                 ó6  >• [         TU ]  5         UR                  UR                  -  S:w  a7  [	        US5      (       d&  [        SUR                   SUR                   S35      eXl        UR                  U l        [        UR                  UR                  -  5      U l        U R                  U R                  -  U l	        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  U R                  5      U l        [        R                  " UR                   5      U l        UR                   U l        U R                  S-  U l        g )Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (Ú)g      à¿)r(   r)   r,   Únum_attention_headsÚhasattrÚ
ValueErrorrE   ÚintÚattention_head_sizeÚall_head_sizer   ÚLinearrk   rl   rm   r;   Úattention_probs_dropout_probr=   Úattention_dropoutro   rC   s     €rG   r)   ÚLayoutLMSelfAttention.__init__“   sD  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÓ?ÌÐPVÐXh×HiÑHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð
 ŒØ#)×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y’Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9’9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y’Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z’z &×"EÑ"EÓFˆŒØ!'×!DÑ!DˆÔØ×/Ñ/°Ñ5ˆ�rI   NÚhidden_statesrn   r{   Úreturnc                 ó€  • UR                   S S n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      n[        R                  " U R                  R                  [        5      n	U	" U UUUU4U R                  (       d  SOU R                  U R                  S.UD6u  p«U
R                  " / UQSP76 R!                  5       n
X«4$ )Nr&   r   rN   ç        )r=   ro   )Úshaper‰   rk   Úviewru   rl   rm   r   Úget_interfacerE   Ú_attn_implementationr~   rs   r�   ro   Úreshaperz   )rD   r�   rn   r{   rW   Úhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacer}   r|   s               rG   r`   ÚLayoutLMSelfAttention.forward¨   s8  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆà—z‘z -Ó0×5Ñ5°lÓC×MÑMÈaÐQRÓSˆØ—X‘X˜mÓ,×1Ñ1°,Ó?×IÑIÈ!ÈQÓOˆ
Ø—z‘z -Ó0×5Ñ5°lÓC×MÑMÈaÐQRÓSˆä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}Ÿ}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆð "×)Ò)Ð;¨;Ð;¸Ò;×FÑFÓHˆØÐ(Ð(rI   )
rŠ   r�   r‰   rE   r=   rl   r…   rk   ro   rm   ©N)rb   rc   rd   re   r)   r?   ÚTensorÚFloatTensorr   r   Útupler`   rg   rh   ri   s   @rG   r€   r€   ’   si   ø† õ6ð0 48ñ)à—|‘|ð)ð ×)Ñ)¨DÑ0ð)ð Ð+Ñ,ð	)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷)ó )rI   r€   c                   óz   ^ • \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )ÚLayoutLMSelfOutputéÉ   c                 ó(  >• [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        R                  " UR                  UR                  S9U l        [        R                  " UR                  5      U l
        g ©Nr#   )r(   r)   r   r‹   r,   Údenser:   r9   r;   r<   r=   rC   s     €rG   r)   ÚLayoutLMSelfOutput.__init__Ê   s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒÜ—z’z &×"<Ñ"<Ó=ˆ�rI   r�   Úinput_tensorr�   c                 óp   • U R                  U5      nU R                  U5      nU R                  X-   5      nU$ rž   ©r§   r=   r:   ©rD   r�   r©   s      rG   r`   ÚLayoutLMSelfOutput.forwardÐ   ó5   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }Ñ'CÓDˆØÐrI   ©r:   r§   r=   ©
rb   rc   rd   re   r)   r?   rŸ   r`   rg   rh   ri   s   @rG   r£   r£   É   ó6   ø† õ>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ ò rI   r£   c            	       ó�   ^ • \ rS rSrU 4S jr S
S\R                  S\R                  S-  S\\	   S\R                  4S jjr
S	rU =r$ )ÚLayoutLMAttentionéØ   c                 ób   >• [         TU ]  5         [        U5      U l        [	        U5      U l        g rž   )r(   r)   r€   rD   r£   ÚoutputrC   s     €rG   r)   ÚLayoutLMAttention.__init__Ù   s&   ø€ Ü‰ÑÔÜ)¨&Ó1ˆŒ	Ü(¨Ó0ˆ�rI   Nr�   rn   r{   r�   c                 óZ   • UnU R                   " U4SU0UD6u  pU R                  X5      nU$ ©Nrn   )rD   r¶   )rD   r�   rn   r{   ÚresidualÚ_s         rG   r`   ÚLayoutLMAttention.forwardÞ   sE   € ð !ˆØŸ9š9Øñ
à)ð
ð ñ
Ñˆð
 Ÿ™ MÓ<ˆØÐrI   )r¶   rD   rž   )rb   rc   rd   re   r)   r?   rŸ   r    r   r   r`   rg   rh   ri   s   @rG   r³   r³   Ø   sV   ø† õ1ð 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰÷ó rI   r³   c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚLayoutLMIntermediateéï   c                 ó  >• [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        UR                  [        5      (       a  [        UR                     U l        g UR                  U l        g rž   )r(   r)   r   r‹   r,   Úintermediate_sizer§   Ú
isinstanceÚ
hidden_actÚstrr
   Úintermediate_act_fnrC   s     €rG   r)   ÚLayoutLMIntermediate.__init__ð   s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬×-Ñ-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$rI   r�   r�   c                 óJ   • U R                  U5      nU R                  U5      nU$ rž   ©r§   rÅ   ©rD   r�   s     rG   r`   ÚLayoutLMIntermediate.forwardø   s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐrI   rÈ   r°   ri   s   @rG   r¾   r¾   ï   s(   ø† õ9ð U§\¡\ð °e·l±l÷ ò rI   r¾   c                   óz   ^ • \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )ÚLayoutLMOutputéÿ   c                 ó(  >• [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        R                  " UR
                  UR                  S9U l        [        R                  " UR                  5      U l        g r¦   )r(   r)   r   r‹   rÁ   r,   r§   r:   r9   r;   r<   r=   rC   s     €rG   r)   ÚLayoutLMOutput.__init__   s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒÜ—z’z &×"<Ñ"<Ó=ˆ�rI   r�   r©   r�   c                 óp   • U R                  U5      nU R                  U5      nU R                  X-   5      nU$ rž   r«   r¬   s      rG   r`   ÚLayoutLMOutput.forward  r®   rI   r¯   r°   ri   s   @rG   rÌ   rÌ   ÿ   r±   rI   rÌ   c            	       ó–   ^ • \ rS rSrU 4S jr SS\R                  S\R                  S-  S\\	   S\R                  4S jjr
S	 rS
rU =r$ )ÚLayoutLMLayeri  c                 ó²   >• [         TU ]  5         UR                  U l        SU l        [	        U5      U l        [        U5      U l        [        U5      U l	        g )Nr   )
r(   r)   Úchunk_size_feed_forwardÚseq_len_dimr³   Ú	attentionr¾   ÚintermediaterÌ   r¶   rC   s     €rG   r)   ÚLayoutLMLayer.__init__  sI   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ*¨6Ó2ˆŒÜ0°Ó8ˆÔÜ$ VÓ,ˆ�rI   Nr�   rn   r{   r�   c                 óˆ   • U R                   " U4SU0UD6n[        U R                  U R                  U R                  U5      nU$ r¹   )r×   r   Úfeed_forward_chunkrÕ   rÖ   )rD   r�   rn   r{   s       rG   r`   ÚLayoutLMLayer.forward  sW   € ð ŸšØñ
à)ð
ð ñ
ˆô 2Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUbó
ˆð ÐrI   c                 óJ   • U R                  U5      nU R                  X!5      nU$ rž   )rØ   r¶   )rD   Úattention_outputÚintermediate_outputÚlayer_outputs       rG   rÛ   Ú LayoutLMLayer.feed_forward_chunk)  s)   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6ÓIˆØÐrI   )r×   rÕ   rØ   r¶   rÖ   rž   )rb   rc   rd   re   r)   r?   rŸ   r    r   r   r`   rÛ   rg   rh   ri   s   @rG   rÓ   rÓ     s[   ø† õ-ð 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰õ÷$ð rI   rÓ   c            	       ó|   ^ • \ rS rSrU 4S jr S
S\R                  S\R                  S-  S\\	   S\
4S jjrS	rU =r$ )ÚLayoutLMEncoderi0  c                 óÖ   >• [         TU ]  5         Xl        [        R                  " [        UR                  5       Vs/ s H  n[        U5      PM     sn5      U l        SU l	        g s  snf )NF)
r(   r)   rE   r   Ú
ModuleListÚrangeÚnum_hidden_layersrÓ   ÚlayerÚgradient_checkpointing)rD   rE   ÚirF   s      €rG   r)   ÚLayoutLMEncoder.__init__1  sR   ø€ Ü‰ÑÔØŒÜ—]’]Ä5È×IaÑIaÔCbÓ#cÒCb¸a¤M°&Ö$9ÑCbÑ#cÓdˆŒ
Ø&+ˆÕ#ùò $ds   ½A&Nr�   rn   r{   r�   c                 óN   • U R                    H  nU" UU40 UD6nM     [        US9$ )N)Úlast_hidden_state)rè   r   )rD   r�   rn   r{   Úlayer_modules        rG   r`   ÚLayoutLMEncoder.forward7  s>   € ð !ŸJœJˆLÙ(ØØñð ñŠMñ 'ô Ø+ñ
ð 	
rI   )rE   ré   rè   rž   )rb   rc   rd   re   r)   r?   rŸ   r    r   r   r   r`   rg   rh   ri   s   @rG   rã   rã   0  sR   ø† õ,ð 48ñ
à—|‘|ð
ð ×)Ñ)¨DÑ0ð
ð Ð+Ñ,ð	
ð
 
÷
ó 
rI   rã   c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚLayoutLMPooleriJ  c                 ó¶   >• [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        R                  " 5       U l        g rž   )r(   r)   r   r‹   r,   r§   ÚTanhÚ
activationrC   s     €rG   r)   ÚLayoutLMPooler.__init__K  s9   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'š'›)ˆ�rI   r�   r�   c                 ó\   • US S 2S4   nU R                  U5      nU R                  U5      nU$ )Nr   )r§   rô   )rD   r�   Úfirst_token_tensorÚpooled_outputs       rG   r`   ÚLayoutLMPooler.forwardP  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐrI   )rô   r§   r°   ri   s   @rG   rñ   rñ   J  s(   ø† õ$ð
 U§\¡\ð °e·l±l÷ ò rI   rñ   c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚLayoutLMPredictionHeadTransformiZ  c                 óp  >• [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        UR                  [        5      (       a  [        UR                     U l
        OUR                  U l
        [        R                  " UR                  UR                  S9U l        g r¦   )r(   r)   r   r‹   r,   r§   rÂ   rÃ   rÄ   r
   Útransform_act_fnr:   r9   rC   s     €rG   r)   Ú(LayoutLMPredictionHeadTransform.__init__[  s~   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü�f×'Ñ'¬×-Ñ-Ü$*¨6×+<Ñ+<Ñ$=ˆDÕ!à$*×$5Ñ$5ˆDÔ!ÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆ�rI   r�   r�   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rž   )r§   rý   r:   rÉ   s     rG   r`   Ú'LayoutLMPredictionHeadTransform.forwardd  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐrI   )r:   r§   rý   r°   ri   s   @rG   rû   rû   Z  s)   ø† õUð U§\¡\ð °e·l±l÷ ò rI   rû   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚLayoutLMLMPredictionHeadil  c                 ó  >• [         TU ]  5         [        U5      U l        [        R
                  " UR                  UR                  SS9U l        [        R                  " [        R                  " UR                  5      5      U l        g )NT)Úbias)r(   r)   rû   Ú	transformr   r‹   r,   r+   ÚdecoderÚ	Parameterr?   rP   r  rC   s     €rG   r)   Ú!LayoutLMLMPredictionHead.__init__m  s[   ø€ Ü‰ÑÔÜ8¸Ó@ˆŒô —y’y ×!3Ñ!3°V×5FÑ5FÈTÑRˆŒÜ—L’L¤§¢¨V×->Ñ->Ó!?Ó@ˆ�	rI   c                 óJ   • U R                  U5      nU R                  U5      nU$ rž   )r  r  rÉ   s     rG   r`   Ú LayoutLMLMPredictionHead.forwardv  s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐrI   )r  r  r  )rb   rc   rd   re   r)   r`   rg   rh   ri   s   @rG   r  r  l  s   ø† õA÷ð rI   r  c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚLayoutLMOnlyMLMHeadi}  c                 óB   >• [         TU ]  5         [        U5      U l        g rž   )r(   r)   r  ÚpredictionsrC   s     €rG   r)   ÚLayoutLMOnlyMLMHead.__init__~  s   ø€ Ü‰ÑÔÜ3°FÓ;ˆÕrI   Úsequence_outputr�   c                 ó(   • U R                  U5      nU$ rž   ©r  )rD   r  Úprediction_scoress      rG   r`   ÚLayoutLMOnlyMLMHead.forward‚  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð rI   r  r°   ri   s   @rG   r  r  }  s(   ø† õ<ð! u§|¡|ð !¸¿¹÷ !ò !rI   r  c                   ón   ^ • \ rS rSr% \\S'   SrSr\\	S.r
\R                  " 5       U 4S j5       rSrU =r$ )ÚLayoutLMPreTrainedModeli‡  rE   ÚlayoutlmT)r�   Ú
attentionsc                 ór  >• [         TU ]  U5        [        U[        5      (       a!  [        R
                  " UR                  5        g[        U[        5      (       a\  [        R                  " UR                  [        R                  " UR                  R                  S   5      R                  S5      5        gg)zInitialize the weightsr&   r%   N)r(   Ú_init_weightsrÂ   r  ÚinitÚzeros_r  r   Úcopy_rB   r?   r@   r“   rA   )rD   rj   rF   s     €rG   r  Ú%LayoutLMPreTrainedModel._init_weights‘  s~   ø€ ô 	‰Ñ˜fÔ%Ü�fÔ6×7Ñ7Ü�KŠK˜Ÿ™Õ$Ü˜Ô 2×3Ñ3Ü�JŠJ�v×*Ñ*¬E¯LªL¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð 4rI   © )rb   rc   rd   re   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingrÓ   r€   Ú_can_record_outputsr?   Úno_gradr  rg   rh   ri   s   @rG   r  r  ‡  s?   ø‡ àÓØ"ÐØ&*Ð#à&Ø+ñÐð
 ‡]‚]ƒ_ôió öirI   r  c                   ó4  ^ • \ rS rSrU 4S jrS rS r\\\	      SS\
R                  S-  S\
R                  S-  S\
R                  S-  S	\
R                  S-  S
\
R                  S-  S\
R                  S-  S\\   S\\-  4S jj5       5       5       rSrU =r$ )ÚLayoutLMModeli›  c                 ó°   >• [         TU ]  U5        Xl        [        U5      U l        [        U5      U l        [        U5      U l        U R                  5         g rž   )
r(   r)   rE   r   r_   rã   Úencoderrñ   ÚpoolerÚ	post_initrC   s     €rG   r)   ÚLayoutLMModel.__init__�  sE   ø€ Ü‰Ñ˜Ô ØŒä,¨VÓ4ˆŒÜ& vÓ.ˆŒÜ$ VÓ,ˆŒð 	�‰ÕrI   c                 ó.   • U R                   R                  $ rž   ©r_   r.   ©rD   s    rG   Úget_input_embeddingsÚ"LayoutLMModel.get_input_embeddings¨  s   € Ø�‰×.Ñ.Ð.rI   c                 ó$   • XR                   l        g rž   r-  )rD   rm   s     rG   Úset_input_embeddingsÚ"LayoutLMModel.set_input_embeddings«  s   € Ø*/�‰Õ'rI   NrS   rT   rn   rU   rB   rV   r{   r�   c                 ó  • Ub  Ub  [        S5      eUb"  U R                  X5        UR                  5       nO"Ub  UR                  5       SS nO[        S5      eUb  UR                  OUR                  n	Uc  [        R
                  " X‰S9nUc$  [        R                  " U[        R                  U	S9nUc'  [        R                  " US-   [        R                  U	S9nUR                  S5      R                  S	5      n
U
R                  U R                  S
9n
SU
-
  [        R                  " U R                  5      R                  -  n
U R                  UUUUUS9nU R                  " UU
40 UD6nUS   nU R                  U5      n[!        UUS9$ )a  
bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
    Bounding boxes of each input sequence tokens. Selected in the range `[0,
    config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
    format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
    y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.

Examples:

```python
>>> from transformers import AutoTokenizer, LayoutLMModel
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/layoutlm-base-uncased")
>>> model = LayoutLMModel.from_pretrained("microsoft/layoutlm-base-uncased")

>>> words = ["Hello", "world"]
>>> normalized_word_boxes = [637, 773, 693, 782], [698, 773, 733, 782]

>>> token_boxes = []
>>> for word, box in zip(words, normalized_word_boxes):
...     word_tokens = tokenizer.tokenize(word)
...     token_boxes.extend([box] * len(word_tokens))
>>> # add bounding boxes of cls + sep tokens
>>> token_boxes = [[0, 0, 0, 0]] + token_boxes + [[1000, 1000, 1000, 1000]]

>>> encoding = tokenizer(" ".join(words), return_tensors="pt")
>>> input_ids = encoding["input_ids"]
>>> attention_mask = encoding["attention_mask"]
>>> token_type_ids = encoding["token_type_ids"]
>>> bbox = torch.tensor([token_boxes])

>>> outputs = model(
...     input_ids=input_ids, bbox=bbox, attention_mask=attention_mask, token_type_ids=token_type_ids
... )

>>> last_hidden_states = outputs.last_hidden_state
```NzDYou cannot specify both input_ids and inputs_embeds at the same timer&   z5You have to specify either input_ids or inputs_embeds)rM   rK   )é   r   rN   )rL   g      ð?)rS   rT   rB   rU   rV   r   )rí   Úpooler_output)r‡   Ú%warn_if_padding_and_no_attention_maskrO   rM   r?   ÚonesrP   rQ   Ú	unsqueezery   rL   ÚfinfoÚminr_   r(  r)  r   )rD   rS   rT   rn   rU   rB   rV   r{   rW   rM   Úextended_attention_maskÚembedding_outputÚencoder_outputsr  rø   s                  rG   r`   ÚLayoutLMModel.forward®  s–  € ðf Ñ  ]Ñ%>ÜÐcÓdÐdØÑ"Ø×6Ñ6°yÔQØ#Ÿ.™.Ó*‰KØÑ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà%.Ñ%:�×!Ò!À×@TÑ@TˆàÑ!Ü"ŸZšZ¨ÑCˆNØÑ!Ü"Ÿ[š[¨¼E¿J¹JÈvÑVˆNà‰<Ü—;’;˜{¨TÑ1¼¿¹ÈFÑSˆDà"0×":Ñ":¸1Ó"=×"GÑ"GÈÓ"JÐà"9×"<Ñ"<À4Ç:Á:Ð"<Ð"NÐØ#&Ð)@Ñ#@ÄEÇKÂKÐPT×PZÑPZÓD[×D_ÑD_Ñ"_ÐàŸ?™?ØØØ%Ø)Ø'ð +ð 
Ðð Ÿ,š,ØØ#ñ
ð ñ
ˆð
 *¨!Ñ,ˆØŸ™ OÓ4ˆä)Ø-Ø'ñ
ð 	
rI   )rE   r_   r(  r)  )NNNNNN)rb   rc   rd   re   r)   r/  r2  r   r   r   r?   Ú
LongTensorr    r   r   r¡   r   r`   rg   rh   ri   s   @rG   r&  r&  ›  sð   ø† õ	ò/ò0ð  ØØð .2Ø(,Ø37Ø26Ø04Ø26ñ[
à×#Ñ# dÑ*ð[
ð ×Ñ Ñ%ð[
ð ×)Ñ)¨DÑ0ð	[
ð
 ×(Ñ(¨4Ñ/ð[
ð ×&Ñ&¨Ñ-ð[
ð ×(Ñ(¨4Ñ/ð[
ð Ð+Ñ,ð[
ð 
Ð+Ñ	+ô[
ó ó ó  ö[
rI   r&  c                   óZ  ^ • \ rS rSrSSS.rU 4S jrS rS rS r\	\
       SS
\R                  S	-  S\R                  S	-  S\R                  S	-  S\R                  S	-  S\R                  S	-  S\R                  S	-  S\R                  S	-  S\\   S\\-  4S jj5       5       rSrU =r$ )ÚLayoutLMForMaskedLMi  zcls.predictions.biasz*layoutlm.embeddings.word_embeddings.weight)zcls.predictions.decoder.biaszcls.predictions.decoder.weightc                 ó„   >• [         TU ]  U5        [        U5      U l        [	        U5      U l        U R                  5         g rž   )r(   r)   r&  r  r  Úclsr*  rC   s     €rG   r)   ÚLayoutLMForMaskedLM.__init__  s4   ø€ Ü‰Ñ˜Ô ä% fÓ-ˆŒÜ& vÓ.ˆŒð 	�‰ÕrI   c                 óB   • U R                   R                  R                  $ rž   ©r  r_   r.   r.  s    rG   r/  Ú(LayoutLMForMaskedLM.get_input_embeddings  ó   € Ø�}‰}×'Ñ'×7Ñ7Ð7rI   c                 óB   • U R                   R                  R                  $ rž   )rD  r  r  r.  s    rG   Úget_output_embeddingsÚ)LayoutLMForMaskedLM.get_output_embeddings"  s   € Ø�x‰x×#Ñ#×+Ñ+Ð+rI   c                 ó‚   • XR                   R                  l        UR                  U R                   R                  l        g rž   )rD  r  r  r  )rD   Únew_embeddingss     rG   Úset_output_embeddingsÚ)LayoutLMForMaskedLM.set_output_embeddings%  s*   € Ø'5�‰×ÑÔ$Ø$2×$7Ñ$7ˆ�‰×ÑÕ!rI   NrS   rT   rn   rU   rB   rV   Úlabelsr{   r�   c                 ó6  • U R                   " UU4UUUUS.UD6n	U	S   n
U R                  U
5      nSnUbF  [        5       nU" UR                  SU R                  R
                  5      UR                  S5      5      n[        UUU	R                  U	R                  S9$ )a  
bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
    Bounding boxes of each input sequence tokens. Selected in the range `[0,
    config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
    format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
    y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
    config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
    loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`

Examples:

```python
>>> from transformers import AutoTokenizer, LayoutLMForMaskedLM
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/layoutlm-base-uncased")
>>> model = LayoutLMForMaskedLM.from_pretrained("microsoft/layoutlm-base-uncased")

>>> words = ["Hello", "[MASK]"]
>>> normalized_word_boxes = [637, 773, 693, 782], [698, 773, 733, 782]

>>> token_boxes = []
>>> for word, box in zip(words, normalized_word_boxes):
...     word_tokens = tokenizer.tokenize(word)
...     token_boxes.extend([box] * len(word_tokens))
>>> # add bounding boxes of cls + sep tokens
>>> token_boxes = [[0, 0, 0, 0]] + token_boxes + [[1000, 1000, 1000, 1000]]

>>> encoding = tokenizer(" ".join(words), return_tensors="pt")
>>> input_ids = encoding["input_ids"]
>>> attention_mask = encoding["attention_mask"]
>>> token_type_ids = encoding["token_type_ids"]
>>> bbox = torch.tensor([token_boxes])

>>> labels = tokenizer("Hello world", return_tensors="pt")["input_ids"]

>>> outputs = model(
...     input_ids=input_ids,
...     bbox=bbox,
...     attention_mask=attention_mask,
...     token_type_ids=token_type_ids,
...     labels=labels,
... )

>>> loss = outputs.loss
```)rn   rU   rB   rV   r   Nr&   ©ÚlossÚlogitsr�   r  )	r  rD  r   r”   rE   r+   r   r�   r  )rD   rS   rT   rn   rU   rB   rV   rQ  r{   Úoutputsr  r  Úmasked_lm_lossÚloss_fcts                 rG   r`   ÚLayoutLMForMaskedLM.forward)  s¹   € ðz —-’-ØØð
ð *Ø)Ø%Ø'ñ
ð ñ
ˆð " !™*ˆØ ŸH™H _Ó5ÐàˆØÑÜ'Ó)ˆHÙ%Ø!×&Ñ& r¨4¯;©;×+AÑ+AÓBØ—‘˜B“óˆNô
 ØØ$Ø!×/Ñ/Ø×)Ñ)ñ	
ð 	
rI   )rD  r  ©NNNNNNN)rb   rc   rd   re   Ú_tied_weights_keysr)   r/  rK  rO  r   r   r?   r@  r    r   r   r¡   r   r`   rg   rh   ri   s   @rG   rB  rB    s  ø† ð )?Ø*VñÐõ
ò8ò,ò8ð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø*.ñU
à×#Ñ# dÑ*ðU
ð ×Ñ Ñ%ðU
ð ×)Ñ)¨DÑ0ð	U
ð
 ×(Ñ(¨4Ñ/ðU
ð ×&Ñ&¨Ñ-ðU
ð ×(Ñ(¨4Ñ/ðU
ð × Ñ  4Ñ'ðU
ð Ð+Ñ,ðU
ð 
�Ñ	ôU
ó ó öU
rI   rB  zì
    LayoutLM Model with a sequence classification head on top (a linear layer on top of the pooled output) e.g. for
    document image classification tasks such as the [RVL-CDIP](https://www.cs.cmu.edu/~aharley/rvl-cdip/) dataset.
    )Úcustom_introc                   óD  ^ • \ rS rSrU 4S jrS r\\       SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  S-  S
\R                  S-  S\R                  S-  S\\   S\\-  4S jj5       5       rSrU =r$ )Ú!LayoutLMForSequenceClassificationiƒ  c                 ó0  >• [         TU ]  U5        UR                  U l        [        U5      U l        [
        R                  " UR                  5      U l        [
        R                  " UR                  UR                  5      U l        U R                  5         g rž   ©r(   r)   Ú
num_labelsr&  r  r   r;   r<   r=   r‹   r,   Ú
classifierr*  rC   s     €rG   r)   Ú*LayoutLMForSequenceClassification.__init__Š  ói   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ% fÓ-ˆŒÜ—z’z &×"<Ñ"<Ó=ˆŒÜŸ)š) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrI   c                 óB   • U R                   R                  R                  $ rž   rG  r.  s    rG   r/  Ú6LayoutLMForSequenceClassification.get_input_embeddings”  rI  rI   NrS   rT   rn   rU   rB   rV   rQ  r{   r�   c           
      óê  • U R                   " S	UUUUUUS.UD6n	U	S   n
U R                  U
5      n
U R                  U
5      nSnUGbŽ  U R                  R                  c‘  U R
                  S:X  a  SU R                  l        OoU R
                  S:”  aN  UR                  [        R                  :X  d  UR                  [        R                  :X  a  SU R                  l        OSU R                  l        U R                  R                  S:X  aI  [        5       nU R
                  S:X  a&  U" UR                  5       UR                  5       5      nOŒU" X·5      nOƒU R                  R                  S:X  a=  [        5       nU" UR                  SU R
                  5      UR                  S5      5      nO,U R                  R                  S:X  a  [        5       nU" X·5      n[        UUU	R                   U	R"                  S9$ )
a
  
bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
    Bounding boxes of each input sequence tokens. Selected in the range `[0,
    config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
    format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
    y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
    Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
    config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
    `config.num_labels > 1` a classification loss is computed (Cross-Entropy).

Examples:

```python
>>> from transformers import AutoTokenizer, LayoutLMForSequenceClassification
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/layoutlm-base-uncased")
>>> model = LayoutLMForSequenceClassification.from_pretrained("microsoft/layoutlm-base-uncased")

>>> words = ["Hello", "world"]
>>> normalized_word_boxes = [637, 773, 693, 782], [698, 773, 733, 782]

>>> token_boxes = []
>>> for word, box in zip(words, normalized_word_boxes):
...     word_tokens = tokenizer.tokenize(word)
...     token_boxes.extend([box] * len(word_tokens))
>>> # add bounding boxes of cls + sep tokens
>>> token_boxes = [[0, 0, 0, 0]] + token_boxes + [[1000, 1000, 1000, 1000]]

>>> encoding = tokenizer(" ".join(words), return_tensors="pt")
>>> input_ids = encoding["input_ids"]
>>> attention_mask = encoding["attention_mask"]
>>> token_type_ids = encoding["token_type_ids"]
>>> bbox = torch.tensor([token_boxes])
>>> sequence_label = torch.tensor([1])

>>> outputs = model(
...     input_ids=input_ids,
...     bbox=bbox,
...     attention_mask=attention_mask,
...     token_type_ids=token_type_ids,
...     labels=sequence_label,
... )

>>> loss = outputs.loss
>>> logits = outputs.logits
```©rS   rT   rn   rU   rB   rV   r   NÚ
regressionÚsingle_label_classificationÚmulti_label_classificationr&   rS  r  )r  r=   rb  rE   Úproblem_typera  rL   r?   rQ   rˆ   r   Úsqueezer   r”   r   r   r�   r  )rD   rS   rT   rn   rU   rB   rV   rQ  r{   rV  rø   rU  rT  rX  s                 rG   r`   Ú)LayoutLMForSequenceClassification.forward—  s¤  € ðz —-’-ð 
ØØØ)Ø)Ø%Ø'ñ
ð ñ
ˆð   ™
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆàˆØÒØ�{‰{×'Ñ'Ñ/Ø—?‘? aÓ'Ø/;�D—K‘KÕ,Ø—_‘_ qÓ(¨f¯l©l¼e¿j¹jÓ.HÈFÏLÉLÔ\a×\eÑ\eÓLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ó7Ü"›9�Ø—?‘? aÓ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# FÓ3‘DØ—‘×)Ñ)Ð-JÓJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÓIÜ,Ó.�Ù Ó/�ä'ØØØ!×/Ñ/Ø×)Ñ)ñ	
ð 	
rI   ©rb  r=   r  ra  rZ  )rb   rc   rd   re   r)   r/  r   r   r?   r@  r    r   r   r¡   r   r`   rg   rh   ri   s   @rG   r^  r^  ƒ  sü   ø† õò8ð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø*.ñf
à×#Ñ# dÑ*ðf
ð ×Ñ Ñ%ðf
ð ×)Ñ)¨DÑ0ð	f
ð
 ×(Ñ(¨4Ñ/ðf
ð ×&Ñ&¨Ñ-ðf
ð ×(Ñ(¨4Ñ/ðf
ð × Ñ  4Ñ'ðf
ð Ð+Ñ,ðf
ð 
Ð)Ñ	)ôf
ó ó öf
rI   r^  a3  
    LayoutLM Model with a token classification head on top (a linear layer on top of the hidden-states output) e.g. for
    sequence labeling (information extraction) tasks such as the [FUNSD](https://guillaumejaume.github.io/FUNSD/)
    dataset and the [SROIE](https://rrc.cvc.uab.es/?ch=13) dataset.
    c                   óD  ^ • \ rS rSrU 4S jrS r\\       SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  S-  S
\R                  S-  S\R                  S-  S\\   S\\-  4S jj5       5       rSrU =r$ )ÚLayoutLMForTokenClassificationi  c                 ó0  >• [         TU ]  U5        UR                  U l        [        U5      U l        [
        R                  " UR                  5      U l        [
        R                  " UR                  UR                  5      U l        U R                  5         g rž   r`  rC   s     €rG   r)   Ú'LayoutLMForTokenClassification.__init__
  rd  rI   c                 óB   • U R                   R                  R                  $ rž   rG  r.  s    rG   r/  Ú3LayoutLMForTokenClassification.get_input_embeddings  rI  rI   NrS   rT   rn   rU   rB   rV   rQ  r{   r�   c           
      óD  • U R                   " SUUUUUUS.UD6n	U	S   n
U R                  U
5      n
U R                  U
5      nSnUb<  [        5       nU" UR	                  SU R
                  5      UR	                  S5      5      n[        UUU	R                  U	R                  S9$ )a‡  
bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
    Bounding boxes of each input sequence tokens. Selected in the range `[0,
    config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
    format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
    y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.

Examples:

```python
>>> from transformers import AutoTokenizer, LayoutLMForTokenClassification
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/layoutlm-base-uncased")
>>> model = LayoutLMForTokenClassification.from_pretrained("microsoft/layoutlm-base-uncased")

>>> words = ["Hello", "world"]
>>> normalized_word_boxes = [637, 773, 693, 782], [698, 773, 733, 782]

>>> token_boxes = []
>>> for word, box in zip(words, normalized_word_boxes):
...     word_tokens = tokenizer.tokenize(word)
...     token_boxes.extend([box] * len(word_tokens))
>>> # add bounding boxes of cls + sep tokens
>>> token_boxes = [[0, 0, 0, 0]] + token_boxes + [[1000, 1000, 1000, 1000]]

>>> encoding = tokenizer(" ".join(words), return_tensors="pt")
>>> input_ids = encoding["input_ids"]
>>> attention_mask = encoding["attention_mask"]
>>> token_type_ids = encoding["token_type_ids"]
>>> bbox = torch.tensor([token_boxes])
>>> token_labels = torch.tensor([1, 1, 0, 0]).unsqueeze(0)  # batch size of 1

>>> outputs = model(
...     input_ids=input_ids,
...     bbox=bbox,
...     attention_mask=attention_mask,
...     token_type_ids=token_type_ids,
...     labels=token_labels,
... )

>>> loss = outputs.loss
>>> logits = outputs.logits
```rh  r   Nr&   rS  r  )	r  r=   rb  r   r”   ra  r   r�   r  )rD   rS   rT   rn   rU   rB   rV   rQ  r{   rV  r  rU  rT  rX  s                 rG   r`   Ú&LayoutLMForTokenClassification.forward  s¶   € ðv —-’-ð 
ØØØ)Ø)Ø%Ø'ñ
ð ñ
ˆð " !™*ˆàŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÑÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDä$ØØØ!×/Ñ/Ø×)Ñ)ñ	
ð 	
rI   ro  rZ  )rb   rc   rd   re   r)   r/  r   r   r?   r@  r    r   r   r¡   r   r`   rg   rh   ri   s   @rG   rq  rq    sü   ø† õò8ð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø*.ñR
à×#Ñ# dÑ*ðR
ð ×Ñ Ñ%ðR
ð ×)Ñ)¨DÑ0ð	R
ð
 ×(Ñ(¨4Ñ/ðR
ð ×&Ñ&¨Ñ-ðR
ð ×(Ñ(¨4Ñ/ðR
ð × Ñ  4Ñ'ðR
ð Ð+Ñ,ðR
ð 
Ð&Ñ	&ôR
ó ó öR
rI   rq  c                   óh  ^ • \ rS rSrSU 4S jjrS r\\        SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  S-  S
\R                  S-  S\R                  S-  S\R                  S-  S\\   S\\-  4S jj5       5       rSrU =r$ )ÚLayoutLMForQuestionAnsweringin  c                 óæ   >• [         TU ]  U5        UR                  U l        [        U5      U l        [
        R                  " UR                  UR                  5      U l        U R                  5         g)z}
has_visual_segment_embedding (`bool`, *optional*, defaults to `True`):
    Whether or not to add visual segment embeddings.
N)
r(   r)   ra  r&  r  r   r‹   r,   Ú
qa_outputsr*  )rD   rE   Úhas_visual_segment_embeddingrF   s      €rG   r)   Ú%LayoutLMForQuestionAnswering.__init__p  sU   ø€ ô
 	‰Ñ˜Ô Ø ×+Ñ+ˆŒä% fÓ-ˆŒÜŸ)š) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrI   c                 óB   • U R                   R                  R                  $ rž   rG  r.  s    rG   r/  Ú1LayoutLMForQuestionAnswering.get_input_embeddings~  rI  rI   NrS   rT   rn   rU   rB   rV   Ústart_positionsÚend_positionsr{   r�   c	           
      ó¶  • U R                   " S
UUUUUUS.U	D6n
U
S   nU R                  U5      nUR                  SSS9u  pÞUR                  S5      R	                  5       nUR                  S5      R	                  5       nSnUbµ  Ub²  [        UR                  5       5      S:”  a  UR                  S5      n[        UR                  5       5      S:”  a  UR                  S5      nUR                  S5      nUR                  SU5      nUR                  SU5      n[        US9nU" X×5      nU" Xè5      nUU-   S-  n[        UUUU
R                  U
R                  S	9$ )aô  
bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
    Bounding boxes of each input sequence tokens. Selected in the range `[0,
    config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
    format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
    y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.

Example:

In the example below, we prepare a question + context pair for the LayoutLM model. It will give us a prediction
of what it thinks the answer is (the span of the answer within the texts parsed from the image).

```python
>>> from transformers import AutoTokenizer, LayoutLMForQuestionAnswering
>>> from datasets import load_dataset
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("impira/layoutlm-document-qa", add_prefix_space=True)
>>> model = LayoutLMForQuestionAnswering.from_pretrained("impira/layoutlm-document-qa", revision="1e3ebac")

>>> dataset = load_dataset("nielsr/funsd", split="train")
>>> example = dataset[0]
>>> question = "what's his name?"
>>> words = example["words"]
>>> boxes = example["bboxes"]

>>> encoding = tokenizer(
...     question.split(), words, is_split_into_words=True, return_token_type_ids=True, return_tensors="pt"
... )
>>> bbox = []
>>> for i, s, w in zip(encoding.input_ids[0], encoding.sequence_ids(0), encoding.word_ids(0)):
...     if s == 1:
...         bbox.append(boxes[w])
...     elif i == tokenizer.sep_token_id:
...         bbox.append([1000] * 4)
...     else:
...         bbox.append([0] * 4)
>>> encoding["bbox"] = torch.tensor([bbox])

>>> word_ids = encoding.word_ids(0)
>>> outputs = model(**encoding)
>>> loss = outputs.loss
>>> start_scores = outputs.start_logits
>>> end_scores = outputs.end_logits
>>> start, end = word_ids[start_scores.argmax(-1)], word_ids[end_scores.argmax(-1)]
>>> print(" ".join(words[start : end + 1]))
M. Hamann P. Harper, P. Martinez
```rh  r   r   r&   )rq   N)Úignore_indexrN   )rT  Ústart_logitsÚ
end_logitsr�   r  r  )r  r{  Úsplitrm  rz   ÚlenrO   Úclampr   r   r�   r  )rD   rS   rT   rn   rU   rB   rV   r€  r�  r{   rV  r  rU  r„  r…  Ú
total_lossÚignored_indexrX  Ú
start_lossÚend_losss                       rG   r`   Ú$LayoutLMForQuestionAnswering.forward�  sy  € ð~ —-’-ð 
ØØØ)Ø)Ø%Ø'ñ
ð ñ
ˆð " !™*ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ð#:Ñ ˆØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÑ&¨=Ñ+Dä�?×'Ñ'Ó)Ó*¨QÓ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ó,Ø -× 5Ñ 5°bÓ 9�à(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓEˆOØ)×/Ñ/°°=ÓAˆMä'°]ÑCˆHÙ! ,Ó@ˆJÙ 
Ó:ˆHØ$ xÑ/°1Ñ4ˆJä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ñ
ð 	
rI   )r  ra  r{  )T)NNNNNNNN)rb   rc   rd   re   r)   r/  r   r   r?   r@  r    r   r   r¡   r   r`   rg   rh   ri   s   @rG   ry  ry  n  s  ø† ÷ò8ð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø37Ø15ñe
à×#Ñ# dÑ*ðe
ð ×Ñ Ñ%ðe
ð ×)Ñ)¨DÑ0ð	e
ð
 ×(Ñ(¨4Ñ/ðe
ð ×&Ñ&¨Ñ-ðe
ð ×(Ñ(¨4Ñ/ðe
ð ×)Ñ)¨DÑ0ðe
ð ×'Ñ'¨$Ñ.ðe
ð Ð+Ñ,ðe
ð 
Ð-Ñ	-ôe
ó ó öe
rI   ry  )rB  r^  rq  ry  r&  r  )r’   )Erf   Úcollections.abcr   r?   r   Útorch.nnr   r   r   Ú r	   r  Úactivationsr
   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_layoutlmr   Ú
get_loggerrb   Úloggerr:   r8   ÚModuler   rŸ   Úfloatr~   r€   r£   r³   r¾   rÌ   rÓ   rã   rñ   rû   r  r  r  r&  rB  r^  rq  ry  Ú__all__r  rI   rG   Ú<module>r      se  ðñ å $ã Ý ß AÑ Aå &Ý !Ý 9÷÷ ÷ GÝ &Ý 6ß RÓ RÝ 7Ý 5Ý 2ð 
×	Ò	˜HÓ	%€ð —L‘LÐ ôG˜Ÿ™ô Gðd ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð õ%ô.3)˜BŸI™Iô 3)ôn˜Ÿ™ô ô˜Ÿ	™	ô ô.˜2Ÿ9™9ô ô �R—Y‘Yô ôÐ.ô ôD
�b—i‘iô 
ô4�R—Y‘Yô ô  b§i¡iô ô$˜rŸy™yô ô"!˜"Ÿ)™)ô !ð ôi˜oó ió ðið& ôp
Ð+ó p
ó ðp
ðf ôp
Ð1ó p
ó ðp
ñf ðñôv
Ð(?ó v
óðv
ñr ðñôb
Ð%<ó b
óðb
ðJ ôy
Ð#:ó y
ó ðy
òx�rI   