Ë
    ÛÓ^jö]  ã                   ó¸  — d Z ddlm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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mZ ddlmZ ddlmZm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(  e"jR                  e*«      Z+d„ Z,d„ Z-	 	 d/dej\                  dej^                  dej^                  dej^                  dej^                  dz  de0dz  de0dee   fd„Z1 G d„ dej\                  «      Z2d „ Z3 G d!„ d"ej\                  «      Z4e  G d#„ d$e«      «       Z5e  G d%„ d&e5«      «       Z6 e d'¬(«       G d)„ d*e5e«      «       Z7 e d+¬(«       G d,„ d-e5«      «       Z8g d.¢Z9y)0zPyTorch CTRL model.é    )ÚCallableN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)ÚBaseModelOutputWithPastÚCausalLMOutputWithPastÚSequenceClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )Ú
CTRLConfigc                 óP   — dt        j                  dd|dz  z  |z  «      z  }| |z  S )Nr   i'  é   )ÚtorchÚpow)ÚposÚiÚd_model_sizeÚangle_ratess       úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/ctrl/modeling_ctrl.pyÚ
angle_defnr%   -   s/   € Ø”e—i‘i ¨¨Q°!©V©¸Ñ'DÓEÑE€KØ�ÑÐó    c                 óÒ  — t        t        j                  | t        j                  ¬«      j	                  |«      j                  d«      t        j                  |t        j                  ¬«      j	                  |«      j                  d«      |«      }t        j                  |d d …dd d…f   «      }t        j                  |d d …dd d…f   «      }t        j                  ||gd¬«      }|S )N)Údtyper   r   r   éÿÿÿÿ©Údim)	r%   r   ÚarangeÚint64ÚtoÚ	unsqueezeÚsinÚcosÚcat)Úpositionr"   r(   Ú
angle_radsÚsinesÚcosinesÚpos_encodings          r$   Úpositional_encodingr8   2   s¶   € äÜ�‰�X¤U§[¡[Ô1×4Ñ4°UÓ;×EÑEÀaÓHÜ�‰�\¬¯©Ô5×8Ñ8¸Ó?×IÑIÈ!ÓLØó€Jô �I‰I�j¢ A D q D Ñ)Ó*€EÜ�i‰i˜
¢1 a d¨ d 7Ñ+Ó,€Gä—9‘9˜e WÐ-°2Ô6€LØÐr&   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 óœ  — |€|j                  d«      dz  }t        j                  ||j                  dd«      «      |z  }|�||z   }t        j
                  j                  |d¬«      }t        j
                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Nr)   ç      à¿r   r   r*   )ÚpÚtrainingr   )
Úsizer   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxr?   rD   Ú
contiguous)
r9   r:   r;   r<   r=   r>   r?   r@   Úattn_weightsÚattn_outputs
             r$   Úeager_attention_forwardrM   B   s»   € ð €Ø—*‘*˜R“. DÑ(ˆô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LàÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r&   c                   ó8   ‡ — e Zd Zdˆ fd„	Z	 	 ddee   fd„Zˆ xZS )ÚMultiHeadAttentionc                 ó~  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        || _        d| _        t        | j                  | j                  z  «      | _
        | j                  dz  | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        y )NTrB   )ÚsuperÚ__init__ÚconfigÚn_headÚ	num_headsÚn_embdr"   Ú	layer_idxÚ	is_causalÚintÚhead_dimr>   r   ÚLinearÚWqÚWkÚWvÚdense©ÚselfrS   rW   Ú	__class__s      €r$   rR   zMultiHeadAttention.__init___   sÝ   ø€ Ü‰ÑÔØˆŒØŸ™ˆŒØ"ŸM™MˆÔØ"ˆŒØˆŒä˜D×-Ñ-°·±Ñ>Ó?ˆŒØ—}‘} dÑ*ˆŒä—)‘)˜D×-Ñ-¨t×/@Ñ/@ÓAˆŒÜ—)‘)˜D×-Ñ-¨t×/@Ñ/@ÓAˆŒÜ—)‘)˜D×-Ñ-¨t×/@Ñ/@ÓAˆŒä—Y‘Y˜t×0Ñ0°$×2CÑ2CÓDˆ�
r&   r@   c                 ó®  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }	| j                  |«      j                  |«      j	                  dd«      }
| j                  |«      j                  |«      j	                  dd«      }|� |j                  |
|| j                  «      \  }
}t        j                  | j                  j                  t        «      } || |	|
||fd| j                  dœ|¤Ž\  }} |j                  g |¢d‘­Ž j!                  «       }| j#                  |«      }||fS )Nr)   r   r   ç        )r?   r>   )ÚshaperZ   r\   ÚviewrG   r]   r^   ÚupdaterW   r   Úget_interfacerS   Ú_attn_implementationrM   r>   ÚreshaperJ   r_   )ra   ÚvÚkÚqÚ
layer_pastr=   r@   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacerL   rK   s                  r$   ÚforwardzMultiHeadAttention.forwardp   sT  € ð —g‘g˜c˜r�lˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—w‘w˜q“z—‘ |Ó4×>Ñ>¸qÀ!ÓDˆØ—W‘W˜Q“Z—_‘_ \Ó2×<Ñ<¸QÀÓBˆ
Ø—w‘w˜q“z—‘ |Ó4×>Ñ>¸qÀ!ÓDˆàÐ!Ø'1×'8Ñ'8¸À\ÐSW×SaÑSaÓ'bÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—j‘j Ó-ˆØ˜LÐ(Ð(r&   ©N©NN©Ú__name__Ú
__module__Ú__qualname__rR   r   r   ru   Ú__classcell__©rb   s   @r$   rO   rO   ^   s&   ø„ õEð, Øñ#)ð Ð+Ñ,÷#)r&   rO   c                 ó¤   — t        j                  t        j                  | |«      t        j                  «       t        j                  || «      «      S rv   )r   Ú
Sequentialr[   ÚReLU)r"   Údffs     r$   Úpoint_wise_feed_forward_networkr‚   –   s2   € Ü�=‰=œŸ™ <°Ó5´r·w±w³yÄ"Ç)Á)ÈCÐQ]ÓB^Ó_Ð_r&   c                   ó8   ‡ — e Zd Zdˆ fd„	Z	 	 ddee   fd„Zˆ xZS )ÚEncoderLayerc                 ó¸  •— t         ‰| �  «        t        ||¬«      | _        t	        |j
                  |j                  «      | _        t        j                  |j
                  d¬«      | _
        t        j                  |j
                  d¬«      | _        t        j                  |j                  «      | _        t        j                  |j                  «      | _        y )N©rW   g�íµ ÷Æ°>©Úeps)rQ   rR   rO   Úmulti_head_attentionr‚   rV   r�   Úffnr   Ú	LayerNormÚ
