Ë
    T^(hÙô  ã                   ó&  — d Z ddlZddlmZmZm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mZmZmZmZ dd	lmZ dd
lmZ ddlmZmZmZmZmZmZ ddl m!Z!  e«       rMddl"Z"ddl#m$Z$ ej                  jJ                  jL                  e"jN                  jP                  jR                  _&         ejT                  e+«      Z,dZ-dZ. G d„ dejJ                  «      Z/ G d„ dejJ                  «      Z0 G d„ dejJ                  «      Z1 G d„ dejJ                  «      Z2 G d„ dejJ                  «      Z3 G d„ dejJ                  «      Z4 G d„ dejJ                  «      Z5d8d„Z6 G d „ d!ejJ                  «      Z7 G d"„ d#e«      Z8d9d$„Z9 G d%„ d&ejJ                  «      Z:d'Z;d(Z< G d)„ d*ejJ                  «      Z= ed+e;«       G d,„ d-e8«      «       Z> ed.e;«       G d/„ d0e8«      «       Z? ed1e;«       G d2„ d3e8«      «       Z@ ed4e;«       G d5„ d6e8«      «       ZAg d7¢ZBy):zPyTorch LayoutLMv2 model.é    N)ÚOptionalÚTupleÚUnion)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )ÚACT2FN)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚPreTrainedModel)Úapply_chunking_to_forward)Úadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚis_detectron2_availableÚloggingÚreplace_return_docstringsÚrequires_backendsé   )ÚLayoutLMv2Config)ÚMETA_ARCH_REGISTRYz!microsoft/layoutlmv2-base-uncasedr   c                   ó(   ‡ — 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                 óü  •— t         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.                  «      | _        | j3                  dt5        j6                  |j                  «      j9                  d«      d¬«       y )N)Úpadding_idx©ÚepsÚposition_ids)r   éÿÿÿÿF©Ú
persistent)Úsuperr   Ú__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/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/layoutlmv2/modeling_layoutlmv2.pyr'   zLayoutLMv2Embeddings.__init__@   sb  ø€ ÜÔ" DÑ2Ô4Ü!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ ä%'§\¡\°&×2SÑ2SÐU[×UkÑUkÓ%lˆÔ"Ü%'§\¡\°&×2SÑ2SÐU[×UkÑUkÓ%lˆÔ"Ü%'§\¡\°&×2SÑ2SÐU[×UfÑUfÓ%gˆÔ"Ü%'§\¡\°&×2SÑ2SÐU[×UfÑUfÓ%gˆÔ"Ü%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"äŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒà×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	õ 	
ó    c                 óô  — 	 | j                  |d d …d d …df   «      }| j                  |d d …d d …df   «      }| j                  |d d …d d …df   «      }| j                  |d d …d d …df   «      }| j                  |d d …d d …df   |d d …d d …df   z
  «      }| j	                  |d d …d d …df   |d d …d d …df   z
  «      }t        j                  ||||||gd¬«      }	|	S # t        $ r}t        d«      |‚d }~ww xY w)Nr   r   é   r
   z;The `bbox` coordinate values should be within 0-1000 range.r#   ©Údim)r1   r2   Ú
IndexErrorr4   r5   r>   Úcat)
rB   ÚbboxÚleft_position_embeddingsÚupper_position_embeddingsÚright_position_embeddingsÚlower_position_embeddingsÚer4   r5   Úspatial_position_embeddingss
             rE   Ú!_calc_spatial_position_embeddingsz6LayoutLMv2Embeddings._calc_spatial_position_embeddingsR   s(  € ð	cØ'+×'AÑ'AÀ$ÂqÊ!ÈQÀwÁ-Ó'PÐ$Ø(,×(BÑ(BÀ4ÊÊ1ÈaÈÁ=Ó(QÐ%Ø(,×(BÑ(BÀ4ÊÊ1ÈaÈÁ=Ó(QÐ%Ø(,×(BÑ(BÀ4ÊÊ1ÈaÈÁ=Ó(QÐ%ð !%× :Ñ :¸4ÂÂ1ÀaÀ¹=È4ÒPQÒSTÐVWÐPWÉ=Ñ;XÓ YÐØ $× :Ñ :¸4ÂÂ1ÀaÀ¹=È4ÒPQÒSTÐVWÐPWÉ=Ñ;XÓ YÐä&+§i¡ià(Ø)Ø)Ø)Ø%Ø%ðð ô
'
Ð#ð +Ð*øô# ò 	cÜÐZÓ[ÐabÐbûð	cús   ‚A,C Ã	C7Ã&C2Ã2C7)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   rT   Ú__classcell__©rD   s   @rE   r   r   =   s   ø„ ÙQô
ö$+rF   r   c                   ó<   ‡ — e Zd Zˆ fd„Zd„ Zd„ Z	 	 	 	 	 dd„Zˆ xZS )ÚLayoutLMv2SelfAttentionc                 ó˜  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |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                  «      «      | _        n�t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j.                  |j0                  «      | _        y )
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Ú	Parameterr>   ÚzerosÚq_biasÚv_biasÚqueryÚkeyÚvaluer:   Úattention_probs_dropout_probr<   rA   s     €rE   r'   z LayoutLMv2SelfAttention.__init__m   s¶  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð Ÿ™ˆŒØ#)×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔà+1×+MÑ+MˆÔ(Ø*0×*KÑ*KˆÔ'à�?Š?Ü Ÿi™i¨×(:Ñ(:¸AÀ×@RÑ@RÑ<RÐY^Ô_ˆDŒOÜŸ,™,¤u§{¡{°1°a¸×9KÑ9KÓ'LÓMˆDŒKÜŸ,™,¤u§{¡{°1°a¸×9KÑ9KÓ'LÓMˆD�KäŸ™ 6×#5Ñ#5°t×7IÑ7IÓJˆDŒJÜ—y‘y ×!3Ñ!3°T×5GÑ5GÓHˆDŒHÜŸ™ 6×#5Ñ#5°t×7IÑ7IÓJˆDŒJä—z‘z &×"EÑ"EÓFˆ�rF   c                 ó    — |j                  «       d d | j                  | j                  fz   } |j                  |Ž }|j	                  dddd«      S )Nr#   r   rH   r   r
   )Úsizerb   rg   ÚviewÚpermute)rB   ÚxÚnew_x_shapes      rE   Útranspose_for_scoresz,LayoutLMv2SelfAttention.transpose_for_scores‡   sN   € Ø—f‘f“h˜s �m t×'?Ñ'?À×AYÑAYÐ&ZÑZˆØˆA�F‰F�KÐ ˆØ�y‰y˜˜A˜q !Ó$Ð$rF   c                 ó  — | j                   rÉ| j                  |«      }t        j                  |dd¬«      \  }}}|j	                  «       | j
                  j	                  «       k(  r|| j
                  z   }|| j                  z   }n…d|j	                  «       dz
  z  dz   }| | j
                  j                  |Ž z   }| | j                  j                  |Ž z   }n3| j                  |«      }| j                  |«      }| j                  |«      }|||fS )Nr
   r#   rI   )r   r   )r#   )re   rl   r>   ÚchunkÚ
