§
    ‚Štj(‰  ã                   óŒ  — d dl mZ d dlZd dl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 dd	lmZ dd
lmZ ddlmZmZmZmZ ddlmZ ddlmZ ddlm Z  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-m.Z. ddl/m0Z0  ej1        e2¦  «        Z3 ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z4 G d„ de)¦  «        Z5 G d„ de*¦  «        Z6 G d„ de'¦  «        Z7 G d„ d e$¦  «        Z8 G d!„ d"e%¦  «        Z9 ed#¬¦  «        e G d$„ d%e¦  «        ¦   «         ¦   «         Z:e G d&„ d'e(e:¦  «        ¦   «         Z; G d(„ d)ej<        ¦  «        Z= ed*¬¦  «         G d+„ d,e&e¦  «        ¦   «         Z> G d-„ d.ej<        ¦  «        Z?e G d/„ d0e(¦  «        ¦   «         Z@ ed1¬¦  «         G d2„ d3e:e0¦  «        ¦   «         ZAg d4¢ZBdS )5é    )Ú	dataclassNé   )Úinitialization)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚPreTrainedModel)ÚUnpack)ÚModelOutputÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úis_torchdynamo_compiling)Úcapture_outputsé   )Ú	AutoModel)ÚLlamaAttentionÚLlamaDecoderLayerÚLlamaForCausalLMÚLlamaMLPÚ
LlamaModelÚLlamaRMSNormÚLlamaRotaryEmbeddingÚTransformersKwargsé   )Ú	CsmConfigÚCsmDepthDecoderConfig)ÚCsmGenerationMixinz:
    Base class for the model autoregressive outputs.
    )Ú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
dz  ed<   dZeej        df         dz  ed<   dZeej        df         dz  ed<   dZej        dz  ed	<   dZej        dz  ed
<   dZe
dz  ed<   dZeej        df         dz  ed<   dZeej        df         dz  ed<   dZej        dz  ed<   dS )ÚCsmOutputWithPasta�	  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token 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).
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).

        Contains pre-computed hidden-states (key and values in the self-attention blocks) that can be used (see
        `past_key_values` input) to speed up sequential decoding.
    depth_decoder_loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction) of the depth decoder model.
    depth_decoder_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the depth decoder (scores for each vocabulary token before SoftMax).
    depth_decoder_past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).
    depth_decoder_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
        one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.

        Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
    depth_decoder_attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`.
    backbone_loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction) of the backbone model.
    NÚlossÚlogitsÚpast_key_values.Úhidden_statesÚ
attentionsÚdepth_decoder_lossÚdepth_decoder_logitsÚdepth_decoder_past_key_valuesÚdepth_decoder_hidden_statesÚdepth_decoder_attentionsÚbackbone_loss)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   ÚtorchÚFloatTensorÚ__annotations__r'   r(   r   r)   Útupler*   r+   r,   r-   r.   r/   r0   © ó    úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/csm/modular_csm.pyr%   r%   1   sK  € € € € € € ðð ð8 &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø$(€O�U˜T‘\Ð(Ð(Ñ(Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ø37Ð˜Ô)¨DÑ0Ð7Ð7Ñ7Ø59Ð˜%Ô+¨dÑ2Ð9Ð9Ñ9Ø26Ð! 5¨4¡<Ð6Ð6Ñ6ØHLÐ  uÔ'8¸#Ð'=Ô!>ÀÑ!EÐLÐLÑLØEIÐ˜e EÔ$5°sÐ$:Ô;¸dÑBÐIÐIÑIØ.2€M�5Ô$ tÑ+Ð2Ð2Ñ2Ð2Ð2r:   r%   c                   ó   — e Zd ZdS )Ú
CsmRMSNormN©r1   r2   r3   r9   r:   r;   r=   r=   b   ó   € € € € € Ø€Dr:   r=   c                   ó   — e Zd ZdS )ÚCsmRotaryEmbeddingNr>   r9   r:   r;   rA   rA   f   r?   r:   rA   c                   ó   — e Zd ZdS )ÚCsmMLPNr>   r9   r:   r;   rC   rC   j   r?   r:   rC   c                   ó   — e Zd ZdS )ÚCsmAttentionNr>   r9   r:   r;   rE   rE   n   r?   r:   rE   c                   ó   — e Zd ZdS )ÚCsmDecoderLayerNr>   r9   r:   r;   rG   rG   r   r?   r:   rG   z[
    The bare Csm Model outputting raw hidden-states without any specific head on top.
    c                   ó†   ‡ — e Zd ZU eed<   dZdZdZdgZdgZ	dZ
dZdZdZeedœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )	ÚCsmPreTrainedModelÚconfigÚmodel)ÚaudioÚtextTrG   r(   )r)   r*   c                 ó°  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rD|j        }t          |dz
  ¦  «        D ](}t          j        |j        d| j	        j
        ¬¦  «         Œ)d S t          |t          ¦  «        rEt          j        |j        t          j        | j	        j        ¦  «        | j	        j        z  ¦  «         d S d S )Nr   g        )ÚmeanÚstd)ÚsuperÚ_init_weightsÚ
isinstanceÚCsmCodebooksHeadÚnum_codebooksÚrangeÚinitÚnormal_ÚweightrJ   Úinitializer_rangeÚCsmBackboneModelEmbeddingsÚcopy_Úaudio_tokens_offsetsr5   ÚarangeÚ
vocab_size)ÚselfÚmodulerU   ÚiÚ	__class__s       €r;   rR   z CsmPreTrainedModel._init_weights�   sØ   ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ.Ñ/Ô/ð 	vØ"Ô0ˆMÝ˜=¨1Ñ,Ñ-Ô-ð Yð Y�Ý”˜Vœ]°¸$¼+Ô:WÐXÑXÔXÐXÐXðYð Yå˜Õ :Ñ;Ô;ð 	vÝŒJ�vÔ2µE´LÀÄÔAZÑ4[Ô4[Ð^bÔ^iÔ^tÑ4tÑuÔuÐuÐuÐuð	vð 	vr:   )r1   r2   r3   r    r7   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphÚ_supports_attention_backendrG   rE   Ú_can_record_outputsr5   Úno_gradrR   Ú__classcell__©rc   s   @r;   rI   rI   v   sµ   ø€ € € € € € ð ÐÐÑØÐØ(ÐØ&*Ð#Ø*Ð+ÐØ#4Ð"5ÐØÐØ€Nð "ÐØ"&Ðà(Ø"ðð Ðð
 €U„]�_„_ðvð vð vð vñ „_ðvð vð vð vð vr:   rI   c                   ó  ‡ — e Zd ZU ee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dz  d	e	j        dz  d
edz  dee         deez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚCsmDepthDecoderModelrJ   c                 óî   •— t          ¦   «                              |¦  «         t          j        |j        |j        z  |j        ¦  «        | _        t          j        |j        |j	        d¬¦  «        | _
        d S ©NF)Úbias)rQ   Ú__init__ÚnnÚ	EmbeddingrU   r_   Úbackbone_hidden_sizeÚembed_tokensÚLinearÚhidden_sizeÚinputs_embeds_projector©r`   rJ   rc   s     €r;   rv   zCsmDepthDecoderModel.__init__ž   sd   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ÝœL¨&Ô*>ÀÔARÑ*RÐU[ÔUpÑqÔqˆÔÝ')¤y°Ô1LÈfÔN`ÐglÐ'mÑ'mÔ'mˆÔ$Ð$Ð$r:   NÚ	input_idsÚbackbone_last_hidden_stateÚattention_maskÚposition_idsr(   Úinputs_embedsÚ	use_cacheÚkwargsÚreturnc           
      óØ  — |�*t          ¦   «         st                               d¦  «         d}|du |duz  rt          d¦  «        ‚|r|€t	          | j        ¬¦  «        }|�|                     ¦   «         nd}	|�|j        d         n|j        d         }
