Ë
    ÜÓ^jè¤  ã                   óL  — d Z ddlZddlZddlmZ ddlmZmZmZ ddlm	Z
 ddlmZ ddlmZ dd	lmZ 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 ddlmZ  ej@                  e!«      Z" G d„ dejF                  «      Z$ G d„ dejF                  «      Z% G d„ dejF                  «      Z& G d„ dejF                  «      Z' G d„ dejF                  «      Z( G d„ dejF                  «      Z) G d„ dejF                  «      Z* G d„ de«      Z+ G d „ d!ejF                  «      Z, G d"„ d#ejF                  «      Z-e G d$„ d%e«      «       Z.e G d&„ d'e.«      «       Z/ ed(¬)«       G d*„ d+e.«      «       Z0e G d,„ d-e.«      «       Z1 G d.„ d/ejF                  «      Z2e G d0„ d1e.«      «       Z3g d2¢Z4y)3zPyTorch LiLT model.é    N)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚPreTrainedModel)Úapply_chunking_to_forward)Úauto_docstringÚloggingé   )Ú
LiltConfigc                   ó:   ‡ — e Zd Zˆ fd„Z	 	 	 	 dd„Zd„ Zd„ Zˆ xZS )ÚLiltTextEmbeddingsc                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        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*                  ¬«      | _	        y )N©Úpadding_idx©ÚepsÚposition_ids©r   éÿÿÿÿF)Ú
persistent)ÚsuperÚ__init__r   Ú	EmbeddingÚ
vocab_sizeÚhidden_sizeÚpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsÚDropoutÚhidden_dropout_probÚdropoutÚregister_bufferÚtorchÚarangeÚexpandr   ©ÚselfÚconfigÚ	__class__s     €úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/lilt/modeling_lilt.pyr#   zLiltTextEmbeddings.__init__+   s  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¡\°&×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\ô$
ˆÕ ó    c                 ó&  — |€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                  |«      }| j                  |«      }||fS )Nr    ©ÚdtypeÚdevice)Ú"create_position_ids_from_input_idsr   Útor?   Ú&create_position_ids_from_inputs_embedsÚsizer3   ÚzerosÚlongr   r(   r,   r*   r-   r1   )	r7   Ú	input_idsÚtoken_type_idsr   Úinputs_embedsÚinput_shaper,   Ú
embeddingsr*   s	            r:   ÚforwardzLiltTextEmbeddings.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ÐØÐ)Ñ)ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
Ø˜<Ð'Ð'r;   c                 ó¸   — |j                  |«      j                  «       }t        j                  |d¬«      j	                  |«      |z  }|j                  «       |z   S )a  
        Args:
        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`.
            x: torch.Tensor x:
        Returns: torch.Tensor
        r   ©Údim)ÚneÚintr3   ÚcumsumÚtype_asrE   )r7   rF   r   ÚmaskÚincremental_indicess        r:   r@   z5LiltTextEmbeddings.create_position_ids_from_input_idsc   sP   € ð �|‰|˜KÓ(×,Ñ,Ó.ˆÜ$Ÿ|™|¨D°aÔ8×@Ñ@ÀÓFÈ$ÑNÐØ"×'Ñ'Ó)¨KÑ7Ð7r;   c                 ó  — |j                  «       dd }|d   }t        j                  | j                  dz   || j                  z   dz   t        j                  |j
                  ¬«      }|j                  d«      j                  |«      S )zÖ
        Args:
        We are provided embeddings directly. We cannot infer which are padded so just generate sequential position ids.:
            inputs_embeds: torch.Tensor
        Returns: torch.Tensor
        Nr    r   r=   r   )rC   r3   r4   r   rE   r?   Ú	unsqueezer5   )r7   rH   rI   Úsequence_lengthr   s        r:   rB   z9LiltTextEmbeddings.create_position_ids_from_inputs_embedsp   s€   € ð $×(Ñ(Ó*¨3¨BÐ/ˆØ% a™.ˆä—|‘|Ø×Ñ˜qÑ  /°D×4DÑ4DÑ"DÀqÑ"HÔPU×PZÑPZÐcp×cwÑcwô
ˆð ×%Ñ% aÓ(×/Ñ/°Ó<Ð<r;   )NNNN)Ú__name__Ú
__module__Ú__qualname__r#   rK   r@   rB   Ú__classcell__©r9   s   @r:   r   r   *   s&   ø„ ô
ð, ØØØó"(òH8ö=r;   r   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )ÚLiltLayoutEmbeddingsc                 ó   •— t         ‰| �  «        t        j                  |j                  |j
                  dz  «      | _        t        j                  |j                  |j
                  dz  «      | _        t        j                  |j                  |j
                  dz  «      | _        t        j                  |j                  |j
                  dz  «      | _	        |j                  | _        t        j                  |j                  |j
                  |j                  z  | j                  ¬«      | _        t        j                  |j
                  |j
                  |j                  z  ¬«      | _        t        j"                  |j
                  |j                  z  |j$                  ¬«      | _        t        j&                  |j(                  «      | _        y )Né   r   )Úin_featuresÚout_featuresr   )r"   r#   r   r$   Úmax_2d_position_embeddingsr&   Úx_position_embeddingsÚy_position_embeddingsÚh_position_embeddingsÚw_position_embeddingsr'   r   r)   Úchannel_shrink_ratioÚbox_position_embeddingsÚLinearÚbox_linear_embeddingsr-   r.   r/   r0   r1   r6   s     €r:   r#   zLiltLayoutEmbeddings.__init__�   s^  ø€ Ü‰ÑÔô &(§\¡\°&×2SÑ2SÐU[×UgÑUgÐklÑUlÓ%mˆÔ"Ü%'§\¡\°&×2SÑ2SÐU[×UgÑUgÐklÑUlÓ%mˆÔ"Ü%'§\¡\°&×2SÑ2SÐU[×UgÑUgÐklÑUlÓ%mˆÔ"Ü%'§\¡\°&×2SÑ2SÐU[×UgÑUgÐklÑUlÓ%mˆÔ"à!×.Ñ.ˆÔÜ')§|¡|Ø×*Ñ*Ø×Ñ &×"=Ñ"=Ñ=Ø×(Ñ(ô(
ˆÔ$ô
 &(§Y¡YØ×*Ñ*¸×9KÑ9KÈv×OjÑOjÑ9jô&
ˆÔ"ô Ÿ™ f×&8Ñ&8¸F×<WÑ<WÑ&WÐ]c×]rÑ]rÔsˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r;   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¬«      }
| j                  |
«      }
| j                  |«      }|
|z   }
| j                  |
«      }
| j                  |
«      }
|
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    rM   )rd   re   Ú
IndexErrorrf   rg   r3   Úcatrk   ri   r-   r1   )r7   Úbboxr   Úleft_position_embeddingsÚupper_position_embeddingsÚright_position_embeddingsÚlower_position_embeddingsÚerf   rg   Úspatial_position_embeddingsri   s               r:   rK   zLiltLayoutEmbeddings.forward–   sw  € ð	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à(Ø)Ø)Ø)Ø%Ø%ðð ô
'
Ð#ð '+×&@Ñ&@ÐA\Ó&]Ð#Ø"&×">Ñ">¸|Ó"LÐà&AÐD[Ñ&[Ð#à&*§n¡nÐ5PÓ&QÐ#Ø&*§l¡lÐ3NÓ&OÐ#à*Ð*øô3 ò 	cÜÐZÓ[ÐabÐbûð	cús   ‚A,D& Ä&	E Ä/D;Ä;E )NN)rX   rY   rZ   r#   rK   r[   r\   s   @r:   r^   r^   €   s   ø„ ô>÷*+r;   r^   c                   ó4   ‡ — e Zd Zdˆ fd„	Zdd„Z	 	 dd„Zˆ xZS )ÚLiltSelfAttentionc                 ó²  •— 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                  z  | j                  |j                  z  «      | _        t        j                  |j                  |j                  z  | j                  |j                  z  «      | _        t        j                  |j                  |j                  z  | j                  |j                  z  «      | _        t        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Ú
ValueErrorrP   Úattention_head_sizeÚall_head_sizer   rj   ÚqueryÚkeyÚvaluerh   Úlayout_queryÚ
layout_keyÚlayout_valuer/   Úattention_probs_dropout_probr1   Ú	layer_idx)r7   r8   rˆ   r9   s      €r:   r#   zLiltSelfAttention.__init__¹   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ˆÔä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
äŸI™IØ×Ñ &×"=Ñ"=Ñ=¸t×?QÑ?QÐU[×UpÑUpÑ?pó
ˆÔô Ÿ)™)Ø×Ñ &×"=Ñ"=Ñ=¸t×?QÑ?QÐU[×UpÑUpÑ?pó
ˆŒô ŸI™IØ×Ñ &×"=Ñ"=Ñ=¸t×?QÑ?QÐU[×UpÑUpÑ?pó
ˆÔô —z‘z &×"EÑ"EÓFˆŒà$*×$?Ñ$?ˆÔ!Ø"ˆ�r;   c                 ó¦   — |j                  «       d d | j                  | j                  |z  fz   } |j                  |Ž }|j	                  dddd«      S )Nr    r   rm   r   r   )rC   r|   r   ÚviewÚpermute)r7   ÚxÚrÚnew_x_shapes       r:   Útranspose_for_scoresz&LiltSelfAttention.transpose_for_scoresØ   sT   € Ø—f‘f“h˜s �m t×'?Ñ'?À×AYÑAYÐ]^ÑA^Ð&_Ñ_ˆØˆA�F‰F�KÐ ˆØ�y‰y˜˜A˜q !Ó$Ð$r;   c                 óÂ  — | j                  | j                  |«      | j                  ¬«      }| j                  | j                  |«      | j                  ¬«      }| j                  | j	                  |«      | j                  ¬«      }| j                  |«      }| j                  | j                  |«      «      }	| j                  | j                  |«      «      }
| j                  |«      }t        j                  ||	j                  dd«      «      }t        j                  ||j                  dd«      «      }|t        j                  | j                  «      z  }|t        j                  | j                  | j                  z  «      z  }||z   }||z   }|�||z   } t        j                  d¬«      |«      }| j!                  |«      }t        j                  ||«      }|j#                  dddd«      j%                  «       }|j'                  «       d d | j(                  | j                  z  fz   } |j*                  |Ž }|�||z   } t        j                  d¬«      |«      }| j!                  |«      }t        j                  ||
«      }|j#                  dddd«      j%                  «       }|j'                  «       d d | j(                  fz   } |j*                  |Ž }||f}|r||fz   }|S )	N)r�   r    éþÿÿÿrM   r   rm   r   r   )r�   r†   rh   r…   r„   r�   r‚   rƒ   r3   ÚmatmulÚ	transposeÚmathÚsqrtr   r   ÚSoftmaxr1   r‹   Ú
contiguousrC   r€   rŠ   )r7   Úhidden_statesÚlayout_inputsÚattention_maskÚoutput_attentionsÚlayout_value_layerÚlayout_key_layerÚlayout_query_layerÚmixed_query_layerÚ	key_layerÚvalue_layerÚquery_layerÚattention_scoresÚlayout_attention_scoresÚtmp_attention_scoresÚtmp_layout_attention_scoresÚlayout_attention_probsÚlayout_context_layerÚnew_context_layer_shapeÚattention_probsÚcontext_layerÚoutputss                         r:   rK   zLiltSelfAttention.forwardÝ   sÞ  € ð "×6Ñ6°t×7HÑ7HÈÓ7WÐ[_×[tÑ[tÐ6ÓuÐØ×4Ñ4°T·_±_À]Ó5SÐW[×WpÑWpÐ4ÓqÐØ!×6Ñ6°t×7HÑ7HÈÓ7WÐ[_×[tÑ[tÐ6ÓuÐà ŸJ™J }Ó5Ðà×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆØ×/Ñ/Ð0AÓBˆä Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐÜ"'§,¡,Ð/AÐCS×C]ÑC]Ð^`ÐbdÓCeÓ"fÐà/´$·)±)¸D×<TÑ<TÓ2UÑUÐØ&=ÄÇ	Á	Ø×$Ñ$¨×(AÑ(AÑAóA
ñ '
Ð#ð 0Ð2MÑMÐØ"=Ð@TÑ"TÐàÐ%à&=ÀÑ&NÐ#ð "4¤§¡°Ô!3Ð4KÓ!LÐð "&§¡Ð.DÓ!EÐä$Ÿ|™|Ð,BÐDVÓWÐà3×;Ñ;¸A¸qÀ!ÀQÓG×RÑRÓTÐØ"6×";Ñ";Ó"=¸c¸rÐ"BÀd×FXÑFXÐ\`×\uÑ\uÑFuÐEwÑ"wÐØ8Ð3×8Ñ8Ð:QÐRÐàÐ%à/°.Ñ@Ðð -œ"Ÿ*™*¨Ô,Ð-=Ó>ˆð Ÿ,™, Ó7ˆäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆà Ð"6Ð7ˆÙØ Ð 2Ñ2ˆGàˆr;   ©N)r   ©NF)rX   rY   rZ   r#   r�   rK   r[   r\   s   @r:   rx   rx   ¸   s   ø„ õ#ó>%ð Ø÷Ar;   rx   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚLiltSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©Nr   )r"   r#   r   rj   r&   Údenser-   r.   r/   r0   r1   r6   s     €r:   r#   zLiltSelfOutput.__init__#  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r;   r˜   Úinput_tensorÚreturnc                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S r­   ©r³   r1   r-   ©r7   r˜   r´   s      r:   rK   zLiltSelfOutput.forward)  ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐr;   ©rX   rY   rZ   r#   r3   ÚTensorrK   r[   r\   s   @r:   r°   r°   "  ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r;   r°   c                   ó¤   ‡ — e Zd Zd	ˆ fd„	Z	 	 d
dej
                  dej
                  dej                  dz  dedz  deej
                     f
