§
    ‚ŠtjÔŸ  ã                   ój  — d Z ddlmZ ddlZddlmZ ddlmZmZmZ ddl	m
Z ddlmZ dd	lmZ dd
lmZmZmZmZmZmZ ddl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" ddl#m$Z$ ddl%m&Z& ddl'm(Z(  e"j)        e*¦  «        Z+ej,        Z- G d„ dej.        ¦  «        Z/	 dDdej.        dej0        dej0        dej0        dej0        dz  de1de1fd„Z2 G d„ dej.        ¦  «        Z3 G d „ d!ej.        ¦  «        Z4 G d"„ d#ej.        ¦  «        Z5 G d$„ d%ej.        ¦  «        Z6 G d&„ d'ej.        ¦  «        Z7 G d(„ d)e¦  «        Z8 G d*„ d+ej.        ¦  «        Z9 G d,„ d-ej.        ¦  «        Z: G d.„ d/ej.        ¦  «        Z; G d0„ d1ej.        ¦  «        Z< G d2„ d3ej.        ¦  «        Z=e  G d4„ d5e¦  «        ¦   «         Z>e  G d6„ d7e>¦  «        ¦   «         Z?e  G d8„ d9e>¦  «        ¦   «         Z@ e d:¬;¦  «         G d<„ d=e>¦  «        ¦   «         ZA e d>¬;¦  «         G d?„ d@e>¦  «        ¦   «         ZBe  G dA„ dBe>¦  «        ¦   «         ZCg dC¢ZDdS )Ez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                   ó4   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 	 dd„Zˆ xZS )ÚLayoutLMEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 óN  •— t          ¦   «                              ¦   «          t          j        |j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¦  «        | _	        t          j        |j
        |j        ¦  «        | _        t          j        |j
        |j        ¦  «        | _        t          j        |j
        |j        ¦  «        | _        t          j        |j
        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _        t#          |j        |j        ¬¦  «        | _        t          j        |j        ¦  «        | _        |                      dt1          j        |j        ¦  «                             d¦  «        d¬¦  «         d S )N)Úpadding_idx©ÚepsÚposition_ids©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Úregister_bufferÚtorchÚarangeÚexpand©ÚselfÚconfigÚ	__class__s     €úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/layoutlm/modeling_layoutlm.pyr)   zLayoutLMEmbeddings.__init__3   sV  ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÐ_eÔ_rÐsÑsÔsˆÔÝ#%¤<°Ô0NÐPVÔPbÑ#cÔ#cˆÔ Ý%'¤\°&Ô2SÐU[ÔUgÑ%hÔ%hˆÔ"Ý%'¤\°&Ô2SÐU[ÔUgÑ%hÔ%hˆÔ"Ý%'¤\°&Ô2SÐU[ÔUgÑ%hÔ%hˆÔ"Ý%'¤\°&Ô2SÐU[ÔUgÑ%hÔ%hˆÔ"Ý%'¤\°&Ô2HÈ&ÔJ\Ñ%]Ô%]ˆÔ"å*¨6Ô+=À6ÔCXÐYÑYÔYˆŒÝ”z &Ô"<Ñ=Ô=ˆŒà×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ó    Nc                 ó:  — |�|                      ¦   «         }n|                      ¦   «         d d…         }|d         }|�|j        n|j        }|€| j        d d …d |…f         }|€!t          j        |t          j        |¬¦  «        }|€|                      |¦  «        }|}	|                      |¦  «        }
	 |                      |d d …d d …df         ¦  «        }|  	                    |d d …d d …df         ¦  «        }|                      |d d …d d …df         ¦  «        }|  	                    |d d …d d …df         ¦  «        }n"# t          $ r}t          d¦  «        |‚d }~ww xY w|                      |d d …d d …df         |d d …d d …df         z
  ¦  «        }|                      |d d …d d …df         |d d …d d …df         z
  ¦  «        }|                      |¦  «        }|	|