|�|j        n|j        }t          j
        |	|	|
z   |¬¦  «        }|€}t          j        |dz
  d¬¦  «        }|| j        z  }|                      ||z   ¦  «        }|d         dk    }|�
||dd…df<   n*t          ¦   «         s|rt                               d	¦  «         |                      |¦  «        }t!          | j        ||||¬
¦  «        }|}|                     d¦  «        }|                      ||¬¦  «        }| j        d| j        j        …         D ]} ||f|||||dœ|¤Ž}Œ|                      |¦  «        }t-          ||r|nd¬¦  «        S )aJ  
        backbone_last_hidden_state (`torch.FloatTensor` of shape `(batch_size, backbone_hidden_size)`, *optional*):
            The last hidden state of the backbone model. Such input is required when the first codebook token (the one generated by the backbone model)
            is provided in the `input_ids` argument.
        NzÕCustom `position_ids` were provided but will be ignored. CSM depth decoder automatically determines position_ids and as it requires them to be identical across the batch, the provided position_ids will be ignored.z;You must specify exactly one of input_ids or inputs_embeds.)rJ   r   r   ©Údevice)ÚminzvWhen the first codebook token is provided, `backbone_last_hidden_state` should also be provided for correct inference.)rJ   rƒ   r�   r(   r‚   )r‚   )r�   r‚   r(   r„   Úposition_embeddings)Úlast_hidden_stater(   )r   ÚloggerÚwarning_onceÚ