ndimensionro   rp   rw   rq   rr   rs   )rB   Úhidden_statesÚqkvÚqÚkÚvÚ_szs          rE   Úcompute_qkvz#LayoutLMv2SelfAttention.compute_qkvŒ   së   € Ø�=Š=Ø—/‘/ -Ó0ˆCÜ—k‘k # q¨bÔ1‰GˆAˆq�!Ø�|‰|‹~ §¡×!7Ñ!7Ó!9Ò9Ø˜Ÿ™‘O�Ø˜Ÿ™‘O‘à˜aŸl™l›n¨qÑ0Ñ1°EÑ9�ØÐ(˜Ÿ™×(Ñ(¨#Ð.Ñ.�ØÐ(˜Ÿ™×(Ñ(¨#Ð.Ñ.‘à—
‘
˜=Ó)ˆAØ—‘˜Ó'ˆAØ—
‘
˜=Ó)ˆAØ�!�QˆwˆrF   c                 óÆ  — | j                  |«      \  }}}	| j                  |«      }
| j                  |«      }| j                  |	«      }|
t        j                  | j                  «      z  }
t        j                  |
|j                  dd«      «      }| j                  r||z  }| j                  r||z  }|j                  «       j                  |j                  t
        j                  «      t        j                  |j                  «      j                   «      }t"        j$                  j'                  |dt
        j(                  ¬«      j+                  |«      }| j-                  |«      }|�||z  }t        j                  ||«      }|j/                  dddd«      j1                  «       }|j3                  «       d d | j4                  fz   } |j6                  |Ž }|r||f}|S |f}|S )Nr#   éþÿÿÿ)rJ   Údtyper   rH   r   r
   )r…   r{   ÚmathÚsqrtrg   r>   ÚmatmulÚ	transposeri   rj   ÚfloatÚmasked_fill_ÚtoÚboolÚfinforˆ   Úminr   Ú
functionalÚsoftmaxÚfloat32Útype_asr<   rx   Ú
contiguousrv   rh   rw   )rB   r   Úattention_maskÚ	head_maskÚoutput_attentionsÚrel_posÚ
rel_2d_posr�   r‚   rƒ   Úquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                     rE   ÚforwardzLayoutLMv2SelfAttention.forward�   sÊ  € ð ×"Ñ" =Ó1‰ˆˆ1ˆað ×/Ñ/°Ó2ˆØ×-Ñ-¨aÓ0ˆ	Ø×/Ñ/°Ó2ˆà!¤D§I¡I¨d×.FÑ.FÓ$GÑGˆä Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐØ×+Ò+Ø Ñ'ÐØ×*Ò*Ø 
Ñ*ÐØ+×1Ñ1Ó3×@Ñ@Ø×ÑœeŸj™jÓ)¬5¯;©;Ð7G×7MÑ7MÓ+N×+RÑ+Ró
Ðô Ÿ-™-×/Ñ/Ð0@ÀbÔPU×P]ÑP]Ð/Ó^×fÑfÐgrÓsˆð Ÿ,™, Ó7ˆð Ð Ø-°	Ñ9ˆOäŸ™ _°kÓBˆØ%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆá6G�= /Ð2ˆØˆð O\ÐM]ˆØˆrF   ©NNFNN)rU   rV   rW   r'   r{   r…   r¥   rY   rZ   s   @rE   r\   r\   l   s)   ø„ ôGò4%ò
ð( ØØØØ÷)rF   r\   c                   ó0   ‡ — e Zd Zˆ fd„Z	 	 	 	 	 dd„Zˆ xZS )ÚLayoutLMv2Attentionc                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y ©N)r&   r'   r\   rB   ÚLayoutLMv2SelfOutputÚoutputrA   s     €rE   r'   zLayoutLMv2Attention.__init__Ê   s&   ø€ Ü‰ÑÔÜ+¨FÓ3ˆŒ	Ü*¨6Ó2ˆ�rF   c                 óp   — | j                  ||||||¬«      }| j                  |d   |«      }|f|dd  z   }	|	S )N©r›   rœ   r   r   )rB   r¬   )
rB   r   r˜   r™   rš   r›   rœ   Úself_outputsÚattention_outputr¤   s
             rE   r¥   zLayoutLMv2Attention.forwardÏ   sY   € ð —y‘yØØØØØØ!ð !ó 
ˆð  Ÿ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆrF   r¦   ©rU   rV   rW   r'   r¥   rY   rZ   s   @rE   r¨   r¨   É   s   ø„ ô3ð ØØØØ÷rF   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                  «      | _
        y ©Nr    )r&   r'   r   rk   r*   Údenser8   r9   r:   r;   r<   rA   s     €rE   r'   zLayoutLMv2SelfOutput.__init__æ   s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rF   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rª   ©rµ   r<   r8   ©rB   r   Úinput_tensors      rE   r¥   zLayoutLMv2SelfOutput.forwardì   ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐrF   r±   rZ   s   @rE   r«   r«   å   s   ø„ ô>örF   r«   c                   óV   ‡ — 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                     | _        y |j                  | _        y rª   )r&   r'   r   rk   r*   Úintermediate_sizerµ   Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnrA   s     €rE   r'   zLayoutLMv2Intermediate.__init__õ   s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$rF   r   Úreturnc                 óJ   — | j                  |«      }| j                  |«      }|S rª   )rµ   rÂ   )rB   r   s     rE   r¥   zLayoutLMv2Intermediate.forwardý   s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐrF   ©rU   rV   rW   r'   r>   ÚTensorr¥   rY   rZ   s   @rE   r¼   r¼   ô   s#   ø„ ô9ð U§\¡\ð °e·l±l÷ rF   r¼   c                   ón   ‡ — 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                  «      | _        y r´   )r&   r'   r   rk   r¾   r*   rµ   r8   r9   r:   r;   r<   rA   s     €rE   r'   zLayoutLMv2Output.__init__  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rF   r   r¹   rÃ   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rª   r·   r¸   s      rE   r¥   zLayoutLMv2Output.forward  rº   rF   rÅ   rZ   s   @rE   rÈ   rÈ     s1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ rF   rÈ   c                   ó6   ‡ — e Zd Zˆ fd„Z	 	 	 	 	 dd„Zd„ Zˆ xZS )ÚLayoutLMv2Layerc                 ó²   •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        t        |«      | _        t        |«      | _	        y )Nr   )
r&   r'   Úchunk_size_feed_forwardÚseq_len_dimr¨   Ú	attentionr¼   ÚintermediaterÈ   r¬   rA   s     €rE   r'   zLayoutLMv2Layer.__init__  sI   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ,¨VÓ4ˆŒÜ2°6Ó:ˆÔÜ& vÓ.ˆ�rF   c                 ó¬   — | j                  ||||||¬«      }|d   }|dd  }	t        | j                  | j                  | j                  |«      }
|
f|	z   }	|	S )N)rš   r›   rœ   r   r   )rÐ   r   Úfeed_forward_chunkrÎ   rÏ   )rB   r   r˜   r™   rš   r›   rœ   Úself_attention_outputsr°   r¤   Úlayer_outputs              rE   r¥   zLayoutLMv2Layer.forward  s|   € ð "&§¡ØØØØ/ØØ!ð "0ó "
Ðð 2°!Ñ4Ðà(¨¨Ð,ˆä0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð  �/ GÑ+ˆàˆrF   c                 óL   — | j                  |«      }| j                  ||«      }|S rª   )rÑ   r¬   )rB   r°   Úintermediate_outputrÕ   s       rE   rÓ   z"LayoutLMv2Layer.feed_forward_chunk7  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐrF   r¦   )rU   rV   rW   r'   r¥   rÓ   rY   rZ   s   @rE   rÌ   rÌ     s#   ø„ ô/ð ØØØØóö8rF   rÌ   c                 ó6  — d}|r4|dz  }|| dkD  j                  «       |z  z  }t        j                  | «      }n*t        j                  |  t        j                  | «      «      }|dz  }||k  }|t        j
                  |j                  «       |z  «      t        j
                  ||z  «      z  ||z
  z  j                  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   rH   r   )Úlongr>   Ú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	            rE   Úrelative_position_bucketré   =  s  € ð* €CÙØ˜ÑˆØÐ! AÑ%×+Ñ+Ó-°Ñ;Ñ;ˆÜ�I‰IÐ'Ó(‰ä�I‰IÐ(Ð(¬%×*:Ñ*:Ð;LÓ*MÓNˆð ˜qÑ €IØ�9‰}€Hð Ü�	‰	�!—'‘'“)˜iÑ'Ó(¬4¯8©8°LÀ9Ñ4LÓ+MÑMÐQ\Ð_hÑQhÑiß�bŒ�‰ƒnñ€Lô —9‘9˜\¬5¯?©?¸<ÈÐWXÉÓ+YÓZ€LàŒ5�;‰;�x  LÓ1Ñ1€CØ€JrF   c                   ó@   ‡ — e Zd Zˆ fd„Zd„ Zd„ Z	 	 	 	 	 	 	 dd„Zˆ xZS )ÚLayoutLMv2Encoderc                 óò  •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        |j                  | _	        |j                  | _
        | j                  rS|j                  | _        |j                  | _        t        j                  | j                  |j                  d¬«      | _        | j                  r„|j                   | _        |j"                  | _        t        j                  | j"                  |j                  d¬«      | _        t        j                  | j"                  |j                  d¬«      | _        d| _        y c c}w )NFr`   )r&   r'   rC   r   Ú
