Ë
    ÜÓ^jòº  ã                   ó   — d Z ddlZddlZddlmZ ddlmZmZmZ ddlm	Z
 ddlmZ ddlmZ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mZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z& ddl'm(Z(  e&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«      Z4 G d"„ d#ejX                  «      Z5 G d$„ d%ejX                  «      Z6 G d&„ d'ejX                  «      Z7 G d(„ d)ejX                  «      Z8e% G d*„ d+e!«      «       Z9 e%d,¬-«       G d.„ d/e9«      «       Z:e% G d0„ d1e9«      «       Z; e%d2¬-«       G d3„ d4e9e«      «       Z< e%d5¬-«       G d6„ d7e9«      «       Z=e% G d8„ d9e9«      «       Z>e% G d:„ d;e9«      «       Z?e% G d<„ d=e9«      «       Z@g d>¢ZAy)?zPyTorch RemBERT model.é    N)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)Ú)BaseModelOutputWithPastAndCrossAttentionsÚ,BaseModelOutputWithPoolingAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚMaskedLMOutputÚMultipleChoiceModelOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚPreTrainedModel)Úapply_chunking_to_forward)Úauto_docstringÚloggingé   )ÚRemBertConfigc                   óÊ   ‡ — e Zd ZdZˆ 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d	ej                  fd
„Z
ˆ xZS )ÚRemBertEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 ó|  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        | j#                  dt%        j&                  |j                  «      j)                  d«      d¬«       y )N)Úpadding_idx©ÚepsÚposition_ids©r   éÿÿÿÿF)Ú
persistent)ÚsuperÚ__init__r   Ú	EmbeddingÚ
vocab_sizeÚinput_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©ÚselfÚconfigÚ	__class__s     €úw/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/rembert/modeling_rembert.pyr)   zRemBertEmbeddings.__init__2   så   ø€ Ü‰ÑÔÜ!Ÿ|™|Ø×Ñ˜v×:Ñ:È×H[ÑH[ô 
ˆÔô $&§<¡<°×0NÑ0NÐPV×PkÑPkÓ#lˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×JeÑJeÓ%fˆÔ"äŸ™ f×&AÑ&AÀv×G\ÑG\Ô]ˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒð 	×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	õ 	
ó    NÚ	input_idsÚtoken_type_idsr$   Úinputs_embedsÚpast_key_values_lengthÚreturnc                 óÊ  — |�|j                  «       }n|j                  «       d d }|d   }|€| j                  d d …|||z   …f   }|€:t        j                  |t        j                  | j                  j
                  ¬«      }|€| j                  |«      }| j                  |«      }||z   }	| j                  |«      }
|	|
z  }	| j                  |	«      }	| j                  |	«      }	|	S )Nr&   r   ©ÚdtypeÚdevice)Úsizer$   r9   ÚzerosÚlongrJ   r.   r2   r0   r3   r7   )r=   rB   rC   r$   rD   rE   Úinput_shapeÚ
seq_lengthr2   Ú
embeddingsr0   s              r@   ÚforwardzRemBertEmbeddings.forwardB   só   € ð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÐØ×,Ñ,ªQÐ0FÈÐVlÑIlÐ0lÐ-lÑmˆLàÐ!Ü"Ÿ[™[¨¼E¿J¹JÈt×O`ÑO`×OgÑOgÔhˆNàÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐà"Ð%:Ñ:ˆ
Ø"×6Ñ6°|ÓDÐØÐ)Ñ)ˆ
Ø—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐrA   )NNNNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r9   Ú
LongTensorÚFloatTensorÚintÚTensorrQ   Ú__classcell__©r?   s   @r@   r   r   /   s‹   ø„ ÙQô
ð$ .2Ø26Ø04Ø26Ø&'ñà×#Ñ# dÑ*ðð ×(Ñ(¨4Ñ/ðð ×&Ñ&¨Ñ-ð	ð
 ×(Ñ(¨4Ñ/ðð !$ðð 
�‰÷rA   r   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚRemBertPoolerc                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y ©N)r(   r)   r   ÚLinearÚhidden_sizeÚdenseÚTanhÚ
activationr<   s     €r@   r)   zRemBertPooler.__init__e   s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�rA   Úhidden_statesrF   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )rb   rd   )r=   re   Úfirst_token_tensorÚpooled_outputs       r@   rQ   zRemBertPooler.forwardj   s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐrA   ©rR   rS   rT   r)   r9   rY   rQ   rZ   r[   s   @r@   r]   r]   d   s#   ø„ ô$ð
 U§\¡\ð °e·l±l÷ rA   r]   c                   ó˜   ‡ — e Zd Zd
ˆ fd„	Z	 	 	 	 ddej
                  dej                  dz  dej                  dz  dedz  dede	fd	„Z
