§
    ‚Štjâ  ã                   ó  — d Z ddl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 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 ddl m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z'  e¦   «         r/ddl(Z(ddl)m*Z* ej        j+        j,        e(j-        j.        j/        _,         ej0        e1¦  «        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j+        ¦  «        Z8 G d„ d e¦  «        Z9d:d$„Z: G d%„ d&ej+        ¦  «        Z;e G d'„ d(e¦  «        ¦   «         Z<d;d)„Z= G d*„ d+ej+        ¦  «        Z> G d,„ d-ej+        ¦  «        Z?e G d.„ d/e<¦  «        ¦   «         Z@ ed0¬1¦  «         G d2„ d3e<¦  «        ¦   «         ZA ed4¬1¦  «         G d5„ d6e<¦  «        ¦   «         ZBe G d7„ d8e<¦  «        ¦   «         ZCg d9¢ZDdS )<zPyTorch LayoutLMv2 model.é    N)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)Úauto_docstringÚis_detectron2_availableÚloggingÚrequires_backends)ÚTransformersKwargsÚcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚLayoutLMv2Config)ÚMETA_ARCH_REGISTRYc                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚLayoutLMv2EmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 óX  •— 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        |j        ¬¦  «        | _        t          j        |j        ¦  «        | _        |                      dt3          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Úcoordinate_sizeÚx_position_embeddingsÚy_position_embeddingsÚ
shape_sizeÚh_position_embeddingsÚw_position_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsÚDropoutÚhidden_dropout_probÚdropoutÚregister_bufferÚtorchÚarangeÚexpand©ÚselfÚconfigÚ	__class__s     €úp/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/layoutlmv2/modeling_layoutlmv2.pyr*   zLayoutLMv2Embeddings.__init__8   sX  ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÐ_eÔ_rÐsÑsÔsˆÔÝ#%¤<°Ô0NÐPVÔPbÑ#cÔ#cˆÔ å%'¤\°&Ô2SÐU[ÔUkÑ%lÔ%lˆÔ"Ý%'¤\°&Ô2SÐU[ÔUkÑ%lÔ%lˆÔ"Ý%'¤\°&Ô2SÐU[ÔUfÑ%gÔ%gˆÔ"Ý%'¤\°&Ô2SÐU[ÔUfÑ%gÔ%gˆÔ"Ý%'¤\°&Ô2HÈ&ÔJ\Ñ%]Ô%]ˆÔ"åœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒà×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ó    c                 ó^  — 	 |                       |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
  ¦  «        }t          j        ||||||gd¬¦  «        }	|	S )Nr   r   é   r   z;The `bbox` coordinate values should be within 0-1000 range.r&   ©Údim)r4   r5   Ú
IndexErrorr7   r8   rA   Úcat)
rE   ÚbboxÚleft_position_embeddingsÚupper_position_embeddingsÚright_position_embeddingsÚlower_position_embeddingsÚer7   r8   Úspatial_position_embeddingss
             rH   Ú!_calc_spatial_position_embeddingsz6LayoutLMv2Embeddings._calc_spatial_position_embeddingsJ   sŸ  € ð	cØ'+×'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Ð%Ð%øÝð 	cð 	cð 	cÝÐZÑ[Ô[ÐabÐbøøøøð	cøøøð !%× :Ò :¸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Ðå&+¤ià(Ø)Ø)Ø)Ø%Ø%ðð ð
'
ñ 
'
ô 
'
Ð#ð +Ð*s   ‚BB Â
B*ÂB%Â%B*)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r*   rW   Ú__classcell__©rG   s   @rH   r   r   5   sM   ø€ € € € € ØQÐQð
ð 
ð 
ð 
ð 
ð$+ð +ð +ð +ð +ð +ð +rI   r   c                   óD   ‡ — e Zd Zˆ fd„Zd„ Z	 	 	 ddee         fd„Zˆ xZS )ÚLayoutLMv2SelfAttentionc                 óÖ  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r0t	          |d¦  «        s t          d|j        › d|j        › d�¦  «        ‚|j        | _        |j        | _        t          |j        |j        z  ¦  «        | _        | j        | j        z  | _	        |j
        | _
        |j        | _        |j        rŽt          j        |j        d| j	        z  d¬¦  «        | _        t          j        t!          j        d	d	| j	        ¦  «        ¦  «        | _        t          j        t!          j        d	d	| j	        ¦  «        ¦  «        | _        nlt          j        |j        | j	        ¦  «        | _        t          j        |j        | j	        ¦  «        | _        t          j        |j        | j	        ¦  «        | _        t          j        |j        ¦  «        | _        d S )
Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)r   F©Úbiasr   )r)   r*   r-   Únum_attention_headsÚhasattrÚ
ValueErrorÚfast_qkvÚintÚattention_head_sizeÚall_head_sizeÚhas_relative_attention_biasÚhas_spatial_attention_biasr   ÚLinearÚ
qkv_linearÚ	ParameterrA   ÚzerosÚq_biasÚv_biasÚqueryÚkeyÚvaluer=   Úattention_probs_dropout_probr?   rD   s     €rH   r*   z LayoutLMv2SelfAttention.__init__e   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ˆÔà+1Ô+MˆÔ(Ø*0Ô*KˆÔ'àŒ?ð 	KÝ œi¨Ô(:¸AÀÔ@RÑ<RÐY^Ð_Ñ_Ô_ˆDŒOÝœ,¥u¤{°1°a¸Ô9KÑ'LÔ'LÑMÔMˆDŒKÝœ,¥u¤{°1°a¸Ô9KÑ'LÔ'LÑMÔMˆDŒKˆKåœ 6Ô#5°tÔ7IÑJÔJˆDŒJÝ”y Ô!3°TÔ5GÑHÔHˆDŒHÝœ 6Ô#5°tÔ7IÑJÔJˆDŒJå”z &Ô"EÑFÔFˆŒˆˆrI   c                 ó  — | j         r¶|                      |¦  «        }t          j        |dd¬¦  «        \  }}}|                     ¦   «         | j                             ¦   «         k    r|| j        z   }|| j        z   }n�d|                     ¦   «         dz
  z  dz   }| | j        j        |Ž z   }| | j        j        |Ž z   }n?|                      |¦  «        }|  	                    |¦  «        }|  
                    |¦  «        }|||fS )Nr   r&   rL   ©r   r   )r&   )rh   ro   rA   ÚchunkÚ
ndimensionrr   rs   Úviewrt   ru   rv   )rE   Úhidden_statesÚqkvÚqÚkÚvÚ_szs          rH   Úcompute_qkvz#LayoutLMv2SelfAttention.compute_qkv   sü   € ØŒ=ð 	*Ø—/’/ -Ñ0Ô0ˆCÝ”k # q¨bÐ1Ñ1Ô1‰GˆAˆq�!Ø�|Š|‰~Œ~ ¤×!7Ò!7Ñ!9Ô!9Ò9Ð9Ø˜œ‘O�Ø˜œ‘O��à˜aŸlšl™nœn¨qÑ0Ñ1°EÑ9�ØÐ(˜œÔ(¨#Ð.Ñ.�ØÐ(˜œÔ(¨#Ð.Ñ.��à—
’
˜=Ñ)Ô)ˆAØ—’˜Ñ'Ô'ˆAØ—
’
˜=Ñ)Ô)ˆAØ�!�QˆwˆrI   NÚkwargsc                 óš  — |j         d         }|                      |¦  «        \  }}}	|                     |d| j        | j        ¦  «                             dd¦  «        }
|                     |d| j        | j        ¦  «                             dd¦  «        }|	                     |d| j        | j        ¦  «                             dd¦  «        }|
t          j        | j        ¦  «        z  }
t          j	        |
|                     dd¦  «        ¦  «        }| j
        r||z  }| j        r||z  }|                     ¦   «                              |                     t          j        ¦  «        t          j        |j        ¦  «        j        ¦  «        }t&          j                             |dt          j        ¬¦  «                             |¦  «        }|                      |¦  «        }t          j	        ||¦  «        }|                     dddd¦  «                             ¦   «         }|                     ¦   «         d d…         | j        fz   } |j        |Ž }||fS )Nr   r&   r   rK   éþÿÿÿ)rM   Údtyper   )Úshaperƒ   r|   re   rj   Ú	transposeÚmathÚsqrtrA   Úmatmulrl   rm   ÚfloatÚmasked_fill_ÚtoÚboolÚfinfor‡   Úminr   Ú