ModuleListÚrangeÚnum_hidden_layersrÌ   Úlayerri   rj   Úrel_pos_binsÚmax_rel_posrk   rb   Úrel_pos_biasÚmax_rel_2d_posÚrel_2d_pos_binsÚrel_pos_x_biasÚrel_pos_y_biasÚgradient_checkpointing)rB   rC   Ú_rD   s      €rE   r'   zLayoutLMv2Encoder.__init__j  s  ø€ Ü‰ÑÔØˆŒÜ—]‘]ÄUÈ6×KcÑKcÓEdÖ#eÀ¤O°FÕ$;Ò#eÓfˆŒ
à+1×+MÑ+MˆÔ(Ø*0×*KÑ*KˆÔ'à×+Ò+Ø &× 3Ñ 3ˆDÔØ%×1Ñ1ˆDÔÜ "§	¡	¨$×*;Ñ*;¸V×=WÑ=WÐ^cÔ dˆDÔà×*Ò*Ø"(×"7Ñ"7ˆDÔØ#)×#9Ñ#9ˆDÔ Ü"$§)¡)¨D×,@Ñ,@À&×B\ÑB\ÐchÔ"iˆDÔÜ"$§)¡)¨D×,@Ñ,@À&×B\ÑB\ÐchÔ"iˆDÔà&+ˆÕ#ùò! $fs   ½E4c                 ót  — |j                  d«      |j                  d«      z
  }t        || j                  | j                  ¬«      }t	        j
                  «       5  | j                  j                  j                  «       |   j                  dddd«      }d d d «       |j                  «       }|S # 1 sw Y   ŒxY w)Nr‡   r#   ©râ   rã   r   r
   r   rH   )Ú	unsqueezeré   rñ   rò   r>   Úno_gradró   ÚweightÚtrx   r—   )rB   r"   Úrel_pos_matr›   s       rE   Ú!_calculate_1d_position_embeddingsz3LayoutLMv2Encoder._calculate_1d_position_embeddings  s¨   € Ø"×,Ñ,¨RÓ0°<×3IÑ3IÈ"Ó3MÑMˆÜ*ØØ×)Ñ)Ø×)Ñ)ô
ˆô �]‰]‹_ñ 	PØ×'Ñ'×.Ñ.×0Ñ0Ó2°7Ñ;×CÑCÀAÀqÈ!ÈQÓOˆG÷	Pà×$Ñ$Ó&ˆØˆ÷	Pð 	Pús   Á:B.Â.B7c                 óÊ  — |d d …d d …df   }|d d …d d …df   }|j                  d«      |j                  d«      z
  }|j                  d«      |j                  d«      z
  }t        || j                  | j                  ¬«      }t        || j                  | j                  ¬«      }t	        j
                  «       5  | j                  j                  j                  «       |   j                  dddd«      }| j                  j                  j                  «       |   j                  dddd«      }d d d «       |j                  «       }|j                  «       }||z   }|S # 1 sw Y   Œ0xY w)Nr   r
   r‡   r#   rû   r   rH   )rü   ré   rõ   rô   r>   rý   rö   rþ   rÿ   rx   r÷   r—   )	rB   rM   Úposition_coord_xÚposition_coord_yÚrel_pos_x_2d_matÚrel_pos_y_2d_matÚ	rel_pos_xÚ	rel_pos_yrœ   s	            rE   Ú!_calculate_2d_position_embeddingsz3LayoutLMv2Encoder._calculate_2d_position_embeddings�  s^  € Ø¢¢1 a ™=ÐØ¢¢1 a ™=ÐØ+×5Ñ5°bÓ9Ð<L×<VÑ<VÐWYÓ<ZÑZÐØ+×5Ñ5°bÓ9Ð<L×<VÑ<VÐWYÓ<ZÑZÐÜ,ØØ×,Ñ,Ø×,Ñ,ô
ˆ	ô
 -ØØ×,Ñ,Ø×,Ñ,ô
ˆ	ô �]‰]‹_ñ 	VØ×+Ñ+×2Ñ2×4Ñ4Ó6°yÑA×IÑIÈ!ÈQÐPQÐSTÓUˆIØ×+Ñ+×2Ñ2×4Ñ4Ó6°yÑA×IÑIÈ!ÈQÐPQÐSTÓUˆI÷	Vð ×(Ñ(Ó*ˆ	Ø×(Ñ(Ó*ˆ	Ø Ñ*ˆ
ØÐ÷	Vð 	Vús   Â7A3EÅE"c	           
      ó   — |rdnd }	|rdnd }
| j                   r| j                  |«      nd }| j                  r| j                  |«      nd }t	        | j
                  «      D ]p  \  }}|r|	|fz   }	|�||   nd }| j                  r/| j                  r#| j                  |j                  ||||||¬«      }n |||||||¬«      }|d   }|sŒh|
|d   fz   }
Œr |r|	|fz   }	|st        d„ ||	|
fD «       «      S t        ||	|
¬«      S )N© r®   r   r   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wrª   r  )Ú.0rƒ   s     rE   ú	<genexpr>z,LayoutLMv2Encoder.forward.<locals>.<genexpr>Ý  s   è ø€ ò àð
 �=ô ñùs   ‚)Úlast_hidden_stater   Ú