ˆ xZS )ÚRemBertSelfAttentionNc                 óü  •— 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"                  | _        || _        y )Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú))r(   r)   ra   Únum_attention_headsÚhasattrÚ
ValueErrorrX   Úattention_head_sizeÚall_head_sizer   r`   ÚqueryÚkeyÚvaluer5   Úattention_probs_dropout_probr7   Ú
is_decoderÚ	layer_idx©r=   r>   ry   r?   s      €r@   r)   zRemBertSelfAttention.__init__t   s0  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸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ˆŒà ×+Ñ+ˆŒØ"ˆ�rA   re   Úattention_maskÚencoder_hidden_statesÚpast_key_valuesÚoutput_attentionsrF   c                 óv  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }	d}
|d u}|�St        |t        «      rA|j                  j                  | j                  «      }
|r|j                  }n|j                  }n|}|r|n|}|rK|�I|
rGj                  | j                     j                  }|j                  | j                     j                  }nÍg |j                   d d ¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j!                  |«      j                  |«      j	                  dd«      }|�Kj#                  ||| j                  «      \  }}|r)t        |t        «      rd|j                  | j                  <   t%        j&                  |	|j	                  dd«      «      }|t)        j*                  | j                  «      z  }|�||z   }t,        j.                  j1                  |d¬«      }| j3                  |«      }t%        j&                  ||«      }|j5                  dddd	«      j7                  «       }|j9                  «       d d | j:                  fz   } |j                  |Ž }||fS )
Nr&   r   é   FTéþÿÿÿ©Údimr   r   )Úshaperr   rt   ÚviewÚ	transposeÚ
isinstancer   Ú
is_updatedÚgetry   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesru   rv   Úupdater9   ÚmatmulÚmathÚsqrtr   Ú
functionalÚsoftmaxr7   ÚpermuteÚ
contiguousrK   rs   )r=   re   r{   r|   r}   r~   ÚkwargsrN   Úhidden_shapeÚquery_layerrˆ   Úis_cross_attentionÚcurr_past_key_valuesÚcurrent_statesÚ	key_layerÚvalue_layerÚkv_shapeÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapes                        r@   rQ   zRemBertSelfAttention.forward‰   sŸ  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆØ—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆàˆ
Ø2¸$Ð>ÐØÐ&Ü˜/Ô+>Ô?Ø,×7Ñ7×;Ñ;¸D¿N¹NÓK�
Ù%à+:×+PÑ+PÑ(à+:×+OÑ+OÑ(à'6Ð$á2DÑ.È-ˆÙ /Ð"=Á*à,×3Ñ3°D·N±NÑC×HÑHˆIØ.×5Ñ5°d·n±nÑE×LÑL‰KàQ˜×-Ñ-¨c¨rÐ2ÐQ°BÐQ¸×8PÑ8PÑQˆHØŸ™ Ó0×5Ñ5°hÓ?×IÑIÈ!ÈQÓOˆIØŸ*™* ^Ó4×9Ñ9¸(ÓC×MÑMÈaÐQRÓSˆKàÐ*à)=×)DÑ)DÀYÐP[Ð]a×]kÑ]kÓ)lÑ&�	˜;á%¬*°_ÔFYÔ*ZØAE�O×.Ñ.¨t¯~©~Ñ>ô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐà+¬d¯i©i¸×8PÑ8PÓ.QÑQÐØÐ%à/°.Ñ@Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆà˜oÐ-Ð-rA   r_   ©NNNF©rR   rS   rT   r)   r9   rY   rW   r
   ÚboolÚtuplerQ   rZ   r[   s   @r@   rk   rk   s   sz   ø„ õ#ð0 48Ø:>Ø(,Ø"'ñ@.à—|‘|ð@.ð ×)Ñ)¨DÑ0ð@.ð  %×0Ñ0°4Ñ7ð	@.ð
  ™ð@.ð  ð@.ð 
÷@.rA   rk   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚRemBertSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©Nr"   )r(   r)   r   r`   ra   rb   r3   r4   r5   r6   r7   r<   s     €r@   r)   zRemBertSelfOutput.__init__Î   s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rA   re   Úinput_tensorrF   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S r_   ©rb   r7   r3   ©r=   re   r¬   s      r@   rQ   zRemBertSelfOutput.forwardÔ   ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐrA   ri   r[   s   @r@   r©   r©   Í   ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ rA   r©   c                   ó¸   ‡ — e Zd Zd
ˆ fd„	Z	 	 	 	 ddej
                  dej                  dz  dej                  dz  dedz  dedz  de	ej
                     fd	„Z
ˆ xZS )ÚRemBertAttentionNc                 óf   •— t         ‰| �  «        t        ||¬«      | _        t	        |«      | _        y )N©ry   )r(   r)   rk   r=   r©   Úoutputrz   s      €r@   r)   zRemBertAttention.__init__Ü   s(   ø€ Ü‰ÑÔÜ(¨¸9ÔEˆŒ	Ü'¨Ó/ˆ�rA   re   r{   r|   r}   r~   rF   c                 ón   — | j                  |||||¬«      }| j                  |d   |«      }|f|dd  z   }	|	S )N©r{   r|   r}   r~   r   r   )r=   r¶   )
r=   re   r{   r|   r}   r~   r—   Úself_outputsÚattention_outputÚoutputss
             r@   rQ   zRemBertAttention.forwardá   sV   € ð —y‘yØØ)Ø"7Ø+Ø/ð !ó 
ˆð  Ÿ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆrA   r_   r¤   r¥   r[   s   @r@   r³   r³   Û   s€   ø„ õ0ð 48Ø:>Ø(,Ø).ñà—|‘|ðð ×)Ñ)¨DÑ0ðð  %×0Ñ0°4Ñ7ð	ð
  ™ðð   $™;ðð 
