Ë
    ÜÓ^j’�  ã                   ól  — d Z ddlmZ ddlZddlmZ ddlmZmZmZ ddl	m
Z ddlmZ dd	lmZ dd
lmZmZmZmZmZmZ ddlmZmZ ddlmZ ddlmZ ddlmZm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(  e"jR                  e*«      Z+ G d„ dejX                  «      Z- G d„ dejX                  «      Z. G d„ dejX                  «      Z/ G d„ dejX                  «      Z0 G d„ dejX                  «      Z1 G d„ dejX                  «      Z2 G d„ d ejX                  «      Z3 G d!„ d"ejX                  «      Z4 G d#„ d$ejX                  «      Z5	 dCd%ejX                  d&ejl                  d'ejl                  d(ejl                  d)ejl                  dz  d*e7d+e7fd,„Z8 G d-„ d.ejX                  «      Z9 G d/„ d0ejX                  «      Z: G d1„ d2e«      Z; G d3„ d4ejX                  «      Z<e  G d5„ d6e«      «       Z=e  G d7„ d8e=«      «       Z>e  G d9„ d:e=«      «       Z? e d;¬<«       G d=„ d>e=«      «       Z@ e d?¬<«       G d@„ dAe=«      «       ZAg dB¢ZBy)DzPyTorch MarkupLM model.é    )ÚCallableN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚMaskedLMOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚMarkupLMConfigc                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )ÚXPathEmbeddingszˆConstruct the embeddings from xpath tags and subscripts.

    We drop tree-id in this version, as its info can be covered by xpath.
    c           	      ó¸  •— t         ‰| �  «        |j                  | _        t        j                  |j
                  | j                  z  |j                  «      | _        t        j                  |j                  «      | _
        t        j                  «       | _        t        j                  |j
                  | j                  z  d|j                  z  «      | _        t        j                  d|j                  z  |j                  «      | _        t        j                  t!        | j                  «      D �cg c],  }t        j"                  |j$                  |j
                  «      ‘Œ. c}«      | _        t        j                  t!        | j                  «      D �cg c],  }t        j"                  |j(                  |j
                  «      ‘Œ. c}«      | _        y c c}w c c}w )Né   )ÚsuperÚ__init__Ú	max_depthr   ÚLinearÚxpath_unit_hidden_sizeÚhidden_sizeÚxpath_unitseq2_embeddingsÚDropoutÚhidden_dropout_probÚdropoutÚReLUÚ
activationÚxpath_unitseq2_innerÚ	inner2embÚ
ModuleListÚrangeÚ	EmbeddingÚmax_xpath_tag_unit_embeddingsÚxpath_tag_sub_embeddingsÚmax_xpath_subs_unit_embeddingsÚxpath_subs_sub_embeddings)ÚselfÚconfigÚ_Ú	__class__s      €úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/markuplm/modeling_markuplm.pyr#   zXPathEmbeddings.__init__3   sZ  ø€ Ü‰ÑÔØ×)Ñ)ˆŒä)+¯©°6×3PÑ3PÐSW×SaÑSaÑ3aÐci×cuÑcuÓ)vˆÔ&ä—z‘z &×"<Ñ"<Ó=ˆŒäŸ'™'›)ˆŒÜ$&§I¡I¨f×.KÑ.KÈdÏnÉnÑ.\Ð^_Ðbh×btÑbtÑ^tÓ$uˆÔ!ÜŸ™ 1 v×'9Ñ'9Ñ#9¸6×;MÑ;MÓNˆŒä(*¯©ô ˜tŸ~™~Ó.öàô —‘˜V×AÑAÀ6×C`ÑC`Õaòó)
ˆÔ%ô *,¯©ô ˜tŸ~™~Ó.öàô —‘˜V×BÑBÀF×DaÑDaÕbòó*
ˆÕ&ùòùòs   Ä11GÆ1Gc           	      óÜ  — g }g }t        | j                  «      D ]^  }|j                   | j                  |   |d d …d d …|f   «      «       |j                   | j                  |   |d d …d d …|f   «      «       Œ` t        j                  |d¬«      }t        j                  |d¬«      }||z   }| j                  | j                  | j                  | j                  |«      «      «      «      }|S )Néÿÿÿÿ©Údim)r1   r$   Úappendr4   r6   ÚtorchÚcatr/   r+   r-   r.   )r7   Úxpath_tags_seqÚxpath_subs_seqÚxpath_tags_embeddingsÚxpath_subs_embeddingsÚiÚxpath_embeddingss          r;   ÚforwardzXPathEmbeddings.forwardM   sí   € Ø "ÐØ "Ðä�t—~‘~Ó&ò 	eˆAØ!×(Ñ(Ð)I¨×)FÑ)FÀqÑ)IÈ.ÒYZÒ\]Ð_`ÐY`ÑJaÓ)bÔcØ!×(Ñ(Ð)J¨×)GÑ)GÈÑ)JÈ>ÒZ[Ò]^Ð`aÐZaÑKbÓ)cÕdð	eô !&§	¡	Ð*?ÀRÔ HÐÜ %§	¡	Ð*?ÀRÔ HÐà0Ð3HÑHÐàŸ>™>¨$¯,©,°t·±Àt×G`ÑG`ÐaqÓGrÓ7sÓ*tÓuÐàÐó    )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   rI   Ú__classcell__©r:   s   @r;   r   r   -   s   ø„ ñô

