Ë
    ÜÓ^j°À  ã                   óv  — d Z ddlZddlZddlZddlmZ ddlmc 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 dd	lmZmZmZmZ dd
lmZ ddlmZ ddlmZ ddl m!Z!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z) ddl*m+Z+  e#jX                  e-«      Z. G d„ dej^                  «      Z0 G d„ dej^                  «      Z1 G d„ dej^                  «      Z2 G d„ dej^                  «      Z3 G d„ dej^                  «      Z4 G d„ de«      Z5 G d„ dej^                  «      Z6 G d „ d!ej^                  «      Z7 G d"„ d#ej^                  «      Z8e! G d$„ d%e«      «       Z9e! G d&„ d'e9«      «       Z: G d(„ d)ej^                  «      Z; e!d*¬+«       G d,„ d-e9«      «       Z<e! G d.„ d/e9«      «       Z= e!d0¬+«       G d1„ d2e9«      «       Z>g d3¢Z?y)4zPyTorch LayoutLMv3 model.é    N)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)Úauto_docstringÚcan_return_tupleÚloggingÚ	torch_int)ÚTransformersKwargsÚmerge_with_config_defaults)Úcapture_outputsé   )ÚLayoutLMv3Configc                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )ÚLayoutLMv3PatchEmbeddingsz„LayoutLMv3 image (patch) embeddings. This class also automatically interpolates the position embeddings for varying
    image sizes.c                 ó  •— t         ‰| �  «        t        |j                  t        j
                  j                  «      r|j                  n|j                  |j                  f}t        |j                  t        j
                  j                  «      r|j                  n|j                  |j                  f}|d   |d   z  |d   |d   z  f| _        t        j                  |j                  |j                  ||¬«      | _        y )Nr   r   )Úkernel_sizeÚstride)ÚsuperÚ__init__Ú
isinstanceÚ
input_sizeÚcollectionsÚabcÚIterableÚ
patch_sizeÚpatch_shapeÚnnÚConv2dÚnum_channelsÚhidden_sizeÚproj)ÚselfÚconfigÚ
image_sizer'   Ú	__class__s       €ú}/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/layoutlmv3/modeling_layoutlmv3.pyr!   z"LayoutLMv3PatchEmbeddings.__init__7   sÜ   ø€ Ü‰ÑÔô ˜&×+Ñ+¬[¯_©_×-EÑ-EÔFð ×Òà×#Ñ# V×%6Ñ%6Ð7ð 	ô ˜&×+Ñ+¬[¯_©_×-EÑ-EÔFð ×Òà×#Ñ# V×%6Ñ%6Ð7ð 	ð
 ' q™M¨Z¸©]Ñ:¸JÀq¹MÈZÐXYÉ]Ñ<ZÐ[ˆÔÜ—I‘I˜f×1Ñ1°6×3EÑ3EÐS]ÐfpÔqˆ�	ó    c                 ól  — | j                  |«      }|�|j                  d| j                  d   | j                  d   d«      }|j                  dddd«      }|j                  d   |j                  d   }}t        j                  |||fd¬«      }||z   }|j                  d«      j                  dd«      }|S )Nr   r   éÿÿÿÿr   é   Úbicubic)ÚsizeÚmode)	r-   Úviewr(   ÚpermuteÚshapeÚFÚinterpolateÚflattenÚ	transpose)r.   Úpixel_valuesÚposition_embeddingÚ
embeddingsÚpatch_heightÚpatch_widths         r2   Úforwardz!LayoutLMv3PatchEmbeddings.forwardG   sÅ   € Ø—Y‘Y˜|Ó,ˆ
àÐ)à!3×!8Ñ!8¸¸D×<LÑ<LÈQÑ<OÐQU×QaÑQaÐbcÑQdÐfhÓ!iÐØ!3×!;Ñ!;¸A¸qÀ!ÀQÓ!GÐØ(2×(8Ñ(8¸Ñ(;¸Z×=MÑ=MÈaÑ=P˜+ˆLÜ!"§¡Ð/AÈÐWbÐHcÐjsÔ!tÐØ#Ð&8Ñ8ˆJà×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆ
ØÐr3   ©N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   rF   Ú__classcell__©r1   s   @r2   r   r   3   s   ø„ ñôr÷ r3   r   c                   óF   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Z	 	 	 	 	 dd„Zˆ xZ	S )ÚLayoutLMv3TextEmbeddingszm
    LayoutLMv3 text embeddings. Same as `RobertaEmbeddings` but with added spatial (layout) embeddings.
    c                 ó.  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j
                  |j                  ¬«      | _
        t        j                  |j                  «      | _        | j                  dt!        j"                  |j$                  «      j'                  d«      d¬«       |j                  | _        t        j                  |j$                  |j
                  | j(                  ¬«      | _        t        j                  |j,                  |j.                  «      | _        t        j                  |j,                  |j.                  «      | _        t        j                  |j,                  |j4                  «      | _        t        j                  |j,                  |j4                  «      | _        y )N)Úpadding_idx©ÚepsÚposition_ids©r   r5   F©Ú
persistent)r    r!   r)   Ú	EmbeddingÚ
vocab_sizer,   Úpad_token_idÚword_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsÚDropoutÚhidden_dropout_probÚdropoutÚregister_bufferÚtorchÚarangeÚmax_position_embeddingsÚexpandrR   Úposition_embeddingsÚmax_2d_position_embeddingsÚcoordinate_sizeÚx_position_embeddingsÚy_position_embeddingsÚ
shape_sizeÚh_position_embeddingsÚw_position_embeddings©r.   r/   r1   s     €r2   r!   z!LayoutLMv3TextEmbeddings.__init__[   s}  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"äŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒð 	×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	ô 	
ð "×.Ñ.ˆÔÜ#%§<¡<Ø×*Ñ*¨F×,>Ñ,>ÈD×L\ÑL\ô$
ˆÔ ô &(§\¡\°&×2SÑ2SÐU[×UkÑUkÓ%lˆÔ"Ü%'§\¡\°&×2SÑ2SÐU[×UkÑUkÓ%lˆÔ"Ü%'§\¡\°&×2SÑ2SÐU[×UfÑUfÓ%gˆÔ"Ü%'§\¡\°&×2SÑ2SÐU[×UfÑUfÓ%gˆÕ"r3   c           	      óH  — 	 | 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                  t	        j
                  |d d …d d …df   |d d …d d …df   z
  dd«      «      }| j                  t	        j
                  |d d …d d …df   |d d …d d …df   z
  dd«      «      }t	        j                  ||||||gd¬«      }	|	S # t        $ r}t        d«      |‚d }~ww xY w)	Nr   r   r6   r   z;The `bbox` coordinate values should be within 0-1000 range.iÿ  r5   ©Údim)rl   rm   Ú