z   |z   |z   |z   |z   |z   |z   |z   }|                      |¦  «        }|                      |¦  «        }|S )Nr&   r   ©ÚdtypeÚdevicer   é   r   z:The `bbox`coordinate values should be within 0-1000 range.)ÚsizerK   r$   r?   ÚzerosÚlongr.   r0   r2   r3   Ú
IndexErrorr4   r5   r7   r:   r=   )rC   Ú	input_idsÚbboxÚtoken_type_idsr$   Úinputs_embedsÚinput_shapeÚ
seq_lengthrK   Úwords_embeddingsr0   Úleft_position_embeddingsÚupper_position_embeddingsÚright_position_embeddingsÚlower_position_embeddingsÚer4   r5   r7   Ú
embeddingss                       rF   ÚforwardzLayoutLMEmbeddings.forwardD   s¹  € ð Ð Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà  ”^ˆ
à%.Ð%:�Ô!Ð!ÀÔ@TˆàÐØÔ,¨Q¨Q¨Q°°°¨^Ô<ˆLàÐ!Ý"œ[¨½E¼JÈvÐVÑVÔVˆNàÐ Ø ×0Ò0°Ñ;Ô;ˆMà(ÐØ"×6Ò6°|ÑDÔDÐð	bØ'+×'AÒ'AÀ$ÀqÀqÀqÈ!È!È!ÈQÀwÄ-Ñ'PÔ'PÐ$Ø(,×(BÒ(BÀ4ÈÈÈÈ1È1È1ÈaÈÄ=Ñ(QÔ(QÐ%Ø(,×(BÒ(BÀ4ÈÈÈÈ1È1È1ÈaÈÄ=Ñ(QÔ(QÐ%Ø(,×(BÒ(BÀ4ÈÈÈÈ1È1È1ÈaÈÄ=Ñ(QÔ(QÐ%Ð%øÝð 	bð 	bð 	bÝÐYÑZÔZÐ`aÐaøøøøð	bøøøð !%× :Ò :¸4ÀÀÀÀ1À1À1ÀaÀ¼=È4ÐPQÐPQÐPQÐSTÐSTÐSTÐVWÐPWÌ=Ñ;XÑ YÔ YÐØ $× :Ò :¸4ÀÀÀÀ1À1À1ÀaÀ¼=È4ÐPQÐPQÐPQÐSTÐSTÐSTÐVWÐPWÌ=Ñ;XÑ YÔ YÐØ $× :Ò :¸>Ñ JÔ JÐð Ø!ñ"à&ñ'ð (ñ(ð (ñ	(ð
 (ñ(ð $ñ$ð $ñ$ð $ñ$ð 	ð —^’^ JÑ/Ô/ˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐs   Â3BD< Ä<
EÅEÅE)NNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r^   Ú__classcell__©rE   s   @rF   r   r   0   sc   ø€ € € € € ØQÐQð
ð 
ð 
ð 
ð 
ð& ØØØØð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5rG   r   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingr=   c                 óÀ  — t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt           j        ¬¦  «                             |j        ¦  «        }t          j         	                    ||| j
        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )NrL   r   r&   )ÚdimrJ   )ÚpÚtrainingr   )r?   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxÚfloat32ÚtorJ   r=   ro   Ú
contiguous)
rf   rg   rh   ri   rj   rk   r=   ÚkwargsÚattn_weightsÚattn_outputs
             rF   Úeager_attention_forwardrz   }   sÃ   € õ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€KØ˜Ð$Ð$rG   c                   óŠ   ‡ — e Zd Zˆ fd„Z	 ddej        dej        dz  dee         de	ej        ej        dz  f         fd„Z
ˆ xZS )	ÚLayoutLMSelfAttentionc                 ó¨  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r0t	          |d¦  «        s t          d|j        › d|j        › d�¦  «        ‚|| _        |j        | _        t          |j        |j        z  ¦  «        | _        | j        | j        z  | _	        t          j        |j        | j	        ¦  «        | _        t          j        |j        | j	        ¦  «        | _        t          j        |j        | j	        ¦  «        | _        t          j        |j        ¦  «        | _        |j        | _        | j        dz  | _        d S )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Ú
ValueErrorrD   ÚintÚattention_head_sizeÚall_head_sizer   ÚLinearrg   rh   ri   r;   Úattention_probs_dropout_probr=   Úattention_dropoutrk   rB   s     €rF   r)   zLayoutLMSelfAttention.__init__•   s:  ø€ Ý‰Œ×ÒÑÔÐØÔ Ô :Ñ:¸aÒ?Ð?ÍÐPVÐXhÑHiÔHiÐ?Ýð8 FÔ$6ð 8ð 8Ø Ô4ð8ð 8ð 8ñô ð ð
 ˆŒØ#)Ô#=ˆÔ Ý#& vÔ'9¸FÔ<VÑ'VÑ#WÔ#WˆÔ Ø!Ô5¸Ô8PÑPˆÔå”Y˜vÔ1°4Ô3EÑFÔFˆŒ
Ý”9˜VÔ/°Ô1CÑDÔDˆŒÝ”Y˜vÔ1°4Ô3EÑFÔFˆŒ
å”z &Ô"EÑFÔFˆŒØ!'Ô!DˆÔØÔ/°Ñ5ˆŒˆˆrG   NÚhidden_statesrj   rw   Úreturnc                 ó‚  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||f| j        sdn| j        | j        dœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|
|fS )Nr&   r   rL   re   )r=   rk   )Úshaper„   rg   Úviewrq   rh   ri   r   Úget_interfacerD   Ú_attn_implementationrz   ro   rˆ   rk   Úreshaperv   )rC   r‰   rj   rw   rU   Úhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacery   rx   s               rF   r^   zLayoutLMSelfAttention.forwardª   sf  € ð $Ô)¨#¨2¨#Ô.ˆØC˜ÐC bÐC¨$Ô*BÐCÐCˆà—z’z -Ñ0Ô0×5Ò5°lÑCÔC×MÒMÈaÐQRÑSÔSˆØ—X’X˜mÑ,Ô,×1Ò1°,Ñ?Ô?×IÒIÈ!ÈQÑOÔOˆ
Ø—z’z -Ñ0Ô0×5Ò5°lÑCÔC×MÒMÈaÐQRÑSÔSˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ˜LÐ(Ð(rG   ©N)r_   r`   ra   r)   r?   ÚTensorÚFloatTensorr   r   Útupler^   rc   rd   s   @rF   r|   r|   ”   sŸ   ø€ € € € € ð6ð 6ð 6ð 6ð 6ð0 48ð)ð )à”|ð)ð Ô)¨DÑ0ð)ð Ð+Ô,ð	)ð
 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ð)ð )ð )ð )ð )ð )ð )ð )rG   r|   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚLayoutLMSelfOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j	        ¦  «        | _
        d S ©Nr"   )r(   r)   r   r†   r,   Údenser:   r9   r;   r<   r=   rB   s     €rF   r)   zLayoutLMSelfOutput.__init__Ì   sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆrG   r‰   Úinput_tensorrŠ   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S r–   ©rž   r=   r:   ©rC   r‰   rŸ   s      rF   r^   zLayoutLMSelfOutput.forwardÒ   ó@   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØŸš }°|Ñ'CÑDÔDˆØÐrG   ©r_   r`   ra   r)   r?   r—   r^   rc   rd   s   @rF   r›   r›   Ë   ói   ø€ € € € € ð>ð >ð >ð >ð >ð U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð rG   r›   c            	       ój   ‡ — e Zd Zˆ fd„Z	 ddej        dej        dz  dee         dej        fd„Z	ˆ xZ