ValueErrorr   rJ   Úget_seq_lengthÚshaper‰   r5   r^   Úclampr_   rz   Úwarningr}   r	   Ú	unsqueezeÚ
rotary_embÚlayersÚnum_hidden_layersÚnormr
   )r`   r   r€   r�   r‚   r(   rƒ   r„   r…   Úpast_seen_tokensÚinputs_seq_lengthr‰   Úcodebook_idxsÚoffsetÚinput_ids_are_first_codebookÚcausal_maskr)   r‹   Údecoder_layers                      r;   ÚforwardzCsmDepthDecoderModel.forward£   s’  € ð& Ð#Õ,DÑ,FÔ,FÐ#Ý×Òðwñô ð ð  ˆLØ˜Ð -°tÐ";Ñ<ð 	\ÝÐZÑ[Ô[Ð[àð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOà?NÐ?Z˜?×9Ò9Ñ;Ô;Ð;Ð`aÐØ6CÐ6O˜MÔ/°Ô2Ð2ÐU^ÔUdÐefÔUgÐØ)6Ð)B�Ô%Ð%È	ÔHXˆÝ”|Ð$4Ð6FÐIZÑ6ZÐciÐjÑjÔjˆàÐ Ý!œK¨°qÑ(8¸aÐ@Ñ@Ô@ˆMØ" T¤_Ñ4ˆFØ ×-Ò-¨i¸&Ñ.@ÑAÔAˆMà+7¸¬?¸aÒ+?Ð(Ø)Ð5Ø&@�˜a˜a˜a ˜dÑ#Ð#å/Ñ1Ô1ð Ð6Rð Ý—N’Nð Qñô ð ð ×4Ò4°]ÑCÔCˆå(Ø”;Ø'Ø)Ø+Ø%ð
ñ 
ô 
ˆð &ˆð $×-Ò-¨aÑ0Ô0ˆØ"Ÿošo¨mÈ,˜oÑWÔWÐà!œ[Ð)H¨4¬;Ô+HÐ)HÔIð 		ð 		ˆMØ)˜MØðà*Ø)Ø /Ø#Ø$7ðð ð ðð ˆMˆMð Ÿ	š	 -Ñ0Ô0ˆÝ&Ø+Ø/8ÐB˜O˜O¸dð
ñ 
ô 
ð 	
r:   )NNNNNNN)r1   r2   r3   r!   r7   rv   r   r   r   r5   Ú
LongTensorr6   ÚTensorr   Úboolr   r   r8   r
   r    ro   rp   s   @r;   rr   rr   š   sA  ø€ € € € € € à!Ð!Ð!Ñ!ðnð nð nð nð nð
  ØØð .2Ø?CØ.2Ø04Ø(,Ø26Ø!%ðN
ð N
àÔ# dÑ*ðN
ð %*Ô$5¸Ñ$<ðN
ð œ tÑ+ð	N
ð
 Ô&¨Ñ-ðN
ð  ™ðN
ð Ô(¨4Ñ/ðN
ð ˜$‘;ðN
ð Ð+Ô,ðN
ð 
Ð(Ñ	(ðN
ð N
ð N
ñ „^ñ „_ñ  ÔðN
ð N
ð N
ð N
ð N
r:   rr   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )rT   c                 óÀ   •— t          ¦   «                              ¦   «          || _        t          j        t          j        | j        dz
  ||¦  «        ¦  «        | _        d S )Nr   )rQ   rv   rU   rw   Ú	Parameterr5   ÚemptyrY   )r`   r|   rU   r_   rc   s       €r;   rv   zCsmCodebooksHead.__init__ø   sM   ø€ Ý‰Œ×ÒÑÔÐØ*ˆÔÝ”l¥5¤;¨tÔ/AÀAÑ/EÀ{ÐT^Ñ#_Ô#_Ñ`Ô`ˆŒˆˆr:   Nc                 ó¨   ‡‡— |dz
  }| j         |         Šˆˆfd„t          ‰j        d         ¦  «        D ¦   «         Št          j        ‰d¬¦  «        Š‰S )Nr   c           	      ó€   •— g | ]:}t           j                             ‰d d …|d d …f         ‰|         j        ¦  «        ‘Œ;S ©N)rw   Ú
functionalÚlinearÚT)Ú.0Úcodebook_idxÚcodebook_weightr)   s     €€r;   ú
<listcomp>z,CsmCodebooksHead.forward.<locals>.<listcomp>  sX   ø€ ð 
ð 
ð 
àõ ŒM× Ò  ¨q¨q¨q°,ÀÀÀÐ/AÔ!BÀOÐT`ÔDaÔDcÑdÔdð
ð 
ð 
r:   r   ©Údim)rY   rV   r‘   r5   Ústack)r`   r)   Úcodebook_indicesr°   s    ` @r;   r    zCsmCodebooksHead.forwardý   su   øø€ à+¨aÑ/ÐØœ+Ð&6Ô7ˆð
ð 
ð 
ð 
ð 
å % oÔ&;¸AÔ&>Ñ ?Ô ?ð
ñ 
ô 
ˆõ œ M°qÐ9Ñ9Ô9ˆàÐr:   rª   ©r1   r2   r3   rv   r    ro   rp   s   @r;   rT   rT   ÷   sQ   ø€ € € € € ðað að að að að
ð ð ð ð ð ð ð r:   rT   a$  
    The CsmDepthDecoder Model transformer, with a [`CsmCodebooksHead`] on top,
    which can be seen a position-specific language modeling head, allowing to use a different linear layer for each codebook
    (e.g. position 0 is the first codebook and uses the first codebook head, etc.)
    c                   óŒ  ‡ — e Zd ZdZdZdZˆ fd„Z	 	 	 	 	 ddej        de	dz  de
dz  dej        dz  dej        dz  d	edz  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
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ez  fd„¦   «         ¦   «         Zˆ xZS )ÚCsmDepthDecoderForCausalLMNc                 óÀ   •— t          ¦   «                              |¦  «         | `t          |j        |j        |j        ¦  «        | _        t          |¦  «        | _	        d S rª   )
rQ   rv   Úlm_headrT   r|   rU   r_   Úcodebooks_headrr   rK   r~   s     €r;   rv   z#CsmDepthDecoderForCausalLM.__init__  sQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆLÝ.¨vÔ/AÀ6ÔCWÐY_ÔYjÑkÔkˆÔÝ)¨&Ñ1Ô1ˆŒ
ˆ
ˆ
r:   Fr   Únext_sequence_lengthr(   r�   rƒ   Úis_first_iterationc                 óœ   •—  t          ¦   «         j        |||||fi |¤Ž}|s|                     d¦  «         |                     d¦  «         |S )Nr€   r‚   )rQ   Úprepare_inputs_for_generationÚpop)
r`   r   r¼   r(   r�   rƒ   r½   r…   Úmodel_inputsrc   s
            €r;   r¿   z8CsmDepthDecoderForCausalLM.prepare_inputs_for_generation  sq   ø€ ð =•u‘w”wÔ<ØÐ+¨_¸nÈmð
ð 
Ø_eð
ð 
ˆð "ð 	;Ø×ÒÐ9Ñ:Ô:Ð:ð 	×Ò˜Ñ(Ô(Ð(àÐr:   r   r€   r‚   Úlabelsr„   Úlogits_to_keepr…   r†   c
                 ó²  — |�|                      ¦   «         nd}|�|j        d         n|j        d         }|�|j        n|j        }t          j        ||¬¦  «        |z   } | j        d	|||||||dœ|
¤Ž}|d         }t          |	t          ¦  «        r)|	dk    rt          dd¦  «        }nt          |	 d¦  «        }n|	}|  	                    |dd…|dd…f         ||         ¦  «        }| 
                    ¦   «         }d}|�:|ddd…f          
                    ¦   «         } | j        d	|d| j        j        |dœ|