IndexErrorro   re   Úcliprp   Úcat)
r.   ÚbboxÚleft_position_embeddingsÚupper_position_embeddingsÚright_position_embeddingsÚlower_position_embeddingsÚero   rp   Úspatial_position_embeddingss
             r2   Ú%calculate_spatial_position_embeddingsz>LayoutLMv3TextEmbeddings.calculate_spatial_position_embeddingsr   sN  € ð	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Ð%ð !%× :Ñ :¼5¿:¹:ÀdÊ1ÊaÐQRÈ7ÁmÐVZÒ[\Ò^_ÐabÐ[bÑVcÑFcÐefÐhlÓ;mÓ nÐØ $× :Ñ :¼5¿:¹:ÀdÊ1ÊaÐQRÈ7ÁmÐVZÒ[\Ò^_ÐabÐ[bÑVcÑFcÐefÐhlÓ;mÓ nÐô ',§i¡ià(Ø)Ø)Ø)Ø%Ø%ðð ô
'
Ð#ð +Ð*øô% ò 	cÜÐZÓ[ÐabÐbûð	cús   ‚A,D Ä	D!ÄDÄD!c                 ó¸   — |j                  |«      j                  «       }t        j                  |d¬«      j	                  |«      |z  }|j                  «       |z   S )zÐ
        Replace non-padding symbols with their position numbers. Position numbers begin at padding_idx+1. Padding
        symbols are ignored. This is modified from fairseq's `utils.make_positions`.
        r   rs   )ÚneÚintre   ÚcumsumÚtype_asÚlong)r.   Ú	input_idsrR   ÚmaskÚincremental_indicess        r2   Ú"create_position_ids_from_input_idsz;LayoutLMv3TextEmbeddings.create_position_ids_from_input_idsŒ   sP   € ð �|‰|˜KÓ(×,Ñ,Ó.ˆÜ$Ÿ|™|¨D°aÔ8×@Ñ@ÀÓFÈ$ÑNÐØ"×'Ñ'Ó)¨KÑ7Ð7r3   c                 ó  — |j                  «       dd }|d   }t        j                  | j                  dz   || j                  z   dz   t        j                  |j
                  ¬«      }|j                  d«      j                  |«      S )z�
        We are provided embeddings directly. We cannot infer which are padded so just generate sequential position ids.
        Nr5   r   ©ÚdtypeÚdevicer   )r8   re   rf   rR   r…   r�   Ú	unsqueezerh   )r.   Úinputs_embedsÚinput_shapeÚsequence_lengthrU   s        r2   Ú&create_position_ids_from_inputs_embedsz?LayoutLMv3TextEmbeddings.create_position_ids_from_inputs_embeds–   s€   € ð $×(Ñ(Ó*¨3¨BÐ/ˆØ% a™.ˆä—|‘|Ø×Ñ˜qÑ  /°D×4DÑ4DÑ"DÀqÑ"HÔPU×PZÑPZÐcp×cwÑcwô
ˆð ×%Ñ% aÓ(×/Ñ/°Ó<Ð<r3   c                 óN  — |€I|�6| j                  || j                  «      j                  |j                  «      }n| j	                  |«      }|�|j                  «       }n|j                  «       d d }|€:t        j                  |t        j                  | j                  j                  ¬«      }|€| j                  |«      }| j                  |«      }||z   }| j                  |«      }	||	z  }| j                  |«      }
||
z   }| j                  |«      }| j                  |«      }|S )Nr5   r‹   )r‰   rR   Útor�   r’   r8   re   Úzerosr…   rU   r\   r^   ri   r   r_   rc   )r.   r†   rx   Útoken_type_idsrU   r�   r�   r^   rC   ri   r~   s              r2   rF   z LayoutLMv3TextEmbeddings.forward¢   s+  € ð ÐØÐ$à#×FÑFÀyÐRV×RbÑRbÓc×fÑfØ×$Ñ$ó ‘ð  $×JÑJÈ=ÓY�àÐ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKàÐ!Ü"Ÿ[™[¨¼E¿J¹JÈt×O`ÑO`×OgÑOgÔhˆNàÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐà"Ð%:Ñ:ˆ
Ø"×6Ñ6°|ÓDÐØÐ)Ñ)ˆ
à&*×&PÑ&PÐQUÓ&VÐ#àÐ"=Ñ=ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr3   ©NNNNN)
rI   rJ   rK   rL   r!   r   r‰   r’   rF   rM   rN   s   @r2   rP   rP   V   s3   ø„ ñôhò.+ò48ò
=ð ØØØØ÷'r3   rP   c                   ó@   ‡ — e Zd Zˆ fd„Zdd„Z	 	 	 ddee   fd„Zˆ xZS )ÚLayoutLMv3SelfAttentionc                 ó  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  «      | _        |j"                  | _        |j$                  | _        y )Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú))r    r!   r,   Únum_attention_headsÚhasattrÚ
ValueErrorr‚   Úattention_head_sizeÚall_head_sizer)   ÚLinearÚqueryÚkeyÚvaluera   Úattention_probs_dropout_probrc   Úhas_relative_attention_biasÚhas_spatial_attention_biasrq   s     €r2   r!   z LayoutLMv3SelfAttention.__init__Í   s8  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸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ˆÔä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z‘z &×"EÑ"EÓFˆŒØ+1×+MÑ+MˆÔ(Ø*0×*KÑ*KˆÕ'r3   c                 ó–   — ||z  }|j                  d¬«      j                  d«      }||z
  |z  } t        j                  d¬«      |«      S )aÊ  
        https://huggingface.co/papers/2105.13290 Section 2.4 Stabilization of training: Precision Bottleneck Relaxation
        (PB-Relax). A replacement of the original nn.Softmax(dim=-1)(attention_scores). Seems the new attention_probs
        will result in a slower speed and a little bias. Can use torch.allclose(standard_attention_probs,
        cogview_attention_probs, atol=1e-08) for comparison. The smaller atol (e.g., 1e-08), the better.
        r5   rs   )ÚamaxrŽ   r)   ÚSoftmax)r.   Úattention_scoresÚalphaÚscaled_attention_scoresÚ	max_valueÚnew_attention_scoress         r2   Úcogview_attentionz)LayoutLMv3SelfAttention.cogview_attentioná   sT   € ð #3°UÑ":ÐØ+×0Ñ0°bÐ0Ó:×DÑDÀRÓHˆ	Ø 7¸)Ñ CÀuÑLÐØ!Œr�z‰z˜bÔ!Ð"6Ó7Ð7r3   Úkwargsc                 ód  — |j                   d   }| j                  |«      j                  |d| j                  | j                  «      j                  dd«      }| j                  |«      j                  |d| j                  | j                  «      j                  dd«      }| j                  |«      j                  |d| j                  | j                  «      j                  dd«      }	t        j                  |t        j                  | j                  «      z  |j                  dd«      «      }