S )	ÚLayoutLMAttentionc                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S r–   )r(   r)   r|   rC   r›   ÚoutputrB   s     €rF   r)   zLayoutLMAttention.__init__Û   s;   ø€ Ý‰Œ×ÒÑÔÐÝ)¨&Ñ1Ô1ˆŒ	Ý(¨Ñ0Ô0ˆŒˆˆrG   Nr‰   rj   rw   rŠ   c                 ó\   — |} | j         |fd|i|¤Ž\  }}|                      ||¦  «        }|S ©Nrj   )rC   r©   )rC   r‰   rj   rw   ÚresidualÚ_s         rF   r^   zLayoutLMAttention.forwardà   sV   € ð !ˆØ$˜4œ9Øð
ð 
à)ð
ð ð
ð 
Ñˆ�qð
 Ÿš M°8Ñ<Ô<ˆØÐrG   r–   )r_   r`   ra   r)   r?   r—   r˜   r   r   r^   rc   rd   s   @rF   r§   r§   Ú   sŽ   ø€ € € € € ð1ð 1ð 1ð 1ð 1ð 48ðð à”|ðð Ô)¨DÑ0ðð Ð+Ô,ð	ð
 
Œðð ð ð ð ð ð ð rG   r§   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚLayoutLMIntermediatec                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S r–   )r(   r)   r   r†   r,   Úintermediate_sizerž   Ú
isinstanceÚ
hidden_actÚstrr
   Úintermediate_act_fnrB   s     €rF   r)   zLayoutLMIntermediate.__init__ò   sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$rG   r‰   rŠ   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r–   )rž   rµ   ©rC   r‰   s     rF   r^   zLayoutLMIntermediate.forwardú   s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐrG   r¤   rd   s   @rF   r¯   r¯   ñ   s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð rG   r¯   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚLayoutLMOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j	        |j
        ¦  «        | _        d S r�   )r(   r)   r   r†   r±   r,   rž   r:   r9   r;   r<   r=   rB   s     €rF   r)   zLayoutLMOutput.__init__  sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆrG   r‰   rŸ   rŠ   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S r–   r¡   r¢   s      rF   r^   zLayoutLMOutput.forward  r£   rG   r¤   rd   s   @rF   r¹   r¹     r¥   rG   r¹   c            	       óp   ‡ — e Zd Zˆ fd„Z	 d	dej        dej        dz  dee         dej        fd„Z	d„ Z
ˆ xZS )
ÚLayoutLMLayerc                 óæ   •— t          ¦   «                              ¦   «          |j        | _        d| _        t	          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        d S )Nr   )
r(   r)   Úchunk_size_feed_forwardÚseq_len_dimr§   Ú	attentionr¯   Úintermediater¹   r©   rB   s     €rF   r)   zLayoutLMLayer.__init__  s^   ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$ØˆÔÝ*¨6Ñ2Ô2ˆŒÝ0°Ñ8Ô8ˆÔÝ$ VÑ,Ô,ˆŒˆˆrG   Nr‰   rj   rw   rŠ   c                 óh   —  | j         |fd|i|¤Ž}t          | j        | j        | j        |¦  «        }|S r«   )rÁ   r   Úfeed_forward_chunkr¿   rÀ   )rC   r‰   rj   rw   s       rF   r^   zLayoutLMLayer.forward  s]   € ð '˜œØð
ð 
à)ð
ð ð
ð 
ˆõ 2ØÔ# TÔ%AÀ4ÔCSÐUbñ
ô 
ˆð ÐrG   c                 ó\   — |                       |¦  «        }|                      ||¦  «        }|S r–   )rÂ   r©   )rC   Úattention_outputÚintermediate_outputÚlayer_outputs       rF   rÄ   z LayoutLMLayer.feed_forward_chunk+  s2   € Ø"×/Ò/Ð0@ÑAÔAÐØ—{’{Ð#6Ð8HÑIÔIˆØÐrG   r–   )r_   r`   ra   r)   r?   r—   r˜   r   r   r^   rÄ   rc   rd   s   @rF   r½   r½     s�   ø€ € € € € ð-ð -ð -ð -ð -ð 48ðð à”|ðð Ô)¨DÑ0ðð Ð+Ô,ð	ð
 