÷4 rJ   r   c                   óX   ‡ — e Zd ZdZˆ fd„Zed„ «       Zedd„«       Z	 	 	 	 	 	 dd„Zˆ xZ	S )ÚMarkupLMEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 ód  •— t         ‰| �  «        || _        t        j                  |j
                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  «      | _
        |j                  | _        t        |«      | _        t        j                  |j                  |j                  «      | _        t        j                   |j                  |j"                  ¬«      | _        t        j$                  |j&                  «      | _        | j+                  dt-        j.                  |j                  «      j1                  d«      d¬«       |j                  | _        t        j                  |j                  |j                  | j2                  ¬«      | _
        y )N)Úpadding_idx©ÚepsÚposition_ids©r   r=   F)Ú
persistent)r"   r#   r8   r   r2   Ú
vocab_sizer'   Úpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsr$   r   rH   Útype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsr)   r*   r+   Úregister_bufferrA   ÚarangeÚexpandrT   ©r7   r8   r:   s     €r;   r#   zMarkupLMEmbeddings.__init__b   s:  ø€ Ü‰ÑÔØˆŒÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ à×)Ñ)ˆŒä /°Ó 7ˆÔä%'§\¡\°&×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\ô$
ˆÕ rJ   c                 óæ   — | j                  «       dd }|d   }t        j                  |dz   ||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.

        Args:
            inputs_embeds: torch.Tensor

        Returns: torch.Tensor
        Nr=   r   ©ÚdtypeÚdevicer   )ÚsizerA   rd   Úlongrj   Ú	unsqueezere   )Úinputs_embedsrT   Úinput_shapeÚsequence_lengthrW   s        r;   Ú&create_position_ids_from_inputs_embedsz9MarkupLMEmbeddings.create_position_ids_from_inputs_embedsz   sp   € ð $×(Ñ(Ó*¨3¨BÐ/ˆØ% a™.ˆä—|‘|Ø˜!‰O˜_¨{Ñ:¸QÑ>ÄeÇjÁjÐYf×YmÑYmô
ˆð ×%Ñ% aÓ(×/Ñ/°Ó<Ð<rJ   c                 ó¾   — | j                  |«      j                  «       }t        j                  |d¬«      j	                  |«      |z   |z  }|j                  «       |z   S )a  
        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`.

        Args:
            x: torch.Tensor x:

        Returns: torch.Tensor
        r   r>   )ÚneÚintrA   ÚcumsumÚtype_asrl   )Ú	input_idsrT   Úpast_key_values_lengthÚmaskÚincremental_indicess        r;   Ú"create_position_ids_from_input_idsz5MarkupLMEmbeddings.create_position_ids_from_input_ids�   sW   € ð �|‰|˜KÓ(×,Ñ,Ó.ˆÜ$Ÿ|™|¨D°aÔ8×@Ñ@ÀÓFÐI_Ñ_ÐcgÑgÐØ"×'Ñ'Ó)¨KÑ7Ð7rJ   c                 ó¸  — |�|j                  «       }n|j                  «       d d }|�|j                  n|j                  }|€;|�| j                  || j                  «      }n| j	                  || j                  «      }|€&t        j                  |t
        j                  |¬«      }|€| j                  |«      }|€]| j                  j                  t        j                  t        t        |«      | j                  gz   «      t
        j                  |¬«      z  }|€]| j                  j                  t        j                  t        t        |«      | j                  gz   «      t
        j                  |¬«      z  }|}	| j!                  |«      }
| j#                  |«      }| j%                  ||«      }|	|
z   |z   |z   }| j'                  |«      }| j)                  |«      }|S )Nr=   rh   )rk   rj   r{   rT   rq   rA   Úzerosrl   r\   r8   Ú
tag_pad_idÚonesÚtupleÚlistr$   Úsubs_pad_idr^   r`   rH   ra   r+   )r7   rw   rC   rD   Útoken_type_idsrW   rn   ro   rj   Úwords_embeddingsr^   r`   rH   Ú
embeddingss                 r;   rI   zMarkupLMEmbeddings.forwardž   s»  € ð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà%.Ð%:�×!Ò!À×@TÑ@TˆàÐØÐ$à#×FÑFÀyÐRV×RbÑRbÓc‘à#×JÑJÈ=ÐZ^×ZjÑZjÓk�àÐ!Ü"Ÿ[™[¨¼E¿J¹JÈvÔVˆNàÐ Ø ×0Ñ0°Ó;ˆMð Ð!Ø!Ÿ[™[×3Ñ3´e·j±jÜ”d˜;Ó'¨4¯>©>Ð*:Ñ:Ó;Ä5Ç:Á:ÐV\ô7ñ ˆNð Ð!Ø!Ÿ[™[×4Ñ4´u·z±zÜ”d˜;Ó'¨4¯>©>Ð*:Ñ:Ó;Ä5Ç:Á:ÐV\ô8ñ ˆNð )ÐØ"×6Ñ6°|ÓDÐà $× :Ñ :¸>Ó JÐà×0Ñ0°ÀÓPÐØ%Ð(;Ñ;Ð>SÑSÐVfÑfˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐrJ   )r   )NNNNNN)
rK   rL   rM   rN   r#   Ústaticmethodrq   r{   rI   rO   rP   s   @r;   rR   rR   _   sL   ø„ ÙQô
ð0 ñ=ó ð=ð" ò8ó ð8ð" ØØØØØ÷1rJ   rR   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚMarkupLMSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©NrU   )r"   r#   r   r%   r'   Údensera   rb   r)   r*   r+   rf   s     €r;   r#   zMarkupLMSelfOutput.__init__Ô   s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rJ   Úhidden_statesÚinput_tensorÚreturnc                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S ©N©r‹   r+   ra   ©r7   rŒ   r�   s      r;   rI   zMarkupLMSelfOutput.forwardÚ   ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐrJ   ©rK   rL   rM   r#   rA   ÚTensorrI   rO   rP   s   @r;   rˆ   rˆ   Ó   ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ rJ   rˆ   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMarkupLMIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y r�   )r"   r#   r   r%   r'   Úintermediate_sizer‹   Ú
isinstanceÚ
hidden_actÚstrr
   Úintermediate_act_fnrf   s     €r;   r#   zMarkupLMIntermediate.__init__ã   s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$rJ   rŒ   rŽ   c                 óJ   — | j                  |«      }| j                  |«      }|S r�   )r‹   rž   ©r7   rŒ   s     r;   rI   zMarkupLMIntermediate.forwardë   s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐrJ   r”   rP   s   @r;   r˜   r˜   â   s#   ø„ ô9ð U§\¡\ð °e·l±l÷ rJ   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 )ÚMarkupLMOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y rŠ   )r"   r#   r   r%   rš   r'   r‹   ra   rb   r)   r*   r+   rf   s     €r;   r#   zMarkupLMOutput.__init__ó   s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rJ   rŒ   r�   rŽ   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S r�   r‘   r’   s      r;   rI   zMarkupLMOutput.forwardù   r“   rJ   r”   rP   s   @r;   r¢   r¢   ò   r–   rJ   r¢   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMarkupLMPoolerc                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y r�   )r"   r#   r   r%   r'   r‹   ÚTanhr-   rf   s     €r;   r#   zMarkupLMPooler.__init__  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�rJ   rŒ   rŽ   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )r‹   r-   )r7   rŒ   Úfirst_token_tensorÚpooled_outputs       r;   rI   zMarkupLMPooler.forward  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐrJ   r”   rP   s   @r;   r¦   r¦     s#   ø„ ô$ð
 U§\¡\ð °e·l±l÷ rJ   r¦   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMarkupLMPredictionHeadTransformc                 óh  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        |j                  t        «      rt        |j                     | _
        n|j                  | _
        t        j                  |j                  |j                  ¬«      | _        y rŠ   )r"   r#   r   r%   r'   r‹   r›   rœ   r�   r
   Útransform_act_fnra   rb   rf   s     €r;   r#   z(MarkupLMPredictionHeadTransform.__init__  s{   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü�f×'Ñ'¬Ô-Ü$*¨6×+<Ñ+<Ñ$=ˆDÕ!à$*×$5Ñ$5ˆDÔ!ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆ�rJ   rŒ   rŽ   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r�   )r‹   r¯   ra   r    s     r;   rI   z'MarkupLMPredictionHeadTransform.forward  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐrJ   r”   rP   s   @r;   r­   r­     s$   ø„ ôUð U§\¡\ð °e·l±l÷ rJ   r­   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚMarkupLMLMPredictionHeadc                 ó  •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        t	        j                  t        j                  |j                  «      «      | _        y )NT)Úbias)r"   r#   r­   Ú	transformr   r%   r'   rZ   ÚdecoderÚ	ParameterrA   r}   r´   rf   s     €r;   r#   z!MarkupLMLMPredictionHead.__init__$  s[   ø€ Ü‰ÑÔÜ8¸Ó@ˆŒô —y‘y ×!3Ñ!3°V×5FÑ5FÈTÔRˆŒÜ—L‘L¤§¡¨V×->Ñ->Ó!?Ó@ˆ�	rJ   c                 óJ   — | j                  |«      }| j                  |«      }|S r�   )rµ   r¶   r    s     r;   rI   z MarkupLMLMPredictionHead.forward-  s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐrJ   )rK   rL   rM   r#   rI   rO   rP   s   @r;   r²   r²   #  s   ø„ ôAörJ   r²   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMarkupLMOnlyMLMHeadc                 óB   •— t         ‰| �  «        t        |«      | _        y r�   )r"   r#   r²   Úpredictionsrf   s     €r;   r#   zMarkupLMOnlyMLMHead.__init__5  s   ø€ Ü‰ÑÔÜ3°FÓ;ˆÕrJ   Úsequence_outputrŽ   c                 ó(   — | j                  |«      }|S r�   )r¼   )r7   r½   Úprediction_scoress      r;   rI   zMarkupLMOnlyMLMHead.forward9  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð rJ   r”   rP   s   @r;   rº   rº   4  s#   ø„ ô<ð! u§|¡|ð !¸¿¹÷ !rJ   rº   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingr+   c                 óÀ  — t        j                  ||j                  dd«      «      |z  }|�||z   }t        j                  j                  |dt         j                  ¬«      j                  |j                  «      }t        j                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Né   r   r=   )r?   ri   )ÚpÚtrainingr   )rA   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxÚfloat32Útori   r+   rÉ   Ú
contiguous)
rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   r+   ÚkwargsÚattn_weightsÚattn_outputs
             r;   Úeager_attention_forwardrÔ   ?  sº   € ô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KØ˜Ð$Ð$rJ   c                   ó¦   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej                  dz  dee   de	ej
                  ej
                  dz  f   fd„Z
ˆ xZS )	ÚMarkupLMSelfAttentionc                 ó$  •— 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                  dz  | _        y )Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)g      à¿)r"   r#   r'   Únum_attention_headsÚhasattrÚ
ValueErrorr8   rt   Úattention_head_sizeÚall_head_sizer   r%   rÁ   rÂ   rÃ   r)   Úattention_probs_dropout_probr+   Úattention_dropoutrÅ   rf   s     €r;   r#   zMarkupLMSelfAttention.__init__W  sC  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸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ˆŒØ!'×!DÑ!DˆÔØ×/Ñ/°Ñ5ˆ�rJ   NrŒ   rÄ   rÑ   rŽ   c                 óx  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }t        j                  | j                  j                  t        «      }	 |	| ||||f| j                  sdn| j                  | j                  dœ|¤Ž\  }
} |
j                  g |¢d‘­Ž j!                  «       }
|
|fS )Nr=   r   rÇ   ç        )r+   rÅ   )ÚshaperÝ   rÁ   ÚviewrË   rÂ   rÃ   r   Úget_interfacer8   Ú_attn_implementationrÔ   rÉ   rà   rÅ   ÚreshaperÐ   )r7   rŒ   rÄ   rÑ   ro   Úhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacerÓ   rÒ   s               r;   rI   zMarkupLMSelfAttention.forwardl  s>  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆà—z‘z -Ó0×5Ñ5°lÓC×MÑMÈaÐQRÓSˆØ—X‘X˜mÓ,×1Ñ1°,Ó?×IÑIÈ!ÈQÓOˆ
Ø—z‘z -Ó0×5Ñ5°lÓC×MÑMÈaÐQRÓSˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ˜LÐ(Ð(rJ   r�   )rK   rL   rM   r#   rA   r•   ÚFloatTensorr   r   r€   rI   rO   rP   s   @r;   rÖ   rÖ   V  sd   ø„ ô6ð0 48ñ)à—|‘|ð)ð ×)Ñ)¨DÑ0ð)ð Ð+Ñ,ð	)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷)rJ   rÖ   c            	       ó‚   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej                  dz  dee   dej
                  fd„Z	ˆ xZ
S )	ÚMarkupLMAttentionc                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y r�   )r"   r#   rÖ   r7   rˆ   Úoutputrf   s     €r;   r#   zMarkupLMAttention.__init__Ž  s&   ø€ Ü‰ÑÔÜ)¨&Ó1ˆŒ	Ü(¨Ó0ˆ�rJ   NrŒ   rÄ   rÑ   rŽ   c                 ó^   — |} | j                   |fd|i|¤Ž\  }}| j                  ||«      }|S ©NrÄ   )r7   rñ   )r7   rŒ   rÄ   rÑ   Úresidualr9   s         r;   rI   zMarkupLMAttention.forward“  sK   € ð !ˆØ$˜4Ÿ9™9Øñ
à)ð
ð ñ
Ñˆ�qð
 Ÿ™ M°8Ó<ˆØÐrJ   r�   )rK   rL   rM   r#   rA   r•   rí   r   r   rI   rO   rP   s   @r;   rï   rï   �  sQ   ø„ ô1ð 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰÷rJ   rï   c            	       óˆ   ‡ — e Zd Zˆ fd„Z	 d	dej
                  dej                  dz  dee   dej
                  fd„Z	d„ Z
ˆ xZS )
ÚMarkupLMLayerc                 ó²   •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        t        |«      | _        t        |«      | _	        y )Nr   )
r"   r#   Úchunk_size_feed_forwardÚseq_len_dimrï   Ú	attentionr˜   Úintermediater¢   rñ   rf   s     €r;   r#   zMarkupLMLayer.__init__¥  sI   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ*¨6Ó2ˆŒÜ0°Ó8ˆÔÜ$ VÓ,ˆ�rJ   NrŒ   rÄ   rÑ   rŽ   c                 óˆ   —  | j                   |fd|i|¤Ž}t        | j                  | j                  | j                  |«      }|S ró   )rú   r   Úfeed_forward_chunkrø   rù   )r7   rŒ   rÄ   rÑ   s       r;   rI   zMarkupLMLayer.forward­  sY   € ð '˜Ÿ™Øñ
à)ð
ð ñ
ˆô 2Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUbó
ˆð ÐrJ   c                 óL   — | j                  |«      }| j                  ||«      }|S r�   )rû   rñ   )r7   Úattention_outputÚintermediate_outputÚlayer_outputs       r;   rý   z MarkupLMLayer.feed_forward_chunk¿  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐrJ   r�   )rK   rL   rM   r#   rA   r•   rí   r   r   rI   rý   rO   rP   s   @r;   rö   rö   ¤  sV   ø„ ô-ð 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰óö$rJ   rö   c            	       ón   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej                  dz  dee   de	fd„Z
ˆ xZS )	ÚMarkupLMEncoderc                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w )NF)
r"   r#   r8   r   r0   r1   Únum_hidden_layersrö   ÚlayerÚgradient_checkpointing)r7   r8   rG   r:   s      €r;   r#   zMarkupLMEncoder.__init__Ç  sN   ø€ Ü‰ÑÔØˆŒÜ—]‘]Ä5È×IaÑIaÓCbÖ#c¸a¤M°&Õ$9Ò#cÓdˆŒ
Ø&+ˆÕ#ùò $ds   ½A#NrŒ   rÄ   rÑ   rŽ   c                 óP   — | j                   D ]  } |||fi |¤Ž}Œ t        |¬«      S )N)Úlast_hidden_state)r  r   )r7   rŒ   rÄ   rÑ   Úlayer_modules        r;   rI   zMarkupLMEncoder.forwardÍ  sC   € ð !ŸJ™Jò 	ˆLÙ(ØØñð ñ‰Mð	ô Ø+ô
ð 	
rJ   r�   )rK   rL   rM   r#   rA   r•   rí   r   r   r   rI   rO   rP   s   @r;   r  r  Æ  sM   ø„ ô,ð 48ñ
à—|‘|ð
ð ×)Ñ)¨DÑ0ð
ð Ð+Ñ,ð	
ð
 
÷
rJ   r  c                   ó`   ‡ — e Zd ZU eed<   dZeedœZ e	j                  «       ˆ fd„«       Zˆ xZS )ÚMarkupLMPreTrainedModelr8   Úmarkuplm)rŒ   Ú
attentionsc                 óX  •— t         ‰| �  |«       t        |t        «      r t	        j
                  |j                  «       yt        |t        «      rZt	        j                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       yy)zInitialize the weightsr=   rX   N)r"   Ú_init_weightsr›   r²   ÚinitÚzeros_r´   rR   Úcopy_rW   rA   rd   rã   re   )r7   rÀ   r:   s     €r;   r  z%MarkupLMPreTrainedModel._init_weightsè  sx   ø€ ô 	‰Ñ˜fÔ%Ü�fÔ6Ô7Ü�K‰K˜Ÿ™Õ$Ü˜Ô 2Ô3Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð 4rJ   )rK   rL   rM   r   Ú__annotations__Úbase_model_prefixrö   rÖ   Ú_can_record_outputsrA   Úno_gradr  rO   rP   s   @r;   r  r  ß  s;   ø… àÓØ"Ðà&Ø+ñÐð
 €U‡]�]ƒ_óió ôirJ   r  c                   óH  ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zeee	 	 	 	 	 	 	 dde	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  d	e	j                  dz  d