| j                  r5| j                  r)|
||z   t        j                  | j                  «      z  z  }
n1| j                  r%|
|t        j                  | j                  «      z  z  }
|�|
|z   }
| j                  |
«      }| j                  |«      }t        j                  ||	«      }|j!                  dddd«      j#                  «       }|j%                  «       d d | j&                  fz   } |j                  |Ž }||fS )Nr   r5   r   r6   éþÿÿÿr   )r<   r£   r:   r�   r    r@   r¤   r¥   re   ÚmatmulÚmathÚsqrtr§   r¨   r±   rc   r;   Ú
contiguousr8   r¡   )r.   Úhidden_statesÚattention_maskÚrel_posÚ
rel_2d_posr²   Ú
batch_sizeÚquery_layerÚ	key_layerÚvalue_layerr¬   Úattention_probsÚcontext_layerÚnew_context_layer_shapes                 r2   rF   zLayoutLMv3SelfAttention.forwardí   sù  € ð #×(Ñ(¨Ñ+ˆ
à�J‰J�}Ó%ß‰T�*˜b $×":Ñ":¸D×<TÑ<TÓUß‰Y�q˜!‹_ð 	ð �H‰H�]Ó#ß‰T�*˜b $×":Ñ":¸D×<TÑ<TÓUß‰Y�q˜!‹_ð 	ð �J‰J�}Ó%ß‰T�*˜b $×":Ñ":¸D×<TÑ<TÓUß‰Y�q˜!‹_ð 	ô !Ÿ<™<¨´d·i±iÀ×@XÑ@XÓ6YÑ(YÐ[d×[nÑ[nÐoqÐsuÓ[vÓwÐà×+Ò+°×0OÒ0OØ ¨:Ñ!5¼¿¹À4×C[ÑC[Ó9\Ñ \Ñ\ÑØ×-Ò-Ø ¬$¯)©)°D×4LÑ4LÓ*MÑ MÑMÐàÐ%à/°.Ñ@Ðð ×0Ñ0Ð1AÓBˆð Ÿ,™, Ó7ˆäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆà˜oÐ-Ð-r3   )é    ©NNN)	rI   rJ   rK   r!   r±   r   r   rF   rM   rN   s   @r2   r™   r™   Ì   s.   ø„ ôLó(
8ð ØØñ5.ð Ð+Ñ,÷5.r3   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 )ÚLayoutLMv3SelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©NrS   )r    r!   r)   r¢   r,   Údenser_   r`   ra   rb   rc   rq   s     €r2   r!   zLayoutLMv3SelfOutput.__init__'  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r3   r¹   Úinput_tensorÚreturnc                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rG   ©rÊ   rc   r_   ©r.   r¹   rË   s      r2   rF   zLayoutLMv3SelfOutput.forward-  ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐr3   ©rI   rJ   rK   r!   re   ÚTensorrF   rM   rN   s   @r2   rÇ   rÇ   &  ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r3   rÇ   c                   ó8   ‡ — e Zd Zˆ fd„Z	 	 	 ddee   fd„Zˆ xZS )ÚLayoutLMv3Attentionc                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y rG   )r    r!   r™   r.   rÇ   Úoutputrq   s     €r2   r!   zLayoutLMv3Attention.__init__6  s&   ø€ Ü‰ÑÔÜ+¨FÓ3ˆŒ	Ü*¨6Ó2ˆ�r3   r²   c                 ób   — |} | j                   ||f||dœ|¤Ž\  }}| j                  ||«      }|S ©N©r»   r¼   )r.   r×   )	r.   r¹   rº   r»   r¼   r²   ÚresidualÚattention_outputÚ_s	            r2   rF   zLayoutLMv3Attention.forward;  sV   € ð !ˆØ'˜dŸi™iØØð
ð Ø!ñ	
ð
 ñ
ÑÐ˜!ð  Ÿ;™;Ð'7¸ÓBÐØÐr3   rÅ   )rI   rJ   rK   r!   r   r   rF   rM   rN   s   @r2   rÕ   rÕ   5  s(   ø„ ô3ð ØØñ ð Ð+Ñ,÷ r3   rÕ   c                   ó@   ‡ — e Zd Zˆ fd„Z	 	 	 	 ddee   fd„Zd„ Zˆ xZS )ÚLayoutLMv3Layerc                 ó²   •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        t        |«      | _        t        |«      | _	        y ©Nr   )
r    r!   Úchunk_size_feed_forwardÚseq_len_dimrÕ   Ú	attentionÚLayoutLMv3IntermediateÚintermediateÚLayoutLMv3Outputr×   rq   s     €r2   r!   zLayoutLMv3Layer.__init__Q  sI   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ,¨VÓ4ˆŒÜ2°6Ó:ˆÔÜ& vÓ.ˆ�r3   r²   c                 óˆ   — | j                  ||||¬«      }t        | j                  | j                  | j                  |«      }|S rÙ   )rä   r   Úfeed_forward_chunkrâ   rã   )	r.   r¹   rº   Úoutput_attentionsr»   r¼   r²   rÜ   Úlayer_outputs	            r2   rF   zLayoutLMv3Layer.forwardY  sT   € ð  Ÿ>™>ØØØØ!ð	 *ó 
Ðô 1Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð Ðr3   c                 óL   — | j                  |«      }| j                  ||«      }|S rG   )ræ   r×   )r.   rÜ   Úintermediate_outputrë   s       r2   ré   z"LayoutLMv3Layer.feed_forward_chunko  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐr3   )NFNN)	rI   rJ   rK   r!   r   r   rF   ré   rM   rN   s   @r2   rß   rß   P  s0   ø„ ô/ð ØØØñð Ð+Ñ,óö,r3   rß   c                   óP   ‡ — e Zd Zˆ fd„Zdd„Zd„ Zd„ Z	 	 	 	 	 ddee   fd„Z	ˆ xZ
S )	ÚLayoutLMv3Encoderc                 óô  •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        |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¬«      | _        y y c c}w )NF)Úbias)r    r!   r/   r)   Ú
ModuleListÚrangeÚnum_hidden_layersrß   ÚlayerÚgradient_checkpointingr§   r¨   Úrel_pos_binsÚmax_rel_posr¢   r�   Úrel_pos_biasÚmax_rel_2d_posÚrel_2d_pos_binsÚrel_pos_x_biasÚrel_pos_y_bias)r.   r/   rÝ   r1   s      €r2   r!   zLayoutLMv3Encoder.__init__v  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   ½E5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 )Nr   r6   r   )r…   re   ÚabsÚmaxÚ
zeros_likeÚlogÚfloatr¶   r”   ÚminÚ	full_likeÚwhere)
r.   Úrelative_positionÚbidirectionalÚnum_bucketsÚmax_distanceÚretÚnÚ	max_exactÚis_smallÚval_if_larges
             r2   Úrelative_position_bucketz*LayoutLMv3Encoder.relative_position_bucketŠ  s  € ØˆÙØ˜AÑˆKØÐ%¨Ñ)×/Ñ/Ó1°KÑ?Ñ?ˆCÜ—	‘	Ð+Ó,‰Aä—	‘	Ð,Ð,¬e×.>Ñ.>Ð?PÓ.QÓRˆAð   1Ñ$ˆ	Ø�y‘=ˆð !Ü�I‰I�a—g‘g“i )Ñ+Ó,¬t¯x©x¸ÀyÑ8PÓ/QÑQÐU`ÐclÑUlÑmß