ˆu�|‰|Ñ	÷rA   r³   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚRemBertIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y r_   )r(   r)   r   r`   ra   Úintermediate_sizerb   r‡   Ú
hidden_actÚstrr	   Úintermediate_act_fnr<   s     €r@   r)   zRemBertIntermediate.__init__ø   s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$rA   re   rF   c                 óJ   — | j                  |«      }| j                  |«      }|S r_   )rb   rÂ   ©r=   re   s     r@   rQ   zRemBertIntermediate.forward   s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐrA   ri   r[   s   @r@   r½   r½   ÷   s#   ø„ ô9ð U§\¡\ð °e·l±l÷ rA   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 )ÚRemBertOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y r«   )r(   r)   r   r`   r¿   ra   rb   r3   r4   r5   r6   r7   r<   s     €r@   r)   zRemBertOutput.__init__  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rA   re   r¬   rF   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S r_   r®   r¯   s      r@   rQ   zRemBertOutput.forward  r°   rA   ri   r[   s   @r@   rÆ   rÆ     r±   rA   rÆ   c                   óÞ   ‡ — e Zd Zdˆ fd„	Z	 	 	 	 	 ddej
                  dej                  dz  dej                  dz  dej                  dz  dedz  dedz  d	e	ej
                     fd
„Z
d„ Zˆ xZS )ÚRemBertLayerNc                 óh  •— t         ‰| �  «        |j                  | _        d| _        t	        ||«      | _        |j                  | _        |j                  | _        | j                  r,| j                  st        | › d�«      ‚t	        ||¬«      | _	        t        |«      | _        t        |«      | _        y )Nr   z> should be used as a decoder model if cross attention is addedrµ   )r(   r)   Úchunk_size_feed_forwardÚseq_len_dimr³   Ú	attentionrx   Úadd_cross_attentionrq   Úcrossattentionr½   ÚintermediaterÆ   r¶   rz   s      €r@   r)   zRemBertLayer.__init__  s˜   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ)¨&°)Ó<ˆŒØ ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Ø×#Ò#Ø—?’?Ü  D 6Ð)gÐ!hÓiÐiÜ"2°6ÀYÔ"OˆDÔÜ/°Ó7ˆÔÜ# FÓ+ˆ�rA   re   r{   r|   Úencoder_attention_maskr}   r~   rF   c                 ó@  — | j                  ||||¬«      }|d   }	|dd  }
| j                  r@|�>t        | d«      st        d| › d�«      ‚| j	                  |	||||¬«      }|d   }	|
|dd  z   }
t        | j                  | j                  | j                  |	«      }|f|
z   }
|
S )N)r{   r~   r}   r   r   rÐ   z'If `encoder_hidden_states` are passed, z` has to be instantiated with cross-attention layers by setting `config.add_cross_attention=True`r¸   )	rÎ   rx   rp   rq   rÐ   r   Úfeed_forward_chunkrÌ   rÍ   )r=   re   r{   r|   rÒ   r}   r~   r—   Úself_attention_outputsrº   r»   Úcross_attention_outputsÚlayer_outputs                r@   rQ   zRemBertLayer.forward%  sõ   € ð "&§¡ØØ)Ø/Ø+ð	 "0ó "
Ðð 2°!Ñ4ÐØ(¨¨Ð,ˆà�?Š?Ð4Ð@Ü˜4Ð!1Ô2Ü Ø=¸d¸Vð DDð Dóð ð
 '+×&9Ñ&9Ø Ø5Ø&;Ø /Ø"3ð ':ó 'Ð#ð  7°qÑ9ÐØÐ 7¸¸Ð ;Ñ;ˆGä0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð  �/ GÑ+ˆàˆrA   c                 óL   — | j                  |«      }| j                  ||«      }|S r_   )rÑ   r¶   )r=   rº   Úintermediate_outputr×   s       r@   rÔ   zRemBertLayer.feed_forward_chunkQ  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐrA   r_   )NNNNF)rR   rS   rT   r)   r9   rY   rW   r
   r¦   r§   rQ   rÔ   rZ   r[   s   @r@   rÊ   rÊ     sž   ø„ õ,ð$ 48Ø:>Ø;?Ø(,Ø).ñ)à—|‘|ð)ð ×)Ñ)¨DÑ0ð)ð  %×0Ñ0°4Ñ7ð	)ð
 !&× 1Ñ 1°DÑ 8ð)ð  ™ð)ð   $™;ð)ð 
ˆu�|‰|Ñ	ó)öXrA   rÊ   c                   óÔ   ‡ — e Zd Zˆ fd„Z	 	 	 	 	 	 	 	 ddej
                  dej                  dz  dej                  dz  dej                  dz  dedz  dedz  d	ed
edede	e
z  fd„Zˆ xZS )ÚRemBertEncoderc           	      ó2  •— t         ‰| �  «        || _        t        j                  |j
                  |j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        d| _        y c c}w )Nrµ   F)r(   r)   r>   r   r`   r,   ra   Úembedding_hidden_mapping_inÚ
ModuleListÚrangeÚnum_hidden_layersrÊ   ÚlayerÚgradient_checkpointing)r=   r>   Úir?   s      €r@   r)   zRemBertEncoder.__init__X  sq   ø€ Ü‰ÑÔØˆŒä+-¯9©9°V×5PÑ5PÐRX×RdÑRdÓ+eˆÔ(Ü—]‘]ÌuÐU[×UmÑUmÓOnÖ#oÈ!¤L°À1Ö$EÒ#oÓpˆŒ
Ø&+ˆÕ#ùò $ps   Á,BNre   r{   r|   rÒ   r}   Ú	use_cacher~   Úoutput_hidden_statesÚreturn_dictrF   c
           	      ón  — | j                   r%| j                  r|rt        j                  d«       d}|r6|€4t	        t        | j                  ¬«      t        | j                  ¬«      «      }| j                  |«      }|rdnd }|rdnd }|r| j                  j                  rdnd }t        | j                  «      D ]K  \  }}|r||fz   } |||||||«      }|d   }|sŒ#||d   fz   }| j                  j                  sŒC||d   fz   }ŒM |r||fz   }|	st        d„ |||||fD «       «      S t        |||||¬	«      S )
NzZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...F)r>   © r   r   r€   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wr_   rè   )Ú.0Úvs     r@   ú	<genexpr>z)RemBertEncoder.forward.<locals>.<genexpr>“  s   è ø€ ò 
àð �=ô ñ
ùs   ‚)Úlast_hidden_stater}   re   Ú
attentionsÚcross_attentions)râ   ÚtrainingÚloggerÚwarning_oncer   r   r>   rÝ   rÏ   Ú	enumeraterá   r§   r   )r=   re   r{   r|   rÒ   r}   rä   r~   rå   ræ   r—   Úall_hidden_statesÚall_self_attentionsÚall_cross_attentionsrã   Úlayer_moduleÚlayer_outputss                    r@   rQ   zRemBertEncoder.forward`  s‚  € ð ×&Ò&¨4¯=ª=ÙÜ×#Ñ#Øpôð "�	á˜Ð0Ü1´,ÀdÇkÁkÔ2RÔT`Ðhl×hsÑhsÔTtÓuˆOà×8Ñ8¸ÓGˆÙ"6™B¸DÐÙ$5™b¸4ÐÙ%6¸4¿;¹;×;ZÒ;Z™rÐ`dÐä(¨¯©Ó4ò 	V‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!á(ØØØ%Ø&ØØ!óˆMð *¨!Ñ,ˆMÚ Ø&9¸]È1Ñ=MÐ<OÑ&OÐ#Ø—;‘;×2Ó2Ø+?À=ÐQRÑCSÐBUÑ+UÑ(ð#	Vñ&  Ø 1°]Ð4DÑ DÐáÜñ 
ð "Ø#Ø%Ø'Ø(ðô
ó 
ð 
ô 9Ø+Ø+Ø+Ø*Ø1ô
ð 	
rA   )NNNNNFFT)rR   rS   rT   r)   r9   rY   rW   r
   r¦   r§   r   rQ   rZ   r[   s   @r@   rÛ   rÛ   W  sÇ   ø„ ô,ð 48Ø:>Ø;?Ø(,Ø!%Ø"'Ø%*Ø ñD
à—|‘|ðD
ð ×)Ñ)¨DÑ0ðD
ð  %×0Ñ0°4Ñ7ð	D
ð
 !&× 1Ñ 1°DÑ 8ðD