layernorm1Ú
layernorm2ÚDropoutÚresid_pdropÚdropout1Údropout2r`   s      €r$   rR   zEncoderLayer.__init__›   s‹   ø€ Ü‰ÑÔä$6°vÈÔ$SˆÔ!Ü2°6·=±=À&Ç*Á*ÓMˆŒäŸ,™, v§}¡}¸$Ô?ˆŒÜŸ,™, v§}¡}¸$Ô?ˆŒäŸ
™
 6×#5Ñ#5Ó6ˆŒÜŸ
™
 6×#5Ñ#5Ó6ˆ�r&   r@   c                 óú   — | j                  |«      } | j                  |||f||dœ|¤Ž\  }}| j                  |«      }||z   }| j                  |«      }	| j	                  |	«      }
| j                  |
«      }
||
z   }	|	S )N©rn   r=   )rŒ   r‰   r�   r�   rŠ   r‘   )ra   Úxrn   r=   r@   ÚnormedrL   Ú_Úout1Úout2Ú
ffn_outputs              r$   ru   zEncoderLayer.forward§   s™   € ð —‘ Ó#ˆØ2˜×2Ñ2ØØØð
ð "Ø)ñ
ð ñ
‰ˆ�Qð —m‘m KÓ0ˆØ�;‰ˆà�‰˜tÓ$ˆØ—X‘X˜d“^ˆ
Ø—]‘] :Ó.ˆ
Ø�jÑ ˆàˆr&   rv   rw   rx   r}   s   @r$   r„   r„   š   s%   ø„ õ
7ð Øñ	ð
 Ð+Ñ,÷r&   r„   c                   óH   ‡ — e Zd ZU eed<   dZdZdZdZdZ	e
edœZˆ fd„Zˆ xZS )ÚCTRLPreTrainedModelrS   ÚtransformerT)Úhidden_statesÚ
attentionsc                 óô   •— t         ‰| �  |«       t        |t        «      rXt	        j
                  |j                  t        |j                  j                  |j                  t        j                  «      «       y y rv   )rQ   Ú_init_weightsÚ
isinstanceÚ	CTRLModelÚinitÚcopy_r7   r8   rS   Ún_positionsr"   r   Úfloat)ra   r9   rb   s     €r$   r    z!CTRLPreTrainedModel._init_weightsÏ   sX   ø€ Ü‰Ñ˜fÔ%Ü�fœiÔ(Ü�J‰JØ×#Ñ#Ô%8¸¿¹×9RÑ9RÐTZ×TgÑTgÔin×itÑitÓ%uõð )r&   )ry   rz   r{   r   Ú__annotations__Úbase_model_prefixÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_attention_backendr„   rO   Ú_can_record_outputsr    r|   r}   s   @r$   r›   r›   Â   s>   ø… àÓØ%ÐØÐØ€NØÐØ"&Ðà%Ø(ñÐ÷
ð r&   r›   c                   ó  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zeee	 	 	 	 	 	 	 dde	j                  dz  de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e   defd„«       «       «       Zˆ xZS )r¢   c           	      ó¦  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        j                  |j                  |j                  «      | _	        t        j                  |j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        t        j"                  |j                  |j$                  ¬«      | _        | j)                  dt+        |j,                  | j                  t.        j0                  «      d¬«       | j3                  «        y c c}w )Nr†   r‡   r7   F)Ú
persistent)rQ   rR   rV   r"   Ún_layerÚ
num_layersr   Ú	EmbeddingÚ
vocab_sizeÚwrŽ   Ú
embd_pdropr?   Ú
ModuleListÚranger„   Úhr‹   Úlayer_norm_epsilonÚ	layernormÚregister_bufferr8   r¥   r   r¦   Ú	post_init)ra   rS   r!   rb   s      €r$   rR   zCTRLModel.__init__Ù   sí   ø€ Ü‰Ñ˜Ô à"ŸM™MˆÔØ Ÿ.™.ˆŒä—‘˜f×/Ñ/°·±Ó?ˆŒä—z‘z &×"3Ñ"3Ó4ˆŒÜ—‘Ì5ÐQW×Q_ÑQ_ÓK`ÖaÀa¤¨V¸qÖ AÒaÓbˆŒÜŸ™ f§m¡m¸×9RÑ9RÔSˆŒà×ÑØÔ/°×0BÑ0BÀD×DUÑDUÔW\×WbÑWbÓcÐpuð 	ô 	
ð
 	�‰Õùò  bs   Â,Ec                 ó   — | j                   S rv   ©rµ   )ra   s    r$   Úget_input_embeddingszCTRLModel.get_input_embeddingsì   s   € Ø�v‰vˆr&   c                 ó   — || _         y rv   r¿   )ra   Únew_embeddingss     r$   Úset_input_embeddingszCTRLModel.set_input_embeddingsï   s	   € Øˆ�r&   NÚ	input_idsÚpast_key_valuesr=   Útoken_type_idsÚposition_idsÚinputs_embedsÚ	use_cacher@   Úreturnc                 ó,  — |�|n| j                   j                  }|�|�t        d«      ‚|�| j                  |«      }n|€t        d«      ‚|j                  dd }	|j                  d   }
|j
                  }|r|€t        | j                   ¬«      }|�|j                  «       nd}|€>t        j                  ||	d   |z   t        j                  |¬«      }|j                  d«      }|�4| j                  |«      }|t        j                  | j                  «      z  }nd}|�!|j                  dk  r|j!                  |