e	j                  dz  de	j                  dz  dee   deez  fd„«       «       «       Zˆ xZS )ÚMarkupLMModelc                 óº   •— 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   rR   r…   r  Úencoderr¦   ÚpoolerÚ	post_init)r7   r8   Úadd_pooling_layerr:   s      €r;   r#   zMarkupLMModel.__init__õ  sM   ø€ ô
 	‰Ñ˜Ô ØˆŒä,¨VÓ4ˆŒÜ& vÓ.ˆŒá0A”n VÔ,ÀtˆŒð 	�‰ÕrJ   c                 ó.   — | j                   j                  S r�   ©r…   r\   )r7   s    r;   Úget_input_embeddingsz"MarkupLMModel.get_input_embeddings  s   € Ø�‰×.Ñ.Ð.rJ   c                 ó&   — || j                   _        y r�   r   )r7   rÃ   s     r;   Úset_input_embeddingsz"MarkupLMModel.set_input_embeddings  s   € Ø*/ˆ�‰Õ'rJ   Nrw   rC   rD   rÄ   rƒ   rW   rn   rÑ   rŽ   c                 ó¢  — |�|�t        d«      ‚|�#| j                  ||«       |j                  «       }	n!|�|j                  «       dd }	nt        d«      ‚|�|j                  n|j                  }