Œðð ð ð ð$ð ð ð ð ð ð rG   r½   c            	       ó`   ‡ — e Zd Zˆ fd„Z	 ddej        dej        dz  dee         de	fd„Z
ˆ xZS )	ÚLayoutLMEncoderc                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS © )r½   )Ú.0ÚirD   s     €rF   ú
<listcomp>z,LayoutLMEncoder.__init__.<locals>.<listcomp>6  s!   ø€ Ð#cÐ#cÐ#c¸a¥M°&Ñ$9Ô$9Ð#cÐ#cÐ#crG   F)	r(   r)   rD   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayerÚgradient_checkpointingrB   s    `€rF   r)   zLayoutLMEncoder.__init__3  s`   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”]Ð#cÐ#cÐ#cÐ#cÅ5ÈÔIaÑCbÔCbÐ#cÑ#cÔ#cÑdÔdˆŒ
Ø&+ˆÔ#Ð#Ð#rG   Nr‰   rj   rw   rŠ   c                 óJ   — | j         D ]} |||fi |¤Ž}Œt          |¬¦  «        S )N)Úlast_hidden_state)rÔ   r   )rC   r‰   rj   rw   Úlayer_modules        rF   r^   zLayoutLMEncoder.forward9  sY   € ð !œJð 	ð 	ˆLØ(˜LØØðð ð ðð ˆMˆMõ Ø+ð
ñ 
ô 
ð 	
rG   r–   )r_   r`   ra   r)   r?   r—   r˜   r   r   r   r^   rc   rd   s   @rF   rÊ   rÊ   2  sŒ   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð 48ð
ð 
à”|ð
ð Ô)¨DÑ0ð
ð Ð+Ô,ð	
ð
 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
rG   rÊ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚLayoutLMPoolerc                 óÀ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        ¦   «         | _        d S r–   )r(   r)   r   r†   r,   rž   ÚTanhÚ
activationrB   s     €rF   r)   zLayoutLMPooler.__init__M  sC   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ'™)œ)ˆŒˆˆrG   r‰   rŠ   c                 ór   — |d d …df         }|                       |¦  «        }|                      |¦  «        }|S )Nr   )rž   rÝ   )rC   r‰   Úfirst_token_tensorÚpooled_outputs       rF   r^   zLayoutLMPooler.forwardR  s@   € ð +¨1¨1¨1¨a¨4Ô0ÐØŸ
š
Ð#5Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØÐrG   r¤   rd   s   @rF   rÚ   rÚ   L  s^   ø€ € € € € ð$ð $ð $ð $ð $ð
 U¤\ð °e´lð ð ð ð ð ð ð ð rG   rÚ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚLayoutLMPredictionHeadTransformc                 óV  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _
        n|j        | _
        t          j        |j        |j        ¬¦  «        | _        d S r�   )r(   r)   r   r†   r,   rž   r²   r³   r´   r
   Útransform_act_fnr:   r9   rB   s     €rF   r)   z(LayoutLMPredictionHeadTransform.__init__]  s…   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ý�fÔ'­Ñ-Ô-ð 	6Ý$*¨6Ô+<Ô$=ˆDÔ!Ð!à$*Ô$5ˆDÔ!Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒˆˆrG   r‰   rŠ   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r–   )rž   rä   r:   r·   s     rF   r^   z'LayoutLMPredictionHeadTransform.forwardf  s=   € ØŸ
š
 =Ñ1Ô1ˆØ×-Ò-¨mÑ<Ô<ˆØŸš }Ñ5Ô5ˆØÐrG   r¤   rd   s   @rF   râ   râ   \  sc   ø€ € € € € ðUð Uð Uð Uð Uð U¤\ð °e´lð ð ð ð ð ð ð ð rG   râ   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLayoutLMLMPredictionHeadc                 ó  •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          j        |j        |j        d¬¦  «        | _        t	          j	        t          j        |j        ¦  «        ¦  «        | _        d S )NT)Úbias)r(   r)   râ   Ú	transformr   r†   r,   r+   ÚdecoderÚ	Parameterr?   rN   ré   rB   s     €rF   r)   z!LayoutLMLMPredictionHead.__init__o  sj   ø€ Ý‰Œ×ÒÑÔÐÝ8¸Ñ@Ô@ˆŒõ ”y Ô!3°VÔ5FÈTÐRÑRÔRˆŒÝ”L¥¤¨VÔ->Ñ!?Ô!?Ñ@Ô@ˆŒ	ˆ	ˆ	rG   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r–   )rê   rë   r·   s     rF   r^   z LayoutLMLMPredictionHead.forwardx  s*   € ØŸš }Ñ5Ô5ˆØŸš ]Ñ3Ô3ˆØÐrG   )r_   r`   ra   r)   r^   rc   rd   s   @rF   rç   rç   n  sL   ø€ € € € € ðAð Að Að Að Aðð ð ð ð ð ð rG   rç   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚLayoutLMOnlyMLMHeadc                 óp   •— t          ¦   «                              ¦   «          t          |¦  «        | _        d S r–   )r(   r)   rç   ÚpredictionsrB   s     €rF   r)   zLayoutLMOnlyMLMHead.__init__€  s/   ø€ Ý‰Œ×ÒÑÔÐÝ3°FÑ;Ô;ˆÔÐÐrG   Úsequence_outputrŠ   c                 ó0   — |                       |¦  «        }|S r–   )rñ   )rC   rò   Úprediction_scoress      rF   r^   zLayoutLMOnlyMLMHead.forward„  s   € Ø ×,Ò,¨_Ñ=Ô=ÐØ Ð rG   r¤   rd   s   @rF   rï   rï     s^   ø€ € € € € ð<ð <ð <ð <ð <ð! u¤|ð !¸¼ð !ð !ð !ð !ð !ð !ð !ð !rG   rï   c                   óf   ‡ — e Zd ZU eed<   dZdZeedœZ	 e
j        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚLayoutLMPreTrainedModelrD   ÚlayoutlmT)r‰   Ú
attentionsc                 óv  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rt	          j        |j        ¦  «         dS t          |t          ¦  «        rQt	          j        |j	        t          j        |j	        j        d         ¦  «                             d¦  «        ¦  «         dS dS )zInitialize the weightsr&   r%   N)r(   Ú_init_weightsr²   rç   ÚinitÚzeros_ré   r   Úcopy_r$   r?   r@   rŒ   rA   )rC   rf   rE   s     €rF   rú   z%LayoutLMPreTrainedModel._init_weights“  s©   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ6Ñ7Ô7ð 	iÝŒK˜œÑ$Ô$Ð$Ð$Ð$Ý˜Õ 2Ñ3Ô3ð 	iÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhð	ið 	irG   )r_   r`   ra   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingr½   r|   Ú_can_record_outputsr?   Úno_gradrú   rc   rd   s   @rF   rö   rö   ‰  s‚   ø€ € € € € € àÐÐÑØ"ÐØ&*Ð#à&Ø+ðð Ðð
 €U„]�_„_ðið ið ið iñ „_ðið ið ið ið irG   rö   c                   ó  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zeee	 	 	 	 	 	 dde	j
        dz  de	j
        dz  de	j        dz  de	j
        dz  d	e	j
        dz  d