ð  ™ðD
ð ˜$‘;ðD
ð  ðD
ð #ðD
ð ðD
ð 
Ð:Ñ	:÷D
rA   rÛ   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚRemBertPredictionHeadTransformc                 óh  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        |j                  t        «      rt        |j                     | _
        n|j                  | _
        t        j                  |j                  |j                  ¬«      | _        y r«   )r(   r)   r   r`   ra   rb   r‡   rÀ   rÁ   r	   Útransform_act_fnr3   r4   r<   s     €r@   r)   z'RemBertPredictionHeadTransform.__init__©  s{   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü�f×'Ñ'¬Ô-Ü$*¨6×+<Ñ+<Ñ$=ˆDÕ!à$*×$5Ñ$5ˆDÔ!ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆ�rA   re   rF   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r_   )rb   rü   r3   rÄ   s     r@   rQ   z&RemBertPredictionHeadTransform.forward²  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐrA   ri   r[   s   @r@   rú   rú   ¨  s$   ø„ ôUð U§\¡\ð °e·l±l÷ rA   rú   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚRemBertLMPredictionHeadc                 ón  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  «      | _        t        |j                     | _        t        j                  |j
                  |j                  ¬«      | _        y r«   )r(   r)   r   r`   ra   Úoutput_embedding_sizerb   r+   Údecoderr	   rÀ   rd   r3   r4   r<   s     €r@   r)   z RemBertLMPredictionHead.__init__º  sz   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3OÑ3OÓPˆŒ
Ü—y‘y ×!=Ñ!=¸v×?PÑ?PÓQˆŒÜ  ×!2Ñ!2Ñ3ˆŒÜŸ™ f×&BÑ&BÈ×H]ÑH]Ô^ˆ�rA   re   rF   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S r_   )rb   rd   r3   r  rÄ   s     r@   rQ   zRemBertLMPredictionHead.forwardÁ  s@   € ØŸ
™
 =Ó1ˆØŸ™¨Ó6ˆØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐrA   ri   r[   s   @r@   rÿ   rÿ   ¹  s$   ø„ ô_ð U§\¡\ð °e·l±l÷ rA   rÿ   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚRemBertOnlyMLMHeadc                 óB   •— t         ‰| �  «        t        |«      | _        y r_   )r(   r)   rÿ   Úpredictionsr<   s     €r@   r)   zRemBertOnlyMLMHead.__init__Ë  s   ø€ Ü‰ÑÔÜ2°6Ó:ˆÕrA   Úsequence_outputrF   c                 ó(   — | j                  |«      }|S r_   )r  )r=   r  Úprediction_scoress      r@   rQ   zRemBertOnlyMLMHead.forwardÏ  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð rA   ri   r[   s   @r@   r  r  Ê  s#   ø„ ô;ð! u§|¡|ð !¸¿¹÷ !rA   r  c                   ó2   ‡ — e Zd ZU eed<   dZdZˆ fd„Zˆ xZS )ÚRemBertPreTrainedModelr>   ÚrembertTc                 óø   •— t         ‰| �  |«       t        |t        «      rZt	        j
                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       y y )Nr&   r%   )r(   Ú_init_weightsr‡   r   ÚinitÚcopy_r$   r9   r:   r„   r;   )r=   Úmoduler?   s     €r@   r  z$RemBertPreTrainedModel._init_weightsÚ  s[   ø€ Ü‰Ñ˜fÔ%Ü�fÔ/Ô0Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð 1rA   )	rR   rS   rT   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingr  rZ   r[   s   @r@   r  r  Ô  s!   ø… àÓØ!ÐØ&*Ð#÷ið irA   r  a
  
    The model can behave as an encoder (with only self-attention) as well as a decoder, in which case a layer of
    cross-attention is added between the self-attention layers, following the architecture described in [Attention is
    all you need](https://huggingface.co/papers/1706.03762) by Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit,
    Llion Jones, Aidan N. Gomez, Lukasz Kaiser and Illia Polosukhin.

    To behave as an decoder the model needs to be initialized with the `is_decoder` argument of the configuration set
    to `True`. To be used in a Seq2Seq model, the model needs to initialized with both `is_decoder` argument and
    `add_cross_attention` set to `True`; an `encoder_hidden_states` is then expected as an input to the forward pass.
    )Úcustom_introc                   óf  ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  de
dz  dedz  dedz  dedz  dedz  deez  fd„«       Zˆ xZS )ÚRemBertModelc                 óº   •— 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)   r>   r   rP   rÛ   Úencoderr]   ÚpoolerÚ	post_init)r=   r>   Úadd_pooling_layerr?   s      €r@   r)   zRemBertModel.__init__í  sM   ø€ ô
 	‰Ñ˜Ô ØˆŒä+¨FÓ3ˆŒÜ% fÓ-ˆŒá/@”m FÔ+ÀdˆŒð 	�‰ÕrA   c                 ó.   — | j                   j                  S r_   ©rP   r.   ©r=   s    r@   Úget_input_embeddingsz!RemBertModel.get_input_embeddingsý  s   € Ø�‰×.Ñ.Ð.rA   c                 ó&   — || j                   _        y r_   r  )r=   rv   s     r@   Úset_input_embeddingsz!RemBertModel.set_input_embeddings   s   € Ø*/ˆ�‰Õ'rA   NrB   r{   rC   r$   rD   r|   rÒ   r}   rä   r~   rå   ræ   rF   c                 ó8  — |