|€t	        j
                  |	|
¬«      }|€&t	        j                  |	t        j                  |
¬«      }|j                  d«      j                  d«      }|j                  | j                  ¬	«      }d
|z
  dz  }| j                  ||||||¬«      } | j                  ||fi |¤Ž}|d   }| j                  �| j                  |«      nd}t        ||¬«      S )aï  
        xpath_tags_seq (`torch.LongTensor` of shape `(batch_size, sequence_length, config.max_depth)`, *optional*):
            Tag IDs for each token in the input sequence, padded up to config.max_depth.
        xpath_subs_seq (`torch.LongTensor` of shape `(batch_size, sequence_length, config.max_depth)`, *optional*):
            Subscript IDs for each token in the input sequence, padded up to config.max_depth.

        Examples:

        ```python
        >>> from transformers import AutoProcessor, MarkupLMModel

        >>> processor = AutoProcessor.from_pretrained("microsoft/markuplm-base")
        >>> model = MarkupLMModel.from_pretrained("microsoft/markuplm-base")

        >>> html_string = "<html> <head> <title>Page Title</title> </head> </html>"

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

        >>> outputs = model(**encoding)
        >>> last_hidden_states = outputs.last_hidden_state
        >>> list(last_hidden_states.shape)
        [1, 4, 768]
        ```NzDYou cannot specify both input_ids and inputs_embeds at the same timer=   z5You have to specify either input_ids or inputs_embeds)rj   rh   r   rÇ   )ri   g      ð?g     ˆÃÀ)rw   rC   rD   rW   rƒ   rn   r   )r	  Úpooler_output)rÜ   Ú%warn_if_padding_and_no_attention_maskrk   rj   rA   r   r}   rl   rm   rÏ   ri   r…   r  r  r   )r7   rw   rC   rD   rÄ   rƒ   rW   rn   rÑ   ro   rj   Úextended_attention_maskÚembedding_outputÚencoder_outputsr½   r«   s                   r;   rI   zMarkupLMModel.forward  su  € ðJ Ð  ]Ð%>ÜÐcÓdÐdØÐ"Ø×6Ñ6°yÀ.ÔQØ#Ÿ.™.Ó*‰KØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà%.Ð%:�×!Ò!À×@TÑ@TˆàÐ!Ü"ŸZ™Z¨¸FÔCˆNàÐ!Ü"Ÿ[™[¨¼E¿J¹JÈvÔVˆNà"0×":Ñ":¸1Ó"=×"GÑ"GÈÓ"JÐØ"9×"<Ñ"<À4Ç:Á:Ð"<Ó"NÐØ#&Ð)@Ñ#@ÀHÑ"LÐàŸ?™?ØØ)Ø)Ø%Ø)Ø'ð +ó 