e	j        dz  dee         deez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚLayoutLMModelc                 óø   •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        |  	                    ¦   «          d S r–   )
r(   r)   rD   r   r]   rÊ   ÚencoderrÚ   ÚpoolerÚ	post_initrB   s     €rF   r)   zLayoutLMModel.__init__Ÿ  sg   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå,¨VÑ4Ô4ˆŒÝ& vÑ.Ô.ˆŒÝ$ VÑ,Ô,ˆŒð 	�ŠÑÔÐÐÐrG   c                 ó   — | j         j        S r–   ©r]   r.   ©rC   s    rF   Úget_input_embeddingsz"LayoutLMModel.get_input_embeddingsª  s   € ØŒÔ.Ð.rG   c                 ó   — || j         _        d S r–   r
  )rC   ri   s     rF   Úset_input_embeddingsz"LayoutLMModel.set_input_embeddings­  s   € Ø*/ˆŒÔ'Ð'Ð'rG   NrQ   rR   rj   rS   r$   rT   rw   rŠ   c                 ó<  — |�|�t          d¦  «        ‚|�+|                      ||¦  «         |                     ¦   «         }n.|�|                     ¦   «         dd…         }nt          d¦  «        ‚|�|j        n|j        }	|€t	          j        ||	¬¦  «        }|€!t	          j        |t          j        |	¬¦  «        }|€$t	          j        |dz   t          j        |	¬¦  «        }|                     d¦  «                             d	¦  «        }
|
 	                    | j
        ¬
¦  «        }
d|
z
  t	          j        | j
        ¦  «        j        z  }
|                      |||||¬¦  «        } | j        ||
fi |¤Ž}|d         }|                      |¦  «        }t!          ||¬¦  «        S )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)rK   rI   )é   r   rL   )rJ   g      ð?)rQ   rR   r$   rS   rT   r   )r×   Úpooler_output)r‚   Ú%warn_if_padding_and_no_attention_maskrM   rK   r?   ÚonesrN   rO   Ú	unsqueezeru   rJ   ÚfinfoÚminr]   r  r  r   )rC   rQ   rR   rj   rS   r$   rT   rw   rU   rK   Úextended_attention_maskÚembedding_outputÚencoder_outputsrò   rà   s                  rF   r^   zLayoutLMModel.forward°  sÕ  € ðf Ð  ]Ð%>ÝÐcÑdÔdÐdØÐ"Ø×6Ò6°yÀ.ÑQÔQÐQØ#Ÿ.š.Ñ*Ô*ˆKˆKØÐ&Ø'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKˆKåÐTÑUÔUÐUà%.Ð%:�Ô!Ð!ÀÔ@TˆàÐ!Ý"œZ¨¸FÐCÑCÔCˆNØÐ!Ý"œ[¨½E¼JÈvÐVÑVÔVˆNàˆ<Ý”;˜{¨TÑ1½¼ÈFÐSÑSÔSˆDà"0×":Ò":¸1Ñ"=Ô"=×"GÒ"GÈÑ"JÔ"JÐà"9×"<Ò"<À4Ä:Ð"<Ñ"NÔ"NÐØ#&Ð)@Ñ#@ÅEÄKÐPTÔPZÑD[ÔD[ÔD_Ñ"_ÐàŸ?š?ØØØ%Ø)Ø'ð +ñ 
ô 
Ðð '˜$œ,ØØ#ð
ð 
ð ð
ð 
ˆð
 *¨!Ô,ˆØŸš OÑ4Ô4ˆå)Ø-Ø'ð