attentions)ri   r  rj   r	  Ú	enumeraterð   rø   ÚtrainingÚ_gradient_checkpointing_funcÚ__call__Útupler   )rB   r   r˜   r™   rš   Úoutput_hidden_statesÚreturn_dictrM   r"   Úall_hidden_statesÚall_self_attentionsr›   rœ   ÚiÚlayer_moduleÚlayer_head_maskÚlayer_outputss                    rE   r¥   zLayoutLMv2Encoder.forwardª  sb  € ñ #7™B¸DÐÙ$5™b¸4ÐàJN×JjÒJj�$×8Ñ8¸ÔFÐptˆØEI×EdÒEd�T×;Ñ;¸DÔAÐjnˆ
ä(¨¯©Ó4ò 	P‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!à.7Ð.C˜i¨šlÈˆOà×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)Ø!Ø"Ø#Ø%Ø#Ø)ð !Bó !‘ñ !-Ø!Ø"Ø#Ø%Ø#Ø)ô!�ð *¨!Ñ,ˆMÚ Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð9	Pñ<  Ø 1°]Ð4DÑ DÐáÜñ ð "Ø%Ø'ðôó ð ô Ø+Ø+Ø*ô
ð 	
rF   )NNFFTNN)rU   rV   rW   r'   r  r	  r¥   rY   rZ   s   @rE   rë   rë   i  s/   ø„ ô,ò*ò ð< ØØØ"ØØØ÷@
rF   rë   c                   ó   — e Zd ZdZeZdZd„ Zy)ÚLayoutLMv2PreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Ú
layoutlmv2c                 ó”  — t        |t        j                  «      rm|j                  j                  j                  d| j                  j                  ¬«       |j                  �%|j                  j                  j                  «        yyt        |t        j                  «      rz|j                  j                  j                  d| j                  j                  ¬«       |j                  �2|j                  j                  |j                     j                  «        yyt        |t        j                  «      rJ|j                  j                  j                  «        |j                  j                  j                  d«       yt        |t        «      r`| j                  j                  rI|j                   j                  j                  «        |j"                  j                  j                  «        yyt        |t$        «      rIt'        |d«      r<|j(                  j                  j                  d| j                  j                  ¬«       yyy)zInitialize the weightsg        )ÚmeanÚstdNç      ð?Úvisual_segment_embedding)r¿   r   rk   rþ   ÚdataÚnormal_rC   Úinitializer_rangera   Úzero_r(   r   r8   Úfill_r\   re   ro   rp   ÚLayoutLMv2Modelrc   r%  )rB   Úmodules     rE   Ú_init_weightsz'LayoutLMv2PreTrainedModel._init_weightsö  s”  € ä�fœbŸi™iÔ(ð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ×!Ñ!Ð-Ø—‘×"Ñ" 6×#5Ñ#5Ñ6×<Ñ<Õ>ð .ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜Ô 7Ô8Ø�{‰{×#Ò#Ø—‘×"Ñ"×(Ñ(Ô*Ø—‘×"Ñ"×(Ñ(Õ*ð $ô ˜¤Ô0Ü�vÐ9Ô:Ø×/Ñ/×4Ñ4×<Ñ<À#È4Ï;É;×KhÑKhÐ<Õið ;ð 1rF   N)rU   rV   rW   rX   r   Úconfig_classÚbase_model_prefixr-  r  rF   rE   r  r  í  s   „ ñð
 $€LØ$ÐójrF   r  c                 ój  — t        | t        j                  j                  j                  j
                  «      r*t        j                  j                  j                  | |«      S | }t        | t        j                  j                  «      rõt        j                  j                  | j                  | j                  dd|¬«      }t        j                  j                  | j                  «      |_        t        j                  j                  | j                  «      |_        | j                   |_        | j"                  |_        t        j$                  dt        j&                  | j                   j(                  ¬«      |_        | j-                  «       D ]!  \  }}|j/                  |t1        ||«      «       Œ# ~ |S )NT)Únum_featuresr!   ÚaffineÚtrack_running_statsÚprocess_groupr   ©rˆ   Údevice)r¿   r>   r   ÚmodulesÚ	batchnormÚ
_BatchNormÚSyncBatchNormÚconvert_sync_batchnormÚ
detectron2ÚlayersÚFrozenBatchNorm2dr1  r!   rm   rþ   ra   Úrunning_meanÚrunning_varÚtensorrÙ   r6  Únum_batches_trackedÚnamed_childrenÚ
add_moduleÚmy_convert_sync_batchnorm)r,  r4  Úmodule_outputÚnameÚchilds        rE   rE  rE    sE  € ä�&œ%Ÿ(™(×*Ñ*×4Ñ4×?Ñ?Ô@Ü�z‰z×'Ñ'×>Ñ>¸vÀ}ÓUÐUØ€MÜ�&œ*×+Ñ+×=Ñ=Ô>ÜŸ™×.Ñ.Ø×,Ñ,Ø—
‘
ØØ $Ø'ð /ó 
ˆô  %Ÿx™x×1Ñ1°&·-±-Ó@ˆÔÜ"ŸX™X×/Ñ/°·±Ó<ˆÔØ%+×%8Ñ%8ˆÔ"Ø$*×$6Ñ$6ˆÔ!Ü,1¯L©L¸Ä%Ç*Á*ÐU[×UhÑUh×UoÑUoÔ,pˆÔ)Ø×,Ñ,Ó.ò X‰ˆˆeØ× Ñ  Ô'@ÀÈÓ'VÕWðXàØÐrF   c                   ó*   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚLayoutLMv2VisualBackbonec           	      óH  •— t         ‰| �  «        |j                  «       | _        | 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                  «      }| j!                  dt#        j$                  | j                  j                  j                  «      j'                  |dd«      d¬«       | j!                  dt#        j$                  | j                  j                  j                  «      j'                  |dd«      d¬«       d| _        t#        j*                  «       rÝt,        j/                  d«       d}| j                  j1                  «       | j(                     j2                  }t5        j6                  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(  rJ|j<                  jC                  | j                  j1                  «       | j(                     jD                  «       | j                  j1                  «       | j(                     jD                  |j<                  d
   k(  sJ ‚y )NÚ
pixel_meanr   Fr$   Ú	pixel_stdÚp2z0using `AvgPool2d` instead of `AdaptiveAvgPool2d`)éà   rO  r   rH   )#r&   r'   Úget_detectron2_configÚcfgÚMODELÚMETA_ARCHITECTUREr   Úgetr¿   Úbackboner<  ÚmodelingÚFPNÚlenÚ
PIXEL_MEANÚ	PIXEL_STDr=   r>   rÆ   rw   Úout_feature_keyÚ$are_deterministic_algorithms_enabledÚloggerÚwarningÚoutput_shapeÚstrider   Ú	AvgPool2dr‰   ÚceilÚimage_feature_pool_shapeÚpoolÚAdaptiveAvgPool2dÚappendÚchannels)rB   rC   Ú	meta_archÚmodelÚnum_channelsÚinput_shapeÚbackbone_striderD   s          €rE   r'   z!LayoutLMv2VisualBackbone.__init__'  s®  ø€ Ü‰ÑÔØ×/Ñ/Ó1ˆŒØ—H‘H—N‘N×4Ñ4ˆ	Ø1Ô"×&Ñ& yÓ1°$·(±(Ó;ˆÜ˜%Ÿ.™.¬*×*=Ñ*=×*FÑ*F×*JÑ*JÔKÐKÐKØŸ™ˆŒä�4—8‘8—>‘>×,Ñ,Ó-´°T·X±X·^±^×5MÑ5MÓ1NÒNÐNÐNÜ˜4Ÿ8™8Ÿ>™>×4Ñ4Ó5ˆØ×ÑØÜ�L‰L˜Ÿ™Ÿ™×2Ñ2Ó3×8Ñ8¸ÀqÈ!ÓLØð 	ô 	
ð
 	×ÑØœŸ™ d§h¡h§n¡n×&>Ñ&>Ó?×DÑDÀ\ÐSTÐVWÓXÐejð 	ô 	
ð  $ˆÔÜ×5Ñ5Ô7Ü�N‰NÐMÔNØ$ˆKØ"Ÿm™m×8Ñ8Ó:¸4×;OÑ;OÑP×WÑWˆOÜŸ™ä—I‘IœdŸi™i¨°A©¸Ñ(HÓIÈF×LkÑLkÐlmÑLnÑnÓoÜ—I‘IœdŸi™i¨°A©¸Ñ(HÓIÈF×LkÑLkÐlmÑLnÑnÓoðóˆD�Iô ×,Ñ,¨V×-LÑ-LÈRÈaÐ-PÓQˆDŒIÜˆv×.Ñ.Ó/°1Ò4Ø×+Ñ+×2Ñ2°4·=±=×3MÑ3MÓ3OÐPT×PdÑPdÑ3e×3nÑ3nÔoØ�}‰}×)Ñ)Ó+¨D×,@Ñ,@ÑA×JÑJÈf×NmÑNmÐnoÑNpÒpÐpÑprF   c                 ó>  — t        j                  |«      r|n|j                  | j                  z
  | j                  z  }| j                  |«      }|| j                     }| j                  |«      j                  d¬«      j                  dd«      j                  «       }|S )NrH   )Ú	start_dimr   )r>   Ú	is_tensorrA  rL  rM  rU  r[  rd  ÚflattenrŒ   r—   )rB   ÚimagesÚimages_inputÚfeaturess       rE   r¥   z LayoutLMv2VisualBackbone.forwardJ  s…   € Ü#(§?¡?°6Ô#:™ÀÇÁÐQU×Q`ÑQ`Ñ`Ðdh×drÑdrÑrˆØ—=‘= Ó.ˆØ˜D×0Ñ0Ñ1ˆØ—9‘9˜XÓ&×.Ñ.¸Ð.Ó;×EÑEÀaÈÓK×VÑVÓXˆØˆrF   c           
      óð  — t         j                  j                  «       r?t         j                  j                  «       r!t         j                  j	                  «       dkD  st        d«      ‚t         j                  j	                  «       }t         j                  j                  «       }t         j                  j                  «       }||z  dk(  st        d«      ‚t        ||z  «      D �cg c]   }t        t        ||z  |dz   |z  «      «      ‘Œ" }}t        ||z  «      D �cg c]%  }t         j                  j                  ||   ¬«      ‘Œ' }}||z  }t        | j                  ||   ¬«      | _        y c c}w c c}w )Nr#   z/Make sure torch.distributed is set up properly.r   zGMake sure the number of processes can be divided by the number of nodesr   )Úranks)r4  )r>   ÚdistributedÚis_availableÚis_initializedÚget_rankÚRuntimeErrorÚcudaÚdevice_countÚget_world_sizerî   ÚlistÚ	new_grouprE  rU  )rB   Ú	self_rankÚ	node_sizeÚ