d„Z	ˆ xZ
S )ÚLiltAttentionNc                 óè   •— t         ‰| �  «        t        ||¬«      | _        t	        |«      | _        |j                  }|j                  |j                  z  |_        t	        |«      | _        ||_        y )N©rˆ   )	r"   r#   rx   r7   r°   Úoutputr&   rh   Úlayout_output)r7   r8   rˆ   Úori_hidden_sizer9   s       €r:   r#   zLiltAttention.__init__1  sa   ø€ Ü‰ÑÔÜ% f¸	ÔBˆŒ	Ü$ VÓ,ˆŒà ×,Ñ,ˆØ#×/Ñ/°6×3NÑ3NÑNˆÔÜ+¨FÓ3ˆÔØ,ˆÕr;   r˜   r™   rš   r›   rµ   c                 ó–   — | j                  ||||«      }| j                  |d   |«      }| j                  |d   |«      }||f|dd  z   }|S )Nr   r   rm   )r7   rÁ   rÂ   )	r7   r˜   r™   rš   r›   Úself_outputsÚattention_outputÚlayout_attention_outputr¬   s	            r:   rK   zLiltAttention.forward;  sh   € ð —y‘yØØØØó	
ˆð  Ÿ;™; |°A¡¸ÓFÐØ"&×"4Ñ"4°\À!±_ÀmÓ"TÐØ#Ð%<Ð=ÀÈQÈRÐ@PÑPˆØˆr;   r­   r®   )rX   rY   rZ   r#   r3   r»   ÚFloatTensorÚboolÚtuplerK   r[   r\   s   @r:   r¾   r¾   0  se   ø„ õ-ð 48Ø).ñà—|‘|ðð —|‘|ðð ×)Ñ)¨DÑ0ð	ð
   $™;ðð 