ñ 
ô 
ð 	
rG   )NNNNNN)r_   r`   ra   r)   r  r  r   r   r   r?   Ú
LongTensorr˜   r   r   r™   r   r^   rc   rd   s   @rF   r  r  �  s?  ø€ € € € € ð	ð 	ð 	ð 	ð 	ð/ð /ð /ð0ð 0ð 0ð  ØØð .2Ø(,Ø37Ø26Ø04Ø26ð[
ð [
àÔ# dÑ*ð[
ð Ô Ñ%ð[
ð Ô)¨DÑ0ð	[
ð
 Ô(¨4Ñ/ð[
ð Ô&¨Ñ-ð[
ð Ô(¨4Ñ/ð[
ð Ð+Ô,ð[
ð 
Ð+Ñ	+ð[
ð [
ð [
ñ „^ñ „_ñ  Ôð[
ð [
ð [
ð [
ð [
rG   r  c                   ó  ‡ — e Zd ZdddœZˆ fd„Z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
j        dz  de
j        dz  de
j        dz  de
j        dz  dee         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚLayoutLMForMaskedLMzcls.predictions.biasz*layoutlm.embeddings.word_embeddings.weight)zcls.predictions.decoder.biaszcls.predictions.decoder.weightc                 óÂ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S r–   )r(   r)   r  r÷   rï   Úclsr  rB   s     €rF   r)   zLayoutLMForMaskedLM.__init__  sQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å% fÑ-Ô-ˆŒÝ& vÑ.Ô.ˆŒð 	�ŠÑÔÐÐÐrG   c                 ó$   — | j         j        j        S r–   ©r÷   r]   r.   r  s    rF   r  z(LayoutLMForMaskedLM.get_input_embeddings!  ó   € ØŒ}Ô'Ô7Ð7rG   c                 ó$   — | j         j        j        S r–   )r  rñ   rë   r  s    rF   Úget_output_embeddingsz)LayoutLMForMaskedLM.get_output_embeddings$  s   € ØŒxÔ#Ô+Ð+rG   c                 óT   — || j         j        _        |j        | j         j        _        d S r–   )r  rñ   rë   ré   )rC   Únew_embeddingss     rF   Úset_output_embeddingsz)LayoutLMForMaskedLM.set_output_embeddings'  s%   € Ø'5ˆŒÔÔ$Ø$2Ô$7ˆŒÔÔ!Ð!Ð!rG   NrQ   rR   rj   rS   r$   rT   Úlabelsrw   rŠ   c                 ó<  —  | j         ||f||||dœ|¤Ž}	|	d         }
|                      |
¦  «        }d}|�Kt          ¦   «         } ||                     d| j        j        ¦  «        |                     d¦  «        ¦  «        }t          |||	j        |	j        ¬¦  «        S )a2	  
        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
        ```)rj   rS   r$   rT   r   Nr&   ©ÚlossÚlogitsr‰   rø   )	r÷   r  r   r�   rD   r+   r   r‰   rø   )rC   rQ   rR   rj   rS   r$   rT   r'  rw   Úoutputsrò   rô   Úmasked_lm_lossÚloss_fcts                 rF   r^   zLayoutLMForMaskedLM.forward+  sÔ   € ðz  �$”-ØØð
ð *Ø)Ø%Ø'ð
ð 
ð ð
ð 
ˆð " !œ*ˆØ ŸHšH _Ñ5Ô5ÐàˆØÐÝ'Ñ)Ô)ˆHØ%˜XØ!×&Ò& r¨4¬;Ô+AÑBÔBØ—’˜B‘”ñô ˆNõ
 ØØ$Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rG   ©NNNNNNN)r_   r`   ra   Ú_tied_weights_keysr)   r  r#  r&  r   r   r?   r  r˜   r   r   r™   r   r^   rc   rd   s   @rF   r  r    sn  ø€ € € € € ð )?Ø*Vðð Ðð
ð ð ð ð ð8ð 8ð 8ð,ð ,ð ,ð8ð 8ð 8ð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø*.ðU
ð U
àÔ# dÑ*ðU
ð Ô Ñ%ðU
ð Ô)¨DÑ0ð	U
ð
 Ô(¨4Ñ/ðU
ð Ô&¨Ñ-ðU
ð Ô(¨4Ñ/ðU
ð Ô  4Ñ'ðU
ð Ð+Ô,ðU
ð 
�Ñ	ðU
ð U
ð U
ñ „^ñ ÔðU
ð U
ð U
ð U
ð U
rG   r  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                   ó  ‡ — e Zd Zˆ fd„Zd„ Zee	 	 	 	 	 	 	 ddej        dz  dej        dz  dej	        dz  dej        dz  dej        dz  d	ej	        dz  d
ej        dz  de
e         deez  fd„¦   «         ¦   «         Zˆ xZS )Ú!LayoutLMForSequenceClassificationc                 ó6  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        ¦  «        | _        t          j	        |j
        |j        ¦  «        | _        |                      ¦   «          d S r–   ©r(   r)   Ú
num_labelsr  r÷   r   r;   r<   r=   r†   r,   Ú
classifierr  rB   s     €rF   r)   z*LayoutLMForSequenceClassification.__init__Œ  óy   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒÝ% fÑ-Ô-ˆŒÝ”z &Ô"<Ñ=Ô=ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐrG   c                 ó$   — | j         j        j        S r–   r   r  s    rF   r  z6LayoutLMForSequenceClassification.get_input_embeddings–  r!  rG   NrQ   rR   rj   rS   r$   rT   r'  rw   rŠ   c           
      ó†  —  | j         d	||||||dœ|¤Ž}	|	d         }
|                      |
¦  «        }
|                      |
¦  «        }d}|��Z| j        j        €f| j        dk    rd| j        _        nN| j        dk    r7|j        t          j        k    s|j        t          j	        k    rd| j        _        nd| j        _        | j        j        dk    rWt          ¦   «         }| j        dk    r1 ||                     ¦   «         |                     ¦   «         ¦  «        }nŽ |||¦  «        }n�| j        j        dk    rGt          ¦   «         } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }n*| j        j        dk    rt          ¦   «         } |||¦  «        }t          |||	j        |	j        ¬¦  «        S )
aB	  
        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
        ```©rQ   rR   rj   rS   r$   rT   r   NÚ