‰"ŒU�Z‰Z‹.ñˆô —y‘y ¬u¯©¸|È[Ð[\É_Ó/]Ó^ˆàŒu�{‰{˜8 Q¨Ó5Ñ5ˆØˆ
r3   c                 ó€  — |j                  d«      |j                  d«      z
  }| j                  || 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´   r5   ©r	  r
  r   r   r   r6   )rŽ   r  r÷   rø   re   Úno_gradrù   ÚweightÚtr;   r¸   )r.   rU   Úrel_pos_matr»   s       r2   Ú_cal_1d_pos_embz!LayoutLMv3Encoder._cal_1d_pos_emb¡  s³   € Ø"×,Ñ,¨RÓ0°<×3IÑ3IÈ"Ó3MÑMˆà×/Ñ/ØØ×)Ñ)Ø×)Ñ)ð 0ó 
ˆô �]‰]‹_ñ 	PØ×'Ñ'×.Ñ.×0Ñ0Ó2°7Ñ;×CÑCÀAÀqÈ!ÈQÓOˆG÷	Pà×$Ñ$Ó&ˆØˆ÷	Pð 	Pús   Á :B4Â4B=c                 óâ  — |d d …d d …df   }|d d …d d …df   }|j                  d«      |j                  d«      z
  }|j                  d«      |j                  d«      z
  }| j                  || j                  | j                  ¬«      }| j                  || 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´   r5   r  r   r6   )rŽ   r  rû   rú   re   r  rü   r  r  r;   rý   r¸   )	r.   rx   Úposition_coord_xÚposition_coord_yÚrel_pos_x_2d_matÚrel_pos_y_2d_matÚ	rel_pos_xÚ	rel_pos_yr¼   s	            r2   Ú_cal_2d_pos_embz!LayoutLMv3Encoder._cal_2d_pos_emb²  st  € Ø¢¢1 a ™=ÐØ¢¢1 a ™=ÐØ+×5Ñ5°bÓ9Ð<L×<VÑ<VÐWYÓ<ZÑZÐØ+×5Ñ5°bÓ9Ð<L×<VÑ<VÐWYÓ<ZÑZÐØ×1Ñ1ØØ×,Ñ,Ø×,Ñ,ð 2ó 
ˆ	ð
 ×1Ñ1ØØ×,Ñ,Ø×,Ñ,ð 2ó 
ˆ	ô �]‰]‹_ñ 	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   ÃA3E%Å%E.r²   c                 óÒ   — | j                   r| j                  |«      nd }| j                  r| j                  |«      nd }	| j                  D ]  }
 |
||f||	dœ|¤Ž}Œ t        |¬«      S )NrÚ   ©Úlast_hidden_state)r§   r  r¨   r  rõ   r   )r.   r¹   rx   rº   rU   rD   rE   r²   r»   r¼   Úlayer_modules              r2   rF   zLayoutLMv3Encoder.forwardÍ  s�   € ð 9=×8XÒ8X�$×&Ñ& |Ô4Ð^bˆØ37×3RÒ3R�T×)Ñ)¨$Ô/ÐX\ˆ
à ŸJ™Jò 	ˆLÙ(ØØðð  Ø%ñ	ð
 ñ‰Mð	ô °Ô?Ð?r3   )TrÄ   é€   r—   )rI   rJ   rK   r!   r  r  r  r   r   rF   rM   rN   s   @r2   rï   rï   u  s@   ø„ ôjó(ò.ò"ð< ØØØØñ@ð Ð+Ñ,÷@r3   rï   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )rå   c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y rG   )r    r!   r)   r¢   r,   Úintermediate_sizerÊ   r"   Ú
hidden_actÚstrr   Úintermediate_act_fnrq   s     €r2   r!   zLayoutLMv3Intermediate.__init__è  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r3   r¹   rÌ   c                 óJ   — | j                  |«      }| j                  |«      }|S rG   )rÊ   r*  )r.   r¹   s     r2   rF   zLayoutLMv3Intermediate.forwardð  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr3   rÑ   rN   s   @r2   rå   rå   ç  s#   ø„ ô9ð U§\¡\ð °e·l±l÷ r3   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 )rç   c                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y rÉ   )r    r!   r)   r¢   r'  r,   rÊ   r_   r`   ra   rb   rc   rq   s     €r2   r!   zLayoutLMv3Output.__init__ø  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r3   r¹   rË   rÌ   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rG   rÎ   rÏ   s      r2   rF   zLayoutLMv3Output.forwardþ  rÐ   r3   rÑ   rN   s   @r2   rç   rç   ÷  rÓ   r3   rç   c                   ód   ‡ — e Zd ZU eed<   dZdZeedœZ	 e
j                  «       ˆ fd„«       Zˆ xZS )ÚLayoutLMv3PreTrainedModelr/   Ú
layoutlmv3)ÚimageÚtext)r¹   Ú
attentionsc                 óh  •— t         ‰| �  |«       t        |t        «      r¨| j                  j
                  r>t        j                  |j                  «       t        j                  |j                  «       t        |d«      rGt        j                  |j                  |j                  |j                  |j                  f¬«      «       yyt        |t        «      rZt        j                  |j                   t#        j$                  |j                   j&                  d   «      j)                  d«      «       yy)zInitialize the weightsÚvisual_bbox©r0   r5   rV   N)r    Ú_init_weightsr"   ÚLayoutLMv3Modelr/   Úvisual_embedÚinitÚzeros_Ú	cls_tokenÚ	pos_embedrž   Úcopy_r6  Úcreate_visual_bboxr8   rP   rU   re   rf   r<   rh   )r.   Úmoduler1   s     €r2   r8  z'LayoutLMv3PreTrainedModel._init_weights  sÜ   ø€ ô 	‰Ñ˜fÔ%Ü�fœoÔ.Ø�{‰{×'Ò'Ü—‘˜F×,Ñ,Ô-Ü—‘˜F×,Ñ,Ô-Ü�v˜}Ô-Ü—
