§
    ‚Štjé“  ã                   ó|  — d Z ddlm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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'm(Z( ddl)m*Z* ddl+m,Z,  e%j-        e.¦  «        Z/ G d„ dej0        ¦  «        Z1	 	 dCdej0        dej2        dej2        dej2        dej2        dz  de3dz  de3dee#         fd„Z4 G d „ d!ej0        ¦  «        Z5 G d"„ d#ej0        ¦  «        Z6 G d$„ d%ej0        ¦  «        Z7 G d&„ d'ej0        ¦  «        Z8e$ G d(„ d)e¦  «        ¦   «         Z9 e$d*¬+¦  «        e G d,„ d-e"¦  «        ¦   «         ¦   «         Z:e$ G d.„ d/e9¦  «        ¦   «         Z; e$d0¬+¦  «         G d1„ d2e9¦  «        ¦   «         Z< G d3„ d4ej0        ¦  «        Z= G d5„ d6ej0        ¦  «        Z>e$ G d7„ d8e9¦  «        ¦   «         Z? e$d9¬+¦  «         G d:„ d;e9¦  «        ¦   «         Z@e$ G d<„ d=e9¦  «        ¦   «         ZAe$ G d>„ d?e9¦  «        ¦   «         ZBe$ G d@„ dAe9¦  «        ¦   «         ZCg dB¢ZDdS )DzPyTorch ALBERT model.é    )ÚCallable)Ú	dataclassN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚMaskedLMOutputÚMultipleChoiceModelOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚModelOutputÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚAlbertConfigc                   ó˜   ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  d	ej	        f
d
„Z
ˆ xZS )ÚAlbertEmbeddingszQ
    Construct the embeddings from word, position and token_type embeddings.
    Úconfigc                 óÒ  •— t          ¦   «                              ¦   «          t          j        |j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¦  «        | _	        t          j        |j
        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j        ¦  «        | _        |                      dt%          j        |j        ¦  «                             d¦  «        d¬¦  «         |                      dt%          j        | j                             ¦   «         t$          j        ¬¦  «        d¬¦  «         d S )	N)Úpadding_idx©ÚepsÚposition_ids©r   éÿÿÿÿF)Ú
persistentÚtoken_type_ids)Údtype)ÚsuperÚ__init__r   Ú	EmbeddingÚ
vocab_sizeÚembedding_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ÚexpandÚzerosr(   ÚsizeÚlong©Úselfr#   Ú	__class__s     €úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/albert/modeling_albert.pyr/   zAlbertEmbeddings.__init__6   s5  ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?TÐbhÔbuÐvÑvÔvˆÔÝ#%¤<°Ô0NÐPVÔPeÑ#fÔ#fˆÔ Ý%'¤\°&Ô2HÈ&ÔJ_Ñ%`Ô%`ˆÔ"åœ fÔ&;ÀÔAVÐWÑWÔWˆŒÝ”z &Ô"<Ñ=Ô=ˆŒð 	×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	×ÒØ�eœk¨$Ô*;×*@Ò*@Ñ*BÔ*BÍ%Ì*ÐUÑUÔUÐbgð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ó    NÚ	input_idsr,   r(   Úinputs_embedsÚreturnc                 ó¬  — |�|                      ¦   «         }n|                      ¦   «         d d…         }|\  }}|€| j        d d …d |…f         }|€�t          | d¦  «        rT| j                             |j        d         d¦  «        }t          j        |d|¬¦  «        }|                     ||¦  «        }n+t          j        |t          j	        | j        j
        ¬¦  «        }|€|                      |¦  «        }|                      |¦  «        }	||	z   }