regressionÚsingle_label_classificationÚmulti_label_classificationr&   r)  rÍ   )r÷   r=   r7  rD   Úproblem_typer6  rJ   r?   rO   rƒ   r   Úsqueezer   r�   r   r   r‰   rø   )rC   rQ   rR   rj   rS   r$   rT   r'  rw   r,  rà   r+  r*  r.  s                 rF   r^   z)LayoutLMForSequenceClassification.forward™  sÜ  € ðz  �$”-ð 
ØØØ)Ø)Ø%Ø'ð
ð 
ð ð
ð 
ˆð   œ
ˆàŸš ]Ñ3Ô3ˆØ—’ Ñ/Ô/ˆàˆØÑØŒ{Ô'Ð/Ø”? aÒ'Ð'Ø/;�D”KÔ,Ð,Ø”_ qÒ(Ð(¨f¬l½e¼jÒ.HÐ.HÈFÌLÕ\aÔ\eÒLeÐLeØ/L�D”KÔ,Ð,à/K�D”KÔ,àŒ{Ô'¨<Ò7Ð7Ý"™9œ9�Ø”? aÒ'Ð'Ø#˜8 F§N¢NÑ$4Ô$4°f·n²nÑ6FÔ6FÑGÔG�D�Dà#˜8 F¨FÑ3Ô3�D�DØ”Ô)Ð-JÒJÐJÝ+Ñ-Ô-�Ø�x §¢¨B°´Ñ @Ô @À&Ç+Â+ÈbÁ/Ä/ÑRÔR��Ø”Ô)Ð-IÒIÐIÝ,Ñ.Ô.�Ø�x ¨Ñ/Ô/�å'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rG   r/  )r_   r`   ra   r)   r  r   r   r?   r  r˜   r   r   r™   r   r^   rc   rd   s   @rF   r3  r3  …  s<  ø€ € € € € ðð ð ð ð ð8ð 8ð 8ð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø*.ðf
ð f
àÔ# dÑ*ðf
ð Ô Ñ%ðf
ð Ô)¨DÑ0ð	f
ð
 Ô(¨4Ñ/ðf
ð Ô&¨Ñ-ðf
ð Ô(¨4Ñ/ðf
ð Ô  4Ñ'ðf
ð Ð+Ô,ðf
ð 
Ð)Ñ	)ðf
ð f
ð f
ñ „^ñ Ôðf
ð f
ð f
ð f
ð f
rG   r3  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                   ó  ‡ — e Zd Zˆ fd„Zd„ Zee	 	 	 	 	 	 	 ddej        dz  dej        dz  dej	        dz  dej        dz  dej        dz  d	ej	        dz  d
ej        dz  de
e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚLayoutLMForTokenClassificationc                 ó6  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        ¦  «        | _        t          j	        |j
        |j        ¦  «        | _        |                      ¦   «          d S r–   r5  rB   s     €rF   r)   z'LayoutLMForTokenClassification.__init__  r8  rG   c                 ó$   — | j         j        j        S r–   r   r  s    rF   r  z3LayoutLMForTokenClassification.get_input_embeddings  r!  rG   NrQ   rR   rj   rS   r$   rT   r'  rw   rŠ   c           
      ó\  —  | j         d||||||dœ|¤Ž}	|	d         }
|                      |
¦  «        }
|                      |
¦  «        }d}|�Ft          ¦   «         } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }t          |||	j        |	j        ¬¦  «        S )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
        ```r;  r   Nr&   r)  rÍ   )	r÷   r=   r7  r   r�   r6  r   r‰   rø   )rC   rQ   rR   rj   rS   r$   rT   r'  rw   r,  rò   r+  r*  r.  s                 rF   r^   z&LayoutLMForTokenClassification.forward  sÕ   € ðv  �$”-ð 
ØØØ)Ø)Ø%Ø'ð
ð 
ð ð
ð 
ˆð " !œ*ˆàŸ,š, Ñ7Ô7ˆØ—’ Ñ1Ô1ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬OÑ<Ô<¸f¿kºkÈ"¹o¼oÑNÔNˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rG   r/  )r_   r`   ra   r)   r  r   r   r?   r  r˜   r   r   r™   r   r^   rc   rd   s   @rF   rB  rB    s<  ø€ € € € € ðð ð ð ð ð8ð 8ð 8ð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø*.ðR
ð R
àÔ# dÑ*ðR
ð Ô Ñ%ðR
ð Ô)¨DÑ0ð	R
ð
 Ô(¨4Ñ/ðR
ð Ô&¨Ñ-ðR
ð Ô(¨4Ñ/ðR
ð Ô  4Ñ'ðR
ð Ð+Ô,ðR
ð 
Ð&Ñ	&ðR
ð R
ð R
ñ „^ñ ÔðR
ð R
ð R
ð R
ð R
rG   rB  c                   ó  ‡ — e Zd Zdˆ fd„	Zd„ Zee	 	 	 	 	 	 	 	 ddej        dz  dej        dz  dej	        dz  dej        dz  d	ej        dz  d
ej	        dz  dej        dz  dej        dz  de
e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚLayoutLMForQuestionAnsweringTc                 óú   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        |j        ¦  «        | _        |  	                    ¦   «          dS )z•
        has_visual_segment_embedding (`bool`, *optional*, defaults to `True`):
            Whether or not to add visual segment embeddings.
        N)