functionalÚsoftmaxÚfloat32Útype_asr?   ÚpermuteÚ
contiguousÚsizerk   )rE   r}   Úattention_maskÚrel_posÚ
rel_2d_posr„   Ú
batch_sizert   ru   rv   Úquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapes                    rH   ÚforwardzLayoutLMv2SelfAttention.forward�   s#  € ð #Ô(¨Ô+ˆ
Ø ×,Ò,¨]Ñ;Ô;Ñˆˆs�Eð —j’j ¨R°Ô1IÈ4ÔKcÑdÔd×nÒnÐopÐrsÑtÔtˆØ—H’H˜Z¨¨TÔ-EÀtÔG_Ñ`Ô`×jÒjÐklÐnoÑpÔpˆ	Ø—j’j ¨R°Ô1IÈ4ÔKcÑdÔd×nÒnÐopÐrsÑtÔtˆà!¥D¤I¨dÔ.FÑ$GÔ$GÑGˆå œ<¨°Y×5HÒ5HÈÈRÑ5PÔ5PÑQÔQÐØÔ+ð 	(Ø Ñ'ÐØÔ*ð 	+Ø 
Ñ*ÐØ+×1Ò1Ñ3Ô3×@Ò@Ø×Ò�eœjÑ)Ô)­5¬;Ð7GÔ7MÑ+NÔ+NÔ+Rñ
ô 
Ðõ œ-×/Ò/Ð0@ÀbÕPUÔP]Ð/Ñ^Ô^×fÒfÐgrÑsÔsˆð Ÿ,š, Ñ7Ô7ˆåœ _°kÑBÔBˆØ%×-Ò-¨a°°A°qÑ9Ô9×DÒDÑFÔFˆØ"/×"4Ò"4Ñ"6Ô"6°s¸°sÔ";¸tÔ?QÐ>SÑ"SÐØ*˜Ô*Ð,CÐDˆà˜oÐ-Ð-rI   ©NNN)	rX   rY   rZ   r*   rƒ   r   r   r¥   r\   r]   s   @rH   r_   r_   d   s€   ø€ € € € € ðGð Gð Gð Gð Gð4ð ð ð( ØØð$.ð $.ð Ð+Ô,ð$.ð $.ð $.ð $.ð $.ð $.ð $.ð $.rI   r_   c                   ó>   ‡ — e Zd Zˆ fd„Z	 	 	 ddee         fd„Zˆ xZS )ÚLayoutLMv2Attentionc                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S ©N)r)   r*   r_   rE   ÚLayoutLMv2SelfOutputÚoutputrD   s     €rH   r*   zLayoutLMv2Attention.__init__¸   s;   ø€ Ý‰Œ×ÒÑÔÐÝ+¨FÑ3Ô3ˆŒ	Ý*¨6Ñ2Ô2ˆŒˆˆrI   Nr„   c                 ó`   — |} | j         ||f||dœ|¤Ž\  }}|                      ||¦  «        }|S ©N©r›   rœ   )rE   r¬   )	rE   r}   rš   r›   rœ   r„   ÚresidualÚattention_outputÚ_s	            rH   r¥   zLayoutLMv2Attention.forward½   sa   € ð !ˆØ'˜dœiØØð
ð Ø!ð	
ð 
ð
 ð
ð 
ÑÐ˜!ð  Ÿ;š;Ð'7¸ÑBÔBÐØÐrI   r¦   )rX   rY   rZ   r*   r   r   r¥   r\   r]   s   @rH   r¨   r¨   ·   sl   ø€ € € € € ð3ð 3ð 3ð 3ð 3ð ØØð ð  ð Ð+Ô,ð ð  ð  ð  ð  ð  ð  ð  rI   r¨   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r«   c                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j	        ¦  «        | _
        d S ©Nr"   )r)   r*   r   rn   r-   Údenser;   r<   r=   r>   r?   rD   s     €rH   r*   zLayoutLMv2SelfOutput.__init__Ò   sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆrI   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S rª   ©r¶   r?   r;   ©rE   r}   Úinput_tensors      rH   r¥   zLayoutLMv2SelfOutput.forwardØ   ó@   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØŸš }°|Ñ'CÑDÔDˆØÐrI   ©rX   rY   rZ   r*   r¥   r\   r]   s   @rH   r«   r«   Ñ   sG   ø€ € € € € ð>ð >ð >ð >ð >ðð ð ð ð ð ð rI   r«   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚLayoutLMv2Intermediatec                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S rª   )r)   r*   r   rn   r-   Úintermediate_sizer¶   Ú
isinstanceÚ
hidden_actÚstrr	   Úintermediate_act_fnrD   s     €rH   r*   zLayoutLMv2Intermediate.__init__á   sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$rI   r}   Úreturnc                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rª   )r¶   rÄ   )rE   r}   s     rH   r¥   zLayoutLMv2Intermediate.forwardé   s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐrI   ©rX   rY   rZ   r*   rA   ÚTensorr¥   r\   r]   s   @rH   r¾   r¾   à   s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð rI   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 )ÚLayoutLMv2Outputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j	        |j
        ¦  «        | _        d S rµ   )r)   r*   r   rn   rÀ   r-   r¶   r;   r<   r=   r>   r?   rD   s     €rH   r*   zLayoutLMv2Output.__init__ñ   sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆrI   r}   rº   rÅ   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S rª   r¸   r¹   s      rH   r¥   zLayoutLMv2Output.forward÷   r»   rI   rÇ   r]   s   @rH   rÊ   rÊ   ð   si   ø€ € € € € ð>ð >ð >ð >ð >ð U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð rI   rÊ   c                   óF   ‡ — e Zd Zˆ fd„Z	 	 	 	 ddee         fd„Zd„ Zˆ xZS )ÚLayoutLMv2Layerc                 óæ   •— t          ¦   «                              ¦   «          |j        | _        d| _        t	          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        d S )Nr   )
r)   r*   Úchunk_size_feed_forwardÚseq_len_dimr¨   Ú	attentionr¾   ÚintermediaterÊ   r¬   rD   s     €rH   r*   zLayoutLMv2Layer.__init__ÿ   s^   ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$ØˆÔÝ,¨VÑ4Ô4ˆŒÝ2°6Ñ:Ô:ˆÔÝ& vÑ.Ô.ˆŒˆˆrI   NFr„   c                 óz   — |                       ||||¬¦  «        }t          | j        | j        | j        |¦  «        }|S r®   )rÒ   r   Úfeed_forward_chunkrÐ   rÑ   )	rE   r}   rš   Úoutput_attentionsr›   rœ   r„   r±   Úlayer_outputs	            rH   r¥   zLayoutLMv2Layer.forward  sU   € ð  Ÿ>š>ØØØØ!ð	 *ñ 
ô 
Ðõ 1ØÔ# TÔ%AÀ4ÔCSÐUeñ
ô 
ˆð ÐrI   c                 ó\   — |                       |¦  «        }|                      ||¦  «        }|S rª   )rÓ   r¬   )rE   r±   Úintermediate_outputr×   s       rH   rÕ   z"LayoutLMv2Layer.feed_forward_chunk  s2   € Ø"×/Ò/Ð0@ÑAÔAÐØ—{’{Ð#6Ð8HÑIÔIˆØÐrI   )NFNN)	rX   rY   rZ   r*   r   r   r¥   rÕ   r\   r]   s   @rH   rÎ   rÎ   þ   s~   ø€ € € € € ð/ð /ð /ð /ð /ð ØØØðð ð Ð+Ô,ðð ð ð ð,ð ð ð ð ð ð rI   rÎ   Té    é€   c                 ó:  — d}|r8|dz  }|| dk                          ¦   «         |z  z  }t          j        | ¦  «        }n(t          j        |  t          j        | ¦  «        ¦  «        }|dz  }||k     }|t          j        |                     ¦   «         |z  ¦  «        t          j        ||z  ¦  «        z  ||z
  z                       t          j         ¦  «        z   }t          j	        |t          j
        ||dz
  ¦  «        ¦  «        }|t          j        |||¦  «        z  }|S )a’  
    Adapted from Mesh Tensorflow:
    https://github.com/tensorflow/mesh/blob/0cb87fe07da627bf0b7e60475d59f95ed6b5be3d/mesh_tensorflow/transformer/transformer_layers.py#L593
    Translate relative position to a bucket number for relative attention. The relative position is defined as
    memory_position - query_position, i.e. the distance in tokens from the attending position to the attended-to
    position. If bidirectional=False, then positive relative positions are invalid. We use smaller buckets for small
    absolute relative_position and larger buckets for larger absolute relative_positions. All relative positions
    >=max_distance map to the same bucket. All relative positions <=-max_distance map to the same bucket. This should
    allow for more graceful generalization to longer sequences than the model has been trained on.

    Args:
        relative_position: an int32 Tensor
        bidirectional: a boolean - whether the attention is bidirectional
        num_buckets: an integer
        max_distance: an integer

    Returns:
        a Tensor with the same shape as relative_position, containing int32 values in the range [0, num_buckets)
    r   rK   r   )ÚlongrA   ÚabsÚmaxÚ
zeros_likeÚlogr�   rŠ   r�   r’   Ú	full_likeÚwhere)	Úrelative_positionÚbidirectionalÚnum_bucketsÚmax_distanceÚretÚnÚ	max_exactÚis_smallÚval_if_larges	            rH   Úrelative_position_bucketrí   #  s  € ð* €CØð OØ˜ÑˆØÐ! AÒ%×+Ò+Ñ-Ô-°Ñ;Ñ;ˆÝŒIÐ'Ñ(Ô(ˆˆåŒIÐ(Ð(­%Ô*:Ð;LÑ*MÔ*MÑNÔNˆð ˜qÑ €IØ�9Š}€Hð ÝŒ	�!—'’'‘)”)˜iÑ'Ñ(Ô(­4¬8°LÀ9Ñ4LÑ+MÔ+MÑMÐQ\Ð_hÑQhÑiß‚b�Œ�n„nñ€Lõ ”9˜\­5¬?¸<ÈÐWXÉÑ+YÔ+YÑZÔZ€Là�5Œ;�x  LÑ1Ô1Ñ1€CØ€JrI   c                   óJ   ‡ — e Zd Zˆ fd„Zd„ Zd„ Z	 	 	 ddee         fd„Zˆ xZ	S )ÚLayoutLMv2Encoderc                 ód  •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        ‰j        | _        ‰j	        | _	        | j        r>‰j
        | _
        ‰j        | _        t          j        | j
        ‰j        d¬¦  «        | _        | j	        rd‰j        | _        ‰j        | _        t          j        | j        ‰j        d¬¦  «        | _        t          j        | j        ‰j        d¬¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS © )rÎ   )Ú.0r²   rF   s     €rH   ú