Ðð '˜$Ÿ,™,ØØ#ñ
ð ñ
ˆð
 *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆä)Ø-Ø'ô
ð 	
rJ   )T)NNNNNNN)rK   rL   rM   r#   r!  r#  r   r   r   rA   Ú
LongTensorrí   r   r   r€   r   rI   rO   rP   s   @r;   r  r  ò  s	  ø„ õò /ò0ð  ØØð .2Ø26Ø26Ø37Ø26Ø04Ø26ñK
à×#Ñ# dÑ*ðK
ð ×(Ñ(¨4Ñ/ðK
ð ×(Ñ(¨4Ñ/ð	K
ð
 ×)Ñ)¨DÑ0ðK
ð ×(Ñ(¨4Ñ/ðK
ð ×&Ñ&¨Ñ-ðK
ð ×(Ñ(¨4Ñ/ðK
ð Ð+Ñ,ðK
ð 
Ð+Ñ	+òK
ó ó ó  ôK
rJ   r  c                   óŠ  ‡ — e Zd Zˆ f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j                     ez  fd„«       «       Zˆ xZS )ÚMarkupLMForQuestionAnsweringc                 óè   •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        j                  |j                  |j                  «      | _        | j                  «        y ©NF)r  )
r"   r#   Ú
num_labelsr  r  r   r%   r'   Ú
qa_outputsr  rf   s     €r;   r#   z%MarkupLMForQuestionAnswering.__init___  sU   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä% fÀÔFˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrJ   Nrw   rC   rD   rÄ   rƒ   rW   rn   Ústart_positionsÚend_positionsrÑ   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 )
ae  
        xpath_tags_seq (`torch.LongTensor` of shape `(batch_size, sequence_length, config.max_depth)`, *optional*):
            Tag IDs for each token in the input sequence, padded up to config.max_depth.
        xpath_subs_seq (`torch.LongTensor` of shape `(batch_size, sequence_length, config.max_depth)`, *optional*):
            Subscript IDs for each token in the input sequence, padded up to config.max_depth.

        Examples:

        ```python
        >>> from transformers import AutoProcessor, MarkupLMForQuestionAnswering
        >>> import torch

        >>> processor = AutoProcessor.from_pretrained("microsoft/markuplm-base-finetuned-websrc")
        >>> model = MarkupLMForQuestionAnswering.from_pretrained("microsoft/markuplm-base-finetuned-websrc")

        >>> html_string = "<html> <head> <title>My name is Niels</title> </head> </html>"
        >>> question = "What's his name?"

        >>> encoding = processor(html_string, questions=question, return_tensors="pt")

        >>> with torch.no_grad():
        ...     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]
        >>> processor.decode(predict_answer_tokens).strip()
        'Niels'
        ```©rC   rD   rÄ   rƒ   rW   rn   r   r   r=   r>   N)Úignore_indexrÇ   )ÚlossÚstart_logitsÚ
end_logitsrŒ   r  )r  r0  ÚsplitÚsqueezerÐ   Úlenrk   Úclamp_r   r   rŒ   r  )r7   rw   rC   rD   rÄ   rƒ   rW   rn   r1  r2  rÑ   Úoutputsr½   Úlogitsr7  r8  Ú
total_lossÚignored_indexÚloss_fctÚ
start_lossÚend_losss                        r;   rI   z$MarkupLMForQuestionAnswering.forwardi  s€  € ðZ  �$—-‘-Øð	
à)Ø)Ø)Ø)Ø%Ø'ñ	
ð ñ	
ˆð " !™*ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÐ&¨=Ð+Dä�?×'Ñ'Ó)Ó*¨QÒ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ò,Ø -× 5Ñ 5°bÓ 9�à(×-Ñ-¨aÓ0ˆMØ×"Ñ" 1 mÔ4Ø× Ñ   MÔ2ä'°]ÔCˆHÙ! ,°Ó@ˆJÙ 
¨MÓ:ˆHØ$ xÑ/°1Ñ4ˆJä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rJ   )	NNNNNNNNN)rK   rL   rM   r#   r   r   rA   r•   r   r   r€   r   rI   rO   rP   s   @r;   r,  r,  \  s   ø„ ôð Øð *.Ø.2Ø.2Ø.2Ø.2Ø,0Ø-1Ø/3Ø-1ñT
à—<‘< $Ñ&ðT
ð Ÿ™ tÑ+ðT
ð Ÿ™ tÑ+ð	T
ð
 Ÿ™ tÑ+ðT