|                      |¦  «        }|
|z   }
|                      |
¦  «        }
|                      |
¦  «        }
|
S )Nr*   r,   r   r   )ÚdimÚindex)r-   Údevice)rC   r(   Úhasattrr,   rA   Úshaper?   ÚgatherrB   rD   rP   r4   r8   r6   r9   r=   )rF   rJ   r,   r(   rK   Úinput_shapeÚ
batch_sizeÚ
seq_lengthÚbuffered_token_type_idsr8   Ú
embeddingsr6   s               rH   ÚforwardzAlbertEmbeddings.forwardG   sl  € ð Ð Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà!,Ñˆ
�JàÐØÔ,¨Q¨Q¨Q°°°¨^Ô<ˆLð
 Ð!Ý�tÐ-Ñ.Ô.ð mà*.Ô*=×*DÒ*DÀ\ÔEWÐXYÔEZÐ\^Ñ*_Ô*_Ð'Ý*/¬,Ð7NÐTUÐ]iÐ*jÑ*jÔ*jÐ'Ø!8×!?Ò!?À
ÈJÑ!WÔ!W��å!&¤¨[ÅÄ
ÐSWÔSdÔSkÐ!lÑ!lÔ!l�àÐ Ø ×0Ò0°Ñ;Ô;ˆMØ $× :Ò :¸>Ñ JÔ JÐØ"Ð%:Ñ:ˆ
à"×6Ò6°|ÑDÔDÐØÐ"5Ñ5ˆ
à—^’^ JÑ/Ô/ˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐrI   )NNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r/   r?   Ú
LongTensorÚFloatTensorÚTensorrY   Ú__classcell__©rG   s   @rH   r"   r"   1   sÇ   ø€ € € € € ðð ð
˜|ð 
ð 
ð 
ð 
ð 
ð 
ð& .2Ø26Ø04Ø26ð'ð 'àÔ# dÑ*ð'ð Ô(¨4Ñ/ð'ð Ô&¨Ñ-ð	'ð
 Ô(¨4Ñ/ð'ð 
Œð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'rI   r"   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingr=   Úkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nr*   ç      à¿é   r	   ©rN   )ÚpÚtrainingr   )
rC   r?   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxr=   rp   Ú
contiguous)
rd   re   rf   rg   rh   ri   r=   rj   Úattn_weightsÚattn_outputs
             rH   Úeager_attention_forwardrx   r   sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$rI   c                   óŠ   ‡ — e Zd Zdefˆ fd„Z	 d	dej        dej        dz  dee	         de
ej        ej        f         fd„Zˆ xZS )
ÚAlbertAttentionr#   c                 óh  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r/t	          |d¦  «        st          d|j        › d|j        › �¦  «        ‚|| _        |j        | _        |j        | _        |j        |j        z  | _        | j        | j        z  | _        | j        dz  | _	        t          j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        t          j        |j        | j        ¦  «        | _        t          j        |j        | j        ¦  «        | _        t          j        |j        | j        ¦  «        | _        t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        d| _        d S )Nr   r2   zThe hidden size (z6) is not a multiple of the number of attention heads (rl   r&   F)r.   r/   Úhidden_sizeÚnum_attention_headsrQ   Ú
ValueErrorr#   Úattention_head_sizeÚall_head_sizeri   r   r;   Úattention_probs_dropout_probÚattention_dropoutr<   Úoutput_dropoutÚLinearre   rf   rg   Údenser9   r:   Ú	is_causalrE   s     €rH   r/   zAlbertAttention.__init__�   s  ø€ Ý‰Œ×ÒÑÔÐØÔ Ô :Ñ:¸aÒ?Ð?ÍÐPVÐXhÑHiÔHiÐ?Ýð7 FÔ$6ð 7ð 7Ø Ô4ð7ð 7ñô ð ð ˆŒà#)Ô#=ˆÔ Ø!Ô-ˆÔØ#)Ô#5¸Ô9SÑ#SˆÔ Ø!Ô5¸Ô8PÑPˆÔØÔ/°Ñ5ˆŒå!#¤¨FÔ,OÑ!PÔ!PˆÔÝ œj¨Ô)CÑDÔDˆÔå”Y˜vÔ1°4Ô3EÑFÔFˆŒ
Ý”9˜VÔ/°Ô1CÑDÔDˆŒÝ”Y˜vÔ1°4Ô3EÑFÔFˆŒ
Ý”Y˜vÔ1°6Ô3EÑFÔFˆŒ
åœ fÔ&8¸fÔ>SÐTÑTÔTˆŒàˆŒˆˆrI   NÚhidden_statesrh   rj   rL   c                 óÎ  — |j         d d…         }g |¢d‘| j        ‘R } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||f| j        sdn| j        j        | j        dœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|                      |
¦  «        }
|                      |
¦  «        }
|                      ||
z   ¦  «        }
|
|fS )Nr*   r   rm   rc   )r=   ri   )rR   r   re   Úviewrr   rf   rg   r   Úget_interfacer#   Ú_attn_implementationrx   rp   r‚   ro   ri   Úreshaperu   r…   rƒ   r9   )rF   r‡   rh   rj   rT   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_interfacerw   rv   s               rH   rY   zAlbertAttention.forwardª   s™  € ð $Ô)¨#¨2¨#Ô.ˆØC˜ÐC bÐC¨$Ô*BÐCÐCˆð 5�d—j’j Ñ/Ô/Ô4°lÐC×MÒMÈaÐQRÑSÔSˆØ0�D—H’H˜]Ñ+Ô+Ô0°,Ð?×IÒIÈ!ÈQÑOÔOˆ	Ø4�d—j’j Ñ/Ô/Ô4°lÐC×MÒMÈaÐQRÑSÔSˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐJ�C�C°$Ô2HÔ2JØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆà—j’j Ñ-Ô-ˆØ×)Ò)¨+Ñ6Ô6ˆØ—n’n ]°[Ñ%@ÑAÔAˆà˜LÐ(Ð(rI   ©N©rZ   r[   r\   r    r/   r?   r`   r_   r   r   ÚtuplerY   ra   rb   s   @rH   rz   rz   Ž   s¦   ø€ € € € € ð˜|ð ð ð ð ð ð ð< 48ð")ð ")à”|ð")ð Ô)¨DÑ0ð")ð Ð+Ô,ð	")ð
 
ˆuŒ|˜Uœ\Ð)Ô	*ð")ð ")ð ")ð ")ð ")ð ")ð ")ð ")rI   rz   c                   ó®   ‡ — e Zd Zdefˆ fd„Z	 ddej        dej        dz  dee	         de
ej        ej        f         fd„Zd	ej        dej        fd
„Zˆ xZS )ÚAlbertLayerr#   c                 óè  •— t          ¦   «                              ¦   «          || _        |j        | _        d| _        t          j        |j        |j        ¬¦  «        | _	        t          |¦  «        | _        t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _        t           |j                 | _        t          j        |j        ¦  «        | _        d S )Nr   r&   )r.   r/   r#   Úchunk_size_feed_forwardÚseq_len_dimr   r9   r|   r:   Úfull_layer_layer_normrz   Ú	attentionr„   Úintermediate_sizeÚffnÚ
ffn_outputr   Ú
hidden_actÚ
activationr;   r<   r=   rE   s     €rH   r/   zAlbertLayer.__init__Ð   s¸   ø€ Ý‰Œ×ÒÑÔÐàˆŒØ'-Ô'EˆÔ$ØˆÔÝ%'¤\°&Ô2DÈ&ÔJ_Ð%`Ñ%`Ô%`ˆÔ"Ý(¨Ñ0Ô0ˆŒÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝœ) FÔ$<¸fÔ>PÑQÔQˆŒÝ  Ô!2Ô3ˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆrI   Nr‡   rh   rj   rL   c                 óœ   —  | j         ||fi |¤Ž\  }}t          | j        | j        | j        |¦  «        }|                      ||z   ¦  «        }|S r’   )r›   r   Úff_chunkr˜   r™   rš   )rF   r‡   rh   rj   Úattention_outputÚ_rž   s          rH   rY   zAlbertLayer.forwardÝ   si   € ð -˜dœn¨]¸NÐUÐUÈfÐUÐUÑÐ˜!å.ØŒMØÔ(ØÔØñ	
ô 
ˆ
ð ×2Ò2°:Ð@PÑ3PÑQÔQˆØÐrI   r£   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r’   )r�   r    rž   )rF   r£   rž   s      rH   r¢   zAlbertLayer.ff_chunkî   s<   € Ø—X’XÐ.Ñ/Ô/ˆ
Ø—_’_ ZÑ0Ô0ˆ
Ø—_’_ ZÑ0Ô0ˆ
ØÐrI   r’   )rZ   r[   r\   r    r/   r?   r`   r_   r   r   r”   rY   r¢   ra   rb   s   @rH   r–   r–   Ï   sÌ   ø€ € € € € ð>˜|ð >ð >ð >ð >ð >ð >ð  48ðð à”|ðð Ô)¨DÑ0ðð Ð+Ô,ð	ð
 
ˆuŒ|˜Uœ\Ð)Ô	*ðð ð ð ð"¨¬ð ¸%¼,ð ð ð ð ð ð ð ð rI   r–   c                   óœ   ‡ — e Zd Zdefˆ fd„Z	 d
dej        dej        dz  dee	         de
ej        e
ej                 z  df         fd	„Zˆ xZS )ÚAlbertLayerGroupr#   c                 ó¸   •‡— t          ¦   «                              ¦   «          t          j        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS © )r–   ©Ú.0r¤   r#   s     €rH   ú
<listcomp>z-AlbertLayerGroup.__init__.<locals>.<listcomp>ù   s!   ø€ Ð+gÐ+gÐ+gÀA­K¸Ñ,?Ô,?Ð+gÐ+gÐ+grI   )r.   r/   r   Ú
ModuleListÚrangeÚinner_group_numÚalbert_layersrE   s    `€rH   r/   zAlbertLayerGroup.__init__ö   sR   øø€ Ý‰Œ×ÒÑÔÐåœ]Ð+gÐ+gÐ+gÐ+gÍÈvÔOeÑIfÔIfÐ+gÑ+gÔ+gÑhÔhˆÔÐÐrI   Nr‡   rh   rj   rL   .c                 óN   — t          | j        ¦  «        D ]\  }} |||fi |¤Ž}Œ|S r’   )Ú	enumerater±   )rF   r‡   rh   rj   Úlayer_indexÚalbert_layers         rH   rY   zAlbertLayerGroup.forwardû   sF   € õ *3°4Ô3EÑ)FÔ)Fð 	Rð 	RÑ%ˆK˜Ø(˜L¨¸ÐQÐQÈ&ÐQÐQˆMˆMØÐrI   r’   r“   rb   s   @rH   r§   r§   õ   s·   ø€ € € € € ði˜|ð ið ið ið ið ið ið 48ðð à”|ðð Ô)¨DÑ0ðð Ð+Ô,ð	ð
 