ˆu�|‰|Ñ	÷r;   r¾   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚLiltIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y r­   )r"   r#   r   rj   r&   Úintermediate_sizer³   Ú
isinstanceÚ
hidden_actÚstrr	   Úintermediate_act_fnr6   s     €r:   r#   zLiltIntermediate.__init__P  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r;   r˜   rµ   c                 óJ   — | j                  |«      }| j                  |«      }|S r­   )r³   rÒ   )r7   r˜   s     r:   rK   zLiltIntermediate.forwardX  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr;   rº   r\   s   @r:   rÌ   rÌ   O  s#   ø„ ô9ð U§\¡\ð °e·l±l÷ r;   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 )Ú
LiltOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y r²   )r"   r#   r   rj   rÎ   r&   r³   r-   r.   r/   r0   r1   r6   s     €r:   r#   zLiltOutput.__init__`  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r;   r˜   r´   rµ   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S r­   r·   r¸   s      r:   rK   zLiltOutput.forwardf  r¹   r;   rº   r\   s   @r:   rÕ   rÕ   _  r¼   r;   rÕ   c                   ó°   ‡ — e Zd Zdˆ fd„	Z	 	 ddej
                  dej
                  dej                  dz  dedz  deej
                     f
d„Z	d	„ Z
d
„ Zˆ xZS )Ú	LiltLayerNc                 óº  •— t         ‰| �  «        |j                  | _        d| _        t	        ||¬«      | _        t        |«      | _        t        |«      | _	        |j                  }|j                  }|j                  |j                  z  |_
        |j                  |j                  z  |_        t        |«      | _        t        |«      | _        ||_
        ||_        y )Nr   rÀ   )r"   r#   Úchunk_size_feed_forwardÚseq_len_dimr¾   Ú	attentionrÌ   ÚintermediaterÕ   rÁ   r&   rÎ   rh   Úlayout_intermediaterÂ   )r7   r8   rˆ   rÃ   Úori_intermediate_sizer9   s        €r:   r#   zLiltLayer.__init__n  s¾   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ& v¸ÔCˆŒÜ,¨VÓ4ˆÔÜ  Ó(ˆŒà ×,Ñ,ˆØ &× 8Ñ 8ÐØ#×/Ñ/°6×3NÑ3NÑNˆÔØ#)×#;Ñ#;¸v×?ZÑ?ZÑ#ZˆÔ Ü#3°FÓ#;ˆÔ Ü'¨Ó/ˆÔØ,ˆÔØ#8ˆÕ r;   r˜   r™   rš   r›   rµ   c                 ó  — | j                  ||||¬«      }|d   }|d   }|dd  }t        | j                  | j                  | j                  |«      }	t        | j
                  | j                  | j                  |«      }