world_sizer  Únode_global_ranksÚsync_bn_groupsÚ	node_ranks           rE   Úsynchronize_batch_normz/LayoutLMv2VisualBackbone.synchronize_batch_normQ  sE  € ä×Ñ×*Ñ*Ô,Ü×!Ñ!×0Ñ0Ô2Ü×!Ñ!×*Ñ*Ó,¨rÒ1äÐPÓQÐQä×%Ñ%×.Ñ.Ó0ˆ	Ü—J‘J×+Ñ+Ó-ˆ	Ü×&Ñ&×5Ñ5Ó7ˆ
Ø˜YÑ&¨!Ò+ÜÐhÓiÐiäV[Ð\fÐjsÑ\sÓVtÖuÐQRœT¤%¨¨I©¸¸A¹ÀÑ7JÓ"KÕLÐuÐÐuäMRÐS]ÐajÑSjÓMkö
ØHIŒE×Ñ×'Ñ'Ð.?ÀÑ.BÐ'ÕCð
ˆð 
ð  Ñ*ˆ	ä1°$·-±-È~Ð^gÑOhÔiˆ�ùò vùò
s   Ã&%E.Ä*E3)rU   rV   rW   r'   r¥   r†  rY   rZ   s   @rE   rJ  rJ  &  s   ø„ ô!qòFöjrF   rJ  aM  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) sub-class. Use
    it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`LayoutLMv2Config`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aý  
    Args:
        input_ids (`torch.LongTensor` of shape `{0}`):
            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 `({0}, 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.

        attention_mask (`torch.FloatTensor` of shape `{0}`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)
        token_type_ids (`torch.LongTensor` of shape `{0}`, *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 `{0}`, *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)
        head_mask (`torch.FloatTensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
            Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This
            is useful if you want more control over how to convert *input_ids* indices into associated vectors than the
            model's internal embedding lookup matrix.
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLayoutLMv2Poolerc                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y rª   )r&   r'   r   rk   r*   rµ   ÚTanhÚ
activationrA   s     €rE   r'   zLayoutLMv2Pooler.__init__°  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�rF   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )rµ   r‹  )rB   r   Úfirst_token_tensorÚpooled_outputs       rE   r¥   zLayoutLMv2Pooler.forwardµ  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐrF   r±   rZ   s   @rE   rˆ  rˆ  ¯  s   ø„ ô$ö
rF   rˆ  zdThe bare LayoutLMv2 Model transformer outputting raw hidden-states without any specific head on top.c                   óÐ  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zdd„Zd„ Zd„ Zdd„Z	 e
ej                  d«      «       eee¬	«      	 	 	 	 	 	 	 	 	 	 	 dd
eej$                     deej$                     deej&                     deej&                     deej$                     deej$                     deej&                     deej&                     dee   dee   dee   deeef   fd„«       «       Zˆ xZS )r+  c                 óº  •— t        | d«       t        ‰| �	  |«       || _        |j                  | _        t        |«      | _        t        |«      | _        t        j                  |j                  d   |j                  «      | _        | j                  rEt        j                  t        j                  d|j                  «      j                   d   «      | _        t        j$                  |j                  |j&                  ¬«      | _        t        j*                  |j,                  «      | _        t1        |«      | _        t5        |«      | _        | j9                  «        y )Nr<  r#   r   r   r    )r   r&   r'   rC   Úhas_visual_segment_embeddingr   Ú
embeddingsrJ  Úvisualr   rk   rc  r*   Úvisual_projrm   r(   rþ   r%  r8   r9   Úvisual_LayerNormr:   r;   Úvisual_dropoutrë   Úencoderrˆ  ÚpoolerÚ	post_initrA   s     €rE   r'   zLayoutLMv2Model.__init__Ã  sü   ø€ Ü˜$ Ô-Ü‰Ñ˜Ô ØˆŒØ,2×,OÑ,OˆÔ)Ü.¨vÓ6ˆŒä.¨vÓ6ˆŒÜŸ9™9 V×%DÑ%DÀRÑ%HÈ&×J\ÑJ\Ó]ˆÔØ×,Ò,Ü,.¯L©L¼¿¹ÀaÈ×I[ÑI[Ó9\×9cÑ9cÐdeÑ9fÓ,gˆDÔ)Ü "§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÔÜ Ÿj™j¨×)CÑ)CÓDˆÔä(¨Ó0ˆŒÜ& vÓ.ˆŒð 	�‰ÕrF   c                 ó.   — | j                   j                  S rª   ©r’  r,   ©rB   s    rE   Úget_input_embeddingsz$LayoutLMv2Model.get_input_embeddings×  s   € Ø�‰×.Ñ.Ð.rF   c                 ó&   — || j                   _        y rª   r›  )rB   rs   s     rE   Úset_input_embeddingsz$LayoutLMv2Model.set_input_embeddingsÚ  s   € Ø*/ˆ�‰Õ'rF   c                 óŒ  — |�|j                  «       }n|j                  «       d d }|d   }|€Pt        j                  |t        j                  |j                  ¬«      }|j                  d«      j                  |«      }|€t        j                  |«      }|€| j                  j                  |«      }| j                  j                  |«      }| j                  j                  |«      }	| j                  j                  |«      }
||z   |	z   |
z   }| j                  j                  |«      }| j                  j                  |«      }|S )Nr#   r   r5  r   )rv   r>   r?   rÙ   r6  rü   Ú	expand_asrÜ   r’  r,   r.   rT   r7   r8   r<   )rB   Ú	input_idsrM   r"   Útoken_type_idsÚinputs_embedsrk  Ú
seq_lengthr.   rS   r7   r’  s               rE   Ú_calc_text_embeddingsz%LayoutLMv2Model._calc_text_embeddingsÝ  s$  € ØÐ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÐÜ Ÿ<™<¨
¼%¿*¹*ÈY×M]ÑM]Ô^ˆLØ'×1Ñ1°!Ó4×>Ñ>¸yÓIˆLØÐ!Ü"×-Ñ-¨iÓ8ˆNàÐ Ø ŸO™O×;Ñ;¸IÓFˆMØ"Ÿo™o×AÑAÀ,ÓOÐØ&*§o¡o×&WÑ&WÐX\Ó&]Ð#Ø $§¡× EÑ EÀnÓ UÐà"Ð%8Ñ8Ð;VÑVÐYnÑnˆ
Ø—_‘_×.Ñ.¨zÓ:ˆ
Ø—_‘_×,Ñ,¨ZÓ8ˆ
ØÐrF   c                 ó<  — | j                  | j                  |«      «      }| j                  j                  |«      }| j                  j	                  |«      }||z   |z   }| j
                  r|| j                  z  }| j                  |«      }| j                  |«      }|S rª   )	r”  r“  r’  r.   rT   r‘  r%  r•  r–  )rB   ÚimagerM   r"   Úvisual_embeddingsr.   rS   r’  s           rE   Ú_calc_img_embeddingsz$LayoutLMv2Model._calc_img_embeddingsö  s—   € Ø ×,Ñ,¨T¯[©[¸Ó-?Ó@ÐØ"Ÿo™o×AÑAÀ,ÓOÐØ&*§o¡o×&WÑ&WÐX\Ó&]Ð#Ø&Ð)<Ñ<Ð?ZÑZˆ
Ø×,Ò,Ø˜$×7Ñ7Ñ7ˆJØ×*Ñ*¨:Ó6ˆ
Ø×(Ñ(¨Ó4ˆ
ØÐrF   c           	      ó&  — 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 j                  |d   d«      |d d j                  |d   d«      j                  dd«      |dd  j                  |d   d«      |dd  j                  |d   d«      j                  dd«      gd¬«      j                  d|j                  d«      «      }|j                  |d   dd«      }|S )	Nr   iè  r   )r6  rˆ   Úfloor)Úrounding_moder#   rI   )r>   Údivr?   rˆ   rC   rc  ÚstackÚrepeatrŒ   rw   rv   )rB   rc  rM   r6  Úfinal_shapeÚvisual_bbox_xÚvisual_bbox_yÚvisual_bboxs           rE   Ú_calc_visual_bboxz!LayoutLMv2Model._calc_visual_bbox  sš  € ÜŸ	™	Ü�L‰LØØÐ0°Ñ3°aÑ7Ñ8ØØØ—j‘jôð �K‰K×0Ñ0°Ñ3Ø!ô