¤Ž}t          |||j        |j        |j        ¬¦  «        S )
aî  
        backbone_last_hidden_state (`torch.FloatTensor` of shape `(batch_size, backbone_hidden_size)`, *optional*):
            The last hidden state of the backbone model. Such input is required when the first codebook token (the one generated by the backbone model)
            is provided in the `input_ids` argument.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (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]`.
        Nr   r   rˆ   )r   r€   r�   r‚   r(   rƒ   r„   .)r'   rÂ   r_   Úshift_labels)r&   r'   r(   r)   r*   r9   )r�   r‘   r‰   r5   r^   rK   rS   ÚintÚslicer»   Ú
contiguousÚloss_functionrJ   r_   r   r(   r)   r*   )r`   r   r€   r�   r‚   r(   rƒ   rÂ   r„   rÃ   r…   r™   Úseq_lenr‰   rµ   Úoutputsr)   Úslice_indicesr'   r&   rÅ   s                        r;   r    z"CsmDepthDecoderForCausalLM.forward3  sÌ  € ð0 @OÐ?Z˜?×9Ò9Ñ;Ô;Ð;Ð`aÐØ,9Ð,E�-Ô% aÔ(Ð(È9Ì?Ð[\ÔK]ˆØ)6Ð)B�Ô%Ð%È	ÔHXˆÝ œ<¨¸Ð?Ñ?Ô?ÐBRÑRÐà�$”*ð 	
ØØ'AØ)Ø%Ø+Ø'Øð	
ð 	
ð ð	
ð 	
ˆð   œ
ˆå�n¥cÑ*Ô*ð 	+Ø Ò"Ð"å % a¨¡¤��å % ~ o°tÑ <Ô <��à*ˆMà×$Ò$ ]°1°1°1°mÀQÀQÀQÐ3FÔ%GÐIYÐZgÔIhÑiÔiˆØ×"Ò"Ñ$Ô$ˆàˆØÐØ! # q r r 'œ?×5Ò5Ñ7Ô7ˆLØ%�4Ô%ð Ø d°t´{Ô7MÐ\hðð Ølrðð ˆDõ &ØØØ#Ô3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r:   )NNNNF)	NNNNNNNNr   )r1   r2   r3   Ú_tied_weights_keysÚ_tp_planÚ_pp_planrv   r5   r¡   rÆ   r   r6   r£   r¿   r   r   r¢   r   r   r8   r   r    ro   rp   s   @r;   r¸   r¸     sî  ø€ € € € € ð ÐØ€HØ€Hð2ð 2ð 2ð 2ð 2ð ,0Ø(,Ø26Ø26Ø*/ðð àÔ#ðð " D™jðð  ™ð	ð
 Ô(¨4Ñ/ðð Ô(¨4Ñ/ðð ! 4™Kðð ð ð ð ð ð, Øð .2Ø?CØ.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ðA
ð A
àÔ# dÑ*ðA
ð %*Ô$5¸Ñ$<ðA
ð œ tÑ+ð	A
ð
 Ô&¨Ñ-ðA
ð  ™ðA
ð Ô(¨4Ñ/ðA
ð Ô  4Ñ'ðA
ð ˜$‘;ðA
ð ˜eœlÑ*ðA
ð Ð+Ô,ðA
ð 
Ð'Ñ	'ðA
ð A
ð A
ñ „^ñ ÔðA
ð A
ð A
ð A
ð A
r:   r¸   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r[   c                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        z  |j        ¦  «        | _        |                      dt          j
        |j        ¦  «        |j        z  d¬¦  «         d S )Nr]   F)Ú
persistent)rQ   rv   rw   rx   rU   Úcodebook_sizer|   Úembed_audio_tokensÚregister_bufferr5   r^   r~   s     €r;   rv   z#CsmBackboneModelEmbeddings.__init__z  s€   ø€ Ý‰Œ×ÒÑÔÐÝ"$¤,°Ô0DÀvÔG[Ñ0[Ð^dÔ^pÑ"qÔ"qˆÔØ×ÒØ"¥E¤L°Ô1EÑ$FÔ$FÈÔI]Ñ$]Ðjoð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r:   c                 ól   — |                       || j        z   ¦  «        }|                     d¬¦  «        }|S )Nr   r²   )rÔ   r]   Úsum)r`   r   rƒ   s      r;   r    z"CsmBackboneModelEmbeddings.forward�  s9   € Ø×/Ò/°	¸DÔ<UÑ0UÑVÔVˆØ%×)Ò)¨aÐ)Ñ0Ô0ˆØÐr:   r¶   rp   s   @r;   r[   r[   y  sG   ø€ € € € € ð
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð r:   r[   c                   óX   ‡ — e Zd Zˆ fd„Zeeeˆ fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚCsmBackboneModelc                 ór   •— t          ¦   «                              |¦  «         t          |¦  «        | _        d S rª   )rQ   rv   r[   rz   r~   s     €r;   rv   zCsmBackboneModel.__init__‰  s1   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý6°vÑ>Ô>ˆÔÐÐr:   c                 ó6   •—  t          ¦   «         j        di |¤ŽS )a&  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length, num_codebooks) or (batch_size, sequence_length)`):
            1. (batch_size, sequence_length): corresponds to the input sequence prepared with the processor from the text prompt. Such input
            requires `input_values` to be provided so that audio can be encoded in codebook tokens and then merged with the text tokens.

            2. (batch_size, sequence_length, num_codebooks): codebook tokens generated during the autoregressive decoding. Such input is not meant to be used by end users.

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

            [What are input IDs?](../glossary#input-ids)
        r9   )rQ   r    )r`   Úsuper_kwargsrc   s     €r;   r    zCsmBackboneModel.forward�  s!   ø€ ð  �u‰wŒwŒÐ.Ð. Ð.Ð.Ð.r:   )	r1   r2   r3   rv   r   r   r   r    ro   rp   s   @r;   rÙ   rÙ   ‡  sr   ø€ € € € € ð?ð ?ð ?ð ?ð ?ð  ØØð/ð /ð /ð /ñ „^ñ „_ñ  Ôð/ð /ð /ð /ð /r:   rÙ   zË
    The Csm model consists of two llama-like auto-regressive transformer models: a backbone model that predicts the first codebook token and a depth decoder that predicts the other codebook tokens.
    c                   ó8  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Zeˆ f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