‘
˜6×-Ñ-¨v×/HÑ/HÐU[×U`ÑU`Ðbh×bmÑbmÐTnÐ/HÓ/oÕpð .ä˜Ô 8Ô9Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð :r3   )rI   rJ   rK   r   Ú__annotations__Úbase_model_prefixÚinput_modalitiesrß   r™   Ú_can_record_outputsre   r  r8  rM   rN   s   @r2   r0  r0    s=   ø… àÓØ$ÐØ(ÐØ,;ÐKbÑcÐà€U‡]�]ƒ_ó
ió ô
ir3   r0  c                   óZ  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zdd„Zd„ Zd„ Ze	e
e	 	 	 	 	 	 	 ddej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dee   deez  fd„«       «       «       Zˆ xZS )r9  c                 ó@  •— t         ‰| �  |«       || _        |j                  rt	        |«      | _        |j                  �r¾t        |«      | _        t        |j                  |j                  z  «      | _        t        j                  t        j                   dd|j"                  «      «      | _        t        j                  t        j                   d| j                  | j                  z  dz   |j"                  «      «      | _        t        j(                  d¬«      | _        t        j,                  |j"                  |j.                  ¬«      | _        t        j(                  |j0                  «      | _        | j                  j4                  s| j                  j6                  r:| j9                  d| j;                  | j                  | j                  f¬«      d¬«       t        j,                  |j"                  d	¬«      | _        t?        |«      | _         | jC                  «        y )
Nr   g        )ÚprS   r6  r7  FrW   g�íµ ÷Æ°>)"r    r!   r/   Ú
text_embedrP   rC   r:  r   Úpatch_embedr‚   r#   r'   r8   r)   Ú	Parameterre   r•   r,   r=  r>  ra   Úpos_dropr_   r`   rb   rc   r§   r¨   rd   r@  Únormrï   ÚencoderÚ	post_initrq   s     €r2   r!   zLayoutLMv3Model.__init__  s�  ø€ Ü‰Ñ˜Ô ØˆŒà×ÒÜ6°vÓ>ˆDŒOà×Óô  9¸Ó@ˆDÔä˜F×-Ñ-°×0AÑ0AÑAÓBˆDŒIÜŸ\™\¬%¯+©+°a¸¸F×<NÑ<NÓ*OÓPˆDŒNÜŸ\™\¬%¯+©+°a¸¿¹ÀTÇYÁYÑ9NÐQRÑ9RÐTZ×TfÑTfÓ*gÓhˆDŒNÜŸJ™J¨Ô-ˆDŒMäŸ\™\¨&×*<Ñ*<À&×BWÑBWÔXˆDŒNÜŸ:™: f×&@Ñ&@ÓAˆDŒLà�{‰{×6Ò6¸$¿+¹+×:`Ò:`Ø×$Ñ$Ø! 4×#:Ñ#:ÀtÇyÁyÐRV×R[ÑR[ÐF\Ð#:Ó#]Ðjoð %ô ô Ÿ™ V×%7Ñ%7¸TÔBˆDŒIä(¨Ó0ˆŒà�‰Õr3   c                 ó.   — | j                   j                  S rG   ©rC   r\   ©r.   s    r2   Úget_input_embeddingsz$LayoutLMv3Model.get_input_embeddings;  s   € Ø�‰×.Ñ.Ð.r3   c                 ó&   — || j                   _        y rG   rQ  ©r.   r¥   s     r2   Úset_input_embeddingsz$LayoutLMv3Model.set_input_embeddings>  s   € Ø*/ˆ�‰Õ'r3   c           	      óž  — t        j                  t        j                  d||d   dz   z  |«      |d   d¬«      }t        j                  t        j                  d||d   dz   z  |«      |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d«      }t        j                  dd|dz
  |dz
  gg«      }t        j                  ||gd¬«      S )	zJ
        Create the bounding boxes for the visual (patch) tokens.
        r   r   Útrunc)Úrounding_modeNr5   rs   é   )	re   Údivrf   ÚstackÚrepeatr@   r:   Útensorrw   )r.   r0   Úmax_lenÚvisual_bbox_xÚvisual_bbox_yr6  Úcls_token_boxs          r2   r@  z"LayoutLMv3Model.create_visual_bboxA  s\  € ô Ÿ	™	Ü�L‰L˜˜G z°!¡}°qÑ'8Ñ9¸7ÓCÀZÐPQÁ]Ðbiô
ˆô Ÿ	™	Ü�L‰L˜˜G z°!¡}°qÑ'8Ñ9¸7ÓCÀZÐPQÁ]Ðbiô
ˆô —k‘kà˜c˜rÐ"×)Ñ)¨*°Q©-¸Ó;Ø˜c˜rÐ"×)Ñ)¨*°Q©-¸Ó;×EÑEÀaÈÓKØ˜a˜bÐ!×(Ñ(¨°A©¸Ó:Ø˜a˜bÐ!×(Ñ(¨°A©¸Ó:×DÑDÀQÈÓJð	ð ô
÷ ‰$ˆr�1‹+ð 	ô Ÿ™ u¨e°W¸q±[À'ÈAÁ+Ð&NÐ%OÓPˆÜ�y‰y˜-¨Ð5¸1Ô=Ð=r3   c                 ó€   — | j                   j                  |dd«      }|j                  |«      j                  |«      }|S rá   )r6  r]  r”   Útype)r.   r�   rŒ   r½   r6  s        r2   Úcalculate_visual_bboxz%LayoutLMv3Model.calculate_visual_bboxX  s;   € Ø×&Ñ&×-Ñ-¨j¸!¸QÓ?ˆØ!—n‘n VÓ,×1Ñ1°%Ó8ˆØÐr3   c                 ó6  — | j                  |«      }|j                  «       \  }}}| j                  j                  |dd«      }t	        j
                  ||fd¬«      }| j                  �|| j                  z   }| j                  |«      }| j                  |«      }|S )Nr5   r   rs   )	rJ  r8   r=  rh   re   rw   r>  rL  rM  )r.   rA   rC   r½   Úseq_lenrÝ   Ú
cls_tokenss          r2   Úforward_imagezLayoutLMv3Model.forward_image]  s�   € Ø×%Ñ% lÓ3ˆ
ð ",§¡Ó!2Ñˆ
�G˜QØ—^‘^×*Ñ*¨:°r¸2Ó>ˆ
Ü—Y‘Y 
¨JÐ7¸QÔ?ˆ
ð �>‰>Ð%Ø# d§n¡nÑ4ˆJà—]‘] :Ó.ˆ
Ø—Y‘Y˜zÓ*ˆ
àÐr3   Nr†   rx   rº   r–   rU   r�   rA   r²   rÌ   c           	      ó*  — |�"|j                  «       }	|	\  }
}|j                  }nL|�%|j                  «       dd }	|	\  }
}|j                  }n%|�t        |«      }
|j                  }nt        d«      ‚|€|�—|€t	        j
                  |
f|¬«      }|€&t	        j                  	t        j                  |¬«      }|€<t	        j                  t        t        	«      dgz   «      t        j                  |¬«      }| j                  |||||¬«      }dx}}dx}}|��&t        |j                  d   | j                  j                  z  «      t        |j                  d	   | j                  j                  z  «      }}| j                  |«      }t	        j
                  |
|j                  d
   ft        j                  |¬«      }|�t	        j                   ||gd
¬«      }n|}| j                  j"                  s| j                  j$                  rõ| j                  j$                  r@| j'                  |t        j                  |
¬«      }|�t	        j                   ||gd
¬«      }n|}t	        j(                  d|j                  d
   t        j                  |¬«      j+                  |
d
«      }|€|�Ut	        j(                  d	d
   |¬«      j-                  d«      }|j/                  |	«      }t	        j                   ||gd