ˆô Ÿ	™	Ü�L‰LØØ˜Ÿ™×<Ñ<¸QÑ?À!ÑCÑDØØØ—j‘jôð �K‰K×0Ñ0°Ñ3Ø!ô

ˆô —k‘kà˜c˜rÐ"×)Ñ)Ð*BÀ1Ñ*EÀqÓIØ˜c˜rÐ"×)Ñ)Ð*BÀ1Ñ*EÀqÓI×SÑSÐTUÐWXÓYØ˜a˜bÐ!×(Ñ(Ð)AÀ!Ñ)DÀaÓHØ˜a˜bÐ!×(Ñ(Ð)AÀ!Ñ)DÀaÓH×RÑRÐSTÐVWÓXð	ð ô
÷ ‰$ˆr�4—9‘9˜R“=Ó
!ð 	ð "×(Ñ(¨°Q©¸¸AÓ>ˆàÐrF   c                 ó„   — |�|�t        d«      ‚|�|j                  «       S |�|j                  «       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)rd   rv   )rB   r¢  r¤  s      rE   Ú_get_input_shapez LayoutLMv2Model._get_input_shape&  sT   € ØÐ  ]Ð%>ÜÐcÓdÐdØÐ"Ø—>‘>Ó#Ð#ØÐ&Ø ×%Ñ%Ó'¨¨Ð,Ð,äÐTÓUÐUrF   z(batch_size, sequence_length)©Úoutput_typer.  r¢  rM   r¨  r˜   r£  r"   r™   r¤  rš   r  r  rÃ   c           
      óN	  — |	�|	n| j                   j                  }	|
�|
n| j                   j                  }
|�|n| j                   j                  }| j	                  ||«      }|�|j
                  n|j
                  }t        |«      }| j                   j                  d   | j                   j                  d   z  |d<   t        j                  |«      }t        | j	                  ||«      «      }|dxx   |d   z  cc<   t        j                  |«      }| j                  | j                   j                  |||«      }t        j                  ||gd¬«      }|€t        j                  ||¬«      }t        j                  ||¬«      }t        j                  ||gd¬«      }|€&t        j                  |t        j                  |¬«      }|€5|d   }| j                  j                   dd…d|…f   }|j#                  |«      }t        j$                  d|d   t        j                  |¬«      j'                  |d   d«      }t        j                  ||gd¬«      }|€<t        j                  t)        t        |«      dgz   «      t        j                  |¬«      }| j+                  |||||¬«      }| j-                  |||¬	«      }t        j                  ||gd¬«      }|j/                  d«      j/                  d
«      }|j1                  | j2                  ¬«      }d|z
  t        j4                  | j2                  «      j6                  z  }|�ñ|j9                  «       dk(  rh|j/                  d«      j/                  d«      j/                  d«      j/                  d«      }|j#                  | j                   j:                  dddd«      }nB|j9                  «       d
k(  r/|j/                  d«      j/                  d«      j/                  d«      }|j1                  t=        | j?                  «       «      j2                  ¬«      }ndg| j                   j:                  z  }| jA                  ||||||	|
|¬«      }|d   }| jC                  |«      }|s
||f|dd z   S tE        |||jF                  |jH                  ¬«      S )aŒ  
        Return:

        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", trust_remote_code=True)
        >>> image_path = dataset["test"][0]["file"]
        >>> image = Image.open(image_path).convert("RGB")

        >>> 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   rI   )r6  r5  é   )r¢  rM   r£  r"   r¤  ©r¨  rM   r"   rH   )rˆ   r$  r#   )rM   r"   r™   rš   r  r  )r  Úpooler_outputr   r  )%rC   rš   r  Úuse_return_dictr¹  r6  r~  rc  r>   ÚSizerµ  rL   Úonesrn   rÙ   r’  r"   r@   r?   r°  r  r¦  rª  rü   r�   rˆ   r‘   r’   rJ   rï   ÚnextÚ
parametersr—  r˜  r   r   r  )rB   r¢  rM   r¨  r˜   r£  r"   r™   r¤  rš   r  r  rk  r6  Ú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                                 rE   r¥   zLayoutLMv2Model.forward0  sQ  € ð\ 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà×+Ñ+¨I°}ÓEˆØ%.Ð%:�×!Ò!À×@TÑ@Tˆä˜KÓ(ˆØŸ+™+×>Ñ>¸qÑAÀDÇKÁK×DhÑDhÐijÑDkÑkˆ�Q‰Ü—z‘z ,Ó/ˆä˜4×0Ñ0°¸MÓJÓKˆØ�A‹˜, q™/Ñ)‹Ü—j‘j Ó-ˆà×,Ñ,¨T¯[©[×-QÑ-QÐSWÐY_ÐalÓmˆÜ—Y‘Y  kÐ2¸Ô:ˆ
àÐ!Ü"ŸZ™Z¨¸FÔCˆNä %§
¡
¨<ÀÔ GÐÜ$Ÿy™y¨.Ð:OÐ)PÐVWÔXÐàÐ!Ü"Ÿ[™[¨¼E¿J¹JÈvÔVˆNàÐØ$ Q™ˆJØŸ?™?×7Ñ7º¸;¸J¸;¸ÑGˆLØ'×.Ñ.¨{Ó;ˆLä#Ÿl™l¨1¨l¸1©oÄUÇZÁZÐX^Ô_×fÑfØ˜‰N˜Aó
Ðô #ŸY™Y¨Ð6IÐ'JÐPQÔRÐàˆ<Ü—;‘;œu¤T¨+Ó%6¸!¸Ñ%<Ó=ÄUÇZÁZÐX^Ô_ˆDà×4Ñ4ØØØ)Ø%Ø'ð 5ó 
ˆð ×.Ñ.ØØØ,ð /ó 
ˆ
ô
 —I‘I˜°
Ð;ÀÔCˆ	à"6×"@Ñ"@ÀÓ"C×"MÑ"MÈaÓ"PÐà"9×"<Ñ"<À4Ç:Á:Ð"<Ó"NÐØ#&Ð)@Ñ#@ÄEÇKÁKÐPT×PZÑPZÓD[×D_ÑD_Ñ"_ÐàÐ Ø�}‰}‹ !Ò#Ø%×/Ñ/°Ó2×<Ñ<¸QÓ?×IÑIÈ"ÓM×WÑWÐXZÓ[�	Ø%×,Ñ,¨T¯[©[×-JÑ-JÈBÐPRÐTVÐXZÓ[‘	Ø—‘“ AÒ%Ø%×/Ñ/°Ó2×<Ñ<¸RÓ@×JÑJÈ2ÓN�	Ø!Ÿ™¬4°·±Ó0AÓ+B×+HÑ+H˜ÓI‰Ià˜ §¡×!>Ñ!>Ñ>ˆIàŸ,™,ØØ#ØØ+ØØ/Ø!5Ø#ð 'ó 	
ˆð *¨!Ñ,ˆØŸ™ OÓ4ˆáØ# ]Ð3°oÀaÀbÐ6IÑIÐIä)Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
rF   rª   )NN)NNNNNNNNNNN)rU   rV   rW   r'   r�  rŸ  r¦  rª  rµ  r¹  r   ÚLAYOUTLMV2_INPUTS_DOCSTRINGÚformatr   r   Ú_CONFIG_FOR_DOCr   r>   Ú
LongTensorÚFloatTensorr�   r   r   r   r¥   rY   rZ   s   @rE   r+  r+  ¾  su  ø„ ô
ò(/ò0óò2	ò#óJVñ +Ð+F×+MÑ+MÐNmÓ+nÓoÙ¨?ÈÔYð 15Ø+/Ø-1Ø6:Ø59Ø37Ø15Ø59Ø,0Ø/3Ø&*ñI
à˜E×,Ñ,Ñ-ðI
ð �u×'Ñ'Ñ(ðI
ð ˜×)Ñ)Ñ*ð	I
ð
 ! ×!2Ñ!2Ñ3ðI