<listcomp>z.LayoutLMv2Encoder.__init__.<locals>.<listcomp>S  s!   ø€ Ð#eÐ#eÐ#eÀ¥O°FÑ$;Ô$;Ð#eÐ#eÐ#erI   Frc   )r)   r*   rF   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayerrl   rm   Úrel_pos_binsÚmax_rel_posrn   re   Úrel_pos_biasÚmax_rel_2d_posÚrel_2d_pos_binsÚrel_pos_x_biasÚrel_pos_y_biasÚgradient_checkpointingrD   s    `€rH   r*   zLayoutLMv2Encoder.__init__P  s  øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”]Ð#eÐ#eÐ#eÐ#eÅUÈ6ÔKcÑEdÔEdÐ#eÑ#eÔ#eÑfÔfˆŒ
à+1Ô+MˆÔ(Ø*0Ô*KˆÔ'àÔ+ð 	eØ &Ô 3ˆDÔØ%Ô1ˆDÔÝ "¤	¨$Ô*;¸VÔ=WÐ^cÐ dÑ dÔ dˆDÔàÔ*ð 	jØ"(Ô"7ˆDÔØ#)Ô#9ˆDÔ Ý"$¤)¨DÔ,@À&ÔB\ÐchÐ"iÑ"iÔ"iˆDÔÝ"$¤)¨DÔ,@À&ÔB\ÐchÐ"iÑ"iÔ"iˆDÔà&+ˆÔ#Ð#Ð#rI   c                 ó†  — |                      d¦  «        |                      d¦  «        z
  }t          || j        | j        ¬¦  «        }t	          j        ¦   «         5  | j        j                             ¦   «         |          	                    dddd¦  «        }d d d ¦  «         n# 1 swxY w Y   | 
                    ¦   «         }|S )Nr†   r&   ©ræ   rç   r   r   r   rK   )Ú	unsqueezerí   rù   rú   rA   Úno_gradrû   ÚweightÚtr—   r˜   )rE   r$   Úrel_pos_matr›   s       rH   Ú!_calculate_1d_position_embeddingsz3LayoutLMv2Encoder._calculate_1d_position_embeddingse  s  € Ø"×,Ò,¨RÑ0Ô0°<×3IÒ3IÈ"Ñ3MÔ3MÑMˆÝ*ØØÔ)ØÔ)ð
ñ 
ô 
ˆõ Œ]‰_Œ_ð 	Pð 	PØÔ'Ô.×0Ò0Ñ2Ô2°7Ô;×CÒCÀAÀqÈ!ÈQÑOÔOˆGð	Pð 	Pð 	Pñ 	Pô 	Pð 	Pð 	Pð 	Pð 	Pð 	Pð 	Pøøøð 	Pð 	Pð 	Pð 	Pà×$Ò$Ñ&Ô&ˆØˆs   Á;B"Â"B&Â)B&c                 óö  — |d d …d d …df         }|d d …d d …df         }|                      d¦  «        |                      d¦  «        z
  }|                      d¦  «        |                      d¦  «        z
  }t          || j        | j        ¬¦  «        }t          || j        | j        ¬¦  «        }t	          j        ¦   «         5  | j        j                             ¦   «         |          	                    dddd¦  «        }| j
        j                             ¦   «         |          	                    dddd¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     ¦   «         }|                     ¦   «         }||z   }|S )Nr   r   r†   r&   r  r   rK   )r  rí   rý   rü   rA   r  rþ   r  r  r—   rÿ   r˜   )	rE   rP   Úposition_coord_xÚposition_coord_yÚrel_pos_x_2d_matÚrel_pos_y_2d_matÚ	rel_pos_xÚ	rel_pos_yrœ   s	            rH   Ú!_calculate_2d_position_embeddingsz3LayoutLMv2Encoder._calculate_2d_position_embeddingsu  sØ  € Ø    1 1 1 a œ=ÐØ    1 1 1 a œ=ÐØ+×5Ò5°bÑ9Ô9Ð<L×<VÒ<VÐWYÑ<ZÔ<ZÑZÐØ+×5Ò5°bÑ9Ô9Ð<L×<VÒ<VÐWYÑ<ZÔ<ZÑZÐÝ,ØØÔ,ØÔ,ð
ñ 
ô 
ˆ	õ
 -ØØÔ,ØÔ,ð
ñ 
ô 
ˆ	õ Œ]‰_Œ_ð 	Vð 	VØÔ+Ô2×4Ò4Ñ6Ô6°yÔA×IÒIÈ!ÈQÐPQÐSTÑUÔUˆIØÔ+Ô2×4Ò4Ñ6Ô6°yÔA×IÒIÈ!ÈQÐPQÐSTÑUÔUˆIð	Vð 	Vð 	Vñ 	Vô 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vøøøð 	Vð 	Vð 	Vð 	Vð ×(Ò(Ñ*Ô*ˆ	Ø×(Ò(Ñ*Ô*ˆ	Ø Ñ*ˆ
ØÐs   Ã A5EÅEÅENr„   c                 óÈ   — | j         r|                      |¦  «        nd }| j        r|                      |¦  «        nd }| j        D ]} |||f||dœ|¤Ž}Œt          |¬¦  «        S )Nr¯   )Úlast_hidden_state)rl   r  rm   r  rø   r   )	rE   r}   rš   rP   r$   r„   r›   rœ   Úlayer_modules	            rH   r¥   zLayoutLMv2Encoder.forward�  s¡   € ð KOÔJjÐt�$×8Ò8¸ÑFÔFÐFÐptˆØEIÔEdÐn�T×;Ò;¸DÑAÔAÐAÐjnˆ
à œJð 	ð 	ˆLØ(˜LØØðð  Ø%ð	ð ð
 ðð ˆMˆMõ °Ð?Ñ?Ô?Ð?rI   r¦   )
rX   rY   rZ   r*   r  r  r   r   r¥   r\   r]   s   @rH   rï   rï   O  s”   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð*ð ð ð ð ð ð< ØØð@ð @ð Ð+Ô,ð@ð @ð @ð @ð @ð @ð @ð @rI   rï   c                   ó\   ‡ — e Zd ZU eed<   dZdZ ej        ¦   «         ˆ fd„¦   «         Z	ˆ xZ
S )ÚLayoutLMv2PreTrainedModelrF   Ú
layoutlmv2)ÚimageÚtextc                 ó(  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rB| j        j        r4t          j        |j        ¦  «         t          j        |j	        ¦  «         dS dS t          |t          ¦  «        rQt          j        |j        t          j        |j        j        d         ¦  «                             d¦  «        ¦  «         dS t          |t"          ¦  «        rÀt%          |j        j        j        ¦  «        }t          j        |j        t          j        |j        j        j        ¦  «                             |dd¦  «        ¦  «         t          j        |j        t          j        |j        j        j        ¦  «                             |dd¦  «        ¦  «         dS t          |t6          ¦  «        r:t9          |d¦  «        r(t          j        |j        d| j        j        ¬¦  «         dS dS t          |t@          j!        j"        ¦  «        rot          j#        |j$        ¦  «         t          j        |j%        ¦  «         t          j        |j&        ¦  «         t          j'        |j(        d|j)        z
  ¦  «         dS dS )	zInitialize the weightsr&   r%   r   Úvisual_segment_embeddingg        )ÚmeanÚstdç      ð?N)*r)   Ú_init_weightsrÁ   r_   rF   rh   ÚinitÚzeros_rr   rs   r   Úcopy_r$   rA   rB   rˆ   rC   ÚLayoutLMv2VisualBackboneÚlenÚcfgÚMODELÚ
PIXEL_MEANÚ
pixel_meanrÈ   r|   Ú	pixel_stdÚ	PIXEL_STDÚLayoutLMv2Modelrf   Únormal_r  Úinitializer_rangeÚ
detectron2ÚlayersÚFrozenBatchNorm2dÚones_r  rd   Úrunning_meanÚ	constant_Úrunning_varr#   )rE   ÚmoduleÚnum_channelsrG   s      €rH   r  z'LayoutLMv2PreTrainedModel._init_weights¬  sG  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ5Ñ6Ô6ð 	AØŒ{Ô#ð +Ý”˜FœMÑ*Ô*Ð*Ý”˜FœMÑ*Ô*Ð*Ð*Ð*ð+ð +õ ˜Õ 4Ñ5Ô5ð 	AÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhÝ˜Õ 8Ñ9Ô9ð 	AÝ˜vœzÔ/Ô:Ñ;Ô;ˆLÝŒJ�vÔ(­%¬,°v´zÔ7GÔ7RÑ*SÔ*S×*XÒ*XÐYeÐghÐjkÑ*lÔ*lÑmÔmÐmÝŒJ�vÔ'­¬°f´jÔ6FÔ6PÑ)QÔ)Q×)VÒ)VÐWcÐefÐhiÑ)jÔ)jÑkÔkÐkÐkÐkÝ˜¥Ñ0Ô0ð 	AÝ�vÐ9Ñ:Ô:ð kÝ”˜VÔ<À3ÈDÌKÔLiÐjÑjÔjÐjÐjÐjðkð kõ ˜¥
Ô 1Ô CÑDÔDð 	AÝŒJ�v”}Ñ%Ô%Ð%ÝŒK˜œÑ$Ô$Ð$ÝŒK˜Ô+Ñ,Ô,Ð,ÝŒN˜6Ô-¨s°V´ZÑ/?Ñ@Ô@Ð@Ð@Ð@ð		Að 	ArI   )rX   rY   rZ   r   Ú__annotations__Úbase_model_prefixÚinput_modalitiesrA   r  r  r\   r]   s   @rH   r  r  ¦  sm   ø€ € € € € € àÐÐÑØ$ÐØ(Ðà€U„]�_„_ðAð Að Að Añ „_ðAð Að Að Að ArI   r  c                 óò  — t          | t          j        j        j        j        ¦  «        r%t          j        j                             | |¦  «        S | }t          | t          j	        j
        ¦  «        rÈt          j                             | j        | j        dd|¬¦  «        }t          j                             | j        ¦  «        |_        t          j                             | j        ¦  «        |_        | j        |_        | j        |_        t          j        dt          j        | j        j        ¬¦  «        |_        |                      ¦   «         D ])\  }}|                     |t1          ||¦  «        ¦  «         Œ*~ |S )NT)Únum_featuresr#   ÚaffineÚtrack_running_statsÚprocess_groupr   ©r‡   Údevice)rÁ   rA   r   ÚmodulesÚ	batchnormÚ