¬«      }n|}|€|�t	        j                   |gd
¬«      }n|}| j1                  |«      }| j3                  |«      }n�| j                  j"                  s| j                  j$                  rc| j                  j$                  r|}| j                  j"                  r5| j                  j4                  dd…d	d
   …f   }|j7                  |«      }|}t9        | j                  |¬«      } | j:                  |f|||||dœ|¤Ž}|j<                  }t?        |¬«      S )aœ  
        input_ids (`torch.LongTensor` of shape `(batch_size, token_sequence_length)`):
            Indices of input sequence tokens in the vocabulary.

            Note that `sequence_length = token_sequence_length + patch_sequence_length + 1` where `1` is for [CLS]
            token. See `pixel_values` for `patch_sequence_length`.

            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, token_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.

            Note that `sequence_length = token_sequence_length + patch_sequence_length + 1` where `1` is for [CLS]
            token. See `pixel_values` for `patch_sequence_length`.
        token_type_ids (`torch.LongTensor` of shape `(batch_size, token_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.

            Note that `sequence_length = token_sequence_length + patch_sequence_length + 1` where `1` is for [CLS]
            token. See `pixel_values` for `patch_sequence_length`.

            [What are token type IDs?](../glossary#token-type-ids)
        position_ids (`torch.LongTensor` of shape `(batch_size, token_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]`.

            Note that `sequence_length = token_sequence_length + patch_sequence_length + 1` where `1` is for [CLS]
            token. See `pixel_values` for `patch_sequence_length`.

            [What are position IDs?](../glossary#position-ids)
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, token_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.

        Examples:

        ```python
        >>> from transformers import AutoProcessor, AutoModel
        >>> from datasets import load_dataset

        >>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
        >>> model = AutoModel.from_pretrained("microsoft/layoutlmv3-base")

        >>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
        >>> example = dataset[0]
        >>> image = example["image"]
        >>> words = example["tokens"]
        >>> boxes = example["bboxes"]

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

        >>> outputs = model(**encoding)
        >>> last_hidden_states = outputs.last_hidden_state
        ```Nr5   zEYou have to specify either input_ids or inputs_embeds or pixel_values)r�   r‹   rZ  )r†   rx   rU   r–   r�   r6   r   r   rs   )rŒ   r½   r   )r/   r�   rº   )rx   rU   rº   rD   rE   r!  ) r8   r�   ÚlenrŸ   re   Úonesr•   r…   ÚtupleÚlistrC   r   r<   r/   r'   ri  rw   r§   r¨   re  rf   r]  rŽ   rh   r_   rc   rU   Ú	expand_asr	   rN  r"  r   )r.   r†   rx   rº   r–   rU   r�   rA   r²   r�   r½   Ú
seq_lengthr�   Úembedding_outputÚ
final_bboxÚfinal_position_idsrD   rE   Úvisual_embeddingsÚvisual_attention_maskr6  Úvisual_position_idsÚencoder_outputsÚsequence_outputs                           r2   rF   zLayoutLMv3Model.forwardn  sø  € ðZ Ð Ø#Ÿ.™.Ó*ˆKØ%0Ñ"ˆJ˜
Ø×%Ñ%‰FØÐ&Ø'×,Ñ,Ó.¨s°Ð3ˆKØ%0Ñ"ˆJ˜
Ø"×)Ñ)‰FØÐ%Ü˜\Ó*ˆJØ!×(Ñ(‰FäÐdÓeÐeàÐ  MÐ$=ØÐ%Ü!&§¡¨j¸*Ð-EÈvÔ!V�ØÐ%Ü!&§¡¨[ÄÇ
Á
ÐSYÔ!Z�Øˆ|Ü—{‘{¤5¬¨kÓ):¸a¸SÑ)@Ó#AÌÏÉÐ\bÔc�à#Ÿ™Ø#ØØ)Ø-Ø+ð  /ó  Ðð +/Ð.ˆ
Ð'Ø%)Ð)ˆ�{ØÑ#ä˜,×,Ñ,¨QÑ/°$·+±+×2HÑ2HÑHÓIÜ˜,×,Ñ,¨QÑ/°$·+±+×2HÑ2HÑHÓIð &ˆLð !%× 2Ñ 2°<Ó @ÐÜ$)§J¡JØÐ.×4Ñ4°QÑ7Ð8ÄÇ
Á
ÐSYô%Ð!ð Ð)Ü!&§¡¨NÐ<QÐ+RÐXYÔ!Z‘à!6�à�{‰{×6Ò6¸$¿+¹+×:`Ò:`Ø—;‘;×9Ò9Ø"&×"<Ñ"<¸VÌ5Ï:É:ÐblÐ"<Ó"m�KØÐ'Ü%*§Y¡Y°°kÐ/BÈÔ%J™
à%0˜
ä&+§l¡lØÐ(×.Ñ.¨qÑ1¼¿¹ÈFô'ç‘&˜ QÓ'ð $ð Ð(¨MÐ,EÜ#(§<¡<°°;¸q±>È&Ô#Q×#[Ñ#[Ð\]Ó#^�LØ#/×#6Ñ#6°{Ó#C�LÜ).¯©°LÐBUÐ3VÐ\]Ô)^Ñ&à)<Ð&àÐ$¨Ð(AÜ#(§9¡9Ð.>Ð@QÐ-RÐXYÔ#ZÑ à#4Ð à#Ÿ~™~Ð.>Ó?ÐØ#Ÿ|™|Ð,<Ó=ÑØ�[‰[×4Ò4¸¿¹×8^Ò8^Ø�{‰{×5Ò5Ø!�
Ø�{‰{×6Ò6Ø#Ÿ™×;Ñ;ºAÐ?OÀÈQÁÐ?OÐ<OÑP�Ø+×5Ñ5°iÓ@�Ø%1Ð"ä2Ø—;‘;Ø*Ø)ô
ˆð '˜$Ÿ,™,Øð
àØ+Ø)Ø%Ø#ñ
ð ñ
ˆð *×;Ñ;ˆäØ-ô
ð 	
r3   ))é   ry  iè  )NNNNNNN)rI   rJ   rK   r!   rS  rV  r@  re  ri  r   r   r   re   Ú
LongTensorÚFloatTensorr   r   rm  r   rF   rM   rN   s   @r2   r9  r9    s  ø„ ôò>/ò0ó>ò.ò
ð"  ØØð .2Ø(,Ø37Ø26Ø04Ø26Ø15ñm
à×#Ñ# dÑ*ðm
ð ×Ñ Ñ%ðm
ð ×)Ñ)¨DÑ0ð	m
ð
 ×(Ñ(¨4Ñ/ðm
ð ×&Ñ&¨Ñ-ðm
ð ×(Ñ(¨4Ñ/ðm
ð ×'Ñ'¨$Ñ.ðm
ð Ð+Ñ,ðm
ð 
�Ñ	 òm
ó ó ó  ôm
r3   r9  c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚLayoutLMv3ClassificationHeadz\
    Head for sentence-level classification tasks. Reference: RobertaClassificationHead
    c                 óÒ  •— t         ‰| �  «        || _        |r3t        j                  |j
                  dz  |j
                  «      | _        n/t        j                  |j
                  |j
                  «      | _        |j                  �|j                  n|j                  }t        j                  |«      | _
        t        j                  |j
                  |j                  «      | _        y )Nr   )r    r!   Úpool_featurer)   r¢   r,   rÊ   Úclassifier_dropoutrb   ra   rc   Ú
num_labelsÚout_proj)r.   r/   r  r€  r1   s       €r2   r!   z%LayoutLMv3ClassificationHead.__init__&  s­   ø€ Ü‰ÑÔØ(ˆÔÙÜŸ™ 6×#5Ñ#5¸Ñ#9¸6×;MÑ;MÓNˆD�JäŸ™ 6×#5Ñ#5°v×7IÑ7IÓJˆDŒJà)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ	™	 &×"4Ñ"4°f×6GÑ6GÓHˆ�r3   c                 ó¸   — | j                  |«      }| j                  |«      }t        j                  |«      }| j                  |«      }| j	                  |«      }|S rG   )rc   rÊ   re   Útanhr‚  )r.   Úxs     r2   rF   z$LayoutLMv3ClassificationHead.forward3  sI   € Ø�L‰L˜‹OˆØ�J‰J�q‹MˆÜ�J‰J�q‹MˆØ�L‰L˜‹OˆØ�M‰M˜!ÓˆØˆr3   )FrH   rN   s   @r2   r}  r}  !  s   ø„ ñõIör3   r}  a„  
    LayoutLMv3 Model with a token classification head on top (a linear layer on top of the final 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).
    )Úcustom_introc                   ó\  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  de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 )Ú LayoutLMv3ForTokenClassificationc                 óp  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  «      | _        |j                  dk  r0t        j                  |j                  |j                  «      | _        nt        |d¬«      | _        | j                  «        y )Né
   F©r  )r    r!   r�  r9  r1  r)   ra   rb   rc   r¢   r,   Ú
classifierr}  rO  rq   s     €r2   r!   z)LayoutLMv3ForTokenClassification.__init__E  s„   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä)¨&Ó1ˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒØ×Ñ˜rÒ!Ü Ÿi™i¨×(:Ñ(:¸F×<MÑ<MÓNˆD�Oä:¸6ÐPUÔVˆDŒOà�‰Õr3   c                 ó6   — | j                   j                  «       S rG   ©r1  rS  rR  s    r2   rS  z5LayoutLMv3ForTokenClassification.get_input_embeddingsR  ó   € Ø�‰×3Ñ3Ó5Ð5r3   c                 ó:   — | j                   j                  |«       y rG   ©r1  rV  rU  s     r2   rV  z5LayoutLMv3ForTokenClassification.set_input_embeddingsU  ó   € Ø�‰×,Ñ,¨UÕ3r3   Nr†   rx   rº   r–   rU   r�   ÚlabelsrA   r²   rÌ   c	           
      ó²  —  | j                   |f||||||dœ|	¤Ž}
|�|j                  «       }n|j                  «       dd }|d   }|
d   dd…d|…f   }| j                  |«      }| j                  |«      }d}|�<t	        «       } ||j                  d| j                  «      |j                  d«      «      }t        |||
j                  |
j                  ¬«      S )a!  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.

        Examples:

        ```python
        >>> from transformers import AutoProcessor, AutoModelForTokenClassification
        >>> from datasets import load_dataset

        >>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
        >>> model = AutoModelForTokenClassification.from_pretrained("microsoft/layoutlmv3-base", num_labels=7)

        >>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
        >>> example = dataset[0]
        >>> image = example["image"]
        >>> words = example["tokens"]
        >>> boxes = example["bboxes"]
        >>> word_labels = example["ner_tags"]

        >>> encoding = processor(image, words, boxes=boxes, word_labels=word_labels, return_tensors="pt")

        >>> outputs = model(**encoding)
        >>> loss = outputs.loss
        >>> logits = outputs.logits
        ```)rx   rº   r–   rU   r�   rA   Nr5   r   r   ©ÚlossÚlogitsr¹   r4  )
r1  r8   rc   rŒ  r   r:   r�  r   r¹   r4  )r.   r†   rx   rº   r–   rU   r�   r“  rA   r²   Úoutputsr�   rp  rx  r—  r–  Úloss_fcts                    r2   rF   z(LayoutLMv3ForTokenClassification.forwardX  sø   € ðZ "�$—/‘/Øð	
àØ)Ø)Ø%Ø'Ø%ñ	
ð ñ	
ˆð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
à! !™*¢Q¨¨¨ ^Ñ4ˆØŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r3   ©NNNNNNNN)rI   rJ   rK   r!   rS  rV  r   r   re   rz  r{  r   r   rm  r   rF   rM   rN   s   @r2   rˆ  rˆ  <  s  ø„ ôò6ò4ð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø*.Ø04ñJ
à×#Ñ# dÑ*ðJ
ð ×Ñ Ñ%ðJ
ð ×)Ñ)¨DÑ0ð	J
ð
 ×(Ñ(¨4Ñ/ðJ
ð ×&Ñ&¨Ñ-ðJ
ð ×(Ñ(¨4Ñ/ðJ
ð × Ñ  4Ñ'ðJ
ð ×&Ñ&¨Ñ-ðJ
ð Ð+Ñ,ðJ
ð 
Ð&Ñ	&òJ
ó ó ôJ
r3   rˆ  c                   ó|  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  de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 )ÚLayoutLMv3ForQuestionAnsweringc                 óª   •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        |d¬«      | _        | j                  «        y ©NFr‹  )r    r!   r�  r9  r1  r}  Ú
qa_outputsrO  rq   s     €r2   r!   z'LayoutLMv3ForQuestionAnswering.__init__©  sA   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä)¨&Ó1ˆŒÜ6°vÈEÔRˆŒà�‰Õr3   c                 ó6   — | j                   j                  «       S rG   rŽ  rR  s    r2   rS  z3LayoutLMv3ForQuestionAnswering.get_input_embeddings²  r�  r3   c                 ó:   — | j                   j                  |«       y rG   r‘  rU  s     r2   rV  z3LayoutLMv3ForQuestionAnswering.set_input_embeddingsµ  r’  r3   Nr†   rº   r–   rU   r�   Ústart_positionsÚend_positionsrx   rA   r²   rÌ   c
           
      óÈ  —  | j                   |f||||||	dœ|
¤Ž}|d   }| 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  }t        ||||j                  |j                  ¬	«      S )
a  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner.

        Examples:

        ```python
        >>> from transformers import AutoProcessor, AutoModelForQuestionAnswering
        >>> from datasets import load_dataset
        >>> import torch

        >>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
        >>> model = AutoModelForQuestionAnswering.from_pretrained("microsoft/layoutlmv3-base")

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

        >>> encoding = processor(image, question, words, boxes=boxes, return_tensors="pt")
        >>> start_positions = torch.tensor([1])
        >>> end_positions = torch.tensor([3])

        >>> outputs = model(**encoding, start_positions=start_positions, end_positions=end_positions)
        >>> loss = outputs.loss
        >>> start_scores = outputs.start_logits
        >>> end_scores = outputs.end_logits
        ```©rº   r–   rU   r�   rx   rA   r   r   r5   rs   N)Úignore_indexr6   )r–  Ústart_logitsÚ
end_logitsr¹   r4  )r1  rŸ  ÚsplitÚsqueezer¸   rk  r8   Úclampr   r   r¹   r4  )r.   r†   rº   r–   rU   r�   r¢  r£  rx   rA   r²   r˜  rx  r—  r§  r¨  Ú
total_lossÚignored_indexr™  Ú
start_lossÚend_losss                        r2   rF   z&LayoutLMv3ForQuestionAnswering.forward¸  s„  € ð` $3 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ä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r3   )	NNNNNNNNN)rI   rJ   rK   r!   rS  rV  r   r   re   rz  r{  r   r   rm  r   rF   rM   rN   s   @r2   rœ  rœ  §  s3  ø„ ôò6ò4ð Øð .2Ø37Ø26Ø04Ø26Ø37Ø15Ø(,Ø04ñW
à×#Ñ# dÑ*ðW
ð ×)Ñ)¨DÑ0ðW
ð ×(Ñ(¨4Ñ/ð	W
ð
 ×&Ñ&¨Ñ-ðW
ð ×(Ñ(¨4Ñ/ðW
ð ×)Ñ)¨DÑ0ðW
ð ×'Ñ'¨$Ñ.ðW
ð ×Ñ Ñ%ðW
ð ×&Ñ&¨Ñ-ðW
ð Ð+Ñ,ðW
ð 
Ð-Ñ	-òW
ó ó ôW
r3   rœ  a
  
    LayoutLMv3 Model with a sequence classification head on top (a linear layer on top of the final hidden state of the
    [CLS] token) 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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 )Ú#LayoutLMv3ForSequenceClassificationc                 ó¸   •— t         ‰| �  |«       |j                  | _        || _        t	        |«      | _        t        |d¬«      | _        | j                  «        y rž  )	r    r!   r�  r/   r9  r1  r}  rŒ  rO  rq   s     €r2   r!   z,LayoutLMv3ForSequenceClassification.__init__  sH   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒØˆŒÜ)¨&Ó1ˆŒÜ6°vÈEÔRˆŒà�‰Õr3   c                 ó6   — | j                   j                  «       S rG   rŽ  rR  s    r2   rS  z8LayoutLMv3ForSequenceClassification.get_input_embeddings%  r�  r3   c                 ó:   — | j                   j                  |«       y rG   r‘  rU  s     r2   rV  z8LayoutLMv3ForSequenceClassification.set_input_embeddings(  r’  r3   Nr†   rº   r–   rU   r�   r“  rx   rA   r²   rÌ   c	           
      óÔ  —  | j                   |f||||||dœ|	¤Ž}