ˆuŒ|˜e E¤LÔ1Ñ1°3Ð6Ô	7ðð ð ð ð ð ð ð rI   r§   c            
       ól   ‡ — e Zd Zdefˆ fd„Z	 d	dej        dej        dz  dee	         de
ez  fd„Zˆ xZS )
ÚAlbertTransformerr#   c                 ó  •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ‰j        ‰j        ¦  «        | _        t          j        ˆfd„t          ‰j
        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS rª   )r§   r«   s     €rH   r­   z.AlbertTransformer.__init__.<locals>.<listcomp>  s"   ø€ Ð1tÐ1tÐ1tÈqÕ2BÀ6Ñ2JÔ2JÐ1tÐ1tÐ1trI   )r.   r/   r#   r   r„   r2   r|   Úembedding_hidden_mapping_inr®   r¯   Únum_hidden_groupsÚalbert_layer_groupsrE   s    `€rH   r/   zAlbertTransformer.__init__  su   øø€ Ý‰Œ×ÒÑÔÐàˆŒÝ+-¬9°VÔ5JÈFÔL^Ñ+_Ô+_ˆÔ(Ý#%¤=Ð1tÐ1tÐ1tÐ1tÕTYÐZ`ÔZrÑTsÔTsÐ1tÑ1tÔ1tÑ#uÔ#uˆÔ Ð Ð rI   Nr‡   rh   rj   rL   c                 ó   — |                       |¦  «        }t          | j        j        ¦  «        D ]@}t	          || j        j        | j        j        z  z  ¦  «        } | j        |         ||fi |¤Ž}ŒAt          |¬¦  «        S )N)Úlast_hidden_state)rº   r¯   r#   Únum_hidden_layersÚintr»   r¼   r   )rF   r‡   rh   rj   ÚiÚ	group_idxs         rH   rY   zAlbertTransformer.forward  s—   € ð ×8Ò8¸ÑGÔGˆå�t”{Ô4Ñ5Ô5ð 	ð 	ˆAå˜A ¤Ô!>ÀÄÔA^Ñ!^Ñ_Ñ`Ô`ˆIà?˜DÔ4°YÔ?ØØðð ð ðð ˆMˆMõ °Ð?Ñ?Ô?Ð?rI   r’   )rZ   r[   r\   r    r/   r?   r`   r_   r   r   r   r”   rY   ra   rb   s   @rH   r·   r·     s±   ø€ € € € € ðv˜|ð vð vð vð vð vð vð 48ð@ð @à”|ð@ð Ô)¨DÑ0ð@ð Ð+Ô,ð	@ð
 
˜5Ñ	 ð@ð @ð @ð @ð @ð @ð @ð @rI   r·   c                   ój   ‡ — e Zd ZeZdZdZdZdZdZ	e
edœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚAlbertPreTrainedModelÚalbertT)r‡   Ú
attentionsc                 ó¨  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rt	          j        |j        ¦  «         dS t          |t          ¦  «        rjt	          j        |j	        t          j        |j	        j        d         ¦  «                             d¦  «        ¦  «         t	          j        |j        ¦  «         dS dS )zInitialize the weights.r*   r)   N)r.   Ú_init_weightsÚ
isinstanceÚAlbertMLMHeadÚinitÚzeros_Úbiasr"   Úcopy_r(   r?   r@   rR   rA   r,   )rF   rd   rG   s     €rH   rÈ   z#AlbertPreTrainedModel._init_weights0  s·   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�mÑ,Ô,ð 	/ÝŒK˜œÑ$Ô$Ð$Ð$Ð$Ý˜Õ 0Ñ1Ô1ð 	/ÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÝŒK˜Ô-Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/rI   )rZ   r[   r\   r    Úconfig_classÚbase_model_prefixÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_attention_backendr–   rz   Ú_can_record_outputsr?   Úno_gradrÈ   ra   rb   s   @rH   rÄ   rÄ   #  s�   ø€ € € € € à€LØ ÐØÐØ€NØÐØ"&Ðà$Ø%ðð Ðð
 €U„]�_„_ð/ð /ð /ð /ñ „_ð/ð /ð /ð /ð /rI   rÄ   z2
    Output type of [`AlbertForPreTraining`].
    )Úcustom_introc                   óÂ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
eej                 dz  ed<   dZeej                 dz  ed<   dS )ÚAlbertForPreTrainingOutputa‰  
    loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
        Total loss as the sum of the masked language modeling loss and the next sequence prediction
        (classification) loss.
    prediction_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    sop_logits (`torch.FloatTensor` of shape `(batch_size, 2)`):
        Prediction scores of the next sequence prediction (classification) head (scores of True/False continuation
        before SoftMax).
    NÚlossÚprediction_logitsÚ