ð ! ×!1Ñ!1Ñ2ðI
ð ˜u×/Ñ/Ñ0ðI
ð ˜E×-Ñ-Ñ.ðI
ð   × 1Ñ 1Ñ2ðI
ð $ D™>ðI
ð ' t™nðI
ð ˜d‘^ðI
ð 
ˆuÐ0Ð0Ñ	1òI
ó Zó pôI
rF   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.
    c                   óÎ  ‡ — e Zd Zˆ fd„Zd„ Z eej                  d«      «       ee	e
¬«      	 	 	 	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deej                     d	eej                     d
eej                     deej                     deej                     deej                     dee   dee   dee   deee	f   fd„«       «       Zˆ xZS )Ú#LayoutLMv2ForSequenceClassificationc                 ó2  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  «      | _        t        j                  |j                  dz  |j                  «      | _        | j                  «        y )Nr
   ©r&   r'   Ú
num_labelsr+  r   r   r:   r;   r<   rk   r*   Ú
classifierr™  rA   s     €rE   r'   z,LayoutLMv2ForSequenceClassification.__init__È  sn   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ)¨&Ó1ˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒÜŸ)™) F×$6Ñ$6¸Ñ$:¸F×<MÑ<MÓNˆŒð 	�‰ÕrF   c                 óB   — | j                   j                  j                  S rª   ©r   r’  r,   rœ  s    rE   r�  z8LayoutLMv2ForSequenceClassification.get_input_embeddingsÒ  ó   € Ø�‰×)Ñ)×9Ñ9Ð9rF   úbatch_size, sequence_lengthrº  r¢  rM   r¨  r˜   r£  r"   r™   r¤  Úlabelsrš   r  r  rÃ   c                 ó`  — |�|n| j                   j                  }|�|�t        d«      ‚|�#| j                  ||«       |j	                  «       }n!|�|j	                  «       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                   j                  |||«      }t        j                  d|d   t        j                  |¬«      j                  |d   d«      }| j                  j                  |||¬«      }| j                  |||||||||
||¬	«      }|�|j	                  «       }n|j	                  «       dd }|d   }|d   dd…d|…f   |d   dd…|d…f   }}|dd…ddd…f   }|j!                  d¬
«      }|j!                  d¬
«      }t        j"                  |||gd¬
«      }| j%                  |«      }| j'                  |«      }d}|	��‡| j                   j(                  €�| j*                  dk(  rd| j                   _        nl| j*                  dkD  rL|	j,                  t        j                  k(  s|	j,                  t        j.                  k(  rd| j                   _        nd| j                   _        | j                   j(                  dk(  rIt1        «       }| j*                  dk(  r& ||j3                  «       |	j3                  «       «      }nŒ |||	«      }n‚| j                   j(                  dk(  r=t5        «       } ||j7                  d| j*                  «      |	j7                  d«      «      }n,| j                   j(                  dk(  rt9        «       } |||	«      }|s|f|dd z   }|�|f|z   S |S t;        |||j<                  |j>                  ¬«      S )aˆ  
        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).

        Returns:

        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, trust_remote_code=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   r5  r¾  ©r¢  rM   r¨  r˜   r£  r"   r™   r¤  rš   r  r  rI   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrH   ©ÚlossÚlogitsr   r  ) rC   rÀ  rd   Ú%warn_if_padding_and_no_attention_maskrv   r6  r~  rc  r>   rÁ  r   rµ  r?   rÙ   r°  rª  r"  rL   r<   rÛ  Úproblem_typerÚ  rˆ   rf   r	   Úsqueezer   rw   r   r   r   r  )rB   r¢  rM   r¨  r˜   r£  r"   r™   r¤  rà  rš   r  r  rk  r6  rÅ  r±  r´  rÉ  Úinitial_image_embeddingsr¤   r¥  rÐ  Úfinal_image_embeddingsÚcls_final_outputÚpooled_initial_image_embeddingsÚpooled_final_image_embeddingsrè  rç  Úloss_fctr¬   s                                  rE   r¥   z+LayoutLMv2ForSequenceClassification.forwardÕ  s
  € ðr &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐ  ]Ð%>ÜÐcÓdÐdØÐ"Ø×6Ñ6°yÀ.ÔQØ#Ÿ.™.Ó*‰KØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà%.Ð%:�×!Ò!À×@TÑ@Tˆä˜KÓ(ˆØŸ+™+×>Ñ>¸qÑAÀDÇKÁK×DhÑDhÐijÑDkÑkˆ�Q‰Ü—z‘z ,Ó/ˆÜ˜;Ó'ˆØ�A‹˜, q™/Ñ)‹Ü—j‘j Ó-ˆà—o‘o×7Ñ7Ø�K‰K×0Ñ0°$¸Àó
ˆô $Ÿl™l¨1¨l¸1©oÄUÇZÁZÐX^Ô_×fÑfØ˜‰N˜Aó
Ðð $(§?¡?×#GÑ#GØØØ,ð $Hó $
Ð ð —/‘/ØØØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#ð "ó 
ˆð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
Ø29¸!±*ºQÀÀÀ¸^Ñ2LÈgÐVWÉjÒYZÐ\fÑ\gÐYgÑNhÐ/ˆà*ª1¨a²¨7Ñ3Ðð +C×*GÑ*GÈAÐ*GÓ*NÐ'Ø(>×(CÑ(CÈÐ(CÓ(JÐ%äŸ)™)ØÐ>Ð@]Ð^Ðdeô
ˆð Ÿ,™, Ó7ˆØ—‘ Ó1ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�ÙØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rF   ©NNNNNNNNNNNN)rU   rV   rW   r'   r�  r   rÑ  rÒ  r   r   rÓ  r   r>   rÔ  rÕ  r�   r   r   r¥   rY   rZ   s   @rE   r×  r×  ¾  su  ø„ ôò:ñ +Ð+F×+MÑ+MÐNkÓ+lÓmÙÐ+CÐRaÔbð 15Ø+/Ø-1Ø6:Ø59Ø37Ø15Ø59Ø-1Ø,0Ø/3Ø&*ñZ
à˜E×,Ñ,Ñ-ðZ
ð �u×'Ñ'Ñ(ðZ
ð ˜×)Ñ)Ñ*ð	Z
ð
 ! ×!2Ñ!2Ñ3ðZ
ð ! ×!1Ñ!1Ñ2ðZ
ð ˜u×/Ñ/Ñ0ðZ
ð ˜E×-Ñ-Ñ.ðZ
ð   × 1Ñ 1Ñ2ðZ
ð ˜×)Ñ)Ñ*ðZ
ð $ D™>ðZ
ð ' t™nðZ
ð ˜d‘^ðZ
ð 
ˆuÐ.Ð.Ñ	/òZ
ó có nôZ
rF   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j                  d«      «       ee	e
¬«      	 	 	 	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deej                     d	eej                     d
eej                     deej                     deej                     deej                     dee   dee   dee   deee	f   fd„«       «       Zˆ xZS )Ú LayoutLMv2ForTokenClassificationc                 ó,  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _        | j                  «        y rª   rÙ  rA   s     €rE   r'   z)LayoutLMv2ForTokenClassification.__init__~  si   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ)¨&Ó1ˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrF   c                 óB   — | j                   j                  j                  S rª   rÝ  rœ  s    rE   r�  z5LayoutLMv2ForTokenClassification.get_input_embeddingsˆ  rÞ  rF   rß  rº  r¢  rM   r¨  r˜   r£  r"   r™   r¤  rà  rš   r  r  rÃ   c                 ó  — |�|n| j                   j                  }| j                  |||||||||
||¬«      }|�|j                  «       }n|j                  «       dd }|d   }|d   dd…d|…f   }| j	                  |«      }| j                  |«      }d}|	�<t        «       } ||j                  d| j                  «      |	j                  d«      «      }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  ¬«      S )a�  
        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]`.

        Returns:

        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", trust_remote_code=True)
        >>> 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']
        ```
        Nrâ  r#   r   r   rH   ræ  )rC   rÀ  r   rv   r<   rÛ  r   rw   rÚ  r   r   r  )rB   r¢  rM   r¨  r˜   r£  r"   r™   r¤  rà  rš   r  r  r¤   rk  r¥  rÐ  rè  rç  rñ  r¬   s                        rE   r¥   z(LayoutLMv2ForTokenClassification.forward‹  s:  € ðD &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—/‘/ØØØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#ð "ó 