|
d   dd…ddd…f   }| 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(  rIt        «       }| j                  dk(  r& ||j                  «       |j                  «       «      }nŒ |||«      }n‚| j                  j                  dk(  r=t        «       } ||j                  d| j                  «      |j                  d«      «      }n,| j                  j                  dk(  rt        «       } |||«      }t        |||
j                  |
j                   ¬	«      S )
a_  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner.

        Examples:

        ```python
        >>> from transformers import AutoProcessor, AutoModelForSequenceClassification
        >>> from datasets import load_dataset
        >>> import torch

        >>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base", apply_ocr=False)
        >>> model = AutoModelForSequenceClassification.from_pretrained("microsoft/layoutlmv3-base")

        >>> dataset = load_dataset("nielsr/funsd-layoutlmv3", split="train")
        >>> example = dataset[0]
        >>> image = example["image"]
        >>> words = example["tokens"]
        >>> boxes = example["bboxes"]

        >>> encoding = processor(image, words, boxes=boxes, return_tensors="pt")
        >>> sequence_label = torch.tensor([1])

        >>> outputs = model(**encoding, labels=sequence_label)
        >>> loss = outputs.loss
        >>> logits = outputs.logits
        ```r¥  r   Nr   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationr5   r•  )r1  rŒ  r/   Úproblem_typer�  rŒ   re   r…   r‚   r   rª  r   r:   r   r   r¹   r4  )r.   r†   rº   r–   rU   r�   r“  rx   rA   r²   r˜  rx  r—  r–  r™  s                  r2   rF   z+LayoutLMv3ForSequenceClassification.forward+  sª  € ðX $3 4§?¡?Øð	$