_BatchNormÚSyncBatchNormÚconvert_sync_batchnormr-  r.  r/  r:  r#   rp   r  rd   r1  r3  ÚtensorrÝ   r?  Únum_batches_trackedÚnamed_childrenÚ
add_moduleÚmy_convert_sync_batchnorm)r4  r=  Úmodule_outputÚnameÚchilds        rH   rI  rI  Å  sE  € å�&�%œ(Ô*Ô4Ô?Ñ@Ô@ð VÝŒzÔ'×>Ò>¸vÀ}ÑUÔUÐUØ€MÝ�&�*Ô+Ô=Ñ>Ô>ð qÝœ×.Ò.ØÔ,Ø”
ØØ $Ø'ð /ñ 
ô 
ˆõ  %œx×1Ò1°&´-Ñ@Ô@ˆÔÝ"œX×/Ò/°´Ñ<Ô<ˆÔØ%+Ô%8ˆÔ"Ø$*Ô$6ˆÔ!Ý,1¬L¸Å%Ä*ÐU[ÔUhÔUoÐ,pÑ,pÔ,pˆÔ)Ø×,Ò,Ñ.Ô.ð Xð X‰ˆˆeØ× Ò  Õ'@ÀÈÑ'VÔ'VÑWÔWÐWÐWØØÐrI   c                   ó*   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zˆ xZS )r"  c           	      ó–  •— t          ¦   «                              ¦   «          |                     ¦   «         | _        | j        j        j        } t          j        |¦  «        | j        ¦  «        }t          |j	        t          j        j	        j        ¦  «        sJ ‚|j	        | _	        t          | j        j        j        ¦  «        t          | j        j        j        ¦  «        k    sJ ‚t          | j        j        j        ¦  «        }|                      dt#          j        | j        j        j        ¦  «                             |dd¦  «        d¬¦  «         |                      dt#          j        | j        j        j        ¦  «                             |dd¦  «        d¬¦  «         d| _        t#          j        ¦   «         r×t,                               d¦  «         d}| j	                             ¦   «         | j                 j        }t5          j        t9          j        t9          j        |d	         |z  ¦  «        |j        d	         z  ¦  «        t9          j        t9          j        |d         |z  ¦  «        |j        d         z  ¦  «        f¦  «        | _        n&t5          j         |j        d d
…         ¦  «        | _        t          |j        ¦  «        d
k    rA|j         !                    | j	                             ¦   «         | j                 j"        ¦  «         | j	                             ¦   «         | j                 j"        |j        d
         k    sJ ‚d S )Nr'  r   Fr'   r(  Úp2z0using `AvgPool2d` instead of `AdaptiveAvgPool2d`)éà   rP  r   rK   )#r)   r*   Úget_detectron2_configr$  r%  ÚMETA_ARCHITECTUREr   ÚgetrÁ   Úbackboner-  ÚmodelingÚFPNr#  r&  r)  r@   rA   rÈ   r|   Úout_feature_keyÚ$are_deterministic_algorithms_enabledÚloggerÚwarningÚoutput_shapeÚstrider   Ú	AvgPool2drŠ   ÚceilÚimage_feature_pool_shapeÚpoolÚAdaptiveAvgPool2dÚappendÚchannels)rE   rF   Ú	meta_archÚmodelr5  Úinput_shapeÚbackbone_striderG   s          €rH   r*   z!LayoutLMv2VisualBackbone.__init__Þ  s¿  ø€ Ý‰Œ×ÒÑÔÐØ×/Ò/Ñ1Ô1ˆŒØ”H”NÔ4ˆ	Ø1Õ"Ô& yÑ1Ô1°$´(Ñ;Ô;ˆÝ˜%œ.­*Ô*=Ô*FÔ*JÑKÔKÐKÐKÐKØœˆŒå�4”8”>Ô,Ñ-Ô-µ°T´X´^Ô5MÑ1NÔ1NÒNÐNÐNÐNÝ˜4œ8œ>Ô4Ñ5Ô5ˆØ×ÒØÝŒL˜œœÔ2Ñ3Ô3×8Ò8¸ÀqÈ!ÑLÔLØð 	ñ 	
ô 	
ð 	
ð
 	×ÒØ�œ d¤h¤nÔ&>Ñ?Ô?×DÒDÀ\ÐSTÐVWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð  $ˆÔÝÔ5Ñ7Ô7ð 	RÝ�NŠNÐMÑNÔNÐNØ$ˆKØ"œm×8Ò8Ñ:Ô:¸4Ô;OÔPÔWˆOÝœå”I�dœi¨°A¬¸Ñ(HÑIÔIÈFÔLkÐlmÔLnÑnÑoÔoÝ”I�dœi¨°A¬¸Ñ(HÑIÔIÈFÔLkÐlmÔLnÑnÑoÔoðñô ˆDŒIˆIõ Ô,¨VÔ-LÈRÈaÈRÔ-PÑQÔQˆDŒIÝˆvÔ.Ñ/Ô/°1Ò4Ð4ØÔ+×2Ò2°4´=×3MÒ3MÑ3OÔ3OÐPTÔPdÔ3eÔ3nÑoÔoÐoØŒ}×)Ò)Ñ+Ô+¨DÔ,@ÔAÔJÈfÔNmÐnoÔNpÒpÐpÐpÐpÐpÐprI   c                 óB  — t          j        |¦  «        r|n|j        | j        z
  | j        z  }|                      |¦  «        }|| j                 }|                      |¦  «                             d¬¦  «         	                    dd¦  «         
                    ¦   «         }|S )NrK   )Ú	start_dimr   )rA   Ú	is_tensorrE  r'  r(  rT  rW  r`  Úflattenr‰   r˜   )rE   ÚimagesÚimages_inputÚfeaturess       rH   r¥   z LayoutLMv2VisualBackbone.forward  s�   € Ý#(¤?°6Ñ#:Ô#:ÐM˜˜ÀÄÐQUÔQ`Ñ`ÐdhÔdrÑrˆØ—=’= Ñ.Ô.ˆØ˜DÔ0Ô1ˆØ—9’9˜XÑ&Ô&×.Ò.¸Ð.Ñ;Ô;×EÒEÀaÈÑKÔK×VÒVÑXÔXˆØˆrI   c                 óŒ  ‡‡— t           j                             ¦   «         r@t           j                             ¦   «         r"t           j                             ¦   «         dk    st          d¦  «        ‚t           j                             ¦   «         }t           j                             ¦   «         Št           j                             ¦   «         }|‰z  dk    st          d¦  «        ‚ˆfd„t          |‰z  ¦  «        D ¦   «         Šˆfd„t          |‰z  ¦  «        D ¦   «         }|‰z  }t          | j        ||         ¬¦  «        | _        d S )Nr&   z/Make sure torch.distributed is set up properly.r   zGMake sure the number of processes can be divided by the number of nodesc           	      ó\   •— g | ](}t          t          |‰z  |d z   ‰z  ¦  «        ¦  «        ‘Œ)S ry   )Úliströ   )ró   ÚiÚ	node_sizes     €rH   rô   zCLayoutLMv2VisualBackbone.synchronize_batch_norm.<locals>.<listcomp>  s9   ø€ ÐuÐuÐuÐQR�T¥%¨¨I©¸¸A¹ÀÑ7JÑ"KÔ"KÑLÔLÐuÐuÐurI   c                 ó\   •— g | ](}t           j                             ‰|         ¬ ¦  «        ‘Œ)S ))Úranks)rA   ÚdistributedÚ	new_group)ró   rr  Únode_global_rankss     €rH   rô   zCLayoutLMv2VisualBackbone.synchronize_batch_norm.<locals>.<listcomp>  s@   ø€ ð 