ð Ÿ™ tÑ+ðT
ð —l‘l TÑ)ðT
ð —|‘| dÑ*ðT
ð Ÿ™¨Ñ,ðT
ð —|‘| dÑ*ðT
ð Ð+Ñ,ðT
ð 
ˆu�|‰|Ñ	Ð;Ñ	;òT
ó ó ôT
rJ   r,  zC
    MarkupLM Model with a `token_classification` head on top.
    )Úcustom_introc                   ój  ‡ — e Zd Zˆ f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j                     ez  fd„«       «       Zˆ xZS )ÚMarkupLMForTokenClassificationc                 ód  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        |j
                  �|j
                  n|j                  }t        j                  |«      | _	        t        j                  |j                  |j                  «      | _        | j                  «        y r.  )r"   r#   r/  r  r  Úclassifier_dropoutr*   r   r)   r+   r%   r'   Ú
classifierr  ©r7   r8   rH  r:   s      €r;   r#   z'MarkupLMForTokenClassification.__init__É  sŠ   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä% fÀÔFˆŒà)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrJ   Nrw   rC   rD   rÄ   rƒ   rW   rn   ÚlabelsrÑ   rŽ   c	           
      ó<  —  | j                   |f||||||dœ|	¤Ž}
|
d   }| j                  |«      }d}|�Ft        «       } ||j                  d| j                  j
                  «      |j                  d«      «      }t        |||