j        dz  f
d„Z	 	 	 	 dd	e
j        dedz  dedz  de
j        dz  de
j        dz  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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ez  fd„¦   «         ¦   «         Zˆ xZS )ÚCsmForConditionalGenerationz5backbone_model.embed_tokens.embed_audio_tokens.weightz'depth_decoder.model.embed_tokens.weightc                 óà  •— t          ¦   «                              |¦  «         |j        | _        t          j        |j        |j        d¬¦  «        | _        t          j        |j        |j        ¦  «        | _	        t                               |¦  «        | _        t                               |j        ¦  «        | _        t!          j        |j        ¦  «        | _        |                      ¦   «          d S rt   )rQ   rv   r_   rw   r{   r|   rº   rx   Útext_vocab_sizeÚembed_text_tokensrÙ   Ú_from_configÚbackbone_modelr¸   Údepth_decoder_configÚdepth_decoderr   Úfrom_configÚcodec_configÚcodec_modelÚ	post_initr~   s     €r;   rv   z$CsmForConditionalGeneration.__init__ª  s¸   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒÝ!#¤¨fÔ.DÀfÔFXÑ!YÔ!YˆÔÝ.×;Ò;¸FÑCÔCˆÔÝ7×DÒDÀVÔE`ÑaÔaˆÔÝ$Ô0°Ô1DÑEÔEˆÔØ�ŠÑÔÐÐÐr:   c                 ó   — | j         j        S rª   ©rã   rz   )r`   s    r;   Úget_input_embeddingsz0CsmForConditionalGeneration.get_input_embeddings´  s   € ØÔ"Ô/Ð/r:   c                 ó   — || j         _        d S rª   rë   )r`   Úvalues     r;   Úset_input_embeddingsz0CsmForConditionalGeneration.set_input_embeddings·  s   € Ø+0ˆÔÔ(Ð(Ð(r:   c                 óÖ  •‡‡— |                      dd¦  «        r t          ¦   «         j        |i |¤Ž\  }}n t          ¦   «         j        |i |¤Ž}dŠt          ‰¦  «        Šˆˆfd„t	          |j        ¦  «                             ¦   «         D ¦   «         }t	          |j        j        ¦  «                             ddi|¥¦  «         |D ]}t          |j        ‰|z   ¦  «         Œd|v r||fS |S )NÚoutput_loading_infoFÚdepth_decoder_c                 óV   •— i | ]%\  }}|                      ‰¦  «        ¯|‰d …         |“Œ&S rª   )Ú
startswith)r®   Úattrrî   ÚprefixÚ
prefix_lens      €€r;   ú
<dictcomp>z?CsmForConditionalGeneration.from_pretrained.<locals>.<dictcomp>Ä  sJ   ø€ ð 
ð 
ð 
á��eØ�Š˜vÑ&Ô&ð
Ø���Ô˜uð
ð 
ð 
r:   Ú_from_model_config)
ÚgetrQ   Úfrom_pretrainedÚlenÚvarsÚgeneration_configÚitemsrå   ÚupdateÚdelattr)
ÚclsÚargsr…   rK   Úloading_infoÚdepth_decoder_attrsrõ   rö   r÷   rc   s
          @@€r;   rû   z+CsmForConditionalGeneration.from_pretrainedº  s'  øøø€ à�:Š:Ð+¨UÑ3Ô3ð 	=Ø"9¥%¡'¤'Ô"9¸4Ð"JÀ6Ð"JÐ"JÑˆE�<�<à+•E‘G”GÔ+¨TÐ<°VÐ<Ð<ˆEð "ˆÝ˜‘[”[ˆ