ð 
ð 
ØHI�EÔ×'Ò'Ð.?ÀÔ.BÐ'ÑCÔCð
ð 
ð 
rI   )r=  )rA   rv  Úis_availableÚis_initializedÚget_rankÚRuntimeErrorÚcudaÚdevice_countÚget_world_sizerö   rI  rT  )rE   Ú	self_rankÚ
world_sizeÚsync_bn_groupsÚ	node_rankrx  rs  s        @@rH   Úsynchronize_batch_normz/LayoutLMv2VisualBackbone.synchronize_batch_norm  sF  øø€ åÔ×*Ò*Ñ,Ô,ð	RåÔ!×0Ò0Ñ2Ô2ð	Rõ Ô!×*Ò*Ñ,Ô,¨rÒ1Ð1åÐPÑQÔQÐQåÔ%×.Ò.Ñ0Ô0ˆ	Ý”J×+Ò+Ñ-Ô-ˆ	ÝÔ&×5Ò5Ñ7Ô7ˆ
Ø˜YÑ&¨!Ò+Ð+ÝÐhÑiÔiÐiàuÐuÐuÐuÕV[Ð\fÐjsÑ\sÑVtÔVtÐuÑuÔuÐð
ð 
ð 
ð 
ÝMRÐS]ÐajÑSjÑMkÔMkð
ñ 
ô 
ˆð  Ñ*ˆ	å1°$´-È~Ð^gÔOhÐiÑiÔiˆŒˆˆrI   )rX   rY   rZ   r*   r¥   r„  r\   r]   s   @rH   r"  r"  Ý  sc   ø€ € € € € ð!qð !qð !qð !qð !qðFð ð ðjð jð jð jð jð jð jrI   r"  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLayoutLMv2Poolerc                 óÀ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        ¦   «         | _        d S rª   )r)   r*   r   rn   r-   r¶   ÚTanhÚ
activationrD   s     €rH   r*   zLayoutLMv2Pooler.__init__   sC   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ'™)œ)ˆŒˆˆrI   c                 ór   — |d d …df         }|                       |¦  «        }|                      |¦  «        }|S )Nr   )r¶   r‰  )rE   r}   Úfirst_token_tensorÚpooled_outputs       rH   r¥   zLayoutLMv2Pooler.forward%  s@   € ð +¨1¨1¨1¨a¨4Ô0ÐØŸ
š
Ð#5Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØÐrI   r¼   r]   s   @rH   r†  r†    sG   ø€ € € € € ð$ð $ð $ð $ð $ð
ð ð ð ð ð ð rI   r†  c                   ó>  ‡ — e Zd ZeedœZˆ fd„Zd„ Zd„ Zdd„Z	d„ Z
d„ Zd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j        dz  dee         deez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )r*  )r}   Ú
attentionsc                 ó¸  •— t          | d¦  «         t          ¦   «                              |¦  «         || _        |j        | _        t          |¦  «        | _        t          |¦  «        | _        t          j
        |j        d         |j        ¦  «        | _        | j        r<t          j        t          j        d|j        ¦  «        j        d         ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j        ¦  «        | _        t1          |¦  «        | _        t5          |¦  «        | _        |                      ¦   «          d S )Nr-  r&   r   r   r"   )r   r)   r*   rF   Úhas_visual_segment_embeddingr   Ú
embeddingsr"  Úvisualr   rn   r_  r-   Úvisual_projrp   r+   r  r  r;   r<   Úvisual_LayerNormr=   r>   Úvisual_dropoutrï   Úencoderr†  ÚpoolerÚ	post_initrD   s     €rH   r*   zLayoutLMv2Model.__init__2  s  ø€ Ý˜$ Ñ-Ô-Ð-Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØ,2Ô,OˆÔ)Ý.¨vÑ6Ô6ˆŒå.¨vÑ6Ô6ˆŒÝœ9 VÔ%DÀRÔ%HÈ&ÔJ\Ñ]Ô]ˆÔØÔ,ð 	hÝ,.¬L½¼ÀaÈÔI[Ñ9\Ô9\Ô9cÐdeÔ9fÑ,gÔ,gˆDÔ)Ý "¤¨VÔ-?ÀVÔEZÐ [Ñ [Ô [ˆÔÝ œj¨Ô)CÑDÔDˆÔå(¨Ñ0Ô0ˆŒÝ& vÑ.Ô.ˆŒð 	�ŠÑÔÐÐÐrI   c                 ó   — | j         j        S rª   ©r‘  r/   ©rE   s    rH   Úget_input_embeddingsz$LayoutLMv2Model.get_input_embeddingsF  s   € ØŒÔ.Ð.rI   c                 ó   — || j         _        d S rª   rš  )rE   rv   s     rH   Úset_input_embeddingsz$LayoutLMv2Model.set_input_embeddingsI  s   € Ø*/ˆŒÔ'Ð'Ð'rI   Nc                 óš  — |�|                      ¦   «         }n|                      ¦   «         d d…         }|d         }|€Nt          j        |t          j        |j        ¬¦  «        }|                     d¦  «                             |¦  «        }|€t          j        |¦  «        }|€| j         	                    |¦  «        }| j         
                    |¦  «        }| j                             |¦  «        }	| j                             |¦  «        }
||z   |	z   |
z   }| j                             |¦  «        }| j                             |¦  «        }|S )Nr&   r   r>  r   )r™   rA   rB   rÝ   r?  r  Ú	expand_asrà   r‘  r/   r1   rW   r:   r;   r?   )rE   Ú	input_idsrP   r$   Útoken_type_idsÚinputs_embedsrf  Ú
seq_lengthr1   rV   r:   r‘  s               rH   Ú_calc_text_embeddingsz%LayoutLMv2Model._calc_text_embeddingsL  s9  € ØÐ Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà  ”^ˆ
àÐÝ œ<¨
½%¼*ÈYÔM]Ð^Ñ^Ô^ˆLØ'×1Ò1°!Ñ4Ô4×>Ò>¸yÑIÔIˆLØÐ!Ý"Ô-¨iÑ8Ô8ˆNàÐ Ø œO×;Ò;¸IÑFÔFˆMØ"œo×AÒAÀ,ÑOÔOÐØ&*¤o×&WÒ&WÐX\Ñ&]Ô&]Ð#Ø $¤× EÒ EÀnÑ UÔ UÐà"Ð%8Ñ8Ð;VÑVÐYnÑnˆ
Ø”_×.Ò.¨zÑ:Ô:ˆ
Ø”_×,Ò,¨ZÑ8Ô8ˆ
ØÐrI   c                 óD  — |                       |                      |¦  «        ¦  «        }| j                             |¦  «        }| j                             |¦  «        }||z   |z   }| j        r
|| j        z  }|                      |¦  «        }|                      |¦  «        }|S rª   )	r“  r’  r‘  r1   rW   r�  r  r”  r•  )rE   r  rP   r$   Úvisual_embeddingsr1   rV   r‘  s           rH   Ú_calc_img_embeddingsz$LayoutLMv2Model._calc_img_embeddingse  s¤   € Ø ×,Ò,¨T¯[ª[¸Ñ-?Ô-?Ñ@Ô@ÐØ"œo×AÒAÀ,ÑOÔOÐØ&*¤o×&WÒ&WÐX\Ñ&]Ô&]Ð#Ø&Ð)<Ñ<Ð?ZÑZˆ
ØÔ,ð 	8Ø˜$Ô7Ñ7ˆJØ×*Ò*¨:Ñ6Ô6ˆ
Ø×(Ò(¨Ñ4Ô4ˆ
ØÐrI   c           	      ór  — t          j        t          j        dd|d         dz   z  d||j        ¬¦  «        | j        j        d         d¬¦  «        }t          j        t          j        dd| j        j        d         dz   z  d||j        ¬¦  «        | j        j        d         d¬¦  «        }t          j        |d d…                              |d         d¦  «        |d d…                              |d         d¦  «                             dd¦  «        |dd …                              |d         d¦  «        |dd …                              |d         d¦  «                             dd¦  «        gd¬¦  «         	                    d| 
                    d¦  «        ¦  «        }|                     |d         dd¦  «        }|S )	Nr   iè  r   )r?  r‡   Úfloor)Úrounding_moder&   rL   )rA   ÚdivrB   r‡   rF   r_  ÚstackÚrepeatr‰   r|   r™   )rE   r_  rP   r?  Úfinal_shapeÚvisual_bbox_xÚvisual_bbox_yÚvisual_bboxs           rH   Ú_calc_visual_bboxz!LayoutLMv2Model._calc_visual_bboxp  sÑ  € Ýœ	ÝŒLØØÐ0°Ô3°aÑ7Ñ8ØØØ”jðñ ô ð ŒKÔ0°Ô3Ø!ð

ñ 

ô 

ˆõ œ	ÝŒLØØ˜œÔ<¸QÔ?À!ÑCÑDØØØ”jðñ ô ð ŒKÔ0°Ô3Ø!ð

ñ 

ô 

ˆõ ”kà˜c˜r˜cÔ"×)Ò)Ð*BÀ1Ô*EÀqÑIÔIØ˜c˜r˜cÔ"×)Ò)Ð*BÀ1Ô*EÀqÑIÔI×SÒSÐTUÐWXÑYÔYØ˜a˜b˜bÔ!×(Ò(Ð)AÀ!Ô)DÀaÑHÔHØ˜a˜b˜bÔ!×(Ò(Ð)AÀ!Ô)DÀaÑHÔH×RÒRÐSTÐVWÑXÔXð	ð ð
ñ 
ô 
÷ Š$ˆr�4—9’9˜R‘=”=Ñ
!Ô
!ð 	ð "×(Ò(¨°Q¬¸¸AÑ>Ô>ˆàÐrI   c                 ó®   — |�|�t          d¦  «        ‚|�|                     ¦   «         S |�|                     ¦   «         d d…         S t          d¦  «        ‚)NúDYou cannot specify both input_ids and inputs_embeds at the same timer&   ú5You have to specify either input_ids or inputs_embeds)rg   r™   )rE   r¡  r£  s      rH   Ú_get_input_shapez LayoutLMv2Model._get_input_shape•  sb   € ØÐ  ]Ð%>ÝÐcÑdÔdÐdØÐ"Ø—>’>Ñ#Ô#Ð#ØÐ&Ø ×%Ò%Ñ'Ô'¨¨¨Ô,Ð,åÐTÑUÔUÐUrI   r¡  rP   r  rš   r¢  r$   r£  r„   rÅ   c                 óT  — |                       ||¦  «        }	|�|j        n|j        }
t          |	¦  «        }| j        j        d         | j        j        d         z  |d<   t          j        |¦  «        }t          |                       ||¦  «        ¦  «        }|dxx         |d         z  cc<   t          j        |¦  «        }|                      | j        j        ||
|¦  «        }t          j        ||gd¬¦  «        }|€t          j	        |	|
¬¦  «        }t          j	        ||j
        |