j                  |
j                  ¬«      S )a™  
        xpath_tags_seq (`torch.LongTensor` of shape `(batch_size, sequence_length, config.max_depth)`, *optional*):
            Tag IDs for each token in the input sequence, padded up to config.max_depth.
        xpath_subs_seq (`torch.LongTensor` of shape `(batch_size, sequence_length, config.max_depth)`, *optional*):
            Subscript IDs for each token in the input sequence, padded up to config.max_depth.
        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
        >>> import torch

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

        >>> nodes = ["hello", "world"]
        >>> xpaths = ["/html/body/div/li[1]/div/span", "/html/body/div/li[1]/div/span"]
        >>> node_labels = [1, 2]
        >>> encoding = processor(nodes=nodes, xpaths=xpaths, node_labels=node_labels, return_tensors="pt")

        >>> with torch.no_grad():
        ...     outputs = model(**encoding)

        >>> loss = outputs.loss
        >>> logits = outputs.logits
        ```r4  r   Nr=   ©r6  r>  rŒ   r  )	r  rI  r   rä   r8   r/  r   rŒ   r  )r7   rw   rC   rD   rÄ   rƒ   rW   rn   rK  rÑ   r=  r½   r¿   r6  rA  s                  r;   rI   z&MarkupLMForTokenClassification.forward×  s¼   € ðV  �$—-‘-Øð	
à)Ø)Ø)Ø)Ø%Ø'ñ	
ð ñ	
ˆð " !™*ˆØ ŸO™O¨OÓ<ÐàˆØÐÜ'Ó)ˆHÙØ!×&Ñ& r¨4¯;©;×+AÑ+AÓBØ—‘˜B“óˆDô
 %ØØ$Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rJ   ©NNNNNNNN)rK   rL   rM   r#   r   r   rA   r•   r   r   r€   r   rI   rO   rP   s   @r;   rF  rF  Â  s  ø„ ôð Øð *.Ø.2Ø.2Ø.2Ø.2Ø,0Ø-1Ø&*ñD
à—<‘< $Ñ&ðD
ð Ÿ™ tÑ+ðD
ð Ÿ™ tÑ+ð	D
ð
 Ÿ™ tÑ+ðD
ð Ÿ™ tÑ+ðD
ð —l‘l TÑ)ðD
ð —|‘| dÑ*ðD
ð —‘˜tÑ#ðD
ð Ð+Ñ,ðD
ð 
ˆu�|‰|Ñ	˜~Ñ	-òD
ó ó ôD
rJ   rF  z 
    MarkupLM Model transformer with a sequence classification/regression head on top (a linear layer on top of the
    pooled output) e.g. for GLUE tasks.
    c                   ój  ‡ — e Zd Zˆ f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j                     ez  fd„«       «       Zˆ xZS )Ú!MarkupLMForSequenceClassificationc                 ón  •— t         ‰| �  |«       |j                  | _        || _        t	        |«      | _        |j                  �|j                  n|j                  }t        j                  |«      | _
        t        j                  |j                  |j                  «      | _        | j                  «        y r�   )r"   r#   r/  r8   r  r  rH  r*   r   r)   r+   r%   r'   rI  r  rJ  s      €r;   r#   z*MarkupLMForSequenceClassification.__init__(  s�   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒØˆŒä% fÓ-ˆŒà)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrJ   Nrw   rC   rD   rÄ   rƒ   rW   rn   rK  rÑ   rŽ   c	           
      óâ  —  | j                   |f||||||dœ|	¤Ž}
|
d   }| j                  |«      }| j                  |«      }d}|��‡| j                  j                  €�| j
                  dk(  rd| j                  _        nl| j
                  dkD  rL|j                  t        j                  k(  s|j                  t        j                  k(  rd| j                  _        nd| j                  _        | j                  j                  dk(  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´  
        xpath_tags_seq (`torch.LongTensor` of shape `(batch_size, sequence_length, config.max_depth)`, *optional*):
            Tag IDs for each token in the input sequence, padded up to config.max_depth.
        xpath_subs_seq (`torch.LongTensor` of shape `(batch_size, sequence_length, config.max_depth)`, *optional*):
            Subscript IDs for each token in the input sequence, padded up to config.max_depth.
        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 AutoProcessor, AutoModelForSequenceClassification
        >>> import torch

        >>> processor = AutoProcessor.from_pretrained("microsoft/markuplm-base")
        >>> model = AutoModelForSequenceClassification.from_pretrained("microsoft/markuplm-base", num_labels=7)

        >>> html_string = "<html> <head> <title>Page Title</title> </head> </html>"
        >>> encoding = processor(html_string, return_tensors="pt")

        >>> with torch.no_grad():
        ...     outputs = model(**encoding)

        >>> loss = outputs.loss
        >>> logits = outputs.logits
        ```r4  r   NÚ