�|
n| j                   j                  }
|�|n| j                   j                  }|�|n| j                   j                  }| j                   j                  r|	�|	n| j                   j
                  }	nd}	|�|�t        d«      ‚|�#| j                  ||«       |j                  «       }n!|�|j                  «       d d }nt        d«      ‚|\  }}|�|j                  n|j                  }|€dn|j                  «       }|€t        j                  |||z   f|¬«      }|€&t        j                  |t        j                  |¬«      }| j                  |||||¬«      }t!        | j                   ||¬	«      }|�t!        | j                   |||¬
«      }| j#                  ||||||	|
||¬«	      }|d   }| j$                  �| j%                  |«      nd }|s
||f|dd  z   S t'        |||j(                  |j*                  |j,                  |j.                  ¬«      S )NFzDYou cannot specify both input_ids and inputs_embeds at the same timer&   z5You have to specify either input_ids or inputs_embedsr   )rJ   rH   )rB   r$   rC   rD   rE   )r>   rD   r{   )r>   rD   r{   r|   )r{   r|   rÒ   r}   rä   r~   rå   ræ   r   )rí   Úpooler_outputr}   re   rî   rï   )r>   r~   rå   ræ   rx   rä   rq   Ú%warn_if_padding_and_no_attention_maskrK   rJ   Úget_seq_lengthr9   ÚonesrL   rM   rP   r   r  r  r   r}   re   rî   rï   )r=   rB   r{   rC   r$   rD   r|   rÒ   r}   rä   r~   rå   ræ   r—   rN   Ú
batch_sizerO   rJ   rE   Úembedding_outputÚencoder_outputsr  rh   s                          r@   rQ   zRemBertModel.forward  sV  € ð" 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà�;‰;×!Ò!Ø%.Ð%:™	ÀÇÁ×@UÑ@U‰IàˆIàÐ  ]Ð%>ÜÐcÓdÐdØÐ"Ø×6Ñ6°yÀ.ÔQØ#Ÿ.™.Ó*‰KØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà!,Ñˆ
�JØ%.Ð%:�×!Ò!À×@TÑ@Tˆà&5Ð&=¡À?×CaÑCaÓCcÐàÐ!Ü"ŸZ™Z¨*°jÐCYÑ6YÐ)ZÐdjÔkˆNØÐ!Ü"Ÿ[™[¨¼E¿J¹JÈvÔVˆNàŸ?™?ØØ%Ø)Ø'Ø#9ð +ó 
Ðô 3Ø—;‘;Ø*Ø)ô
ˆð "Ð-Ü%>Ø—{‘{Ø.Ø5Ø&;ô	&Ð"ð Ÿ,™,ØØ)Ø"7Ø#9Ø+ØØ/Ø!5Ø#ð 'ó 