¬¦  «        }t          j        ||gd¬¦  «        }|€!t          j        |	t
          j        |
¬¦  «        }|€5|	d         }| j        j        dd…d|…f         }|                     |	¦  «        }t          j        d|d         t
          j        |
¬¦  «                             |	d         d¦  «        }t          j        ||gd¬¦  «        }|€?t          j        t%          t          |	¦  «        dgz   ¦  «        t
          j        |
¬¦  «        }|                      |||||¬¦  «        }|                      |||¬	¦  «        }t          j        ||gd¬¦  «        }|                     d¦  «                             d
¦  «        }|                     | j
        ¬¦  «        }d|z
  t          j        | j
        ¦  «        j        z  } | j        ||f||dœ|¤Ž}|j        }|                      |¦  «        }t9          ||¬¦  «        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.
        image (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)` or `detectron.structures.ImageList` whose `tensors` is of shape `(batch_size, num_channels, height, width)`):
            Batch of document images.

        Examples:

        ```python
        >>> from transformers import AutoProcessor, LayoutLMv2Model, set_seed
        >>> from PIL import Image
        >>> import torch
        >>> from datasets import load_dataset

        >>> set_seed(0)

        >>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")
        >>> model = LayoutLMv2Model.from_pretrained("microsoft/layoutlmv2-base-uncased")


        >>> dataset = load_dataset("hf-internal-testing/fixtures_docvqa")
        >>> image = dataset["test"][0]["image"]

        >>> encoding = processor(image, return_tensors="pt")

        >>> outputs = model(**encoding)
        >>> last_hidden_states = outputs.last_hidden_state

        >>> last_hidden_states.shape
        torch.Size([1, 342, 768])
        ```
        Nr   r   rL   )r?  r>  é   )r¡  rP   r¢  r$   r£  ©r  rP   r$   rK   )r‡   r  )rP   r$   )r  Úpooler_output)r·  r?  rq  rF   r_  rA   ÚSizer³  rO   Úonesr‡   rq   rÝ   r‘  r$   rC   rB   r®  Útupler¥  r¨  r  r�   r‘   r’   r–  r  r—  r   )rE   r¡  rP   r  rš   r¢  r$   r£  r„   rf  r?  Úvisual_shaper¯  r²  Ú
final_bboxÚvisual_attention_maskÚfinal_attention_maskr¤  Úvisual_position_idsÚfinal_position_idsÚtext_layout_embÚ
visual_embÚ	final_embÚextended_attention_maskÚencoder_outputsÚsequence_outputrŒ  s                              rH   r¥   zLayoutLMv2Model.forwardŸ  sY  € ðb ×+Ò+¨I°}ÑEÔEˆØ%.Ð%:�Ô!Ð!ÀÔ@Tˆå˜KÑ(Ô(ˆØœ+Ô>¸qÔAÀDÄKÔDhÐijÔDkÑkˆ�Q‰Ý”z ,Ñ/Ô/ˆå˜4×0Ò0°¸MÑJÔJÑKÔKˆØ�AˆˆŒ˜, qœ/Ñ)ˆˆ‰Ý”j Ñ-Ô-ˆà×,Ò,¨T¬[Ô-QÐSWÐY_ÐalÑmÔmˆÝ”Y  kÐ2¸Ð:Ñ:Ô:ˆ
àÐ!Ý"œZ¨¸FÐCÑCÔCˆNå %¤
¨<¸~Ô?SÐ\bÐ cÑ cÔ cÐÝ$œy¨.Ð:OÐ)PÐVWÐXÑXÔXÐàÐ!Ý"œ[¨½E¼JÈvÐVÑVÔVˆNàÐØ$ QœˆJØœ?Ô7¸¸¸¸;¸J¸;¸ÔGˆLØ'×.Ò.¨{Ñ;Ô;ˆLå#œl¨1¨l¸1¬oÅUÄZÐX^Ð_Ñ_Ô_×fÒfØ˜ŒN˜Añ
ô 
Ðõ #œY¨Ð6IÐ'JÐPQÐRÑRÔRÐàˆ<Ý”;�u¥T¨+Ñ%6Ô%6¸!¸Ñ%<Ñ=Ô=ÅUÄZÐX^Ð_Ñ_Ô_ˆDà×4Ò4ØØØ)Ø%Ø'ð 5ñ 
ô 
ˆð ×.Ò.ØØØ,ð /ñ 
ô 
ˆ
õ
 ”I˜°
Ð;ÀÐCÑCÔCˆ	à"6×"@Ò"@ÀÑ"CÔ"C×"MÒ"MÈaÑ"PÔ"PÐà"9×"<Ò"<À4Ä:Ð"<Ñ"NÔ"NÐØ#&Ð)@Ñ#@ÅEÄKÐPTÔPZÑD[ÔD[ÔD_Ñ"_Ðà&˜$œ,ØØ#ð
ð Ø+ð	
ð 
ð
 ð
ð 
ˆð *Ô;ˆØŸš OÑ4Ô4ˆå)Ø-Ø'ð
ñ 
ô 
ð 	
rI   rª   )NN)NNNNNNN)rX   rY   rZ   rÎ   r_   Ú_can_record_outputsr*   rœ  rž  r¥  r¨  r³  r·  r   r   r   rA   Ú
LongTensorÚFloatTensorr   r   r¾  r   r¥   r\   r]   s   @rH   r*  r*  .  s¯  ø€ € € € € à,;ÐKbÐcÐcÐðð ð ð ð ð(/ð /ð /ð0ð 0ð 0ðð ð ð ð2	ð 	ð 	ð#ð #ð #ðJVð Vð Vð Vð  ØØð .2Ø(,Ø*.Ø37Ø26Ø04Ø26ðs
ð s
àÔ# dÑ*ðs
ð Ô Ñ%ðs
ð Ô  4Ñ'ð	s
ð
 Ô)¨DÑ0ðs
ð Ô(¨4Ñ/ðs
ð Ô&¨Ñ-ðs
ð Ô(¨4Ñ/ðs
ð Ð+Ô,ðs
ð 
Ð+Ñ	+ðs
ð s
ð s
ñ „^ñ „_ñ  Ôðs
ð s
ð s
ð s
ð s
rI   r*  ax  
    LayoutLMv2 Model with a sequence classification head on top (a linear layer on top of the concatenation of the
    final hidden state of the [CLS] token, average-pooled initial visual embeddings and average-pooled final visual
    embeddings, 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j        dz  de
e         deez  fd„¦   «         ¦   «         Zˆ xZS )Ú#LayoutLMv2ForSequenceClassificationc                 ó<  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        ¦  «        | _        t          j	        |j
        dz  |j        ¦  «        | _        |                      ¦   «          d S )Nr   ©r)   r*   Ú
num_labelsr*  r  r   r=   r>   r?   rn   r-   Ú
classifierr˜  rD   s     €rH   r*   z,LayoutLMv2ForSequenceClassification.__init__!  s~   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒÝ)¨&Ñ1Ô1ˆŒÝ”z &Ô"<Ñ=Ô=ˆŒÝœ) FÔ$6¸Ñ$:¸FÔ<MÑNÔNˆŒð 	�ŠÑÔÐÐÐrI   c                 ó$   — | j         j        j        S rª   ©r  r‘  r/   r›  s    rH   rœ  z8LayoutLMv2ForSequenceClassification.get_input_embeddings+  ó   € ØŒÔ)Ô9Ð9rI   Nr¡  rP   r  rš   r¢  r$   r£  Úlabelsr„   rÅ   c	                 óò  — |�|�t          d¦  «        ‚|�+|                      ||¦  «         |                     ¦   «         }
n.|�|                     ¦   «         dd…         }
nt          d¦  «        ‚|�|j        n|j        }t	          |
¦  «        }| j        j        d         | j        j        d         z  |d<   t          j        |¦  «        }t	          |
¦  «        }|dxx         |d         z  cc<   t          j        |¦  «        }| j	         
                    | j        j        |||¦  «        }t          j        d|d         t          j        |¬¦  «                             |
d         d¦  «        }| j	                             |||¬¦  «        } | j	        d|||||||d	œ|	¤Ž}|�|                     ¦   «         }
n|                     ¦   «         dd…         }
|
d         }|j        dd…d|…f         |j        dd…|d…f         }}|dd…ddd…f         }|                     d¬
¦  «        }|                     d¬
¦  «        }t          j        |||g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    rWt1          ¦   «         }| j        dk    r1 ||                     ¦   «         |                     ¦   «         ¦  «        }nŽ |||¦  «        }n�| j        j        dk    rGt5          ¦   «         } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }n*| j        j        dk    rt9          ¦   «         } |||¦  «        }t;          |||j        |j        ¬¦  «        S )am  
        input_ids (`torch.LongTensor` of shape `batch_size, sequence_length`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        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.
        image (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)` or `detectron.structures.ImageList` whose `tensors` is of shape `(batch_size, num_channels, height, width)`):
            Batch of document images.
        token_type_ids (`torch.LongTensor` of shape `batch_size, sequence_length`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:

            - 0 corresponds to a *sentence A* token,
            - 1 corresponds to a *sentence B* token.

            [What are token type IDs?](../glossary#token-type-ids)
        position_ids (`torch.LongTensor` of shape `batch_size, sequence_length`, *optional*):
            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
            config.max_position_embeddings - 1]`.

            [What are position IDs?](../glossary#position-ids)
        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).

        Example:

        ```python
        >>> from transformers import AutoProcessor, LayoutLMv2ForSequenceClassification, set_seed
        >>> from PIL import Image
        >>> import torch
        >>> from datasets import load_dataset

        >>> set_seed(0)

        >>> dataset = load_dataset("aharley/rvl_cdip", split="train", streaming=True)
        >>> data = next(iter(dataset))
        >>> image = data["image"].convert("RGB")

        >>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")
        >>> model = LayoutLMv2ForSequenceClassification.from_pretrained(
        ...     "microsoft/layoutlmv2-base-uncased", num_labels=dataset.info.features["label"].num_classes
        ... )

        >>> encoding = processor(image, return_tensors="pt")
        >>> sequence_label = torch.tensor([data["label"]])

        >>> outputs = model(**encoding, labels=sequence_label)

        >>> loss, logits = outputs.loss, outputs.logits
        >>> predicted_idx = logits.argmax(dim=-1).item()
        >>> predicted_answer = dataset.info.features["label"].names[4]
        >>> predicted_idx, predicted_answer  # results are not good without further fine-tuning
        (7, 'advertisement')
        ```
        Nrµ  r&   r¶  r   r   r>  rº  ©r¡  rP   r  rš   r¢  r$   r£  rL   Ú
regressionÚsingle_label_classificationÚmulti_label_classification©ÚlossÚlogitsr}   rŽ  rò   ) rg   Ú%warn_if_padding_and_no_attention_maskr™   r?  rq  rF   r_  rA   r¼  r  r³  rB   rÝ   r®  r¨  r  r  rO   r?   rÔ  Úproblem_typerÓ  r‡   ri   r   Úsqueezer   r|   r   r   r}   rŽ  )rE   r¡  rP   r  rš   r¢  r$   r£  rØ  r„   rf  r?  r¿  r¯  r²  rÃ  Úinitial_image_embeddingsÚoutputsr¤  rÊ  Úfinal_image_embeddingsÚcls_final_outputÚpooled_initial_image_embeddingsÚpooled_final_image_embeddingsrà  rß  Úloss_fcts                              rH   r¥   z+LayoutLMv2ForSequenceClassification.forward.  sE  € ð^ Ð  ]Ð%>ÝÐcÑdÔdÐdØÐ"Ø×6Ò6°yÀ.ÑQÔQÐQØ#Ÿ.š.Ñ*Ô*ˆKˆKØÐ&Ø'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKˆKåÐTÑUÔUÐUà%.Ð%:�Ô!Ð!ÀÔ@Tˆå˜KÑ(Ô(ˆØœ+Ô>¸qÔAÀDÄKÔDhÐijÔDkÑkˆ�Q‰Ý”z ,Ñ/Ô/ˆÝ˜;Ñ'Ô'ˆØ�AˆˆŒ˜, qœ/Ñ)ˆˆ‰Ý”j Ñ-Ô-ˆà”o×7Ò7ØŒKÔ0°$¸Àñ
ô 
ˆõ $œl¨1¨l¸1¬oÅUÄZÐX^Ð_Ñ_Ô_×fÒfØ˜ŒN˜Añ
ô 
Ðð $(¤?×#GÒ#GØØØ,ð $Hñ $
ô $
Ð ð />¨d¬oð 	/
ØØØØ)Ø)Ø%Ø'ð	/
ð 	/
ð ð	/
ð 	/
ˆð Ð Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà  ”^ˆ
àÔ% a a a¨¨*¨ nÔ5ØÔ% a a a¨¨¨ nÔ5ð 0ˆð
 +¨1¨1¨1¨a°°°¨7Ô3Ðð +C×*GÒ*GÈAÐ*GÑ*NÔ*NÐ'Ø(>×(CÒ(CÈÐ(CÑ(JÔ(JÐ%åœ)ØÐ>Ð@]Ð^Ðdeð
ñ 
ô 
ˆð Ÿ,š, Ñ7Ô7ˆØ—’ Ñ1Ô1ˆàˆØÑØŒ{Ô'Ð/Ø”? 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 ¨Ñ/Ô/�å'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rI   ©NNNNNNNN)rX   rY   rZ   r*   rœ  r   r   rA   rÌ  rÍ  r   r   r¾  r   r¥   r\   r]   s   @rH   rÐ  rÐ    sR  ø€ € € € € ðð ð ð ð ð:ð :ð :ð Øð .2Ø(,Ø*.Ø37Ø26Ø04Ø26Ø*.ðk
ð k
àÔ# dÑ*ðk
ð Ô Ñ%ðk
ð Ô  4Ñ'ð	k
ð
 Ô)¨DÑ0ðk
ð Ô(¨4Ñ/ðk
ð Ô&¨Ñ-ðk
ð Ô(¨4Ñ/ðk
ð Ô  4Ñ'ðk
ð Ð+Ô,ðk
ð 
Ð)Ñ	)ðk
ð k
ð k
ñ „^ñ Ôðk
ð k
ð k
ð k
ð k
rI   rÐ  a�  
    LayoutLMv2 Model with a token classification head on top (a linear layer on top of the text part of the hidden
    states) e.g. for sequence labeling (information extraction) tasks such as
    [FUNSD](https://guillaumejaume.github.io/FUNSD/), [SROIE](https://rrc.cvc.uab.es/?ch=13),
    [CORD](https://github.com/clovaai/cord) and [Kleister-NDA](https://github.com/applicaai/kleister-nda).
    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j        dz  de
e         deez  fd„¦   «         ¦   «         Zˆ xZS )Ú LayoutLMv2ForTokenClassificationc                 ó6  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        ¦  «        | _        t          j	        |j
        |j        ¦  «        | _        |                      ¦   «          d S rª   rÒ  rD   s     €rH   r*   z)LayoutLMv2ForTokenClassification.__init__ç  sy   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒÝ)¨&Ñ1Ô1ˆŒÝ”z &Ô"<Ñ=Ô=ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐrI   c                 ó$   — | j         j        j        S rª   rÖ  r›  s    rH   rœ  z5LayoutLMv2ForTokenClassification.get_input_embeddingsñ  r×  rI   Nr¡  rP   r  rš   r¢  r$   r£  rØ  r„   rÅ   c	                 óê  —  | j         d|||||||dœ|	¤Ž}
|�|                     ¦   «         }n|                     ¦   «         dd…         }|d         }|
j        dd…d|…f         }|                      |¦  «        }|                      |¦  «        }d}|�Ft          ¦   «         } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }t          |||
j	        |
j
        ¬¦  «        S )af  
        input_ids (`torch.LongTensor` of shape `batch_size, sequence_length`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        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.
        image (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)` or `detectron.structures.ImageList` whose `tensors` is of shape `(batch_size, num_channels, height, width)`):
            Batch of document images.
        token_type_ids (`torch.LongTensor` of shape `batch_size, sequence_length`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:

            - 0 corresponds to a *sentence A* token,
            - 1 corresponds to a *sentence B* token.

            [What are token type IDs?](../glossary#token-type-ids)
        position_ids (`torch.LongTensor` of shape `batch_size, sequence_length`, *optional*):
            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
            config.max_position_embeddings - 1]`.

            [What are position IDs?](../glossary#position-ids)
        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]`.

        Example:

        ```python
        >>> from transformers import AutoProcessor, LayoutLMv2ForTokenClassification, set_seed
        >>> from PIL import Image
        >>> from datasets import load_dataset

        >>> set_seed(0)

        >>> datasets = load_dataset("nielsr/funsd", split="test")
        >>> labels = datasets.features["ner_tags"].feature.names
        >>> id2label = {v: k for v, k in enumerate(labels)}

        >>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased", revision="no_ocr")
        >>> model = LayoutLMv2ForTokenClassification.from_pretrained(
        ...     "microsoft/layoutlmv2-base-uncased", num_labels=len(labels)
        ... )

        >>> data = datasets[0]
        >>> image = Image.open(data["image_path"]).convert("RGB")
        >>> words = data["words"]
        >>> boxes = data["bboxes"]  # make sure to normalize your bounding boxes
        >>> word_labels = data["ner_tags"]
        >>> encoding = processor(
        ...     image,
        ...     words,
        ...     boxes=boxes,
        ...     word_labels=word_labels,
        ...     padding="max_length",
        ...     truncation=True,
        ...     return_tensors="pt",
        ... )

        >>> outputs = model(**encoding)
        >>> logits, loss = outputs.logits, outputs.loss

        >>> predicted_token_class_ids = logits.argmax(-1)
        >>> predicted_tokens_classes = [id2label[t.item()] for t in predicted_token_class_ids[0]]
        >>> predicted_tokens_classes[:5]  # results are not good without further fine-tuning
        ['I-HEADER', 'I-HEADER', 'I-QUESTION', 'I-HEADER', 'I-QUESTION']
        ```
        rÚ  Nr&   r   rÞ  rò   )r  r™   r  r?   rÔ  r   r|   rÓ  r   r}   rŽ  )rE   r¡  rP   r  rš   r¢  r$   r£  rØ  r„   rå  rf  r¤  rÊ  rà  rß  rê  s                    rH   r¥   z(LayoutLMv2ForTokenClassification.forwardô  s"  € ðp />¨d¬oð 	/
ØØØØ)Ø)Ø%Ø'ð	/
ð 	/
ð ð	/
ð 	/
ˆð Ð Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà  ”^ˆ
à!Ô3°A°A°A°{¸
°{°NÔCˆØŸ,š, Ñ7Ô7ˆØ—’ Ñ1Ô1ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬OÑ<Ô<¸f¿kºkÈ"¹o¼oÑNÔNˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rI   rë  )rX   rY   rZ   r*   rœ  r   r   rA   rÌ  rÍ  r   r   r¾  r   r¥   r\   r]   s   @rH   rí  rí  Þ  sR  ø€ € € € € ðð ð ð ð ð:ð :ð :ð Øð .2Ø(,Ø*.Ø37Ø26Ø04Ø26Ø*.ðu
ð u
àÔ# dÑ*ðu
ð Ô Ñ%ðu
ð Ô  4Ñ'ð	u
ð
 Ô)¨DÑ0ðu
ð Ô(¨4Ñ/ðu
ð Ô&¨Ñ-ðu
ð Ô(¨4Ñ/ðu
ð Ô  4Ñ'ðu
ð Ð+Ô,ðu
ð 
Ð&Ñ	&ðu
ð u
ð u
ñ „^ñ Ôðu
ð u
ð u
ð u
ð u
rI   rí  c                   ó0  ‡ — 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j        dz  de
e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚLayoutLMv2ForQuestionAnsweringTc                 ó  •— 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*   rÓ  r�  r*  r  r   rn   r-   Ú
qa_outputsr˜  )rE   rF   r�  rG   s      €rH   r*   z'LayoutLMv2ForQuestionAnswering.__init__p  so   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒØ.JˆÔ+Ý)¨&Ñ1Ô1ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐrI   c                 ó$   — | j         j        j        S rª   rÖ  r›  s    rH   rœ  z3LayoutLMv2ForQuestionAnswering.get_input_embeddings~  r×  rI   Nr¡  rP   r  rš   r¢  r$   r£  Ústart_positionsÚend_positionsr„   rÅ   c
                 óÔ  —  | j         d
|||||||dœ|
¤Ž}|�|                     ¦   «         }n|                     ¦   «         dd…         }|d         }|j        dd…d|…f         }|                      |¦  «        }|                     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 )a9  
        input_ids (`torch.LongTensor` of shape `batch_size, sequence_length`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        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.
        image (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)` or `detectron.structures.ImageList` whose `tensors` is of shape `(batch_size, num_channels, height, width)`):
            Batch of document images.
        token_type_ids (`torch.LongTensor` of shape `batch_size, sequence_length`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:

            - 0 corresponds to a *sentence A* token,
            - 1 corresponds to a *sentence B* token.

            [What are token type IDs?](../glossary#token-type-ids)
        position_ids (`torch.LongTensor` of shape `batch_size, sequence_length`, *optional*):
            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
            config.max_position_embeddings - 1]`.

            [What are position IDs?](../glossary#position-ids)

        Example:

        In this example below, we give the LayoutLMv2 model an image (of texts) and ask it a question. 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 AutoProcessor, LayoutLMv2ForQuestionAnswering, set_seed
        >>> import torch
        >>> from PIL import Image
        >>> from datasets import load_dataset

        >>> set_seed(0)
        >>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")
        >>> model = LayoutLMv2ForQuestionAnswering.from_pretrained("microsoft/layoutlmv2-base-uncased")

        >>> dataset = load_dataset("hf-internal-testing/fixtures_docvqa")
        >>> image = dataset["test"][0]["image"]
        >>> question = "When is coffee break?"
        >>> encoding = processor(image, question, return_tensors="pt")

        >>> outputs = model(**encoding)
        >>> predicted_start_idx = outputs.start_logits.argmax(-1).item()
        >>> predicted_end_idx = outputs.end_logits.argmax(-1).item()
        >>> predicted_start_idx, predicted_end_idx
        (30, 191)

        >>> predicted_answer_tokens = encoding.input_ids.squeeze()[predicted_start_idx : predicted_end_idx + 1]
        >>> predicted_answer = processor.tokenizer.decode(predicted_answer_tokens)
        >>> predicted_answer  # results are not good without further fine-tuning
        '44 a. m. to 12 : 25 p. m. 12 : 25 to 12 : 58 p. m. 12 : 58 to 4 : 00 p. m. 2 : 00 to 5 : 00 p. m. coffee break coffee will be served for men and women in the lobby adjacent to exhibit area. please move into exhibit area. ( exhibits open ) trrf general session ( part | ) presiding : lee a. waller trrf vice president " introductory remarks " lee a. waller, trrf vice presi - dent individual interviews with trrf public board members and sci - entific advisory council mem - bers conducted by trrf treasurer philip g. kuehn to get answers which the public refrigerated warehousing industry is looking for. plus questions from'
        ```

        ```python
        >>> target_start_index = torch.tensor([7])
        >>> target_end_index = torch.tensor([14])
        >>> outputs = model(**encoding, start_positions=target_start_index, end_positions=target_end_index)
        >>> predicted_answer_span_start = outputs.start_logits.argmax(-1).item()
        >>> predicted_answer_span_end = outputs.end_logits.argmax(-1).item()
        >>> predicted_answer_span_start, predicted_answer_span_end
        (30, 191)
        ```
        rÚ  Nr&   r   rL   r   )Úignore_indexrK   )rß  Ústart_logitsÚ
end_logitsr}   rŽ  rò   )r  r™   r  rô  Úsplitrã  r˜   r#  Úclampr   r   r}   rŽ  )rE   r¡  rP   r  rš   r¢  r$   r£  rö  r÷  r„   rå  rf  r¤  rÊ  rà  rú  rû  Ú
total_lossÚignored_indexrê  Ú
start_lossÚend_losss                          rH   r¥   z&LayoutLMv2ForQuestionAnswering.forward�  s  € ðn />¨d¬oð 	/
ØØØØ)Ø)Ø%Ø'ð	/
ð 	/
ð ð	/
ð 	/
ˆð Ð Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà  ”^ˆ
à!Ô3°A°A°A°{¸
°{°NÔCˆà—’ Ñ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å+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
rI   )T)	NNNNNNNNN)rX   rY   rZ   r*   rœ  r   r   rA   rÌ  rÍ  r   r   r¾  r   r¥   r\   r]   s   @rH   rò  rò  n  sm  ø€ € € € € ðð ð ð ð ð ð:ð :ð :ð Øð .2Ø(,Ø*.Ø37Ø26Ø04Ø26Ø37Ø15ðE
ð E
àÔ# dÑ*ðE
ð Ô Ñ%ðE
ð Ô  4Ñ'ð	E
ð
 Ô)¨DÑ0ðE
ð Ô(¨4Ñ/ðE
ð Ô&¨Ñ-ðE
ð Ô(¨4Ñ/ðE
ð Ô)¨DÑ0ðE
ð Ô'¨$Ñ.ðE
ð Ð+Ô,ðE
ð 
Ð-Ñ	-ðE
ð E
ð E
ñ „^ñ ÔðE
ð E
ð E
ð E
ð E
rI   rò  )rò  rÐ  rí  rÎ   r*  r  )TrÚ   rÛ   rª   )Er[   rŠ   rA   r   Útorch.nnr   r   r   Ú r   r  Úactivationsr	   Úmodeling_layersr
   Úmodeling_outputsr   r   r   r   r   Úmodeling_utilsr   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   r   Úutils.output_capturingr   Úconfiguration_layoutlmv2r   r-  Údetectron2.modelingr   ÚModuleÚ_load_from_state_dictr.  Ú
batch_normr/  Ú
get_loggerrX   rY  r   r_   r¨   r«   r¾   rÊ   rÎ   rí   rï   r  rI  r"  r†  r*  rÐ  rí  rò  Ú__all__rò   rI   rH   ú<module>r     sS  ðð  Ð à €€€à €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ð ÐÑÔð qØÐÐÐØ6Ð6Ð6Ð6Ð6Ð6ð LQÌ8Ì?ÔKp€JÔÔ Ô2ÔHà	ˆÔ	˜HÑ	%Ô	%€ð,+ð ,+ð ,+ð ,+ð ,+˜2œ9ñ ,+ô ,+ð ,+ð^P.ð P.ð P.ð P.ð P.˜bœiñ P.ô P.ð P.ðf ð  ð  ð  ð  ˜"œ)ñ  ô  ð  ð4ð ð ð ð ˜2œ9ñ ô ð ðð ð ð ð ˜RœYñ ô ð ð ð ð ð ð �r”yñ ô ð ð"ð "ð "ð "ð "Ð0ñ "ô "ð "ðJ)ð )ð )ð )ðXT@ð T@ð T@ð T@ð T@˜œ	ñ T@ô T@ð T@ðn ðAð Að Að Að A ñ Aô Añ „ðAð<ð ð ð ð0?jð ?jð ?jð ?jð ?j˜rœyñ ?jô ?jð ?jðDð ð ð ð �r”yñ ô ð ð ðf
ð f
ð f
ð f
ð f
Ð/ñ f
ô f
ñ „ðf
ðR €ððñ ô ð{
ð {
ð {
ð {
ð {
Ð*Cñ {
ô {
ñô ð{
ð| €ððñ ô ðE
ð E
ð E
ð E
ð E
Ð'@ñ E
ô E
ñô ðE
ðP ðY
ð Y
ð Y
ð Y
ð Y
Ð%>ñ Y
ô Y
ñ „ðY
ðxð ð €€€rI   