r(   r)   r6  r  r÷   r   r†   r,   Ú
qa_outputsr  )rC   rD   Úhas_visual_segment_embeddingrE   s      €rF   r)   z%LayoutLMForQuestionAnswering.__init__r  sg   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå% fÑ-Ô-ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐrG   c                 ó$   — | j         j        j        S r–   r   r  s    rF   r  z1LayoutLMForQuestionAnswering.get_input_embeddings€  r!  rG   NrQ   rR   rj   rS   r$   rT   Ústart_positionsÚend_positionsrw   rŠ   c	           
      óF  —  | j         d
||||||dœ|	¤Ž}
|
d         }|                      |¦  «        }|                     dd¬¦  «        \  }}|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         }d}|�ç|�åt          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }t          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }|                     d¦  «        }|                     d|¦  «        }|                     d|¦  «        }t          |¬¦  «        } |||¦  «        } |||¦  «        }||z   dz  }t          ||||
j
        |
j        ¬	¦  «        S )a4	  
        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
        ```r;  r   r   r&   )rm   N)Úignore_indexrL   )r*  Ústart_logitsÚ
end_logitsr‰   rø   rÍ   )r÷   rI  Úsplitr@  rv   ÚlenrM   Úclampr   r   r‰   rø   )rC   rQ   rR   rj   rS   r$   rT   rL  rM  rw   r,  rò   r+  rP  rQ  Ú
total_lossÚignored_indexr.  Ú
start_lossÚend_losss                       rF   r^   z$LayoutLMForQuestionAnswering.forwardƒ  sÐ  € ð~  �$”-ð 
ØØØ)Ø)Ø%Ø'ð
ð 
ð ð
ð 
ˆð " !œ*ˆà—’ Ñ1Ô1ˆØ#)§<¢<°°r <Ñ#:Ô#:Ñ ˆ�jØ#×+Ò+¨BÑ/Ô/×:Ò:Ñ<Ô<ˆØ×'Ò'¨Ñ+Ô+×6Ò6Ñ8Ô8ˆ
àˆ
ØÐ&¨=Ð+Då�?×'Ò'Ñ)Ô)Ñ*Ô*¨QÒ.Ð.Ø"1×"9Ò"9¸"Ñ"=Ô"=�Ý�=×%Ò%Ñ'Ô'Ñ(Ô(¨1Ò,Ð,Ø -× 5Ò 5°bÑ 9Ô 9�à(×-Ò-¨aÑ0Ô0ˆMØ-×3Ò3°A°}ÑEÔEˆOØ)×/Ò/°°=ÑAÔAˆMå'°]ÐCÑCÔCˆHØ!˜ ,°Ñ@Ô@ˆJØ�x 
¨MÑ:Ô:ˆHØ$ xÑ/°1Ñ4ˆJå+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
rG   )T)NNNNNNNN)r_   r`   ra   r)   r  r   r   r?   r  r˜   r   r   r™   r   r^   rc   rd   s   @rF   rG  rG  p  sW  ø€ € € € € ðð ð ð ð ð ð8ð 8ð 8ð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø37Ø15ðe
ð e
àÔ# dÑ*ðe
ð Ô Ñ%ðe
ð Ô)¨DÑ0ð	e
ð
 Ô(¨4Ñ/ðe
ð Ô&¨Ñ-ðe
ð Ô(¨4Ñ/ðe
ð Ô)¨DÑ0ðe
ð Ô'¨$Ñ.ðe
ð Ð+Ô,ðe
ð 
Ð-Ñ	-ðe
ð e
ð e
ñ „^ñ Ôðe
ð e
ð e
ð e
ð e
rG   rG  )r  r3  rB  rG  r  rö   )re   )Erb   Ú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_loggerr_   Úloggerr:   r8   ÚModuler   r—   Úfloatrz   r|   r›   r§   r¯   r¹   r½   rÊ   rÚ   râ   rç   rï   rö   r  r  r3  rB  rG  Ú__all__rÍ   rG   rF   ú<module>rk     sã  ðð Ð à $Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð 
ˆÔ	˜HÑ	%Ô	%€ð ”LÐ ðIð Ið Ið Ið I˜œñ Iô Ið Iðh ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð %ð %ð %ð.3)ð 3)ð 3)ð 3)ð 3)˜BœIñ 3)ô 3)ð 3)ðnð ð ð ð ˜œñ ô ð ðð ð ð ð ˜œ	ñ ô ð ð.ð ð ð ð ˜2œ9ñ ô ð ð ð ð ð ð �R”Yñ ô ð ðð ð ð ð Ð.ñ ô ð ðD
ð 
ð 
ð 
ð 
�b”iñ 
ô 
ð 
ð4ð ð ð ð �R”Yñ ô ð ð ð ð ð ð  b¤iñ ô ð ð$ð ð ð ð ˜rœyñ ô ð ð"!ð !ð !ð !ð !˜"œ)ñ !ô !ð !ð ðið ið ið ið i˜oñ iô iñ „ðið& ðp
ð p
ð p
ð p
ð p
Ð+ñ p
ô p
ñ „ðp
ðf ðp
ð p
ð p
ð p
ð p
Ð1ñ p
ô p
ñ „ðp
ðf €ððñ ô ðv
ð v
ð v
ð v
ð v
Ð(?ñ v
ô v
ñô ðv
ðr €ððñ ô ðb
ð b
ð b
ð b
ð b
Ð%<ñ b
ô b
ñô ðb
ðJ ðy
ð y
ð y
ð y
ð y
Ð#:ñ y
ô y
ñ „ðy
ðxð ð €€€rG   