ð
ð 
ð 
ð 
ð 
å# EÔ$;Ñ<Ô<×BÒBÑDÔDð
ñ 
ô 
Ðõ 	ˆUÔ Ô2Ñ3Ô3×:Ò:Ð<PÐRWÐ;oÐ[nÐ;oÑpÔpÐpð (ð 	<ð 	<ˆDÝ�EÔ+¨V°d©]Ñ;Ô;Ð;Ð;à  FÐ*Ð*Ø˜,Ð&Ð&àˆLr:   c                 ó  •— d}| j         j                             ¦   «         }|                     dd ¦  «         |                     ¦   «         D ]\  }}t          | j        ||z   |¦  «         Œ t          ¦   «         j        |i |¤Ž d S )Nrò   Útransformers_version)rå   rþ   Úto_diff_dictrÀ   rÿ   ÚsetattrrQ   Úsave_pretrained)r`   r  r…   rö   r  rõ   rî   rc   s          €r;   r
  z+CsmForConditionalGeneration.save_pretrainedÕ  s–   ø€ à!ˆØ"Ô0ÔB×OÒOÑQÔQÐØ×ÒÐ 6¸Ñ=Ô=Ð=Ø.×4Ò4Ñ6Ô6ð 	Bð 	B‰KˆD�%Ý�DÔ*¨F°T©M¸5ÑAÔAÐAÐAà�‰ŒÔ Ð0¨Ð0Ð0Ð0Ð0Ð0r:   Nr   Úinput_valuesÚinput_values_cutoffsrÂ   r†   c                 óÖ  ‡— |                       |¦  «        }|��Lt          j                             |d¦  «        }||dk                                  ¦   «         }||dk             }t          j        |                     ¦   «         |j        ¬¦  «         	                    t          |¦  «        d¦  «        }||                     d¦  «        k     }t          j        ¦   «         5  g }t          ||¦  «        D ]³\  }	}
|
|
dk             }
t          |
j        d         dz
  ¦  «        D ]„}|
|         }|
|dz            }|	d||…f         }| j                             |                     d¦  «        ¦  «        }|j                             dd¦  «        }|                     |d         ¦  «         Œ…Œ´t          d„ |D ¦   «         ¦  «        Št          j        ˆfd	„|D ¦   «         ¦  «        }| j                             |¦  «        }ddd¦  «         n# 1 swxY w Y   | j        j        }||k    }| j                             |¦  «        }||         ||<   t          j        dd| j        j        f|j        t
          j        ¬
¦  «        | j        j        z  }| j                             |¦  «                             d¦  «        }|| j        j         k    }| !                    | "                    ¦   «         d¦  «        ||<   |�v|                     d¦  «         !                    dd| j        j        ¦  «        }||         ||<   |||<   |dk     #                    d¬¦  «        }d||d         |d         dd…f<   |}||dœS )a˜  
        Merges the input_ids and input_values to produce a single inputs_embeds tensor:
        1 - Infers the codec model on the input_values to retrieve codebook token.
        2 - Embeds codebook tokens and places them at the correct positions in the inputs_embeds tensor.
        3 - If labels are provided, expands them to match codebook dimensions and position the target codebook tokens in the inputs_embeds tensor.

        Args:
            input_ids (`torch.Tensor` of shape `(batch_size, sequence_length)`):
                The input ids to embed.
            input_values (`torch.Tensor` of shape `(batch_size, channels, audio_sequence_length)`):
                The audio input values to embed.
            input_values_cutoffs (`torch.Tensor` of shape `(batch_size, max_num_audio)`):
                The cutoffs of the audio input values relative to its batch index, padded with -1 when no audio.
        N©r   r   r   rˆ   éÿÿÿÿr   .c              3   ó0   K  — | ]}|j         d          V — ŒdS )r   N)r‘   )r®   Úels     r;   ú	<genexpr>zQCsmForConditionalGeneration._merge_input_ids_with_input_values.<locals>.<genexpr>  s(   è è € Ð&OÐ&O°r r¤x°¤{Ð&OÐ&OÐ&OÐ&OÐ&OÐ&Or:   c                 ót   •— g | ]4}t           j                             |d d d ‰|j        d          z
  f¦  «        ‘Œ5S )r   )rw   r«   Úpadr‘   )r®   r  Úmax_audio_framess     €r;   r±   zRCsmForConditionalGeneration._merge_input_ids_with_input_values.<locals>.<listcomp>  sB   ø€ ÐrÐrÐrÐZ\•R”]×&Ò& r¨A¨q°!Ð5EÈÌÐQRÌÑ5SÐ+TÑUÔUÐrÐrÐrr:   )r‰   Údtypei›ÿÿÿT©Úas_tupleéœÿÿÿ)rƒ   rÂ   )$rá   rw   r«   r  Údiffr5   r^   Úmaxr‰   Úexpandrü   r”   rn   ÚziprV   r‘   rè   ÚencodeÚaudio_codesÚ	transposeÚappendr´   Úget_audio_codes_maskrJ   Úaudio_token_idrã   rz   ÚonesrU   ÚlongÚcodebook_eos_token_idÚsqueezeÚaudio_eos_token_idÚrepeatr×   Únonzero)r`   r   r  r  rÂ   rƒ   Úaudio_lengthsÚinput_values_maskÚaudio_tokens_listÚbatch_input_valuesÚbatch_input_values_cutoffsrb   Ú	start_idxÚend_idxÚaudio_batchÚcodec_outputsÚcodebook_idsÚbatched_audio_token_idsÚaudio_codes_maskr#  Úaudio_token_maskÚaudio_embedsÚaudio_eos_frame_idsÚaudio_eos_embedsÚaudio_eos_token_maskÚlabels_expandedÚ depth_decoder_ignore_frames_idxsr  s                              @r;   Ú"_merge_input_ids_with_input_valuesz>CsmForConditionalGeneration._merge_input_ids_with_input_valuesß  s  ø€ ð* ×.Ò.¨yÑ9Ô9ˆàÑ#å#%¤=×#4Ò#4Ð5IÈ6Ñ#RÔ#RÐ Ø0Ð1EÈÒ1JÔK×PÒPÑRÔRˆMØ)¨-¸!Ò*;Ô<ˆMÝ %¤Ð-A×-EÒ-EÑ-GÔ-GÐP\ÔPcÐ dÑ dÔ d× kÒ kÝ�MÑ"Ô" Bñ!ô !Ðð !2°M×4KÒ4KÈAÑ4NÔ4NÒ NÐõ
 ”‘”ð \ð \Ø$&Ð!ÝFIÈ,ÐXlÑFmÔFmð Bð BÑBÐ&Ð(BØ1KÐLfÐjkÒLkÔ1lÐ.Ý"Ð#=Ô#CÀAÔ#FÈÑ#JÑKÔKð Bð B˜Ø$>¸qÔ$A˜	Ø"<¸QÀ¹UÔ"C˜Ø&8¸¸iÈÐ>OÐ9OÔ&P˜Ø(,Ô(8×(?Ò(?À×@UÒ@UÐVWÑ@XÔ@XÑ(YÔ(Y˜Ø'4Ô'@×'JÒ'JÈ1ÈbÑ'QÔ'Q˜Ø)×0Ò0°¸a´ÑAÔAÐAÐAðBõ $'Ð&OÐ&OÐ=NÐ&OÑ&OÔ&OÑ#OÔ#OÐ Ý*/¬+ØrÐrÐrÐrÐ`qÐrÑrÔrñ+ô +Ð'ð $(Ô#3×#HÒ#HÐIZÑ#[Ô#[Ð ð!\ð \ð \ñ \ô \ð \ð \ð \ð \ð \ð \øøøð \ð \ð \ð \ð$ "œ[Ô7ˆNØ(¨NÒ:ÐàÔ.×;Ò;Ð<SÑTÔTˆLØ.:Ð;KÔ.LˆMÐ*Ñ+õ ”
˜A˜q $¤+Ô";Ð<ÀYÔEUÕ]bÔ]gÐhÑhÔhØ”+Ô3ñ4ð  ð  $Ô2×?Ò?Ð@SÑTÔT×\Ò\Ð]^Ñ_Ô_Ðà#,°´Ô0NÒ#NÐ Ø2B×2IÒ2IÐJ^×JbÒJbÑJdÔJdÐfgÑ2hÔ2hˆMÐ.Ñ/ð Ð!Ø"(×"2Ò"2°2Ñ"6Ô"6×"=Ò"=¸aÀÀDÄKÔD]Ñ"^Ô"^�Ø4KÐL\Ô4]�Ð 0Ñ1Ø8K�Ð 4Ñ5à4:¸d²N×3KÒ3KÐUYÐ3KÑ3ZÔ3ZÐ0Øpt�Ð @ÀÔ CÐEeÐfgÔEhÐjkÐjlÐjlÐ lÑmØ(�à!.¸&ÐAÐAÐAs   ÃDHÈHÈHr¼   r(   r�   rƒ   c           	      óx  •—  t          ¦   «         j        d	|||||dœ|¤Ž}|�—|j        dk    rŒ|                     d¦  «        €w|                      ||                     d¦  «        |                     d¦  «        |                     d¦  «        ¬¦  «        }|                     |d         |d         d dœ¦  «         |S )
N)r   r¼   r(   r�   rƒ   r   rƒ   r  r  rÂ   )r   r  r  rÂ   )rƒ   rÂ   r   r9   )rQ   r¿   Úndimrú   r>  r   )
r`   r   r¼   r(   r�   rƒ   r…   rÁ   Úmerged_inputsrc   s
            €r;   r¿   z9CsmForConditionalGeneration.prepare_inputs_for_generation1  sî   ø€ ð =•u‘w”wÔ<ð 
ØØ!5Ø+Ø)Ø'ð
ð 
ð ð
ð 
ˆð Ð  Y¤^°qÒ%8Ð%8¸\×=MÒ=MÈoÑ=^Ô=^Ð=fØ ×CÒCØ#Ø#ŸZšZ¨Ñ7Ô7Ø%+§Z¢ZÐ0FÑ%GÔ%GØ—z’z (Ñ+Ô+ð	 Dñ ô ˆMð ×ÒØ"/°Ô"@ÈMÐZbÔLcÐrvÐwÐwñô ð ð Ðr:   r   r‚   r„   rÃ   r…   c                 óÆ  — |�5|j         dk    r*|                      ||||¦  «        }|d         }|d         }d} | j        d||||||	dœ|¤Ž}|d         }t          |
t          ¦  «        rt          |
 d¦  «        n|
}|                      |dd…|dd…f         ¦  «        }d}d}d}d}|�î|dd…dd…df         } | j        d||| j        j	        dœ|¤Ž}|dd…dd…dd…f         d	k     
                    d
¬¦  «         }||         dd| j        j        dz
  …f         }t          j                             |dd¬¦  «        }|                     d¬¦  «        }||d         |d         dz
  dd…f         }||         } | j        d|||	d|dœ|¤Ž}|j        }||z   }t%          |||||j        |j        |j        |�|j        nd|�|j        nd|�|j        nd|�|j        nd¬¦  «        S )a  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length, num_codebooks) or (batch_size, sequence_length)`):
            1. (batch_size, sequence_length): corresponds to the input sequence prepared with the processor from the text prompt. Such input
            requires `input_values` to be provided so that audio can be encoded in codebook tokens and then merged with the text tokens.

            2. (batch_size, sequence_length, num_codebooks): codebook tokens generated during the autoregressive decoding. Such input is not meant to be used by end users.

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

            [What are input IDs?](../glossary#input-ids)
        input_values_cutoffs (`torch.Tensor` of shape `(batch_size, max_num_audio)`, *optional*):
            Specify the end positions of audio segments within each batch entry, relative to the concatenated audio input.
            If a batch entry has fewer segments than the maximum, it is padded with -1. For example, in a batch of 2 sequences
            where the first contains 2 audio segments of length l1, and the second contains 1 audio segment of length l2,
            the input_values_cutoffs would be: [[l1, 2 * l1], [l2, -1]].
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[config.audio_token_id, -100, -101]`.
            Requires targeted `input_values` to be provided as audio tokens will be inferred from it using the `codec_model`.
            - `config.audio_token_id` indicates an audio frames (considering sequence length elements as frames)
            - `-100` will be ignored in the loss computation
            - `-101` indicates the audio frame will be used only for the backbone model (using the first codebook token as labels)

            Such labels can be prepared using `output_labels=True` when calling [`CsmProcessor`].
        logits_to_keep (`int` or `torch.Tensor`, *optional*):
            Kept for compatibility. Does not support another value than:
            1. `0`, which is equivalent to keeping all logits, used in the training regime
            2. `1`, which is equivalent to keeping only the last logit, used in the generation regime

        Example:

        ```python
        >>> import torch
        >>> from transformers import CsmForConditionalGeneration, AutoProcessor
        >>> from datasets import load_dataset, Audio

        >>> model_id = "sesame/csm-1b"
        >>> torch_device = "cuda" if torch.cuda.is_available() else "cpu"

        >>> processor = AutoProcessor.from_pretrained(model_id)

        >>> ds = load_dataset("hf-internal-testing/dailytalk-dummy", split="train")
        >>> # ensure the audio is 24kHz
        >>> ds = ds.cast_column("audio", Audio(sampling_rate=24000))

        >>> conversation = []
        >>> # prepare a conversation with text and corresponding audio
        >>> for text, audio, speaker_id in zip(ds[:4]["text"], ds[:4]["audio"], ds[:4]["speaker_id"]):
        ...     conversation.append(
        ...         {
        ...             "role": f"{speaker_id}",
        ...             "content": [{"type": "text", "text": text}, {"type": "audio", "path": audio["array"]}],
        ...         }
        ...     )

        >>> inputs = processor.apply_chat_template(
        ...     conversation,
        ...     tokenize=True,
        ...     return_dict=True,
        ...     output_labels=True,
        ... ).to(torch_device)

        >>> model = CsmForConditionalGeneration.from_pretrained(model_id, device_map=torch_device)
        >>> output = model(**inputs)
        >>> output.loss.backward()
        ```Nr   rƒ   rÂ   )r   r�   r‚   r(   rƒ   r„   r   )r'   rÂ   r_   r   r  r  r²   .r  )rî   Tr  )r   r€   r„   Úreturn_dictrÂ   )r&   r0   r+   r'   r(   r)   r*   r,   r-   r.   r/   r9   )r@  r>  rã   rS   rÆ   rÇ   rº   rÉ   rJ   r_   ÚallrU   rw   r«   r  r*  rå   r&   r%   r(   r)   r*   r'   )r`   r   r  r�   r  r‚   r(   rƒ   rÂ   r„   rÃ   r…   rA  Úbackbone_outputsÚbackbone_hidden_statesrÌ   Úbackbone_logitsr&   r0   r+   Údepth_decoder_outputsÚbackbone_labelsÚ
train_maskÚdepth_decoder_input_idsÚ
train_idxsÚbackbone_last_hidden_statesÚdepth_decoder_labelss                              r;   r    z#CsmForConditionalGeneration.forwardP  sæ  € ðd Ð  Y¤^°qÒ%8Ð%8Ø ×CÒCØ˜<Ð)=¸vñô ˆMð *¨/Ô:ˆMØ" 8Ô,ˆFØˆIà.˜4Ô.ð 
ØØ)Ø%Ø+Ø'Øð
ð 
ð ð
ð 
Ðð "2°!Ô!4Ðå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØŸ,š,Ð'=¸a¸a¸aÀÐPQÐPQÐPQÐ>QÔ'RÑSÔSˆàˆØˆØ!ÐØ $ÐØÐà$ Q Q Q¨¨¨¨1 WœoˆOØ.˜DÔ.ð Ø&¨È4Ì;ÔKaðð Øekðð ˆMð " ! ! ! Q Q Q¨¨¨ (Ô+¨tÒ3×8Ò8¸RÐ8Ñ@Ô@Ð@ˆJØ&,¨ZÔ&8¸Ð>]ÀÄÔ@YÐ\]Ñ@]Ð>]Ð9]Ô&^Ð#å&(¤m×&7Ò&7Ð8OÐQWÐ_`Ð&7Ñ&aÔ&aÐ#à#×+Ò+°TÐ+Ñ:Ô:ˆJØ*@ÀÈAÄÐPZÐ[\ÔP]Ð`aÑPaÐcdÐcdÐcdÐAdÔ*eÐ'Ø#)¨*Ô#5Ð à$6 DÔ$6ð %Ø1Ø+FØ#Ø Ø+ð%ð %ð ð%ð %Ð!ð "7Ô!;ÐØ Ð#5Ñ5ˆDå ØØ'Ø1Ø"Ø,Ô<Ø*Ô8Ø'Ô2ØAVÐAbÐ!6Ô!=Ð!=Ðhlà$Ð0ð +@Ô*OÐ*Oàà$Ð0ð )>Ô(KÐ(KàØI^ÐIjÐ%:Ô%EÐ%EÐptð
ñ 
ô 
ð 	
r:   )NNNN)
NNNNNNNNNr   )r1   r2   r3   rÍ   rv   rì   rï   Úclassmethodrû   r
  r5   r¢   r>  r¡   rÆ   r   r6   r¿   r   r   r£   r   r   r8   r%   r    ro   rp   s   @r;   rÞ   rÞ      sÛ  ø€ € € € € ð 	@ÐAjðÐðð ð ð ð ð0ð 0ð 0ð1ð 1ð 1ð ðð ð ð ñ „[ðð41ð 1ð 1ð 1ð 1ð *.Ø,0Ø48Ø&*ðPBð PBà”< $Ñ&ðPBð ”l TÑ)ðPBð $œl¨TÑ1ð	PBð
 ”˜tÑ#ðPBð 