ˆð *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆáØ# ]Ð3°oÀaÀbÐ6IÑIÐIä;Ø-Ø'Ø+×;Ñ;Ø)×7Ñ7Ø&×1Ñ1Ø,×=Ñ=ô
ð 	
rA   )T)NNNNNNNNNNNN)rR   rS   rT   r)   r!  r#  r   r9   rV   rW   r
   r¦   r§   r   rQ   rZ   r[   s   @r@   r  r  à  sB  ø„ õò /ò0ð ð .2Ø26Ø26Ø04Ø26Ø:>Ø;?Ø(,Ø!%Ø)-Ø,0Ø#'ñ]
à×#Ñ# dÑ*ð]
ð ×(Ñ(¨4Ñ/ð]
ð ×(Ñ(¨4Ñ/ð	]
ð
 ×&Ñ&¨Ñ-ð]
ð ×(Ñ(¨4Ñ/ð]
ð  %×0Ñ0°4Ñ7ð]
ð !&× 1Ñ 1°DÑ 8ð]
ð  ™ð]
ð ˜$‘;ð]
ð   $™;ð]
ð # T™kð]
ð ˜D‘[ð]
ð 
Ð=Ñ	=ò]
ó ô]
rA   r  c                   ól  ‡ — e Zd Zˆ fd„Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  dej                  dz  de
dz  de
dz  de
dz  deez  fd„«       Zˆ xZS )ÚRemBertForMaskedLMc                 óÊ   •— t         ‰| �  |«       |j                  rt        j	                  d«       t        |d¬«      | _        t        |«      | _        | j                  «        y )NznIf you want to use `RemBertForMaskedLM` make sure `config.is_decoder=False` for bi-directional self-attention.F©r  ©
r(   r)   rx   rñ   Úwarningr  r  r  Úclsr  r<   s     €r@   r)   zRemBertForMaskedLM.__init__f  sR   ø€ Ü‰Ñ˜Ô à×ÒÜ�N‰Nð1ôô
 $ F¸eÔDˆŒÜ% fÓ-ˆŒð 	�‰ÕrA   c                 óB   — | j                   j                  j                  S r_   ©r2  r  r  r   s    r@   Úget_output_embeddingsz(RemBertForMaskedLM.get_output_embeddingsu  ó   € Ø�x‰x×#Ñ#×+Ñ+Ð+rA   c                 ó:   — || j                   j                  _        y r_   r4  ©r=   Únew_embeddingss     r@   Úset_output_embeddingsz(RemBertForMaskedLM.set_output_embeddingsx  ó   € Ø'5ˆ�‰×ÑÕ$rA   NrB   r{   rC   r$   rD   r|   rÒ   Úlabelsr~   rå   ræ   rF   c                 óœ  — |�|n| j                   j                  }| j                  ||||||||	|
|¬«
      }|d   }| j                  |«      }d}|�Ft	        «       } ||j                  d| j                   j                  «      |j                  d«      «      }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  ¬«      S )a£  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the 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]`.
        N)	r{   rC   r$   rD   r|   rÒ   r~   rå   ræ   r   r&   r€   ©ÚlossÚlogitsre   rî   )
r>   ræ   r  r2  r   r…   r+   r   re   rî   )r=   rB   r{   rC   r$   rD   r|   rÒ   r<  r~   rå   ræ   r—   r»   r  r
  Úmasked_lm_lossÚloss_fctr¶   s                      r@   rQ   zRemBertForMaskedLM.forward{  sý   € ð, &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—,‘,ØØ)Ø)Ø%Ø'Ø"7Ø#9Ø/Ø!5Ø#ð ó 
ˆð " !™*ˆØ ŸH™H _Ó5ÐàˆØÐÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNáØ'Ð)¨G°A°B¨KÑ7ˆFØ3AÐ3M�^Ð%¨Ñ.ÐYÐSYÐYäØØ$Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rA   )NNNNNNNNNNN)rR   rS   rT   r)   r5  r:  r   r9   rV   rW   r¦   r§   r   rQ   rZ   r[   s   @r@   r-  r-  d  s(  ø„ ôò,ò6ð ð .2Ø26Ø26Ø04Ø26Ø:>Ø;?Ø*.Ø)-Ø,0Ø#'ñ5
à×#Ñ# dÑ*ð5
ð ×(Ñ(¨4Ñ/ð5
ð ×(Ñ(¨4Ñ/ð	5
ð
 ×&Ñ&¨Ñ-ð5
ð ×(Ñ(¨4Ñ/ð5
ð  %×0Ñ0°4Ñ7ð5
ð !&× 1Ñ 1°DÑ 8ð5
ð × Ñ  4Ñ'ð5
ð   $™;ð5
ð # T™kð5
ð ˜D‘[ð5
ð 
�Ñ	ò5
ó ô5
rA   r-  zS
    RemBERT Model with a `language modeling` head on top for CLM fine-tuning.
    c            !       ó¤  ‡ — e Zd Zˆ fd„Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  de
dz  dej                  dz  dedz  dedz  dedz  dedz  deej                  z  deez  fd„«       Zˆ xZS )ÚRemBertForCausalLMc                 óÊ   •— t         ‰| �  |«       |j                  st        j	                  d«       t        |d¬«      | _        t        |«      | _        | j                  «        y )NzOIf you want to use `RemBertForCausalLM` as a standalone, add `is_decoder=True.`Fr/  r0  r<   s     €r@   r)   zRemBertForCausalLM.__init__º  sL   ø€ Ü‰Ñ˜Ô à× Ò Ü�N‰NÐlÔmä# F¸eÔDˆŒÜ% fÓ-ˆŒð 	�‰ÕrA   c                 óB   — | j                   j                  j                  S r_   r4  r   s    r@   r5  z(RemBertForCausalLM.get_output_embeddingsÆ  r6  rA   c                 ó:   — || j                   j                  _        y r_   r4  r8  s     r@   r:  z(RemBertForCausalLM.set_output_embeddingsÉ  r;  rA   NrB   r{   rC   r$   rD   r|   rÒ   r}   r<  rä   r~   rå   ræ   Úlogits_to_keeprF   c                 óæ  — |�|n| j                   j                  }| j                  |||||||||
|||¬«      }|d   }t        |t        «      rt        | d«      n|}| j                  |dd…|dd…f   «      }d}|	�* | j                  d||	| j                   j                  dœ|¤Ž}|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                  |j                  ¬«      S )a  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the left-to-right language modeling loss (next word prediction). 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 n `[0, ..., config.vocab_size]`.

        Example:

        ```python
        >>> from transformers import AutoTokenizer, RemBertForCausalLM, RemBertConfig
        >>> import torch

        >>> tokenizer = AutoTokenizer.from_pretrained("google/rembert")
        >>> config = RemBertConfig.from_pretrained("google/rembert")
        >>> config.is_decoder = True
        >>> model = RemBertForCausalLM.from_pretrained("google/rembert", config=config)

        >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
        >>> outputs = model(**inputs)

        >>> prediction_logits = outputs.logits
        ```N)r{   rC   r$   rD   r|   rÒ   r}   rä   r~   rå   ræ   r   )r@  r<  r+   r€   )r?  r@  r}   re   rî   rï   rè   )r>   ræ   r  r‡   rX   Úslicer2  Úloss_functionr+   r   r}   re   rî   rï   )r=   rB   r{   rC   r$   rD   r|   rÒ   r}   r<  rä   r~   rå   ræ   rH  r—   r»   re   Úslice_indicesr@  r?  r¶   s                         r@   rQ   zRemBertForCausalLM.forwardÌ  s)  € ðR &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—,‘,ØØ)Ø)Ø%Ø'Ø"7Ø#9Ø+ØØ/Ø!5Ø#ð ó 
ˆð   ™
ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜-ª¨=º!Ð(;Ñ<Ó=ˆàˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä0ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ô
ð 	
rA   )NNNNNNNNNNNNNr   )rR   rS   rT   r)   r5  r:  r   r9   rV   rW   r
   r¦   rX   rY   r§   r   rQ   rZ   r[   s   @r@   rD  rD  ´  sr  ø„ ô
ò,ò6ð ð .2Ø26Ø26Ø04Ø26Ø:>Ø;?Ø(,Ø*.Ø!%Ø)-Ø,0Ø#'Ø-.ñM
à×#Ñ# dÑ*ðM
ð ×(Ñ(¨4Ñ/ðM
ð ×(Ñ(¨4Ñ/ð	M
ð
 ×&Ñ&¨Ñ-ðM
ð ×(Ñ(¨4Ñ/ðM
ð  %×0Ñ0°4Ñ7ðM
ð !&× 1Ñ 1°DÑ 8ðM
ð  ™ðM
ð × Ñ  4Ñ'ðM
ð ˜$‘;ðM
ð   $™;ðM
ð # T™kðM
ð ˜D‘[ðM
ð ˜eŸl™lÑ*ðM
ð" 
Ð2Ñ	2ò#M
ó ôM
rA   rD  zŸ
    RemBERT 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ˆ fd„Ze	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	edz  d
edz  dedz  de	e
z  fd„«       Zˆ xZS )Ú RemBertForSequenceClassificationc                 ó,  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _        | j                  «        y r_   ©r(   r)   Ú
num_labelsr  r  r   r5   Úclassifier_dropout_probr7   r`   ra   Ú
classifierr  r<   s     €r@   r)   z)RemBertForSequenceClassification.__init__$  si   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ# FÓ+ˆŒÜ—z‘z &×"@Ñ"@ÓAˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrA   NrB   r{   rC   r$   rD   r<  r~   rå   ræ   rF   c
           
      ó>  — |	�|	n| j                   j                  }	| j                  ||||||||	¬«      }|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        «       } |||«      }|	s|f|dd z   }|�|f|z   S |S t!        |||j"                  |j$                  ¬	«      S )