|	|
f|z   }|S )N)r›   r   r   rm   )rÝ   r   Úfeed_forward_chunkrÛ   rÜ   Úlayout_feed_forward_chunk)r7   r˜   r™   rš   r›   Úself_attention_outputsrÆ   rÇ   r¬   Úlayer_outputÚlayout_layer_outputs              r:   rK   zLiltLayer.forward  s®   € ð "&§¡ØØØØ/ð	 "0ó "
Ðð 2°!Ñ4ÐØ"8¸Ñ";Ðà(¨¨Ð,ˆä0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆô 8Ø×*Ñ*¨D×,HÑ,HÈ$×JZÑJZÐ\só
Ðð  Ð!4Ð5¸Ñ?ˆàˆr;   c                 óL   — | j                  |«      }| j                  ||«      }|S r­   )rÞ   rÁ   ©r7   rÆ   Úintermediate_outputrå   s       r:   râ   zLiltLayer.feed_forward_chunkœ  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐr;   c                 óL   — | j                  |«      }| j                  ||«      }|S r­   )rß   rÂ   rè   s       r:   rã   z#LiltLayer.layout_feed_forward_chunk¡  s.   € Ø"×6Ñ6Ð7GÓHÐØ×)Ñ)Ð*=Ð?OÓPˆØÐr;   r­   r®   )rX   rY   rZ   r#   r3   r»   rÈ   rÉ   rÊ   rK   râ   rã   r[   r\   s   @r:   rÙ   rÙ   m  so   ø„ õ9ð* 48Ø).ñà—|‘|ðð —|‘|ðð ×)Ñ)¨DÑ0ð	ð
   $™;ðð 
ˆu�|‰|Ñ	óò:ö
r;   rÙ   c                   óÀ   ‡ — e Zd Zˆ fd„Z	 	 	 	 ddej
                  dej
                  dej                  dz  dedz  dedz  dedz  d	eej
                     e	z  fd