sop_logitsr‡   rÆ   )rZ   r[   r\   r]   rÚ   r?   r_   Ú__annotations__rÛ   rÜ   r‡   r”   rÆ   rª   rI   rH   rÙ   rÙ   ;  s¡   € € € € € € ð	ð 	ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6rI   rÙ   c                   ó$  ‡ — e Zd ZeZdZddedefˆ fd„Zdej	        fd„Z
dej	        dd	f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e         deez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚAlbertModelrÅ   Tr#   Úadd_pooling_layerc                 ó‚  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        |r=t          j        |j	        |j	        ¦  «        | _
        t          j        ¦   «         | _        nd| _
        d| _        |j        | _        |                      ¦   «          dS )zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        N)r.   r/   r#   r"   rX   r·   Úencoderr   r„   r|   ÚpoolerÚTanhÚpooler_activationr‹   Úattn_implementationÚ	post_init)rF   r#   rà   rG   s      €rH   r/   zAlbertModel.__init__Y  s¦   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð àˆŒÝ*¨6Ñ2Ô2ˆŒÝ(¨Ñ0Ô0ˆŒØð 	*Ýœ) FÔ$6¸Ô8JÑKÔKˆDŒKÝ%'¤W¡Y¤YˆDÔ"Ð"àˆDŒKØ%)ˆDÔ"à#)Ô#>ˆÔ ð 	�ŠÑÔÐÐÐrI   rL   c                 ó   — | j         j        S r’   ©rX   r4   ©rF   s    rH   Úget_input_embeddingsz AlbertModel.get_input_embeddingso  s   € ØŒÔ.Ð.rI   rg   Nc                 ó   — || j         _        d S r’   ré   )rF   rg   s     rH   Úset_input_embeddingsz AlbertModel.set_input_embeddingsr  s   € Ø*/ˆŒÔ'Ð'Ð'rI   rJ   rh   r,   r(   rK   rj   c                 ó\  — |d u |d uz  rt          d¦  «        ‚|                      ||||¬¦  «        }t          | j        ||¬¦  «        } | j        ||fd|i|¤Ž}|d         }	| j        �2|                      |                      |	d d …df         ¦  «        ¦  «        nd }