a�  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        N©r{   rC   r$   rD   r~   rå   ræ   r   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationr&   r€   r>  )r>   ræ   r  r7   rS  Úproblem_typerQ  rI   r9   rM   rX   r   Úsqueezer   r…   r   r   re   rî   )r=   rB   r{   rC   r$   rD   r<  r~   rå   ræ   r—   r»   rh   r@  r?  rB  r¶   s                    r@   rQ   z(RemBertForSequenceClassification.forward.  så  € ð( &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—,‘,ØØ)Ø)Ø%Ø'Ø/Ø!5Ø#ð ó 	
ˆð   ™
ˆàŸ™ ]Ó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Ü,Ó.�Ù ¨Ó/�ÙØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rA   ©	NNNNNNNNN)rR   rS   rT   r)   r   r9   rW   rV   r¦   r§   r   rQ   rZ   r[   s   @r@   rN  rN    sû   ø„ ôð ð /3Ø37Ø26Ø15Ø26Ø*.Ø)-Ø,0Ø#'ñD
à×$Ñ$ tÑ+ðD
ð ×)Ñ)¨DÑ0ðD
ð ×(Ñ(¨4Ñ/ð	D
ð
 ×'Ñ'¨$Ñ.ðD
ð ×(Ñ(¨4Ñ/ðD
ð × Ñ  4Ñ'ðD
ð   $™;ðD
ð # T™kðD
ð ˜D‘[ðD
ð 
Ð)Ñ	)òD
ó ôD
rA   rN  c                   ó   ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	edz  d
edz  dedz  de	e
z  fd„«       Zˆ xZS )ÚRemBertForMultipleChoicec                 óö   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  «      | _        t	        j                  |j                  d«      | _
        | j                  «        y )Nr   )r(   r)   r  r  r   r5   rR  r7   r`   ra   rS  r  r<   s     €r@   r)   z!RemBertForMultipleChoice.__init__x  sV   ø€ Ü‰Ñ˜Ô ä# FÓ+ˆŒÜ—z‘z &×"@Ñ"@ÓAˆŒÜŸ)™) F×$6Ñ$6¸Ó:ˆŒð 	�‰ÕrA   NrB   r{   rC   r$   rD   r<  r~   rå   ræ   rF   c
           
      óJ  — |	�|	n| j                   j                  }	|�|j                  d   n|j                  d   }|�!|j                  d|j	                  d«      «      nd}|�!|j                  d|j	                  d«      «      nd}|�!|j                  d|j	                  d«      «      nd}|�!|j                  d|j	                  d«      «      nd}|�1|j                  d|j	                  d«      |j	                  d«      «      nd}| j                  ||||||||	¬«      }|d   }| j                  |«      }| j                  |«      }|j                  d|«      }d}|�t        «       } |||«      }|	s|f|dd z   }|�|f|z   S |S 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.encode`] and
            [`PreTrainedTokenizer.__call__`] 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&   r�   rU  r€   r>  )r>   ræ   r„   r…   rK   r  r7   rS  r   r   re   rî   )r=   rB   r{   rC   r$   rD   r<  r~   rå   ræ   r—   Únum_choicesr»   rh   r@  Úreshaped_logitsr?  rB  r¶   s                      r@   rQ   z RemBertForMultipleChoice.forward‚  sÛ  € ðX &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆØ,5Ð,A�i—o‘o aÒ(À}×GZÑGZÐ[\ÑG]ˆà>GÐ>S�I—N‘N 2 y§~¡~°bÓ'9Ô:ÐY]ˆ	ØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØGSÐG_�|×(Ñ(¨¨\×->Ñ->¸rÓ-BÔCÐeiˆð Ð(ð ×Ñ˜r =×#5Ñ#5°bÓ#9¸=×;MÑ;MÈbÓ;QÔRàð 	ð —,‘,ØØ)Ø)Ø%Ø'Ø/Ø!5Ø#ð ó 	
ˆð   ™
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆØ Ÿ+™+ b¨+Ó6ˆàˆØÐÜ'Ó)ˆHÙ˜O¨VÓ4ˆDáØ%Ð'¨'°!°"¨+Ñ5ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä(ØØ"Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rA   r[  )rR   rS   rT   r)   r   r9   rW   rV   r¦   r§   r   rQ   rZ   r[   s   @r@   r]  r]  v  sû   ø„ ôð ð /3Ø37Ø26Ø15Ø26Ø*.Ø)-Ø,0Ø#'ñW
à×$Ñ$ tÑ+ðW
ð ×)Ñ)¨DÑ0ðW
ð ×(Ñ(¨4Ñ/ð	W
ð
 ×'Ñ'¨$Ñ.ðW
ð ×(Ñ(¨4Ñ/ðW
ð × Ñ  4Ñ'ðW
ð   $™;ðW
ð # T™kðW
ð ˜D‘[ðW
ð 
Ð*Ñ	*òW
ó ôW
rA   r]  c                   ó   ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	edz  d
edz  dedz  de	e
z  fd„«       Zˆ xZS )ÚRemBertForTokenClassificationc                 ó0  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _        | j                  «        y ©NFr/  rP  r<   s     €r@   r)   z&RemBertForTokenClassification.__init__ß  sk   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä# F¸eÔDˆŒÜ—z‘z &×"@Ñ"@ÓAˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrA   NrB   r{   rC   r$   rD   r<  r~   rå   ræ   rF   c
           
      ó¦  — |	�|	n| j                   j                  }	| j                  ||||||||	¬«      }|d   }| j                  |«      }| j	                  |«      }d}|�<t        «       } ||j                  d| j                  «      |j                  d«      «      }|	s|f|dd z   }|�|f|z   S |S 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]`.
        NrU  r   r&   r€   r>  )r>   ræ   r  r7   rS  r   r…   rQ  r   re   rî   )r=   rB   r{   rC   r$   rD   r<  r~   rå   ræ   r—   r»   r  r@  r?  rB  r¶   s                    r@   rQ   z%RemBertForTokenClassification.forwardê  só   € ð$ &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—,‘,ØØ)Ø)Ø%Ø'Ø/Ø!5Ø#ð ó 	
ˆð " !™*ˆàŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rA   r[  )rR   rS   rT   r)   r   r9   rW   rV   r¦   r§   r   rQ   rZ   r[   s   @r@   rc  rc  Ý  sï   ø„ ô	ð ð /3Ø37Ø26Ø15Ø26Ø*.Ø)-Ø,0Ø#'ñ1
à×$Ñ$ tÑ+ð1
ð ×)Ñ)¨DÑ0ð1
ð ×(Ñ(¨4Ñ/ð	1
ð
 ×'Ñ'¨$Ñ.ð1
ð ×(Ñ(¨4Ñ/ð1
ð × Ñ  4Ñ'ð1
ð   $™;ð1
ð # T™kð1
ð ˜D‘[ð1
ð 
Ð&Ñ	&ò1
ó ô1
rA   rc  c                   ó@  ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
edz  dedz  dedz  de	e
z  fd„«       Zˆ xZS )ÚRemBertForQuestionAnsweringc                 óè   •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        j                  |j                  |j                  «      | _        | j                  «        y re  )
r(   r)   rQ  r  r  r   r`   ra   Ú
qa_outputsr  r<   s     €r@   r)   z$RemBertForQuestionAnswering.__init__!  sU   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒä# F¸eÔDˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrA   NrB   r{   rC   r$   rD   Ústart_positionsÚend_positionsr~   rå   ræ   rF   c           
      óî  — |