Œ˜Ñ	ðPBð PBð PBð PBðj ,0Ø(,Ø26Ø26ðð àÔ#ðð " D™jðð  ™ð	ð
 Ô(¨4Ñ/ðð Ô(¨4Ñ/ðð ð ð ð ð ð> Øð .2Ø,0Ø.2Ø48Ø04Ø(,Ø26Ø*.Ø!%Ø-.ðY
ð Y
àÔ# dÑ*ðY
ð ”l TÑ)ðY
ð œ tÑ+ð	Y
ð
 $œl¨TÑ1ðY
ð Ô&¨Ñ-ðY
ð  ™ðY
ð Ô(¨4Ñ/ðY
ð Ô  4Ñ'ðY
ð ˜$‘;ðY
ð ˜eœlÑ*ðY
ð Ð+Ô,ðY
ð 
Ð"Ñ	"ðY
ð Y
ð Y
ñ „^ñ ÔðY
ð Y
ð Y
ð Y
ð Y
r:   rÞ   )rI   rÙ   rr   r¸   rÞ   )CÚdataclassesr   r5   Útorch.nnrw   Ú r   rW   Úcache_utilsr   r   Ú
generationr   Úmasking_utilsr	   Úmodeling_outputsr
   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.import_utilsr   Úutils.output_capturingr   Úautor   Úllama.modeling_llamar   r   r   r   r   r   r   r   Úconfiguration_csmr    r!   Úgeneration_csmr"   Ú
get_loggerr1   r�   r%   r=   rA   rC   rE   rG   rI   rr   ÚModulerT   r¸   r[   rÙ   rÞ   Ú__all__r9   r:   r;   ú<module>rd     sþ  ðð "Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø :Ð :Ð :Ð :Ð :Ð :Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð @Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø .Ð .Ð .Ð .Ð .Ð .ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð
 ð'3ð '3ð '3ð '3ð '3˜ñ '3ô '3ñ „ñô ð'3ðV	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð-ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	ˆXñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�>ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð'ñ 	ô 	ð 	ð €ððñ ô ð
 ðvð vð vð vð v˜ñ vô vñ „ñô ðvð< ðY
ð Y
ð Y
ð Y
ð Y
˜:Ð'9ñ Y
ô Y
ñ „ðY
ðxð ð ð ð �r”yñ ô ð ð( €ððñ ô ðd
ð d
ð d
ð d
ð d
Ð!1°?ñ d
ô d
ñô ðd
ðNð ð ð ð  ¤ñ ô ð ð ð/ð /ð /ð /ð /�zñ /ô /ñ „ð/ð0 €ððñ ô ð
F
ð F
ð F
ð F
ð F
Ð"4Ð6Hñ F
ô F
ñô ð
F
ðR
ð ð €€€r:   