à)Ø)Ø%Ø'ØØ%ñ	$
ð ñ	$
ˆð " !™*¢Q¨ª1 WÑ-ˆØ—‘ Ó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Ü,Ó.�Ù ¨Ó/�ä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r3   rš  )rI   rJ   rK   r!   rS  rV  r   r   re   rz  r{  r   r   rm  r   rF   rM   rN   s   @r2   r±  r±    s  ø„ ôò6ò4ð Øð .2Ø37Ø26Ø04Ø26Ø*.Ø(,Ø04ñT
à×#Ñ# dÑ*ðT
ð ×)Ñ)¨DÑ0ðT
ð ×(Ñ(¨4Ñ/ð	T
ð
 ×&Ñ&¨Ñ-ðT
ð ×(Ñ(¨4Ñ/ðT
ð × Ñ  4Ñ'ðT
ð ×Ñ Ñ%ðT
ð ×&Ñ&¨Ñ-ðT
ð Ð+Ñ,ðT
ð 
Ð)Ñ	)òT
ó ó ôT
r3   r±  )rœ  r±  rˆ  r9  r0  )@rL   r$   r¶   re   Útorch.nnr)   Útorch.nn.functionalÚ
functionalr=   r   r   r   Ú r   r;  Úactivationsr   Úmasking_utilsr	   Úmodeling_layersr
   Úmodeling_outputsr   r   r   r   Úmodeling_utilsr   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_layoutlmv3r   Ú
get_loggerrI   ÚloggerÚModuler   rP   r™   rÇ   rÕ   rß   rï   rå   rç   r0  r9  r}  rˆ  rœ  r±  Ú__all__© r3   r2   ú<module>rÎ     sÐ  ðñ  ã Û ã Ý ß Ð ß AÑ Aå &Ý !Ý 6Ý 9÷ó õ .Ý &Ý 6÷ó ÷ LÝ 5Ý 6ð 
ˆ×	Ñ	˜HÓ	%€ô  §	¡	ô  ôFs˜rŸy™yô sôlV.˜bŸi™iô V.ôt˜2Ÿ9™9ô ô ˜"Ÿ)™)ô  ô6"Ð0ô "ôJn@˜Ÿ	™	ô n@ôd˜RŸY™Yô ô �r—y‘yô ð ôi ó ió ðið( ôC
Ð/ó C
ó ðC
ôL 2§9¡9ô ñ6 ðôô`
Ð'@ó `
óð`
ðF ôi
Ð%>ó i
ó ði
ñX ðôôf
Ð*Có f
óðf
òR�r3   