�|
n| j                   j                  }
| j                  |||||||	|
¬«      }|d   }| j                  |«      }|j	                  dd¬«      \  }}|j                  d«      }|j                  d«      }d }|�·|�µt        |j                  «       «      dkD  r|j                  d«      }t        |j                  «       «      dkD  r|j                  d«      }|j                  d«      }|j                  d|«       |j                  d|«       t        |¬«      } |||«      } |||«      }||z   dz  }|
s||f|dd  z   }|�|f|z   S |S t        ||||j                  |j                  ¬«      S )	NrU  r   r   r&   r‚   )Úignore_indexr€   )r?  Ústart_logitsÚ
end_logitsre   rî   )r>   ræ   r  rj  ÚsplitrZ  ÚlenrK   Úclamp_r   r   re   rî   )r=   rB   r{   rC   r$   rD   rk  rl  r~   rå   ræ   r—   r»   r  r@  ro  rp  Ú
total_lossÚignored_indexrB  Ú
start_lossÚend_lossr¶   s                          r@   rQ   z#RemBertForQuestionAnswering.forward,  s©  € ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—,‘,ØØ)Ø)Ø%Ø'Ø/Ø!5Ø#ð ó 	
ˆð " !™*ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/ˆØ×'Ñ'¨Ó+ˆ
àˆ
ØÐ&¨=Ð+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áØ" JÐ/°'¸!¸"°+Ñ=ˆFØ/9Ð/E�Z�M FÑ*ÐQÈ6ÐQä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rA   )
NNNNNNNNNN)rR   rS   rT   r)   r   r9   rW   rV   r¦   r§   r   rQ   rZ   r[   s   @r@   rh  rh    s  ø„ ô	ð ð /3Ø37Ø26Ø15Ø26Ø37Ø15Ø)-Ø,0Ø#'ñ=
à×$Ñ$ tÑ+ð=
ð ×)Ñ)¨DÑ0ð=
ð ×(Ñ(¨4Ñ/ð	=
ð
 ×'Ñ'¨$Ñ.ð=
ð ×(Ñ(¨4Ñ/ð=
ð ×)Ñ)¨DÑ0ð=
ð ×'Ñ'¨$Ñ.ð=
ð   $™;ð=
ð # T™kð=
ð ˜D‘[ð=
ð 
Ð-Ñ	-ò=
ó ô=
rA   rh  )	rD  r-  r]  rh  rN  rc  rÊ   r  r  )BrU   r‘   r9   r   Útorch.nnr   r   r   Ú r   r  Úactivationsr	   Úcache_utilsr
   r   r   Ú
generationr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   r   r   Úmodeling_utilsr   Úpytorch_utilsr   Úutilsr   r   Úconfiguration_rembertr   Ú
get_loggerrR   rñ   ÚModuler   r]   rk   r©   r³   r½   rÆ   rÊ   rÛ   rú   rÿ   r  r  r  r-  rD  rN  r]  rc  rh  Ú__all__rè   rA   r@   ú<module>r‡     sF  ðñ ã ã Ý ß AÑ Aå &Ý !ß CÑ CÝ )Ý 6Ý 9÷	÷ 	ó 	õ .Ý 6ß ,Ý 0ð 
ˆ×	Ñ	˜HÓ	%€ô1˜Ÿ	™	ô 1ôj�B—I‘Iô ôV.˜2Ÿ9™9ô V.ôt˜Ÿ	™	ô ô�r—y‘yô ô8˜"Ÿ)™)ô ô �B—I‘Iô ô?Ð-ô ?ôDM
�R—Y‘Yô M
ôb R§Y¡Yô ô"˜bŸi™iô ô"!˜Ÿ™ô !ð ôi˜_ó ió ðiñ ð	ôôu
Ð)ó u
óðu
ðp ôL
Ð/ó L
ó ðL
ñ^ ðôô
a
Ð/°ó a
óð
a
ñH ðôôP
Ð'=ó P
óðP
ðf ôc
Ð5ó c
ó ðc
ðL ô>
Ð$:ó >
ó ð>
ðB ôJ
Ð"8ó J
ó ðJ
òZ
�rA   