d«      }t#        | j                   ||||¬	«      }|t        j                  | j                  «      z  }| j$                  j'                  ||j(                  ¬
«      | _        | j$                  |dd…f   }||z   |z   }| j+                  |«      }| j,                  D ]  } ||f||dœ|¤Ž}Œ | j/                  |«      }t1        ||r|¬«      S d¬«      S )a¡  
        Example:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
        >>> model = CTRLModel.from_pretrained("Salesforce/ctrl")

        >>> # CTRL was trained with control codes as the first token
        >>> inputs = tokenizer("Opinion My dog is cute", return_tensors="pt")
        >>> assert inputs["input_ids"][0, 0].item() in tokenizer.control_codes.values()

        >>> outputs = model(**inputs)

        >>> last_hidden_states = outputs.last_hidden_state
        >>> list(last_hidden_states.shape)
        [1, 5, 1280]
        ```NzDYou cannot specify both input_ids and inputs_embeds at the same timez5You have to specify either input_ids or inputs_embedsr)   r   )rS   )r(   Údeviceé   )rS   rÈ   r=   rÅ   rÇ   ©rÌ   r(   r“   )Úlast_hidden_staterÅ   )rS   rÉ   Ú
ValueErrorrµ   re   rÌ   r   Úget_seq_lengthr   r,   Úlongr/   ÚnpÚsqrtr"   Úndimrf   r   r7   r.   r(   r?   r¹   r»   r   )ra   rÄ   rÅ   r=   rÆ   rÇ   rÈ   rÉ   r@   ro   Ú
batch_sizerÌ   Úpast_lengthÚtoken_type_embedsÚcausal_maskÚ
pos_embedsr�   r¹   s                     r$   ru   zCTRLModel.forwardò   s=  € ðD "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	àÐ  ]Ð%>ÜÐcÓdÐdØÐ Ø ŸF™F 9Ó-‰MØÐ"ÜÐTÓUÐUà#×)Ñ)¨#¨2Ð.ˆØ"×(Ñ(¨Ñ+ˆ
Ø×%Ñ%ˆá˜Ð0Ü*°$·+±+Ô>ˆOà:IÐ:U�o×4Ñ4Ô6Ð[\ˆØÐÜ Ÿ<™<¨°[À±_À{Ñ5RÔZ_×ZdÑZdÐmsÔtˆLØ'×1Ñ1°!Ó4ˆLàÐ%Ø $§¡ ~Ó 6ÐØ¤§¡¨×):Ñ):Ó!;Ñ;Ñà !ÐàÐ%¨.×*=Ñ*=ÀÒ*AØ+×0Ñ0°¸RÓ@ˆNä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð 	œŸ™ ×!2Ñ!2Ó3Ñ3ˆð !×-Ñ-×0Ñ0¸Àm×FYÑFYÐ0ÓZˆÔØ×&Ñ& |²Q Ñ7ˆ
à%¨
Ñ2Ð5FÑFˆàŸ™ ]Ó3ˆà—‘ò 	ˆAÙØðà*Ø*ñð ñ	‰Mð	ð Ÿ™ }Ó5ˆä&Ø+Ù/8˜Oô
ð 	
à>Bô
ð 	
r&   )NNNNNNN)ry   rz   r{   rR   rÀ   rÃ   r   r   r   r   Ú
LongTensorr
   ÚFloatTensorÚboolr   r   r   ru   r|   r}   s   @r$   r¢   r¢   ×   sõ   ø„ ôò&ò ð  ØØð .2Ø(,Ø37Ø26Ø04Ø26Ø!%ñ\
à×#Ñ# dÑ*ð\
ð  ™ð\
ð ×)Ñ)¨DÑ0ð	\
ð
 ×(Ñ(¨4Ñ/ð\
ð ×&Ñ&¨Ñ-ð\
ð ×(Ñ(¨4Ñ/ð\
ð ˜$‘;ð\
ð Ð+Ñ,ð\
ð 
!ò\
ó ó ó  ô\
r&   r¢   z‡
    The CTRL Model transformer with a language modeling head on top (linear layer with weights tied to the input
    embeddings).
    )Úcustom_introc                   óX  ‡ — e Zd ZddiZˆ fd„Zee	 	 	 	 	 	 	 	 	 ddej                  dz  de	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ej                  z  dee   defd„«       «       Z	 dˆ fd„	Zˆ xZS )ÚCTRLLMHeadModelzlm_head.weightztransformer.w.weightc                 óÆ   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        | j                  «        y )NT©Úbias)
rQ   rR   r¢   rœ   r   r[   rV   r´   Úlm_headr½   ©ra   rS   rb   s     €r$   rR   zCTRLLMHeadModel.__init__]  sG   ø€ Ü‰Ñ˜Ô Ü$ VÓ,ˆÔÜ—y‘y §¡°×0AÑ0AÈÔMˆŒð 	�‰Õr&   NrÄ   rÅ   r=   rÆ   rÇ   rÈ   ÚlabelsrÉ   Úlogits_to_keepr@   rÊ   c
           
      ól  —  | j                   |f||||||dœ|
¤Ž}|d   }t        |	t        «      rt        |	 d«      n|	}| j	                  |dd…|dd…f   «      }d}|�* | j
                  ||fd| j                  j                  i|
¤Ž}t        |||j                  |j                  |j                  ¬«      S )ag  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set
            `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100`
            are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]`

        Example:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
        >>> model = CTRLLMHeadModel.from_pretrained("Salesforce/ctrl")

        >>> # CTRL was trained with control codes as the first token
        >>> inputs = tokenizer("Wikipedia The llama is", return_tensors="pt")
        >>> assert inputs["input_ids"][0, 0].item() in tokenizer.control_codes.values()

        >>> sequence_ids = model.generate(inputs["input_ids"])
        >>> sequences = tokenizer.batch_decode(sequence_ids)
        >>> sequences
        ['Wikipedia The llama is a member of the family Bovidae. It is native to the Andes of Peru,']

        >>> outputs = model(**inputs, labels=inputs["input_ids"])
        >>> round(outputs.loss.item(), 2)
        9.21

        >>> list(outputs.logits.shape)
        [1, 5, 246534]
        ```©rÅ   r=   rÆ   rÇ   rÈ   rÉ   r   Nr´   )ÚlossÚlogitsrÅ   r�   rž   )rœ   r¡   rY   Úslicerä   Úloss_functionrS   r´   r   rÅ   r�   rž   )ra   rÄ   rÅ   r=   rÆ   rÇ   rÈ   ræ   rÉ   rç   r@   Útransformer_outputsr�   Úslice_indicesrë   rê   s                   r$   ru   zCTRLLMHeadModel.forwarde  sî   € ð\ /˜d×.Ñ.Øð	
à+Ø)Ø)Ø%Ø'Øñ	
ð ñ	
Ðð ,¨AÑ.ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ØØñð  Ÿ;™;×1Ñ1ðð ñ	ˆDô &ØØØ/×?Ñ?Ø-×;Ñ;Ø*×5Ñ5ô
ð 	
r&   c                 óT   •— t        ‰| �  |f|||dœ|¤Ž}|j                  dd «       |S )N)rÅ   rÉ   Úis_first_iterationrÆ   )rQ   Úprepare_inputs_for_generationÚpop)ra   rÄ   rÅ   rÉ   rñ   r@   Úmodel_inputsrb   s          €r$   rò   z-CTRLLMHeadModel.prepare_inputs_for_generation´  sH   ø€ ô
 ‘wÑ<Øð
à+ØØ1ñ	
ð
 ñ
ˆð 	×ÑÐ)¨4Ô0àÐr&   )	NNNNNNNNr   )NNF)ry   rz   r{   Ú_tied_weights_keysrR   r   r   r   rÛ   r
   rÜ   rÝ   rY   ÚTensorr   r   r   ru   rò   r|   r}   s   @r$   rà   rà   T  s3  ø„ ð +Ð,BÐCÐôð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø*.Ø!%Ø-.ñK
à×#Ñ# dÑ*ðK
ð  ™ðK
ð ×)Ñ)¨DÑ0ð	K
ð
 ×(Ñ(¨4Ñ/ðK
ð ×&Ñ&¨Ñ-ðK
ð ×(Ñ(¨4Ñ/ðK
ð × Ñ  4Ñ'ðK
ð ˜$‘;ðK
ð ˜eŸl™lÑ*ðK
ð Ð+Ñ,ðK
ð 
 òK
ó ó ðK
ð\ SX÷ñ r&   rà   aÎ  
    The CTRL Model transformer with a sequence classification head on top (linear layer).
    [`CTRLForSequenceClassification`] uses the last token in order to do the classification, as other causal models
    (e.g. GPT-2) do. Since it does classification on the last token, it requires to know the position of the last
    token. If a `pad_token_id` is defined in the configuration, it finds the last token that is not a padding token in
    each row. If no `pad_token_id` is defined, it simply takes the last value in each row of the batch. Since it cannot
    guess the padding tokens when `inputs_embeds` are passed instead of `input_ids`, it does the same (take the last
    value in each row of the batch).
    c                   ó"  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 	 	 ddej                  dz  de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e   defd„«       «       Zˆ xZS )ÚCTRLForSequenceClassificationc                 óè   •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  | j                  d¬«      | _        | j                  «        y )NFrâ   )
rQ   rR   Ú
num_labelsr¢   rœ   r   r[   rV   Ú
classifierr½   rå   s     €r$   rR   z&CTRLForSequenceClassification.__init__Ó  sR   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ$ VÓ,ˆÔÜŸ)™) F§M¡M°4·?±?ÈÔOˆŒð 	�‰Õr&   NrÄ   rÅ   r=   rÆ   rÇ   rÈ   ræ   rÉ   r@   rÊ   c	           
      ó^  —  | j                   |f||||||dœ|	¤Ž}
|
d   }| j                  |«      }|�|j                  dd \  }}n|j                  dd \  }}| j                  j                  €|dk7  rt        d«      ‚| j                  j                  €d}nÃ|�“|| j                  j                  k7  j                  |j                  t        j                  «      }t        j                  |j                  d   |j                  t        j                  ¬«      }||z  j                  d«      }n.d}t        j                  | j                  j                  › d	�«       |t        j                  ||j                  ¬
«      |f   }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/        «       } ||j1                  d| j"                  «      |j1                  d«      «      }n,| j                  j                   dk(  rt3        «       } |||«      }t5        |||
j6                  |
j8                  ¬«      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).

        Example of single-label classification:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
        >>> model = CTRLForSequenceClassification.from_pretrained("Salesforce/ctrl")

        >>> # CTRL was trained with control codes as the first token
        >>> inputs = tokenizer("Opinion My dog is cute", return_tensors="pt")
        >>> assert inputs["input_ids"][0, 0].item() in tokenizer.control_codes.values()

        >>> with torch.no_grad():
        ...     logits = model(**inputs).logits

        >>> predicted_class_id = logits.argmax().item()
        >>> model.config.id2label[predicted_class_id]
        'LABEL_0'
        ```

        ```python
        >>> import torch

        >>> torch.manual_seed(42)  # doctest: +IGNORE_RESULT
        >>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
        >>> num_labels = len(model.config.id2label)
        >>> model = CTRLForSequenceClassification.from_pretrained("Salesforce/ctrl", num_labels=num_labels)

        >>> labels = torch.tensor(1)
        >>> loss = model(**inputs, labels=labels).loss
        >>> round(loss.item(), 2)
        0.93
        ```

        Example of multi-label classification:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
        >>> model = CTRLForSequenceClassification.from_pretrained(
        ...     "Salesforce/ctrl", problem_type="multi_label_classification"
        ... )

        >>> # CTRL was trained with control codes as the first token
        >>> inputs = tokenizer("Opinion My dog is cute", return_tensors="pt")
        >>> assert inputs["input_ids"][0, 0].item() in tokenizer.control_codes.values()

        >>> with torch.no_grad():
        ...     logits = model(**inputs).logits

        >>> predicted_class_id = logits.argmax().item()
        >>> model.config.id2label[predicted_class_id]
        'LABEL_0'
        ```

        ```python
        >>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
        >>> num_labels = len(model.config.id2label)
        >>> model = CTRLForSequenceClassification.from_pretrained("Salesforce/ctrl", num_labels=num_labels)

        >>> num_labels = len(model.config.id2label)
        >>> labels = torch.nn.functional.one_hot(torch.tensor([predicted_class_id]), num_classes=num_labels).to(
        ...     torch.float
        ... )
        >>> loss = model(**inputs, labels=labels).loss
        >>> loss.backward()  # doctest: +IGNORE_RESULT
        ```ré   r   Nr   r   z=Cannot handle batch sizes > 1 if no padding token is defined.r)   rÎ   zŠ will not detect padding tokens in `inputs_embeds`. Results may be unexpected if using padding tokens in conjunction with `inputs_embeds.`)rÌ   Ú
regressionÚsingle_label_classificationÚmulti_label_classification)rê   rë   r�   rž   )rœ   rû   re   rS   Úpad_token_idrÐ   r.   rÌ   r   Úint32r,   ÚargmaxÚloggerÚwarning_oncerb   ry   Úproblem_typerú   r(   rÒ   rY   r   Úsqueezer   rf   r   r   r�   rž   )ra   rÄ   rÅ   r=   rÆ   rÇ   rÈ   ræ   rÉ   r@   rî   r�   rë   rÖ   Úsequence_lengthÚlast_non_pad_tokenÚnon_pad_maskÚtoken_indicesÚpooled_logitsrê   Úloss_fcts                        r$   ru   z%CTRLForSequenceClassification.forwardÜ  sÑ  € ðv /˜d×.Ñ.Øð	
à+Ø)Ø)Ø%Ø'Øñ	
ð ñ	
Ðð ,¨AÑ.ˆØ—‘ Ó/ˆàÐ Ø*3¯/©/¸"¸1Ð*=Ñ'ˆJ™à*7×*=Ñ*=¸b¸qÐ*AÑ'ˆJ˜à�;‰;×#Ñ#Ð+°
¸a²ÜÐ\Ó]Ð]Ø�;‰;×#Ñ#Ð+Ø!#ÑØÐ"à%¨¯©×)AÑ)AÑA×EÑEÀfÇmÁmÔUZ×U`ÑU`ÓaˆLÜ!ŸL™L¨¯©¸Ñ)<ÀVÇ]Á]ÔZ_×ZeÑZeÔfˆMØ"/°,Ñ">×!FÑ!FÀrÓ!JÑà!#ÐÜ×ÑØ—>‘>×*Ñ*Ð+ð ,Zð Zôð
 œuŸ|™|¨J¸v¿}¹}ÔMÐOaÐaÑbˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? 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Ò'Ù# M×$9Ñ$9Ó$;¸V¿^¹^Ó=MÓN‘Dá# M°6Ó:‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù × 2Ñ 2°2°t·±Ó GÈÏÉÐUWËÓY‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨vÓ6�Ü'ØØ Ø-×;Ñ;Ø*×5Ñ5ô	
ð 	
r&   )NNNNNNNN)ry   rz   r{   rR   r   r   r   rÛ   r
   rÜ   rÝ   r   r   r   ru   r|   r}   s   @r$   rø   rø   Ç  sü   ø„ ôð Øð .2Ø(,Ø37Ø26Ø04Ø26Ø*.Ø!%ñY
à×#Ñ# dÑ*ðY
ð  ™ðY
ð ×)Ñ)¨DÑ0ð	Y
ð
 ×(Ñ(¨4Ñ/ðY
ð ×&Ñ&¨Ñ-ðY
ð ×(Ñ(¨4Ñ/ðY
ð × Ñ  4Ñ'ðY
ð ˜$‘;ðY
ð Ð+Ñ,ðY
ð 
"òY
ó ó ôY
r&   rø   )rø   rà   r¢   r›   )Nrd   ):Ú__doc__Úcollections.abcr   ÚnumpyrÓ   r   r   Útorch.nnr   r   r   Ú r	   r£   Úcache_utilsr
   r   Ú
generationr   Úmasking_utilsr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_ctrlr   Ú
get_loggerry   r  r%   r8   ÚModulerö   r¦   rM   rO   r‚   r„   r›   r¢   rà   rø   Ú__all__© r&   r$   ú<module>r      s¤  ðñ å $ã Û Ý ß AÑ Aå &ß .Ý )Ý /ß iÑ iß FÝ &÷ó õ 8Ý 5Ý *ð 
ˆ×	Ñ	˜HÓ	%€òò
ð, !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(ó%ô85)˜Ÿ™ô 5)òp`ô%�2—9‘9ô %ðP ô˜/ó ó ðð( ôy
Ð#ó y
ó ðy
ñx ðôôjÐ)¨?ó jóðjñZ ðô
ôe
Ð$7ó e
ó
ðe
òP c�r&   