„Z
ˆ xZS )ÚLiltEncoderc                 óÂ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        y c c}w r­   )	r"   r#   r8   r   Ú
ModuleListÚrangeÚnum_hidden_layersrÙ   Úlayer)r7   r8   Ú_r9   s      €r:   r#   zLiltEncoder.__init__¨  sC   ø€ Ü‰ÑÔØˆŒÜ—]‘]¼uÀV×E]ÑE]Ó?^Ö#_¸!¤I¨fÕ$5Ò#_Ó`ˆ�
ùÒ#_s   ½ANr˜   r™   rš   r›   Úoutput_hidden_statesÚreturn_dictrµ   c                 ó   — |rdnd }|rdnd }t        | j                  «      D ].  \  }	}
|r||fz   } |
||||«      }|d   }|d   }|sŒ&||d   fz   }Œ0 |r||fz   }|st        d„ |||fD «       «      S t        |||¬«      S )N© r   r   rm   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wr­   rö   )Ú.0Úvs     r:   ú	<genexpr>z&LiltEncoder.forward.<locals>.<genexpr>Î  s   è ø€ ò àð
 �=ô ñùs   ‚)Úlast_hidden_stater˜   Ú
attentions)Ú	enumeraterñ   rÊ   r   )r7   r˜   r™   rš   r›   ró   rô   Úall_hidden_statesÚall_self_attentionsÚiÚlayer_moduleÚlayer_outputss               r:   rK   zLiltEncoder.forward­  sÞ   € ñ #7™B¸DÐÙ$5™b¸4Ðä(¨¯©Ó4ò 	P‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!á(ØØØØ!ó	ˆMð *¨!Ñ,ˆMØ)¨!Ñ,ˆMâ Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð	Pñ"  Ø 1°]Ð4DÑ DÐáÜñ ð "Ø%Ø'ðôó ð ô Ø+Ø+Ø*ô
ð 	
r;   )NFFT)rX   rY   rZ   r#   r3   r»   rÈ   rÉ   rÊ   r   rK   r[   r\   s   @r:   rì   rì   §  s�   ø„ ôað 48Ø).Ø,1Ø#'ñ.
à—|‘|ð.
ð —|‘|ð.
ð ×)Ñ)¨DÑ0ð	.
ð
   $™;ð.
ð # T™kð.
ð ˜D‘[ð.
ð 
ˆu�|‰|Ñ	˜Ñ	.÷.
r;   rì   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )Ú
LiltPoolerc                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y r­   )r"   r#   r   rj   r&   r³   ÚTanhÚ
activationr6   s     €r:   r#   zLiltPooler.__init__à  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�r;   r˜   rµ   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S ©Nr   )r³   r  )r7   r˜   Úfirst_token_tensorÚpooled_outputs       r:   rK   zLiltPooler.forwardå  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr;   rº   r\   s   @r:   r  r  ß  s#   ø„ ô$ð
 U§\¡\ð °e·l±l÷ r;   r  c                   ó6   ‡ — e Zd ZU eed<   dZdZg Zˆ fd„Zˆ xZ	S )ÚLiltPreTrainedModelr8   ÚliltTc                 óø   •— t         ‰| �  |«       t        |t        «      rZt	        j
                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       y y )Nr    r   )r"   Ú_init_weightsrÏ   r   ÚinitÚcopy_r   r3   r4   Úshaper5   )r7   Úmoduler9   s     €r:   r  z!LiltPreTrainedModel._init_weightsõ  s[   ø€ Ü‰Ñ˜fÔ%Ü�fÔ0Ô1Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð 2r;   )
rX   rY   rZ   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesr  r[   r\   s   @r:   r  r  î  s'   ø… àÓØÐØ&*Ð#ØÐ÷ið ir;   r  c                   óH  ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Z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	dz  de	dz  de	dz  de
ej                     ez  fd„«       Zˆ xZS )Ú	LiltModelc                 óÚ   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        |«      | _        |rt        |«      nd| _
        | j                  «        y)zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        N)r"   r#   r8   r   rJ   r^   Úlayout_embeddingsrì   Úencoderr  ÚpoolerÚ	post_init)r7   r8   Úadd_pooling_layerr9   s      €r:   r#   zLiltModel.__init__ý  sZ   ø€ ô
 	‰Ñ˜Ô ØˆŒä,¨VÓ4ˆŒÜ!5°fÓ!=ˆÔÜ" 6Ó*ˆŒá,=”j Ô(À4ˆŒð 	�‰Õr;   c                 ó.   — | j                   j                  S r­   ©rJ   r(   )r7   s    r:   Úget_input_embeddingszLiltModel.get_input_embeddings  s   € Ø�‰×.Ñ.Ð.r;   c                 ó&   — || j                   _        y r­   r"  )r7   rƒ   s     r:   Úset_input_embeddingszLiltModel.set_input_embeddings  s   € Ø*/ˆ�‰Õ'r;   NrF   rp   rš   rG   r   rH   r›   ró   rô   rµ   c
                 óP  — |�|n| j                   j                  }|�|n| j                   j                  }|	�|	n| j                   j                  }	|�|�t	        d«      ‚|�#| j                  ||«       |j                  «       }n!|�|j                  «       dd }nt	        d«      ‚|\  }}|�|j                  n|j                  }|€)t        j                  |dz   t        j                  |¬«      }|€t        j                  ||f|¬«      }|€pt        | j                  d«      r4| j                  j                  dd…d|…f   }|j                  ||«      }|}n&t        j                  |t        j                  |¬«      }| j                  ||||¬	«      \  }}t!        | j                   ||¬