t          |	|
¬¦  «        S )Nz:You must specify exactly one of input_ids or inputs_embeds)r(   r,   rK   )r#   rK   rh   r(   r   )r¾   Úpooler_output)r~   rX   r   r#   râ   rã   rå   r   )rF   rJ   rh   r,   r(   rK   rj   Úembedding_outputÚencoder_outputsÚsequence_outputÚpooled_outputs              rH   rY   zAlbertModel.forwardu  s  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàŸ?š?Ø LÀÐ_lð +ñ 
ô 
Ðõ 3Ø”;Ø*Ø)ð
ñ 
ô 
ˆð '˜$œ,ØØð
ð 
ð &ð
ð ð	
ð 
ˆð *¨!Ô,ˆàVZÔVaÐVm˜×.Ò.¨t¯{ª{¸?È1È1È1ÈaÈ4Ô;PÑ/QÔ/QÑRÔRÐRÐswˆå)Ø-Ø'ð
ñ 
ô 
ð 	
rI   )T)NNNNN)rZ   r[   r\   r    rÏ   rÐ   Úboolr/   r   r0   rë   rí   r   r   r   r?   r^   r_   r   r   r   r”   rY   ra   rb   s   @rH   rß   rß   T  s^  ø€ € € € € à€LØ Ððð ˜|ð Àð ð ð ð ð ð ð,/ b¤lð /ð /ð /ð /ð0¨"¬,ð 0¸4ð 0ð 0ð 0ð 0ð  ØØð .2Ø37Ø26Ø04Ø26ð$
ð $
àÔ# dÑ*ð$
ð Ô)¨DÑ0ð$
ð Ô(¨4Ñ/ð	$
ð
 Ô&¨Ñ-ð$
ð Ô(¨4Ñ/ð$
ð Ð+Ô,ð$
ð 
$ eÑ	+ð$
ð $
ð $
ñ „^ñ „_ñ  Ôð$
ð $
ð $
ð $
ð $
rI   rß   z«
    Albert Model with two heads on top as done during the pretraining: a `masked language modeling` head and a
    `sentence order prediction (classification)` head.
    c                   óR  ‡ — e Zd ZdddœZdefˆ fd„Zdej        fd„Zdej        dd	fd
„Z	dej
        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e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚAlbertForPreTrainingú(albert.embeddings.word_embeddings.weightúpredictions.bias©zpredictions.decoder.weightzpredictions.decoder.biasr#   c                 óê   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S r’   )	r.   r/   rß   rÅ   rÊ   ÚpredictionsÚAlbertSOPHeadÚsop_classifierrç   rE   s     €rH   r/   zAlbertForPreTraining.__init__«  sb   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å! &Ñ)Ô)ˆŒÝ(¨Ñ0Ô0ˆÔÝ+¨FÑ3Ô3ˆÔð 	�ŠÑÔÐÐÐrI   rL   c                 ó   — | j         j        S r’   ©rû   Údecoderrê   s    rH   Úget_output_embeddingsz*AlbertForPreTraining.get_output_embeddingsµ  ó   € ØÔÔ'Ð'rI   Únew_embeddingsNc                 ó   — || j         _        d S r’   rÿ   ©rF   r  s     rH   Úset_output_embeddingsz*AlbertForPreTraining.set_output_embeddings¸  s   € Ø#1ˆÔÔ Ð Ð rI   c                 ó$   — | j         j        j        S r’   ©rÅ   rX   r4   rê   s    rH   rë   z)AlbertForPreTraining.get_input_embeddings»  ó   € ØŒ{Ô%Ô5Ð5rI   rJ   rh   r,   r(   rK   ÚlabelsÚsentence_order_labelrj   c           	      óæ  —  | j         |f||||ddœ|¤Ž}	|	dd…         \  }
}|                      |
¦  «        }|                      |¦  «        }d}|�…|�ƒt          ¦   «         } ||                     d| j        j        ¦  «        |                     d¦  «        ¦  «        } ||                     dd¦  «        |                     d¦  «        ¦  «        }||z   }t          ||||	j        |	j	        ¬¦  «        S )a†  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
            config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
            loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`
        sentence_order_label (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the next sequence prediction (classification) loss. Input should be a sequence pair
            (see `input_ids` docstring) Indices should be in `[0, 1]`. `0` indicates original order (sequence A, then
            sequence B), `1` indicates switched order (sequence B, then sequence A).

        Example:

        ```python
        >>> from transformers import AutoTokenizer, AlbertForPreTraining
        >>> import torch

        >>> tokenizer = AutoTokenizer.from_pretrained("albert/albert-base-v2")
        >>> model = AlbertForPreTraining.from_pretrained("albert/albert-base-v2")

        >>> input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute", add_special_tokens=True)).unsqueeze(0)
        >>> # Batch size 1
        >>> outputs = model(input_ids)

        >>> prediction_logits = outputs.prediction_logits
        >>> sop_logits = outputs.sop_logits
        ```T©rh   r,   r(   rK   Úreturn_dictNrm   r*   )rÚ   rÛ   rÜ   r‡   rÆ   )
rÅ   rû   rý   r   r‰   r#   r1   rÙ   r‡   rÆ   )rF   rJ   rh   r,   r(   rK   r
  r  rj   Úoutputsrò   ró   Úprediction_scoresÚ
sop_scoresÚ
total_lossÚloss_fctÚmasked_lm_lossÚsentence_order_losss                     rH   rY   zAlbertForPreTraining.forward¾  s3  € ðN �$”+Øð
à)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð *1°°!°¬Ñ&ˆ˜à ×,Ò,¨_Ñ=Ô=ÐØ×(Ò(¨Ñ7Ô7ˆ
àˆ
ØÐÐ"6Ð"BÝ'Ñ)Ô)ˆHØ%˜XÐ&7×&<Ò&<¸RÀÄÔAWÑ&XÔ&XÐZ`×ZeÒZeÐfhÑZiÔZiÑjÔjˆNØ"* (¨:¯?ª?¸2¸qÑ+AÔ+AÐCW×C\ÒC\Ð]_ÑC`ÔC`Ñ"aÔ"aÐØ'Ð*=Ñ=ˆJå)ØØ/Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
rI   ©NNNNNNN)rZ   r[   r\   Ú_tied_weights_keysr    r/   r   r„   r  r  r0   rë   r   r   r?   r^   r_   r   r   rÙ   r”   rY   ra   rb   s   @rH   rö   rö   Ÿ  s¬  ø€ € € € € ð 'QØ$6ðð Ðð
˜|ð ð ð ð ð ð ð( r¤yð (ð (ð (ð (ð2°B´Ið 2À$ð 2ð 2ð 2ð 2ð6 b¤lð 6ð 6ð 6ð 6ð Øð .2Ø37Ø26Ø04Ø26Ø*.Ø8<ðA
ð A
àÔ# dÑ*ðA
ð Ô)¨DÑ0ðA
ð Ô(¨4Ñ/ð	A
ð
 Ô&¨Ñ-ðA
ð Ô(¨4Ñ/ðA
ð Ô  4Ñ'ðA
ð $Ô.°Ñ5ðA
ð Ð+Ô,ðA
ð 
$ eÑ	+ðA
ð A
ð A
ñ „^ñ ÔðA
ð A
ð A
ð A
ð A
rI   rö   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )rÊ   r#   c                 ó°  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¬¦  «        | _        t          j        t          j        |j	        ¦  «        ¦  «        | _
        t          j        |j        |j        ¦  «        | _        t          j        |j        |j	        ¦  «        | _        t          |j                 | _        d S )Nr&   )r.   r/   r   r9   r2   r:   Ú	Parameterr?   rB   r1   rÍ   r„   r|   r…   r   r   rŸ   r    rE   s     €rH   r/   zAlbertMLMHead.__init__  s˜   ø€ Ý‰Œ×ÒÑÔÐåœ fÔ&;ÀÔAVÐWÑWÔWˆŒÝ”L¥¤¨VÔ->Ñ!?Ô!?Ñ@Ô@ˆŒ	Ý”Y˜vÔ1°6Ô3HÑIÔIˆŒ
Ý”y Ô!6¸Ô8IÑJÔJˆŒÝ  Ô!2Ô3ˆŒˆˆrI   r‡   rL   c                 ó²   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|}|S r’   )r…   r    r9   r   )rF   r‡   r  s      rH   rY   zAlbertMLMHead.forward  sR   € ØŸ
š
 =Ñ1Ô1ˆØŸš¨Ñ6Ô6ˆØŸš }Ñ5Ô5ˆØŸš ]Ñ3Ô3ˆà)Ðà Ð rI   ©	rZ   r[   r\   r    r/   r?   r`   rY   ra   rb   s   @rH   rÊ   rÊ     sj   ø€ € € € € ð4˜|ð 4ð 4ð 4ð 4ð 4ð 4ð! U¤\ð !°e´lð !ð !ð !ð !ð !ð !ð !ð !rI   rÊ   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )rü   r#   c                 óÌ   •— t          ¦   «                              ¦   «          t          j        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _	        d S r’   )
r.   r/   r   r;   Úclassifier_dropout_probr=   r„   r|   Ú
num_labelsÚ
classifierrE   s     €rH   r/   zAlbertSOPHead.__init__  sJ   ø€ Ý‰Œ×ÒÑÔÐå”z &Ô"@ÑAÔAˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒˆˆrI   ró   rL   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r’   )r=   r!  )rF   ró   Údropout_pooled_outputÚlogitss       rH   rY   zAlbertSOPHead.forward   s+   € Ø $§¢¨]Ñ ;Ô ;ÐØ—’Ð!6Ñ7Ô7ˆØˆrI   r  rb   s   @rH   rü   rü     sq   ø€ € € € € ðK˜|ð Kð Kð Kð Kð Kð Kð U¤\ð °e´lð ð ð ð ð ð ð ð rI   rü   c                   ó6  ‡ — e Zd ZdddœZˆ fd„Zdej        fd„Zdej        ddfd	„Zdej	        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e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚAlbertForMaskedLMr÷   rø   rù   c                 óÆ   •— t          ¦   «                              |¦  «         t          |d¬¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S ©NF)rà   )r.   r/   rß   rÅ   rÊ   rû   rç   rE   s     €rH   r/   zAlbertForMaskedLM.__init__-  sW   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å! &¸EÐBÑBÔBˆŒÝ(¨Ñ0Ô0ˆÔð 	�ŠÑÔÐÐÐrI   rL   c                 ó   — | j         j        S r’   rÿ   rê   s    rH   r  z'AlbertForMaskedLM.get_output_embeddings6  r  rI   r  Nc                 ó@   — || j         _        |j        | j         _        d S r’   )rû   r   rÍ   r  s     rH   r  z'AlbertForMaskedLM.set_output_embeddings9  s!   € Ø#1ˆÔÔ Ø .Ô 3ˆÔÔÐÐrI   c                 ó$   — | j         j        j        S r’   r  rê   s    rH   rë   z&AlbertForMaskedLM.get_input_embeddings=  r	  rI   rJ   rh   r,   r(   rK   r
  rj   c           
      ó<  —  | j         d|||||ddœ|¤Ž}|d         }	|                      |	¦  «        }
d}|�Kt          ¦   «         } ||
                     d| j        j        ¦  «        |                     d¦  «        ¦  «        }t          ||
|j        |j        ¬¦  «        S )a  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
            config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
            loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`

        Example:

        ```python
        >>> import torch
        >>> from transformers import AutoTokenizer, AlbertForMaskedLM

        >>> tokenizer = AutoTokenizer.from_pretrained("albert/albert-base-v2")
        >>> model = AlbertForMaskedLM.from_pretrained("albert/albert-base-v2")

        >>> # add mask_token
        >>> inputs = tokenizer("The capital of [MASK] is Paris.", return_tensors="pt")
        >>> with torch.no_grad():
        ...     logits = model(**inputs).logits

        >>> # retrieve index of [MASK]
        >>> mask_token_index = (inputs.input_ids == tokenizer.mask_token_id)[0].nonzero(as_tuple=True)[0]
        >>> predicted_token_id = logits[0, mask_token_index].argmax(axis=-1)
        >>> tokenizer.decode(predicted_token_id)
        'france'
        ```

        ```python
        >>> labels = tokenizer("The capital of France is Paris.", return_tensors="pt")["input_ids"]
        >>> labels = torch.where(inputs.input_ids == tokenizer.mask_token_id, labels, -100)
        >>> outputs = model(**inputs, labels=labels)
        >>> round(outputs.loss.item(), 2)
        0.81
        ```
        T©rJ   rh   r,   r(   rK   r  r   Nr*   ©rÚ   r$  r‡   rÆ   rª   )	rÅ   rû   r   r‰   r#   r1   r   r‡   rÆ   )rF   rJ   rh   r,   r(   rK   r
  rj   r  Úsequence_outputsr  r  r  s                rH   rY   zAlbertForMaskedLM.forward@  sÕ   € ð^ �$”+ð 
ØØ)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð # 1œ:Ðà ×,Ò,Ð-=Ñ>Ô>ÐàˆØÐÝ'Ñ)Ô)ˆHØ%˜XÐ&7×&<Ò&<¸RÀÄÔAWÑ&XÔ&XÐZ`×ZeÒZeÐfhÑZiÔZiÑjÔjˆNåØØ$Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rI   ©NNNNNN)rZ   r[   r\   r  r/   r   r„   r  r  r0   rë   r   r   r?   r^   r_   r   r   r   r”   rY   ra   rb   s   @rH   r&  r&  &  sŠ  ø€ € € € € ð 'QØ$6ðð Ðð
ð ð ð ð ð( r¤yð (ð (ð (ð (ð4°B´Ið 4À$ð 4ð 4ð 4ð 4ð6 b¤lð 6ð 6ð 6ð 6ð Øð .2Ø37Ø26Ø04Ø26Ø*.ðD
ð D
àÔ# dÑ*ðD
ð Ô)¨DÑ0ðD
ð Ô(¨4Ñ/ð	D
ð
 Ô&¨Ñ-ðD
ð Ô(¨4Ñ/ðD
ð Ô  4Ñ'ðD
ð Ð+Ô,ðD
ð 
˜%Ñ	ðD
ð D
ð D
ñ „^ñ ÔðD
ð D
ð D
ð D
ð D
rI   r&  zž
    Albert 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                   óì   ‡ — e Zd Zdefˆ 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
e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚAlbertForSequenceClassificationr#   c                 óN  •— t          ¦   «                              |¦  «         |j        | _        || _        t	          |¦  «        | _        t          j        |j        ¦  «        | _	        t          j
        |j        | j        j        ¦  «        | _        |                      ¦   «          d S r’   )r.   r/   r   r#   rß   rÅ   r   r;   r  r=   r„   r|   r!  rç   rE   s     €rH   r/   z(AlbertForSequenceClassification.__init__�  s‚   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒØˆŒå! &Ñ)Ô)ˆŒÝ”z &Ô"@ÑAÔAˆŒÝœ) FÔ$6¸¼Ô8NÑOÔOˆŒð 	�ŠÑÔÐÐÐrI   NrJ   rh   r,   r(   rK   r
  rj   rL   c           
      ó†  —  | j         d
|||||ddœ|¤Ž}|d         }	|                      |	¦  «        }	|                      |	¦  «        }
d}|��Z| j        j        €f| j        dk    rd| j        _        nN| j        dk    r7|j        t          j        k    s|j        t          j	        k    rd| j        _        nd| j        _        | j        j        dk    rWt          ¦   «         }| j        dk    r1 ||
                     ¦   «         |                     ¦   «         ¦  «        }nŽ ||