ˆð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
à! !™*¢Q¨¨¨ ^Ñ4ˆØŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rF   rò  )rU   rV   rW   r'   r�  r   rÑ  rÒ  r   r   rÓ  r   r>   rÔ  rÕ  r�   r   r   r¥   rY   rZ   s   @rE   rô  rô  t  st  ø„ ôò:ñ +Ð+F×+MÑ+MÐNkÓ+lÓmÙÐ+@ÈÔ_ð 15Ø+/Ø-1Ø6:Ø59Ø37Ø15Ø59Ø-1Ø,0Ø/3Ø&*ñh
à˜E×,Ñ,Ñ-ðh
ð �u×'Ñ'Ñ(ðh
ð ˜×)Ñ)Ñ*ð	h
ð
 ! ×!2Ñ!2Ñ3ðh
ð ! ×!1Ñ!1Ñ2ðh
ð ˜u×/Ñ/Ñ0ðh
ð ˜E×-Ñ-Ñ.ðh
ð   × 1Ñ 1Ñ2ðh
ð ˜×)Ñ)Ñ*ðh
ð $ D™>ðh
ð ' t™nðh
ð ˜d‘^ðh
ð 
ˆuÐ+Ð+Ñ	,òh
ó `ó nôh
rF   rô  a  
    LayoutLMv2 Model with a span classification head on top for extractive question-answering tasks such as
    [DocVQA](https://rrc.cvc.uab.es/?ch=17) (a linear layer on top of the text part of the hidden-states output to
    compute `span start logits` and `span end logits`).
    c            !       óð  ‡ — e Zd Zdˆ fd„	Zd„ Z eej                  d«      «       ee	e
¬«      	 	 	 	 	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deej                     d	eej                     d
eej                     deej                     deej                     deej                     deej                     dee   dee   dee   deee	f   fd„«       «       Zˆ xZS )ÚLayoutLMv2ForQuestionAnsweringc                 óò   •— t         ‰| �  |«       |j                  | _        ||_        t	        |«      | _        t        j                  |j                  |j                  «      | _	        | j                  «        y rª   )r&   r'   rÚ  r‘  r+  r   r   rk   r*   Ú
qa_outputsr™  )rB   rC   r‘  rD   s      €rE   r'   z'LayoutLMv2ForQuestionAnswering.__init__  s[   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒØ.JˆÔ+Ü)¨&Ó1ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrF   c                 óB   — | j                   j                  j                  S rª   rÝ  rœ  s    rE   r�  z3LayoutLMv2ForQuestionAnswering.get_input_embeddings  rÞ  rF   rß  rº  r¢  rM   r¨  r˜   r£  r"   r™   r¤  Ústart_positionsÚend_positionsrš   r  r  rÃ   c                 ó”  — |�|n| j                   j                  }| j                  |||||||||||¬«      }|�|j                  «       }n|j                  «       dd }|d   }|d   dd…d|…f   }| j	                  |«      }|j                  dd¬«      \  }}|j                  d«      j                  «       }|j                  d«      j                  «       }d}|	�·|
�µt        |	j                  «       «      dkD  r|	j                  d«      }	t        |
j                  «       «      dkD  r|
j                  d«      }
|j                  d«      }|	j                  d|«      }	|
j                  d|«      }
t        |¬«      } |||	«      } |||
«      }||z   dz  }|s||f|dd z   }|�|f|z   S |S t        ||||j                  |j                  ¬	«      S )
u�  
        start_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for position (index) of the start of the labelled span for computing the token classification loss.
            Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence
            are not taken into account for computing the loss.
        end_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for position (index) of the end of the labelled span for computing the token classification loss.
            Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence
            are not taken into account for computing the loss.

        Returns:

        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", trust_remote_code=True)
        >>> image_path = dataset["test"][0]["file"]
        >>> image = Image.open(image_path).convert("RGB")
        >>> 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)
        ```
        Nrâ  r#   r   r   rI   )Úignore_indexrH   )rç  Ústart_logitsÚ
end_logitsr   r  )rC   rÀ  r   rv   rû  Úsplitrë  r—   rX  Úclampr   r   r   r  )rB   r¢  rM   r¨  r˜   r£  r"   r™   r¤  rý  rþ  rš   r  r  r¤   rk  r¥  rÐ  rè  r  r  Ú
total_lossÚignored_indexrñ  Ú
start_lossÚend_lossr¬   s                              rE   r¥   z&LayoutLMv2ForQuestionAnswering.forward  s  € ðT &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—/‘/ØØØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#ð "ó 
ˆð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
à! !™*¢Q¨¨¨ ^Ñ4ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÐ&¨=Ð+Dä�?×'Ñ'Ó)Ó*¨QÒ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ò,Ø -× 5Ñ 5°bÓ 9�à(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓEˆOØ)×/Ñ/°°=ÓAˆMä'°]ÔCˆHÙ! ,°Ó@ˆJÙ 
¨MÓ:ˆHØ$ xÑ/°1Ñ4ˆJáØ" JÐ/°'¸!¸"°+Ñ=ˆFØ/9Ð/E�Z�M FÑ*ÐQÈ6ÐQä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rF   )T)NNNNNNNNNNNNN)rU   rV   rW   r'   r�  r   rÑ  rÒ  r   r   rÓ  r   r>   rÔ  rÕ  r�   r   r   r¥   rY   rZ   s   @rE   rù  rù  ø  sŽ  ø„ õò:ñ +Ð+F×+MÑ+MÐNkÓ+lÓmÙÐ+GÐVeÔfð 15Ø+/Ø-1Ø6:Ø59Ø37Ø15Ø59Ø6:Ø48Ø,0Ø/3Ø&*ñA
à˜E×,Ñ,Ñ-ðA
ð �u×'Ñ'Ñ(ðA
ð ˜×)Ñ)Ñ*ð	A
ð
 ! ×!2Ñ!2Ñ3ðA
ð ! ×!1Ñ!1Ñ2ðA
ð ˜u×/Ñ/Ñ0ðA
ð ˜E×-Ñ-Ñ.ðA
ð   × 1Ñ 1Ñ2ðA
ð " %×"2Ñ"2Ñ3ðA
ð   × 0Ñ 0Ñ1ðA
ð $ D™>ðA
ð ' t™nðA
ð ˜d‘^ðA
ð 
ˆuÐ2Ð2Ñ	3òA
ó gó nôA
rF   rù  )rù  r×  rô  rÌ   r+  r  )Té    é€   rª   )CrX   r‰   Útypingr   r   r   r>   Útorch.utils.checkpointr   Útorch.nnr   r   r	   Úactivationsr   Úmodeling_outputsr   r   r   r   r   Úmodeling_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   r   r   Úconfiguration_layoutlmv2r   r<  Údetectron2.modelingr   ÚModuleÚ_load_from_state_dictr=  Ú
batch_normr>  Ú
get_loggerrU   r]  Ú_CHECKPOINT_FOR_DOCrÓ  r   r\   r¨   r«   r¼   rÈ   rÌ   ré   rë   r  rE  rJ  ÚLAYOUTLMV2_START_DOCSTRINGrÑ  rˆ  r+  r×  rô  rù  Ú__all__r  rF   rE   ú<module>r     s2  ðñ  ã ß )Ñ )ã Û Ý ß AÑ Aå !÷õ õ .Ý 6÷÷ õ 7ñ ÔÛÝ6ð LQÏ8É8Ï?É?×KpÑKp€J×Ñ× Ñ ×2Ñ2ÔHà	ˆ×	Ñ	˜HÓ	%€à9Ð Ø$€ô,+˜2Ÿ9™9ô ,+ô^Z˜bŸi™iô Zôz˜"Ÿ)™)ô ô8˜2Ÿ9™9ô ô˜RŸY™Yô ô �r—y‘yô ô(�b—i‘iô (óV)ôXA
˜Ÿ	™	ô A
ôHj ô jóBô0?j˜rŸy™yô ?jðD	Ð ð9Ð ôx�r—y‘yô ñ ØjØóôy
Ð/ó y
ó	ðy
ñx ðð óôj
Ð*Có j
óðj
ñZ ðð óôx
Ð'@ó x
óðx
ñv ðð
 óôQ
Ð%>ó Q
óðQ
òh�rF   