«      }| j#                  ||¬«      }| j%                  ||||||	¬«      }|d   }| j&                  �| j'                  |«      nd}|	s
||f|dd z   S t)        |||j*                  |j,                  ¬«      S )aÅ  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.

        Examples:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")
        >>> model = AutoModel.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")

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

        >>> encoding = tokenizer(words, boxes=boxes, return_tensors="pt")

        >>> outputs = model(**encoding)
        >>> last_hidden_states = outputs.last_hidden_state
        ```NzDYou cannot specify both input_ids and inputs_embeds at the same timer    z5You have to specify either input_ids or inputs_embeds)é   r=   )r?   rG   )rF   r   rG   rH   )r8   rH   rš   )rp   r   )rš   r›   ró   rô   r   r   )rû   Úpooler_outputr˜   rü   )r8   r›   ró   rô   r~   Ú%warn_if_padding_and_no_attention_maskrC   r?   r3   rD   rE   Úonesr}   rJ   rG   r5   r
   r  r  r  r   r˜   rü   )r7   rF   rp   rš   rG   r   rH   r›   ró   rô   ÚkwargsrI   Ú
batch_sizeÚ
seq_lengthr?   Úbuffered_token_type_idsÚ buffered_token_type_ids_expandedÚembedding_outputÚlayout_embedding_outputÚencoder_outputsÚsequence_outputr  s                         r:   rK   zLiltModel.forward  sT  € ðP 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ  ]Ð%>ÜÐcÓdÐdØÐ"Ø×6Ñ6°yÀ.ÔQØ#Ÿ.™.Ó*‰KØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà!,Ñˆ
�JØ%.Ð%:�×!Ò!À×@TÑ@Tˆàˆ<Ü—;‘;˜{¨TÑ1¼¿¹ÈFÔSˆDàÐ!Ü"ŸZ™Z¨*°jÐ)AÈ6ÔRˆNàÐ!Ü�t—‘Ð(8Ô9Ø*.¯/©/×*HÑ*HÊÈKÈZÈKÈÑ*XÐ'Ø3J×3QÑ3QÐR\Ð^hÓ3iÐ0Ø!A‘ä!&§¡¨[ÄÇ
Á
ÐSYÔ!Z�à)-¯©ØØ%Ø)Ø'ð	 *9ó *
Ñ&Ð˜,ô 3Ø—;‘;Ø*Ø)ô
ˆð #'×"8Ñ"8¸dÐQ]Ð"8Ó"^ÐàŸ,™,ØØ#Ø)Ø/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆáØ# ]Ð3°oÀaÀbÐ6IÑIÐIä)Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r;   )T)	NNNNNNNNN)rX   rY   rZ   r#   r#  r%  r   r3   r»   rÉ   rÊ   r   rK   r[   r\   s   @r:   r  r  û  s  ø„ õò"/ò0ð ð *.Ø$(Ø.2Ø.2Ø,0Ø-1Ø)-Ø,0Ø#'ñj
à—<‘< $Ñ&ðj
ð �l‰l˜TÑ!ðj
ð Ÿ™ tÑ+ð	j
ð
 Ÿ™ tÑ+ðj
ð —l‘l TÑ)ðj
ð —|‘| dÑ*ðj
ð   $™;ðj
ð # T™kðj
ð ˜D‘[ðj
ð 
ˆu�|‰|Ñ	Ð9Ñ	9òj
ó ôj
r;   r  zœ
    LiLT Model transformer with a sequence classification/regression head on top (a linear layer on top of the pooled
    output) e.g. for GLUE tasks.
    )Úcustom_introc                   óZ  ‡ — e Zd Zˆ fd„Z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	dz  de	dz  de	dz  de
ej                     ez  fd„«       Zˆ xZS )ÚLiltForSequenceClassificationc                 ó¸   •— t         ‰| �  |«       |j                  | _        || _        t	        |d¬«      | _        t        |«      | _        | j                  «        y ©NF)r   )	r"   r#   Ú
num_labelsr8   r  r  ÚLiltClassificationHeadÚ
classifierr  r6   s     €r:   r#   z&LiltForSequenceClassification.__init__Š  sJ   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒØˆŒä˜f¸Ô>ˆŒ	Ü0°Ó8ˆŒð 	�‰Õr;   NrF   rp   rš   rG   r   rH   Úlabelsr›   ró   rô   rµ   c                 óT  — |
�|
n| j                   j                  }
| j                  ||||||||	|
¬«	      }|d   }| j                  |«      }d}|��¢|j	                  |j
                  «      }| 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!        «       } |||«      }|
s|f|d	d z   }|�|f|z   S |S t#        |||j$                  |j&                  ¬
«      S )aÌ  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).

        Examples:

        ```python
        >>> from transformers import AutoTokenizer, AutoModelForSequenceClassification
        >>> from datasets import load_dataset

        >>> tokenizer = AutoTokenizer.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")
        >>> model = AutoModelForSequenceClassification.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")

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

        >>> encoding = tokenizer(words, boxes=boxes, return_tensors="pt")

        >>> outputs = model(**encoding)
        >>> predicted_class_idx = outputs.logits.argmax(-1).item()
        >>> predicted_class = model.config.id2label[predicted_class_idx]
        ```N©rp   rš   rG   r   rH   r›   ró   rô   r   r   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationr    rm   ©ÚlossÚlogitsr˜   rü   )r8   rô   r  r;  rA   r?   Úproblem_typer9  r>   r3   rE   rP   r   Úsqueezer   rŠ   r   r   r˜   rü   ©r7   rF   rp   rš   rG   r   rH   r<  r›   ró   rô   r+  r¬   r3  rD  rC  Úloss_fctrÁ   s                     r:   rK   z%LiltForSequenceClassification.forward•  sí  € ð\ &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØØ)Ø)Ø%Ø'Ø/Ø!5Ø#ð ó 

ˆð " !™*ˆØ—‘ Ó1ˆàˆØÑà—Y‘Y˜vŸ}™}Ó-ˆFØ�{‰{×'Ñ'Ð/Ø—?‘? 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ä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r;   ©
NNNNNNNNNN)rX   rY   rZ   r#   r   r3   Ú
LongTensorr»   rÈ   rÉ   rÊ   r   rK   r[   r\   s   @r:   r6  r6  ‚  s  ø„ ô	ð ð .2Ø$(Ø37Ø26Ø04Ø26Ø*.Ø)-Ø,0Ø#'ñ_
à×#Ñ# dÑ*ð_
ð �l‰l˜TÑ!ð_
ð ×)Ñ)¨DÑ0ð	_
ð
 ×(Ñ(¨4Ñ/ð_
ð ×&Ñ&¨Ñ-ð_
ð ×(Ñ(¨4Ñ/ð_
ð × Ñ  4Ñ'ð_
ð   $™;ð_
ð # T™kð_
ð ˜D‘[ð_
ð 
ˆu�|‰|Ñ	Ð7Ñ	7ò_
ó ô_
r;   r6  c                   óZ  ‡ — e Zd Zˆ fd„Z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dz  dedz  dedz  de	ej                     ez  fd„«       Zˆ xZS )ÚLiltForTokenClassificationc                 ód  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        |j
                  �|j
                  n|j                  }t        j                  |«      | _	        t        j                  |j                  |j                  «      | _        | j                  «        y r8  )r"   r#   r9  r  r  Úclassifier_dropoutr0   r   r/   r1   rj   r&   r;  r  ©r7   r8   rN  r9   s      €r:   r#   z#LiltForTokenClassification.__init__û  sŠ   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä˜f¸Ô>ˆŒ	à)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr;   NrF   rp   rš   rG   r   rH   r<  r›   ró   rô   rµ   c                 óÞ  — |
�|
n| j                   j                  }
| j                  ||||||||	|
¬«	      }|d   }| j                  |«      }| j	                  |«      }d}|�W|j                  |j                  «      }t        «       } ||j                  d| j                  «      |j                  d«      «      }|
s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  ¬«      S )aÈ  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.

        Examples:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")
        >>> model = AutoModelForTokenClassification.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")

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

        >>> encoding = tokenizer(words, boxes=boxes, return_tensors="pt")

        >>> outputs = model(**encoding)
        >>> predicted_class_indices = outputs.logits.argmax(-1)
        ```Nr>  r   r    rm   rB  )r8   rô   r  r1   r;  rA   r?   r   rŠ   r9  r   r˜   rü   rG  s                     r:   rK   z"LiltForTokenClassification.forward	  s	  € ðV &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØØ)Ø)Ø%Ø'Ø/Ø!5Ø#ð ó 