regressionÚsingle_label_classificationÚmulti_label_classificationr=   rM  )r  r+   rI  r8   Úproblem_typer/  ri   rA   rl   rt   r   r:  r   rä   r   r   rŒ   r  )r7   rw   rC   rD   rÄ   rƒ   rW   rn   rK  rÑ   r=  r«   r>  r6  rA  s                  r;   rI   z)MarkupLMForSequenceClassification.forward7  s­  € ðT  �$—-‘-Øð	
à)Ø)Ø)Ø)Ø%Ø'ñ	
ð ñ	
ˆð   ™
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? 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Ü,Ó.�Ù ¨Ó/�ä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rJ   rN  )rK   rL   rM   r#   r   r   rA   r•   r   r   r€   r   rI   rO   rP   s   @r;   rP  rP     s	  ø„ ôð Øð *.Ø.2Ø.2Ø.2Ø.2Ø,0Ø-1Ø&*ñT
à—<‘< $Ñ&ðT
ð Ÿ™ tÑ+ðT
ð Ÿ™ tÑ+ð	T
ð
 Ÿ™ tÑ+ðT
ð Ÿ™ tÑ+ðT
ð —l‘l TÑ)ðT
ð —|‘| dÑ*ðT
ð —‘˜tÑ#ðT
ð Ð+Ñ,ðT
ð 
ˆu�|‰|Ñ	Ð7Ñ	7òT
ó ó ôT
rJ   rP  )r,  rP  rF  r  r  )râ   )CrN   Úcollections.abcr   rA   r   Útorch.nnr   r   r   Ú r	   r  Úactivationsr
   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_markuplmr   Ú
get_loggerrK   ÚloggerÚModuler   rR   rˆ   r˜   r¢   r¦   r­   r²   rº   r•   ÚfloatrÔ   rÖ   rï   rö   r  r  r  r,  rF  rP  Ú__all__© rJ   r;   ú<module>rj     sL  ðñ å $ã Ý ß AÑ Aå &Ý !Ý 9÷÷ ÷ GÝ &Ý 6ß RÓ RÝ 7Ý 5Ý 2ð 
ˆ×	Ñ	˜HÓ	%€ô/ �b—i‘iô / ôdp˜Ÿ™ô pôh˜Ÿ™ô ô˜2Ÿ9™9ô ô �R—Y‘Yô ô�R—Y‘Yô ô  b§i¡iô ô$˜rŸy™yô ô"!˜"Ÿ)™)ô !ð$ ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ó%ô.3)˜BŸI™Iô 3)ôn˜Ÿ	™	ô ô.Ð.ô ôD
�b—i‘iô 
ð2 ôi˜oó ió ðið$ ôf
Ð+ó f
ó ðf
ðR ôb
Ð#:ó b
ó ðb
ñJ ðôô
V
Ð%<ó V
óð
V
ñr ðôôg
Ð(?ó g
óðg
òT�rJ   