|¦  «        }n�| j        j        dk    rGt          ¦   «         } ||
                     d| j        ¦  «        |                     d¦  «        ¦  «        }n*| j        j        dk    rt          ¦   «         } ||
|¦  «        }t          ||
|j        |j        ¬	¦  «        S )a�  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Tr-  r   NÚ
regressionÚsingle_label_classificationÚmulti_label_classificationr*   r.  rª   )rÅ   r=   r!  r#   Úproblem_typer   r-   r?   rD   rÀ   r   Úsqueezer   r‰   r   r   r‡   rÆ   )rF   rJ   rh   r,   r(   rK   r
  rj   r  ró   r$  rÚ   r  s                rH   rY   z'AlbertForSequenceClassification.forwardœ  sÛ  € ð$ �$”+ð 
ØØ)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð   œ
ˆàŸš ]Ñ3Ô3ˆØ—’ Ñ/Ô/ˆàˆØÑØŒ{Ô'Ð/Ø”? aÒ'Ð'Ø/;�D”KÔ,Ð,Ø”_ qÒ(Ð(¨f¬l½e¼jÒ.HÐ.HÈFÌLÕ\aÔ\eÒLeÐLeØ/L�D”KÔ,Ð,à/K�D”KÔ,àŒ{Ô'¨<Ò7Ð7Ý"™9œ9�Ø”? aÒ'Ð'Ø#˜8 F§N¢NÑ$4Ô$4°f·n²nÑ6FÔ6FÑGÔG�D�Dà#˜8 F¨FÑ3Ô3�D�DØ”Ô)Ð-JÒJÐJÝ+Ñ-Ô-�Ø�x §¢¨B°´Ñ @Ô @À&Ç+Â+ÈbÁ/Ä/ÑRÔR��Ø”Ô)Ð-IÒIÐIÝ,Ñ.Ô.�Ø�x ¨Ñ/Ô/�å'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rI   r0  )rZ   r[   r\   r    r/   r   r   r?   r^   r_   r   r   r   r”   rY   ra   rb   s   @rH   r2  r2  ‰  s  ø€ € € € € ð
˜|ð 
ð 
ð 
ð 
ð 
ð 
ð Øð .2Ø37Ø26Ø04Ø26Ø*.ð;
ð ;
àÔ# dÑ*ð;
ð Ô)¨DÑ0ð;
ð Ô(¨4Ñ/ð	;
ð
 Ô&¨Ñ-ð;
ð Ô(¨4Ñ/ð;
ð Ô  4Ñ'ð;
ð Ð+Ô,ð;
ð 
" EÑ	)ð;
ð ;
ð ;
ñ „^ñ Ôð;
ð ;
ð ;
ð ;
ð ;
rI   r2  c                   óì   ‡ — e Zd Zdefˆ 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
e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚAlbertForTokenClassificationr#   c                 ód  •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        |j        �|j        n|j        }t          j        |¦  «        | _	        t          j
        |j        | j        j        ¦  «        | _        |                      ¦   «          d S r(  )r.   r/   r   rß   rÅ   r  r<   r   r;   r=   r„   r|   r#   r!  rç   )rF   r#   r  rG   s      €rH   r/   z%AlbertForTokenClassification.__init__Þ  s¡   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå! &¸EÐBÑBÔBˆŒð Ô-Ð9ð Ô*Ð*àÔ+ð 	 õ
 ”zÐ"9Ñ:Ô:ˆŒÝœ) FÔ$6¸¼Ô8NÑOÔOˆŒð 	�ŠÑÔÐÐÐrI   NrJ   rh   r,   r(   rK   r
  rj   rL   c           	      ó\  —  | j         |f||||ddœ|¤Ž}|d         }	|                      |	¦  «        }	|                      |	¦  «        }