ˆð " !™*ˆàŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÐà—Y‘Y˜vŸ}™}Ó-ˆFÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r;   rI  )rX   rY   rZ   r#   r   r3   rJ  rÈ   rÉ   rÊ   r»   r   rK   r[   r\   s   @r:   rL  rL  ø  s  ø„ ôð ð .2Ø(,Ø37Ø26Ø04Ø26Ø*.Ø)-Ø,0Ø#'ñM
à×#Ñ# dÑ*ðM
ð ×Ñ Ñ%ðM
ð ×)Ñ)¨DÑ0ð	M
ð
 ×(Ñ(¨4Ñ/ðM
ð ×&Ñ&¨Ñ-ðM
ð ×(Ñ(¨4Ñ/ðM
ð × Ñ  4Ñ'ðM
ð   $™;ðM
ð # T™kðM
ð ˜D‘[ðM
ð 
ˆu�|‰|Ñ	Ð4Ñ	4òM
ó ôM
r;   rL  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )r:  z-Head for sentence-level classification tasks.c                 óZ  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        |j                  �|j                  n|j                  }t        j                  |«      | _	        t        j                  |j                  |j                  «      | _        y r­   )r"   r#   r   rj   r&   r³   rN  r0   r/   r1   r9  Úout_projrO  s      €r:   r#   zLiltClassificationHead.__init__^  s   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
à)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ	™	 &×"4Ñ"4°f×6GÑ6GÓHˆ�r;   c                 óÐ   — |d d …dd d …f   }| j                  |«      }| j                  |«      }t        j                  |«      }| j                  |«      }| j	                  |«      }|S r	  )r1   r³   r3   ÚtanhrS  )r7   Úfeaturesr+  rŒ   s       r:   rK   zLiltClassificationHead.forwardg  sY   € Ø’Q˜š1�WÑˆØ�L‰L˜‹OˆØ�J‰J�q‹MˆÜ�J‰J�q‹MˆØ�L‰L˜‹OˆØ�M‰M˜!ÓˆØˆr;   )rX   rY   rZ   Ú__doc__r#   rK   r[   r\   s   @r:   r:  r:  [  s   ø„ Ù7ôIör;   r:  c                   óz  ‡ — e Zd Zˆ fd„Z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dz  dedz  dedz  de	ej                     ez  fd„«       Zˆ xZS )ÚLiltForQuestionAnsweringc                 óè   •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        j                  |j                  |j                  «      | _        | j                  «        y r8  )
r"   r#   r9  r  r  r   rj   r&   Ú
qa_outputsr  r6   s     €r:   r#   z!LiltForQuestionAnswering.__init__t  sU   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä˜f¸Ô>ˆŒ	ÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr;   NrF   rp   rš   rG   r   rH   Ústart_positionsÚend_positionsr›   ró   rô   rµ   c                 ó(  — |�|n| j                   j                  }| j                  |||||||	|
|¬«	      }|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  }|s||f|dd z   }|�|f|z   S |S t        ||||j                  |j                  ¬	«      S )
aÚ  
        bbox (`torch.LongTensor` of shape `(batch_size, sequence_length, 4)`, *optional*):
            Bounding boxes of each input sequence tokens. Selected in the range `[0,
            config.max_2d_position_embeddings-1]`. Each bounding box should be a normalized version in (x0, y0, x1, y1)
            format, where (x0, y0) corresponds to the position of the upper left corner in the bounding box, and (x1,
            y1) represents the position of the lower right corner. See [Overview](#Overview) for normalization.

        Examples:

        ```python
        >>> from transformers import AutoTokenizer, AutoModelForQuestionAnswering
        >>> from datasets import load_dataset

        >>> tokenizer = AutoTokenizer.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")
        >>> model = AutoModelForQuestionAnswering.from_pretrained("SCUT-DLVCLab/lilt-roberta-en-base")

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

        >>> encoding = tokenizer(words, boxes=boxes, return_tensors="pt")

        >>> outputs = model(**encoding)

        >>> answer_start_index = outputs.start_logits.argmax()
        >>> answer_end_index = outputs.end_logits.argmax()

        >>> predict_answer_tokens = encoding.input_ids[0, answer_start_index : answer_end_index + 1]
        >>> predicted_answer = tokenizer.decode(predict_answer_tokens)
        ```Nr>  r   r   r    rM   )Úignore_indexrm   )rC  Ústart_logitsÚ
end_logitsr˜   rü   )r8   rô   r  r[  ÚsplitrF  r—   ÚlenrC   Úclampr   r   r˜   rü   )r7   rF   rp   rš   rG   r   rH   r\  r]  r›   ró   rô   r+  r¬   r3  rD  r`  ra  Ú
total_lossÚignored_indexrH  Ú
start_lossÚend_lossrÁ   s                           r:   rK   z LiltForQuestionAnswering.forward~  sÃ  € ð^ &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØØ)Ø)Ø%Ø'Ø/Ø!5Ø#ð ó 

ˆð " !™*ˆà—‘ Ó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ä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r;   )NNNNNNNNNNN)rX   rY   rZ   r#   r   r3   rJ  rÈ   rÉ   rÊ   r»   r   rK   r[   r\   s   @r:   rY  rY  q  s6  ø„ ôð ð .2Ø(,Ø37Ø26Ø04Ø26Ø37Ø15Ø)-Ø,0Ø#'ñ^
à×#Ñ# dÑ*ð^
ð ×Ñ Ñ%ð^
ð ×)Ñ)¨DÑ0ð	^
ð
 ×(Ñ(¨4Ñ/ð^
ð ×&Ñ&¨Ñ-ð^
ð ×(Ñ(¨4Ñ/ð^
ð ×)Ñ)¨DÑ0ð^
ð ×'Ñ'¨$Ñ.ð^
ð   $™;ð^
ð # T™kð^
ð ˜D‘[ð^
ð 
ˆu�|‰|Ñ	Ð;Ñ	;ò^
ó ô^
r;   rY  )rY  r6  rL  r  r  )5rW  r”   r3   r   Útorch.nnr   r   r   Ú r   r  Úactivationsr	   Úmasking_utilsr
   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   Úmodeling_utilsr   Úpytorch_utilsr   Úutilsr   r   Úconfiguration_liltr   Ú
get_loggerrX   ÚloggerÚModuler   r^   rx   r°   r¾   rÌ   rÕ   rÙ   rì   r  r  r  r6  rL  r:  rY  Ú__all__rö   r;   r:   ú<module>rw     s¶  ðñ ã ã Ý ß AÑ Aå &Ý !Ý 6Ý 9÷õ õ .Ý 6ß ,Ý *ð 
ˆ×	Ñ	˜HÓ	%€ôS=˜Ÿ™ô S=ôl5+˜2Ÿ9™9ô 5+ôpf˜Ÿ	™	ô fôT�R—Y‘Yô ô�B—I‘Iô ô>�r—y‘yô ô �—‘ô ô7Ð*ô 7ôt4
�"—)‘)ô 4
ôp�—‘ô ð ô	i˜/ó 	ió ð	ið ôC
Ð#ó C
ó ðC
ñL ðôôm
Ð$7ó m
óðm
ð` ô^
Ð!4ó ^
ó ð^
ôD˜RŸY™Yô ð, ôk
Ð2ó k
ó ðk
ò\�r;   