d}|�Ft          ¦   «         } ||
                     d| j        ¦  «        |                     d¦  «        ¦  «        }t          ||
|j        |j        ¬¦  «        S )zÛ
        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]`.
        Tr  r   Nr*   r.  )	rÅ   r=   r!  r   r‰   r   r   r‡   rÆ   )rF   rJ   rh   r,   r(   rK   r
  rj   r  rò   r$  rÚ   r  s                rH   rY   z$AlbertForTokenClassification.forwardî  sÔ   € ð  �$”+Øð
à)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð " !œ*ˆàŸ,š, Ñ7Ô7ˆØ—’ Ñ1Ô1ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬OÑ<Ô<¸f¿kºkÈ"¹o¼oÑNÔNˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rI   r0  )rZ   r[   r\   r    r/   r   r   r?   r^   r_   r   r   r   r”   rY   ra   rb   s   @rH   r;  r;  Ü  s  ø€ € € € € ð˜|ð ð ð ð ð ð ð  Øð .2Ø37Ø26Ø04Ø26Ø*.ð'
ð '
àÔ# dÑ*ð'
ð Ô)¨DÑ0ð'
ð Ô(¨4Ñ/ð	'
ð
 Ô&¨Ñ-ð'
ð Ô(¨4Ñ/ð'
ð Ô  4Ñ'ð'
ð Ð+Ô,ð'
ð 
 Ñ	&ð'
ð '
ð '
ñ „^ñ Ôð'
ð '
ð '
ð '
ð '
rI   r;  c                   ó  ‡ — e Zd Zdefˆ 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
e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚAlbertForQuestionAnsweringr#   c                 óþ   •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        t          j        |j        |j        ¦  «        | _        |  	                    ¦   «          d S r(  )
r.   r/   r   rß   rÅ   r   r„   r|   Ú
qa_outputsrç   rE   s     €rH   r/   z#AlbertForQuestionAnswering.__init__  sj   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå! &¸EÐBÑBÔBˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐrI   NrJ   rh   r,   r(   rK   Ústart_positionsÚend_positionsrj   rL   c           
      óF  —  | j         d
|||||ddœ|¤Ž}	|	d         }
|                      |
¦  «        }|                     dd¬¦  «        \  }}|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         }d }|�ç|�åt          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }t          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }|                     d¦  «        }|                     d|¦  «        }|                     d|¦  «        }t          |¬¦  «        } |||¦  «        } |||¦  «        }||z   dz  }t          ||||	j
        |	j        ¬	¦  «        S )NTr-  r   r   r*   rn   )Úignore_indexrm   )rÚ   Ústart_logitsÚ
end_logitsr‡   rÆ   rª   )rÅ   rA  Úsplitr9  ru   ÚlenrC   Úclampr   r   r‡   rÆ   )rF   rJ   rh   r,   r(   rK   rB  rC  rj   r  rò   r$  rF  rG  r  Úignored_indexr  Ú
start_lossÚend_losss                      rH   rY   z"AlbertForQuestionAnswering.forward&  sÏ  € ð �$”+ð 
ØØ)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð " !œ*ˆà#Ÿš¨Ñ?Ô?ˆØ#)§<¢<°°r <Ñ#:Ô#:Ñ ˆ�jØ#×+Ò+¨BÑ/Ô/×:Ò:Ñ<Ô<ˆØ×'Ò'¨Ñ+Ô+×6Ò6Ñ8Ô8ˆ
àˆ
ØÐ&¨=Ð+Då�?×'Ò'Ñ)Ô)Ñ*Ô*¨QÒ.Ð.Ø"1×"9Ò"9¸"Ñ"=Ô"=�Ý�=×%Ò%Ñ'Ô'Ñ(Ô(¨1Ò,Ð,Ø -× 5Ò 5°bÑ 9Ô 9�à(×-Ò-¨aÑ0Ô0ˆMØ-×3Ò3°A°}ÑEÔEˆOØ)×/Ò/°°=ÑAÔAˆMå'°]ÐCÑCÔCˆHØ!˜ ,°Ñ@Ô@ˆJØ�x 
¨MÑ:Ô:ˆHØ$ xÑ/°1Ñ4ˆJå+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
rI   r  ©rZ   r[   r\   r    r/   r   r   r?   r^   r_   r   r   rÙ   r”   rY   ra   rb   s   @rH   r?  r?    s&  ø€ € € € € ð˜|ð ð ð ð ð ð ð Øð .2Ø37Ø26Ø04Ø26Ø37Ø15ð3
ð 3
àÔ# dÑ*ð3
ð Ô)¨DÑ0ð3
ð Ô(¨4Ñ/ð	3
ð
 Ô&¨Ñ-ð3
ð Ô(¨4Ñ/ð3
ð Ô)¨DÑ0ð3
ð Ô'¨$Ñ.ð3
ð Ð+Ô,ð3
ð 
$ eÑ	+ð3
ð 3
ð 3
ñ „^ñ Ôð3
ð 3
ð 3
ð 3
ð 3
rI   r?  c                   óì   ‡ — e Zd Zdefˆ 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
e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚAlbertForMultipleChoicer#   c                 ó  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        ¦  «        | _        t	          j        |j	        d¦  «        | _
        |                      ¦   «          d S )Nr   )r.   r/   rß   rÅ   r   r;   r  r=   r„   r|   r!  rç   rE   s     €rH   r/   z AlbertForMultipleChoice.__init__`  sl   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å! &Ñ)Ô)ˆŒÝ”z &Ô"@ÑAÔAˆŒÝœ) FÔ$6¸Ñ:Ô:ˆŒð 	�ŠÑÔÐÐÐrI   NrJ   rh   r,   r(   rK   r
  rj   rL   c           	      óR  — |�|j         d         n|j         d         }|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�=|                     d|                     d¦  «        |                     d¦  «        ¦  «        nd} | j        |f||||ddœ|¤Ž}	|	d         }
|                      |
¦  «        }
|                      |
¦  «        }|                     d|¦  «        }d}|�t          ¦   «         } |||¦  «        }t          |||	j        |	j	        ¬¦  «        S )a[  
        input_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`):
            Indices of input sequence tokens in the vocabulary.

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

            [What are input IDs?](../glossary#input-ids)
        token_type_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:

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

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

            [What are position IDs?](../glossary#position-ids)
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_choices, sequence_length, hidden_size)`, *optional*):
            Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This
            is useful if you want more control over how to convert `input_ids` indices into associated vectors than the
            model's internal embedding lookup matrix.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the multiple choice classification loss. Indices should be in `[0, ...,
            num_choices-1]` where *num_choices* is the size of the second dimension of the input tensors. (see
            *input_ids* above)
        Nr   r*   éþÿÿÿTr  r.  )
rR   r‰   rC   rÅ   r=   r!  r   r   r‡   rÆ   )rF   rJ   rh   r,   r(   rK   r
  rj   Únum_choicesr  ró   r$  Úreshaped_logitsrÚ   r  s                  rH   rY   zAlbertForMultipleChoice.forwardj  sé  € ðT -6Ð,A�i”o aÔ(Ð(À}ÔGZÐ[\ÔG]ˆà>GÐ>S�I—N’N 2 y§~¢~°bÑ'9Ô'9Ñ:Ô:Ð:ÐY]ˆ	ØM[ÐMg˜×,Ò,¨R°×1DÒ1DÀRÑ1HÔ1HÑIÔIÐIÐmqˆØM[ÐMg˜×,Ò,¨R°×1DÒ1DÀRÑ1HÔ1HÑIÔIÐIÐmqˆØGSÐG_�|×(Ò(¨¨\×->Ò->¸rÑ-BÔ-BÑCÔCÐCÐeiˆð Ð(ð ×Ò˜r =×#5Ò#5°bÑ#9Ô#9¸=×;MÒ;MÈbÑ;QÔ;QÑRÔRÐRàð 	ð
 �$”+Øð
à)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð   œ
ˆàŸš ]Ñ3Ô3ˆØ#Ÿš¨}Ñ=Ô=ˆØ Ÿ+š+ b¨+Ñ6Ô6ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜O¨VÑ4Ô4ˆDå(ØØ"Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rI   r0  rN  rb   s   @rH   rP  rP  ^  s"  ø€ € € € € ð˜|ð ð ð ð ð ð ð Øð .2Ø37Ø26Ø04Ø26Ø*.ðM
ð M
àÔ# dÑ*ðM
ð Ô)¨DÑ0ðM
ð Ô(¨4Ñ/ð	M
ð
 Ô&¨Ñ-ðM
ð Ô(¨4Ñ/ðM
ð Ô  4Ñ'ðM
ð Ð+Ô,ðM
ð 
$ eÑ	+ðM
ð M
ð M
ñ „^ñ ÔðM
ð M
ð M
ð M
ð M
rI   rP  )rÄ   rß   rö   r&  r2  r;  r?  rP  )Nrc   )Er]   Úcollections.abcr   Údataclassesr   r?   r   Útorch.nnr   r   r   Ú r
   rË   Úactivationsr   Úmasking_utilsr   Úmodeling_outputsr   r   r   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_albertr    Ú
get_loggerrZ   ÚloggerÚModuler"   r`   Úfloatrx   rz   r–   r§   r·   rÄ   rÙ   rß   rö   rÊ   rü   r&  r2  r;  r?  rP  Ú__all__rª   rI   rH   ú<module>ri     s  ðð Ð à $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð NÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø .Ð .Ð .Ð .Ð .Ð .ð 
ˆÔ	˜HÑ	%Ô	%€ð=ð =ð =ð =ð =�r”yñ =ô =ð =ðN !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð8>)ð >)ð >)ð >)ð >)�b”iñ >)ô >)ð >)ðB#ð #ð #ð #ð #�"”)ñ #ô #ð #ðLð ð ð ð �r”yñ ô ð ð"@ð @ð @ð @ð @˜œ	ñ @ô @ð @ð: ð/ð /ð /ð /ð /˜Oñ /ô /ñ „ð/ð. €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 ñ 7ô 7ñ „ñô ð7ð& ðG
ð G
ð G
ð G
ð G
Ð'ñ G
ô G
ñ „ðG
ðT €ððñ ô ð\
ð \
ð \
ð \
ð \
Ð0ñ \
ô \
ñô ð\
ð~!ð !ð !ð !ð !�B”Iñ !ô !ð !ð*
ð 
ð 
ð 
ð 
�B”Iñ 
ô 
ð 
ð ð_
ð _
ð _
ð _
ð _
Ð-ñ _
ô _
ñ „ð_
ðD €ððñ ô ðJ
ð J
ð J
ð J
ð J
Ð&;ñ J
ô J
ñô ðJ
ðZ ð:
ð :
ð :
ð :
ð :
Ð#8ñ :
ô :
ñ „ð:
ðz ð@
ð @
ð @
ð @
ð @
Ð!6ñ @
ô @
ñ „ð@
ðF ðZ
ð Z
ð Z
ð Z
ð Z
Ð3ñ Z
ô Z
ñ „ðZ
ðz	ð 	ð 	€€€rI   