Ë
    ÛÓ^jy}  ã                   ó&  — d dl mZ d dlmZmZ d dlZd dl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 ddlmZ ddlmZmZ ddl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% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z,  G d„ dejZ                  «      Z.d„ Z/ ed«      d@d„«       Z0dejb                  de2dejb                  fd„Z3	 dAdejZ                  d ejb                  d!ejb                  d"ejb                  d#ejb                  dz  d$e4d%e4d&e!e#   fd'„Z5 G d(„ d)ejZ                  «      Z6 G d*„ d+ejZ                  «      Z7 G d,„ d-ejZ                  «      Z8 G d.„ d/ejZ                  «      Z9 G d0„ d1ejZ                  «      Z: G d2„ d3ejZ                  «      Z; G d4„ d5e«      Z< G d6„ d7e«      Z=e$ G d8„ d9e=«      «       Z>	 	 	 dBd:ejb                  e?ejb                     z  dz  d;e2dz  d#ejb                  dz  dejb                  e2z  fd<„Z@ G d=„ d>e=e«      ZAg d?¢ZBy)Cé    )ÚCallable)ÚAnyÚOptionalN)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_kernel_func_from_hub)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚMoeCausalLMOutputWithPastÚMoeModelOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Úmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )Ú
DbrxConfigc                   óÄ   ‡ — e Zd ZU ej                  ed<   ddefˆ fd„Ze	 	 	 ddedz  de	d   de
dz  ded	ef   fd
„«       Z ej                  «       ed„ «       «       Zˆ xZS )ÚDbrxRotaryEmbeddingÚinv_freqNÚconfigc                 ó®  •— t         ‰| �  «        |j                  | _        |j                  | _        || _        | j
                  j                  d   | _        | j                  }| j                  dk7  rt        | j                     } || j
                  |«      \  }| _
        | j                  d|d¬«       | j                  d|j                  «       d¬«       y )NÚ	rope_typeÚdefaultr!   F)Ú
persistentÚoriginal_inv_freq)ÚsuperÚ__init__Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenr"   Úrope_parametersr$   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)Úselfr"   ÚdeviceÚrope_init_fnr!   Ú	__class__s        €úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/dbrx/modeling_dbrx.pyr)   zDbrxRotaryEmbedding.__init__/   s¶   ø€ Ü‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àˆŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÒ&Ü.¨t¯~©~Ñ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆ�$Ô(à×Ñ˜Z¨¸eÐÔDØ×ÑÐ0°(·.±.Ó2BÈuÐÕUó    r3   ztorch.deviceÚseq_lenÚreturnztorch.Tensorc                 ó  — | j                   d   }t        | dd«      xs | j                  | j                  z  }d}d|t	        j
                  d|dt        j                  ¬«      j                  |t        j                  ¬«      |z  z  z  }||fS )	a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚhead_dimNç      ð?r   é   ©Údtype)r3   r@   )	r-   ÚgetattrÚhidden_sizeÚnum_attention_headsÚtorchÚarangeÚint64ÚtoÚfloat)r"   r3   r8   ÚbaseÚdimÚattention_factorr!   s          r6   r.   z3DbrxRotaryEmbedding.compute_default_rope_parameters?   s�   € ð& ×%Ñ% lÑ3ˆÜ�f˜j¨$Ó/Òc°6×3EÑ3EÈ×IcÑIcÑ3cˆàÐð Ø”U—\‘\ ! S¨!´5·;±;Ô?×BÑBÈ&ÔX]×XcÑXcÐBÓdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r7   c                 óN  — | j                   d d d …d f   j                  «       j                  |j                  d   dd«      j	                  |j
                  «      }|d d …d d d …f   j                  «       }t        |j
                  j                  t        «      r/|j
                  j                  dk7  r|j
                  j                  nd}t        |d¬«      5  |j                  «       |j                  «       z  j                  dd«      }t        j                  ||fd¬	«      }|j                  «       | j                  z  }|j                  «       | j                  z  }	d d d «       j	                  |j                   ¬
«      	j	                  |j                   ¬
«      fS # 1 sw Y   ŒAxY w)Nr   éÿÿÿÿr   ÚmpsÚcpuF)Údevice_typeÚenabledr>   ©rJ   r?   )r!   rH   ÚexpandÚshaperG   r3   Ú
isinstanceÚtypeÚstrr   Ú	transposerD   ÚcatÚcosr/   Úsinr@   )
r2   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrP   ÚfreqsÚembrZ   r[   s
             r6   ÚforwardzDbrxRotaryEmbedding.forward]   sR  € ð !ŸM™M¨$²°4¨-Ñ8×>Ñ>Ó@×GÑGÈ×HZÑHZÐ[\ÑH]Ð_aÐcdÓe×hÑhÐij×iqÑiqÓrÐØ ,ªQ°²a¨ZÑ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-ÄÔ'EÈ!Ï(É(Ï-É-Ð[`ÒJ`�a—h‘h—m’mÐfkˆÜ¨¸UÔCñ 	5Ø&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÑN×YÑYÐZ[Ð]^Ó_ˆEÜ—)‘)˜U E˜N°Ô3ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆC÷		5ð �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷	5ð 	5ús   ÃBFÆF$©N©NNN)Ú__name__Ú
__module__Ú__qualname__rD   ÚTensorÚ__annotations__r   r)   Ústaticmethodr   ÚintÚtuplerH   r.   Úno_gradr   rb   Ú__classcell__©r5   s   @r6   r    r    ,   s˜   ø… Ø�l‰lÓñV˜zõ Vð  à$(Ø+/Ø"ñ*Ø˜TÑ!ð*à˜Ñ(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ñ	%ò	*ó ð*ð: €U‡]�]ƒ_Øñ<ó ó ô<r7   r    c                 óš   — | dd| j                   d   dz  …f   }| d| j                   d   dz  d…f   }t        j                  | |fd¬«      S )z*Rotates half the hidden dims of the input..NrM   r>   rR   )rT   rD   rY   )r\   Úx1Úx2s      r6   Úrotate_halfrs   m   sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰9�r�c˜2�Y BÔ'Ð'r7   Úrotary_pos_embc                 óž   — |j                  |«      }|j                  |«      }| |z  t        | «      |z  z   }||z  t        |«      |z  z   }||fS )a…  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    )Ú	unsqueezers   )ÚqÚkrZ   r[   Úunsqueeze_dimÚq_embedÚk_embeds          r6   Úapply_rotary_pos_embr|   t   sY   € ð& �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€CØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�GÐÐr7   Úhidden_statesÚn_repr9   c                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||z  ||«      S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r   N)rT   rS   Úreshape)r}   r~   ÚbatchÚnum_key_value_headsÚslenr<   s         r6   Ú	repeat_kvr„   Ž   so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr7   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t        || j                  «      }t        || j                  «      }	t        j                  ||j	                  dd«      «      |z  }
|�|
|z   }
t
        j                  j                  |
dt        j                  ¬«      j                  |j                  «      }
t
        j                  j                  |
|| j                  ¬«      }
t        j                  |
|	«      }|j	                  dd«      j                  «       }||
fS )Nr>   r   rM   ©rJ   r@   ©ÚpÚtrainingr   )r„   Únum_key_value_groupsrD   ÚmatmulrX   r   Ú
functionalÚsoftmaxÚfloat32rG   r@   r‹   r‘   Ú
contiguous)r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r6   Úeager_attention_forwardrœ   š   sà   € ô ˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r7   c                   óÖ   ‡ — e Zd ZdZ	 ddedz  fˆ fd„Z	 	 	 ddej                  dej                  dz  dej                  dz  de	dz  d	e
ej                  ej                  f   f
d
„Zˆ xZS )ÚDbrxAttentionzYModular DBRX attention component that can be reused across different model architectures.NÚ	layer_idxc                 óð  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        |j                  | _	        || _
        |j                  }|j                  | _        |j                  | _        |j                  | _        | j                  | j                   z  | _        | j                  dz  | _        |j&                  | _        d| _        t+        j,                  | j                  | j                  d| j                   z  | j                  z  z   d¬«      | _        t+        j,                  | j                  | j                  d¬«      | _        y )Ng      à¿Tr>   F©Úbias)r(   r)   r"   Úd_modelrB   Ún_headsÚ	num_headsr<   Úmax_seq_lenr*   rŸ   Úattn_configÚ
attn_pdropÚattention_dropoutÚclip_qkvÚ
kv_n_headsr‚   r’   rŠ   r;   Ú	is_causalr   ÚLinearÚWqkvÚout_proj)r2   r"   rŸ   rŒ   r§   r5   s        €r6   r)   zDbrxAttention.__init__¶   s*  ø€ ô 	‰ÑÔØˆŒØ!Ÿ>™>ˆÔØŸ™ˆŒØ×(Ñ(¨D¯N©NÑ:ˆŒØ'-×'9Ñ'9ˆÔ$Ø"ˆŒà×(Ñ(ˆØ!,×!7Ñ!7ˆÔØ#×,Ñ,ˆŒØ#.×#9Ñ#9ˆÔ Ø$(§N¡N°d×6NÑ6NÑ$NˆÔ!Ø—}‘} dÑ*ˆŒØ%×0Ñ0ˆŒØˆŒä—I‘IØ×Ñ˜d×.Ñ.°°T×5MÑ5MÑ1MÐPT×P]ÑP]Ñ1]Ñ]Ðdiô
ˆŒ	ô Ÿ	™	 $×"2Ñ"2°D×4DÑ4DÈ5ÔQˆ�r7   r}   r‰   Úposition_embeddingsÚpast_key_valuesr9   c                 óæ  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      }| j                  �| j                   nd }	|j	                  |	| j                  ¬«      }|j                  | j                  | j                  | j                  z  | j                  | j                  z  gd¬«      \  }
}}|
j                  |«      j                  dd«      }
|j                  |«      j                  dd«      }|j                  |«      j                  dd«      }|\  }}t        |
|||«      \  }
}|� |j                  ||| j                  «      \  }}t        j                  | j                  j                   t"        «      } || |
|||f| j$                  sdn| j&                  | j(                  dœ|¤Ž\  }} |j*                  g |¢d‘­Ž j-                  «       }| j/                  |«      }||fS )NrM   )ÚminÚmaxr>   rR   r   ç        )r‹   rŠ   )rT   r<   r®   rª   ÚclampÚsplitrB   r‚   ÚviewrX   r|   ÚupdaterŸ   r   Úget_interfacer"   Ú_attn_implementationrœ   r‘   r©   rŠ   r€   r—   r¯   )r2   r}   r‰   r°   r±   rŒ   Úinput_shapeÚhidden_shapeÚ
qkv_statesÚmin_valÚquery_statesr˜   r™   rZ   r[   Úattention_interfacer›   rš   s                     r6   rb   zDbrxAttention.forwardÒ   s  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—Y‘Y˜}Ó-ˆ
Ø$(§M¡MÐ$=�4—=‘=‘.À4ˆØ×%Ñ%¨'°t·}±}Ð%ÓEˆ
à1;×1AÑ1Aà× Ñ Ø×(Ñ(¨4¯=©=Ñ8Ø×(Ñ(¨4¯=©=Ñ8ðð
 ð 2Bó 2
Ñ.ˆ�j ,ð $×(Ñ(¨Ó6×@Ñ@ÀÀAÓFˆØ—_‘_ \Ó2×<Ñ<¸QÀÓBˆ
Ø#×(Ñ(¨Ó6×@Ñ@ÀÀAÓFˆà&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jàÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆØ˜LÐ(Ð(r7   rc   rd   )re   rf   rg   Ú__doc__rk   r)   rD   rh   Ú
LongTensorr
   rl   rb   rn   ro   s   @r6   rž   rž   ³   sŽ   ø„ Ùcð
 !%ñRð ˜‘:õRð> /3Ø7;Ø(,ñ3)à—|‘|ð3)ð Ÿ™ tÑ+ð3)ð #×-Ñ-°Ñ4ð	3)ð
  ™ð3)ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷3)r7   rž   c            
       óž   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  dej
                  dej
                  f
d„Zˆ xZS )ÚDbrxExpertGLUc                 ó¶  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        t        j                  t        j                  | j                  | j                  z  | j                  «      «      | _	        t        j                  t        j                  | j                  | j                  z  | j                  «      «      | _
        t        j                  t        j                  | j                  | j                  z  | j                  «      «      | _        |j                  j                  dd«      }t        |   | _        y )NÚnameÚsilu)r(   r)   rB   Úffn_hidden_sizeÚmoe_num_expertsr   Ú	ParameterrD   ÚemptyÚw1Úv1Úw2Ú
ffn_act_fnÚgetr	   Úactivation_fn)r2   r"   Úact_fn_namer5   s      €r6   r)   zDbrxExpertGLU.__init__	  sö   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔØ%×5Ñ5ˆÔØ%×5Ñ5ˆÔä—,‘,œuŸ{™{¨4×+?Ñ+?À$×BVÑBVÑ+VÐX\×XhÑXhÓiÓjˆŒÜ—,‘,œuŸ{™{¨4×+?Ñ+?À$×BVÑBVÑ+VÐX\×XhÑXhÓiÓjˆŒÜ—,‘,œuŸ{™{¨4×+?Ñ+?À$×BVÑBVÑ+VÐX\×XhÑXhÓiÓjˆŒà×'Ñ'×+Ñ+¨F°FÓ;ˆÜ# KÑ0ˆÕr7   r\   Ú	expert_w1Ú	expert_v1Ú	expert_w2r9   c                 ó´   — |j                  |«      }|j                  |«      }| j                  |«      }||z  }|j                  |j                  «       «      }|S rc   )r“   rÒ   Út)	r2   r\   rÔ   rÕ   rÖ   Ú	gate_projÚup_projÚintermediate_statesÚ	down_projs	            r6   rb   zDbrxExpertGLU.forward  sW   € ð —H‘H˜YÓ'ˆ	Ø—(‘(˜9Ó%ˆØ×&Ñ& yÓ1ˆ	Ø'¨'Ñ1ÐØ'×.Ñ.¨y¯{©{«}Ó=ˆ	ØÐr7   ©re   rf   rg   r)   rD   rh   rb   rn   ro   s   @r6   rÅ   rÅ     sK   ø„ ô1ðØ—‘ðØ*/¯,©,ðØCHÇ<Á<ðØ\a×\hÑ\hðà	�‰÷r7   rÅ   c                   ó†   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  dej
                  fd„Zˆ xZS )ÚDbrxExpertsc                 ó¨   •— t         ‰| �  «        t        |«      | _        |j                  | _        |j
                  | _        |j                  | _        y rc   )r(   r)   rÅ   ÚmlprB   rÉ   rÊ   Únum_experts©r2   r"   r5   s     €r6   r)   zDbrxExperts.__init__"  sD   ø€ Ü‰ÑÔÜ  Ó(ˆŒØ!×-Ñ-ˆÔØ%×5Ñ5ˆÔØ!×1Ñ1ˆÕr7   r}   Útop_k_indexÚtop_k_weightsr9   c                 óž  — |j                   d   }|j                  d| j                  «      }t        j                  ||j
                  |j                  ¬«      }t        j                  «       5  t        j                  j                  j                  || j                  ¬«      }|j                  ddd«      }t        j                  |j                  d¬«      d«      j                  «       }d d d «       d| j                  | j                   f}D �]  }	|	d   }	t        j                  «       5  t        j"                  |	   «      \  }
}d d d «       | j$                  j&                  j)                  |«      |	   }| j$                  j*                  j)                  |«      |	   }| j$                  j,                  j)                  |«      |	   }| j%                  |   |||«      }|j)                  d| j                  «      ||
d f   z  }|j/                  d||«       �Œ
 |j)                  |d| j                  «      }|S # 1 sw Y   �ŒOxY w# 1 sw Y   ŒÿxY w)	Nr   rM   )r@   r3   )Únum_classesr>   r   )rM   éþÿÿÿrR   )rT   r€   rÉ   rD   Ú
zeros_liker@   r3   rm   r   r”   Úone_hotrâ   ÚpermuteÚgreaterÚsumÚnonzerorB   Úwhererá   rÎ   r¸   rÍ   rÏ   Ú
index_add_)r2   r}   rä   rå   Ú
batch_sizeÚnext_statesÚexpert_maskÚ
expert_hitÚsplit_expert_shapeÚ
expert_idxÚidxÚ	token_idxrÎ   rÍ   rÏ   Ústatess                   r6   rb   zDbrxExperts.forward)  s  € ð #×(Ñ(¨Ñ+ˆ
Ø%×-Ñ-¨b°$×2FÑ2FÓGˆä×&Ñ& }¸M×<OÑ<OÐXe×XlÑXlÔmˆÜ�]‰]‹_ñ 	SÜŸ(™(×-Ñ-×5Ñ5°kÈt×O_ÑO_Ð5Ó`ˆKØ%×-Ñ-¨a°°AÓ6ˆKÜŸ™ {§¡¸8 Ó'DÀaÓH×PÑPÓRˆJ÷	Sð
 ! $×"6Ñ"6¸×8HÑ8HÐIÐØ$ó 		9ˆJØ# A™ˆJÜ—‘“ñ FÜ!&§¡¨[¸Ñ-DÓ!E‘��Y÷Fà—‘—‘×!Ñ!Ð"4Ó5°jÑAˆBØ—‘—‘×!Ñ!Ð"4Ó5°jÑAˆBØ—‘—‘×!Ñ!Ð"4Ó5°jÑAˆBØ—X‘X˜m¨IÑ6¸¸BÀÓCˆFØ—[‘[  T×%9Ñ%9Ó:¸]È9ÐVYÐ[_ÐK_Ñ=`Ñ`ˆFØ×"Ñ" 1 i°Ö8ð		9ð "×&Ñ& z°2°t×7KÑ7KÓLˆØÐ÷%	Sñ 	Sú÷Fð Fús   Á,A=H6Ä)IÈ6I ÉI	rÝ   ro   s   @r6   rß   rß   !  sC   ø„ ô2ðà—|‘|ðð —\‘\ðð —|‘|ð	ð
 
�‰÷r7   rß   c                   óŠ   ‡ — e Zd Zˆ fd„Zdej
                  deej
                  ej
                  ej                  f   fd„Zˆ xZ	S )Ú
DbrxRouterc                 óÈ   •— t         ‰| �  «        |j                  | _        |j                  | _        t        j                  | j                  |j                  d¬«      | _        y ©NFr¡   )	r(   r)   rÉ   rB   Úmoe_jitter_epsr   r­   rÊ   Úlayerrã   s     €r6   r)   zDbrxRouter.__init__I  sJ   ø€ Ü‰ÑÔØ!×1Ñ1ˆÔØ$×3Ñ3ˆÔÜ—Y‘Y˜t×/Ñ/°×1GÑ1GÈeÔTˆ�
r7   r}   r9   c                 ó  — | j                   rN| j                  �B|t        j                  |«      j	                  d| j                  z
  d| j                  z   «      z  }|j                  d|j                  d   «      }| j                  |«      }|S )Nr=   rM   )r‘   rþ   rD   Ú
empty_likeÚuniform_r¸   rT   rÿ   )r2   r}   Úrouter_logitss      r6   rb   zDbrxRouter.forwardO  s„   € Ø�=Š=˜T×0Ñ0Ð<ØœU×-Ñ-¨mÓ<×EÑEØ�d×)Ñ)Ñ)¨3°×1DÑ1DÑ+Dóñ ˆMð &×*Ñ*¨2¨}×/BÑ/BÀ2Ñ/FÓGˆØŸ
™
 =Ó1ˆØÐr7   )
re   rf   rg   r)   rD   rh   rl   rÃ   rb   rn   ro   s   @r6   rû   rû   H  s;   ø„ ôUð U§\¡\ð °e¸E¿L¹LÈ%Ï,É,ÐX]×XhÑXhÐ<hÑ6i÷ r7   rû   c                   ó~   ‡ — e Zd ZdZˆ fd„Zd„ Zdej                  deej                  ej                  f   fd„Z	ˆ xZ
S )ÚDbrxFFNz0Modular DBRX MLP/FFN component with MoE support.c                 óö   •— t         ‰| �  «        t        |j                  «      | _        t        |j                  «      | _        |j                  j                  | _        |j                  j                  | _	        y rc   )
r(   r)   rû   Ú
ffn_configÚrouterrß   ÚexpertsÚmoe_normalize_expert_weightsÚ	moe_top_kÚtop_k)r2   r"   rŒ   r5   s      €r6   r)   zDbrxFFN.__init__\  sY   ø€ Ü‰ÑÔÜ  ×!2Ñ!2Ó3ˆŒÜ" 6×#4Ñ#4Ó5ˆŒà,2×,=Ñ,=×,ZÑ,ZˆÔ)Ø×&Ñ&×0Ñ0ˆ�
r7   c                 ó$  — t         j                  j                  j                  |d|j                  ¬«      }t        j
                  || j                  d¬«      \  }}| j                  �&|t        j                  || j                  dd¬«      z  }||fS )Nr   rŽ   rM   rR   T)r�   rJ   Úkeepdim)	rD   r   r”   r•   r@   Útopkr  r
  Únorm)r2   r  Úrouter_top_valueÚrouter_indicess       r6   Úroute_tokens_to_expertszDbrxFFN.route_tokens_to_expertsd  s†   € ÜŸ™×+Ñ+×3Ñ3°MÀqÐP]×PcÑPcÐ3ÓdˆÜ+0¯:©:°mÀTÇZÁZÐUWÔ+XÑ(Ð˜.Ø×,Ñ,Ð8Ø/´%·*±*Ø  D×$EÑ$EÈ2ÐW[ô3ñ  Ðð   Ð/Ð/r7   r}   r9   c                 óv   — | j                  |«      }| j                  |«      \  }}| j                  |||«      }|S rc   )r  r  r	  )r2   r}   r  rå   rä   Úoutputs         r6   rb   zDbrxFFN.forwardm  s<   € ØŸ™ MÓ2ˆØ%)×%AÑ%AÀ-Ó%PÑ"ˆ�{Ø—‘˜m¨[¸-ÓHˆØˆr7   )re   rf   rg   rÂ   r)   r  rD   rh   rl   rb   rn   ro   s   @r6   r  r  Y  s9   ø„ Ù:ô1ò0ð U§\¡\ð °e¸E¿L¹LÈ%Ï,É,Ð<VÑ6W÷ r7   r  c                   óÐ   ‡ — e Zd Zddededz  fˆ fd„Z	 	 ddej                  dej                  dej                  dz  de	dz  d	e
d
eej                  ej                  f   fd„Zˆ xZS )ÚDbrxNormAttentionNormNr"   rŸ   c                 ó  •— t         ‰| �  «        || _        |j                  | _        t	        j
                  |j                  d¬«      | _        t        ||¬«      | _	        t	        j
                  |j                  d¬«      | _
        y )NFr¡   ©r"   rŸ   )r(   r)   rŸ   Úresid_pdropr   Ú	LayerNormr£   Únorm_1rž   ÚattnÚnorm_2©r2   r"   rŸ   r5   s      €r6   r)   zDbrxNormAttentionNorm.__init__u  sc   ø€ Ü‰ÑÔØ"ˆŒØ!×-Ñ-ˆÔÜ—l‘l 6§>¡>¸Ô>ˆŒÜ!ØØô
ˆŒ	ô —l‘l 6§>¡>¸Ô>ˆ�r7   r}   r°   r‰   r±   rŒ   r9   c                 ód  — |}| j                  |«      j                  |j                  «      } | j                  d||||dœ|¤Ž\  }}t        j
                  j                  || j                  | j                  ¬«      }||z   }|}| j                  |«      j                  |j                  «      }||fS ©N)r}   r‰   r°   r±   r�   © )
r  rG   r@   r  r   r”   r‹   r  r‘   r  )r2   r}   r°   r‰   r±   rŒ   Úresidual_statesÚ_s           r6   rb   zDbrxNormAttentionNorm.forward€  s»   € ð (ˆØŸ™ MÓ2×5Ñ5°m×6IÑ6IÓJˆà$˜4Ÿ9™9ð 
Ø'Ø)Ø 3Ø+ñ	
ð
 ñ
Ñˆ�qô Ÿ™×-Ñ-¨m¸t×?OÑ?OÐZ^×ZgÑZgÐ-ÓhˆØ%¨Ñ7ˆà'ˆØŸ™ MÓ2×5Ñ5°m×6IÑ6IÓJˆà Ð-Ð-r7   rc   )NN)re   rf   rg   r   rk   r)   rD   rh   rÃ   r
   r   rl   rb   rn   ro   s   @r6   r  r  t  sŠ   ø„ ñ	?˜zð 	?°c¸D±jõ 	?ð /3Ø(,ñ.à—|‘|ð.ð #×-Ñ-ð.ð Ÿ™ tÑ+ð	.ð
  ™ð.ð ð.ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷.r7   r  c                   óš   ‡ — e Zd Zdedefˆ fd„Z	 	 	 ddej                  dej                  dz  dej                  dz  de	dz  d	e
f
d
„Zˆ xZS )Ú	DbrxBlockr"   rŸ   c                 óº   •— t         ‰| �  «        |j                  | _        |j                  | _        || _        t        ||¬«      | _        t        |¬«      | _	        y )Nr  ©r"   )
r(   r)   r£   rB   r  rŸ   r  Únorm_attn_normr  Úffnr  s      €r6   r)   zDbrxBlock.__init__�  sP   ø€ Ü‰ÑÔØ!Ÿ>™>ˆÔØ!×-Ñ-ˆÔØ"ˆŒÜ3ØØô
ˆÔô  &Ô)ˆ�r7   Nr}   r‰   r°   r±   rŒ   c                 óÒ   —  | j                   d||||dœ|¤Ž\  }}| j                  |«      }t        j                  j	                  || j
                  | j                  ¬«      }||z   }|S r!  )r)  r*  r   r”   r‹   r  r‘   )r2   r}   r‰   r°   r±   rŒ   Úresid_statess          r6   rb   zDbrxBlock.forward¨  s~   € ð ': d×&9Ñ&9ð '
Ø'Ø)Ø 3Ø+ñ	'
ð
 ñ'
Ñ#ˆ�mð Ÿ™ Ó/ˆÜŸ™×-Ñ-¨m¸t×?OÑ?OÐZ^×ZgÑZgÐ-ÓhˆØ$ }Ñ4ˆØÐr7   rd   )re   rf   rg   r   rk   r)   rD   rh   rÃ   r
   r   rb   rn   ro   s   @r6   r&  r&  œ  sr   ø„ ð	*˜zð 	*°cõ 	*ð /3Ø7;Ø(,ñà—|‘|ðð Ÿ™ tÑ+ðð #×-Ñ-°Ñ4ð	ð
  ™ðð ÷r7   r&  c                   óž   ‡ — e Zd ZU eed<   dZdZdgZdgZdZ	dZ
dZdZdZeedœZ ej$                  «       dej(                  fˆ fd	„«       Zˆ xZS )
ÚDbrxPreTrainedModelr"   ÚtransformerTr&  r±   F)r}   Ú
attentionsr…   c                 ó>  •— t         ‰| �  |«       | j                  j                  }t	        |t
        «      rgt        j                  |j                  d|¬«       t        j                  |j                  d|¬«       t        j                  |j                  d|¬«       y y )Nrµ   )ÚmeanÚstd)r(   Ú_init_weightsr"   Úinitializer_rangerU   rÅ   ÚinitÚnormal_rÍ   rÎ   rÏ   )r2   r…   r3  r5   s      €r6   r4  z!DbrxPreTrainedModel._init_weightsÎ  sj   ø€ ä‰Ñ˜fÔ%Ø�k‰k×+Ñ+ˆÜ�fœmÔ,Ü�L‰L˜Ÿ™¨°#Õ6Ü�L‰L˜Ÿ™¨°#Õ6Ü�L‰L˜Ÿ™¨°#Ö6ð -r7   )re   rf   rg   r   ri   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flex_attnÚ_supports_attention_backendÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphr&  rž   Ú_can_record_outputsrD   rm   r   ÚModuler4  rn   ro   s   @r6   r.  r.  ¾  sx   ø… ØÓØ%ÐØ&*Ð#Ø$˜ÐØ#4Ð"5ÐØÐØ"&ÐØÐØ€NØ"Ðà"Ø#ñÐð
 €U‡]�]ƒ_ð7 B§I¡Iô 7ó ô7r7   r.  c                   ó6  ‡ — e Zd ZdZdefˆ fd„Zdej                  fd„Zdej                  fd„Z	e
ee	 	 	 	 	 	 d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fd„«       «       «       Zˆ xZS )Ú	DbrxModela©  Transformer decoder consisting of *config.num_hidden_layers*. Each layer is a [`DbrxBlock`] layer.

    Args:
        config ([`DbrxConfig`]): Model configuration class with all parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
    r"   c           	      ó,  •— t         ‰| �  |«       |j                  | _        |j                  | _        |j
                  | _        t        |«      | _        t        j                  |j                  |j                  | j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        j"                  |j                  d¬«      | _        d| _        | j)                  «        y c c}w rý   )r(   r)   Úpad_token_idÚpadding_idxÚ
vocab_sizeÚ	emb_pdropr    Ú
rotary_embr   Ú	Embeddingr£   ÚwteÚ
ModuleListÚrangeÚn_layersr&  Úblocksr  Únorm_fÚgradient_checkpointingÚ	post_initr  s      €r6   r)   zDbrxModel.__init__â  sÇ   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒØ×)Ñ)ˆŒÜ-¨fÓ5ˆŒÜ—<‘< × 1Ñ 1°6·>±>À4×CSÑCSÓTˆŒÜ—m‘mÔSXÐY_×YhÑYhÓSiÖ$jÀi¤Y¨v°yÕ%AÒ$jÓkˆŒÜ—l‘l 6§>¡>¸Ô>ˆŒØ&+ˆÔ#ð 	�‰Õùò %ks   Â4Dr9   c                 ó   — | j                   S rc   ©rL  ©r2   s    r6   Úget_input_embeddingszDbrxModel.get_input_embeddingsð  s   € Ø�x‰xˆr7   rˆ   c                 ó   — || _         y rc   rU  ©r2   rˆ   s     r6   Úset_input_embeddingszDbrxModel.set_input_embeddingsó  s	   € Øˆ�r7   NÚ	input_idsr‰   r]   r±   Úinputs_embedsÚ	use_cacherŒ   c           
      ó:  — |d u |d uz  rt        d«      ‚|r|€t        | j                  ¬«      }|€| j                  |«      }|€V|�|j	                  «       nd}t        j                  |j                  d   |j                  ¬«      |z   }|j                  d«      }t        | j                  ||||¬«      }	|}
| j                  |
|«      }| j                  d | j                  j                   D ]  } ||
f||	|||dœ|¤Ž}
Œ | j                  |
«      }
t        |
|¬«      S )	Nz:You must specify exactly one of input_ids or inputs_embedsr(  r   r   )r3   )r"   r\  r‰   r±   r]   )r°   r‰   r]   r±   r]  )Úlast_hidden_stater±   )Ú
ValueErrorr   r"   rL  Úget_seq_lengthrD   rE   rT   r3   rv   r   rJ  rP  Únum_hidden_layersrQ  r   )r2   r[  r‰   r]   r±   r\  r]  rŒ   Úpast_seen_tokensÚcausal_maskr}   r°   Údecoder_layers                r6   rb   zDbrxModel.forwardö  sJ  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZá˜Ð0Ü*°$·+±+Ô>ˆOàÐ Ø ŸH™H YÓ/ˆMàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &ˆð #Ÿo™o¨m¸\ÓJÐà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÐIò 		ˆMÙ)Øðà$7Ø*Ø)Ø /Ø#ñð ñ‰Mð		ð Ÿ™ MÓ2ˆä%Ø+Ø+ô
ð 	
r7   )NNNNNN)re   rf   rg   rÂ   r   r)   r   rK  rW  rZ  r   r   r   rD   rÃ   rh   r
   ÚFloatTensorÚboolr   r   r   rb   rn   ro   s   @r6   rD  rD  Ø  sò   ø„ ñð˜zõ ð b§l¡ló ð¨"¯,©,ó ð  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ5
à×#Ñ# dÑ*ð5
ð Ÿ™ tÑ+ð5
ð ×&Ñ&¨Ñ-ð	5
ð
  ™ð5
ð ×(Ñ(¨4Ñ/ð5
ð ˜$‘;ð5
ð Ð+Ñ,ð5
ð 
 ò5
ó ó ó  ô5
r7   rD  Úgate_logitsrâ   c                 ó¾  — | �t        | t        «      syt        | t        «      rC| d   j                  }t        j                  | D �cg c]  }|j                  |«      ‘Œ c}d¬«      }t        j                  j                  j                  d¬«      }t        j                  ||d¬«      \  }}	t        j                  j                  j                  |	|«      }
|€>t        j                  |
j                  «       d¬«      }t        j                  |d¬«      }�n|j                  \  }}|j                  d   ||z  z  }|ddd…dd…ddf   j                  |||||f«      j                  d||«      j                  «      }t        j                   |
j                  «       |z  d¬«      t        j                   |d¬«      z  }|ddd…dd…df   j                  ||||f«      j                  d|«      j                  |«      }t        j                   ||z  d¬«      t        j                   |d¬«      z  }t        j                   ||j#                  d«      z  «      }||z  S c c}w )aÄ  
    Computes auxiliary load balancing loss as in Switch Transformer - implemented in Pytorch.

    See Switch Transformer (https://huggingface.co/papers/2101.03961) for more details. This function implements the loss
    function presented in equations (4) - (6) of the paper. It aims at penalizing cases where the routing between
    experts is too unbalanced.

    Args:
        gate_logits:
            Logits from the `gate`, should be a tuple of model.config.num_hidden_layers tensors of
            shape [batch_size X sequence_length, num_experts].
        num_experts:
            Number of experts
        top_k:
            The number of experts to route per-token, can be also interpreted as the `top-k` routing
            parameter.
        attention_mask (`torch.Tensor`, *optional*):
            The attention_mask used in forward function
            shape [batch_size X sequence_length] if not None.

    Returns:
        The auxiliary loss.
    Nr   rR   rM   )rU   rl   r3   rD   rY   rG   r   r”   r•   r  rê   r2  rH   rT   rS   r€   rí   rv   )rh  râ   r  r‰   Úcompute_deviceÚ
layer_gateÚconcatenated_gate_logitsÚrouting_weightsr$  Úselected_expertsró   Útokens_per_expertÚrouter_prob_per_expertrñ   Úsequence_lengthrb  Úexpert_attention_maskÚ router_per_expert_attention_maskÚoverall_losss                      r6   Úload_balancing_loss_funcru  1  s9  € ð: Ð¤*¨[¼%Ô"@Øä�+œuÔ%Ø$ Q™×.Ñ.ˆÜ#(§9¡9Ð^iÖ-jÐPZ¨j¯m©m¸NÕ.KÒ-jÐpqÔ#rÐ ä—h‘h×)Ñ)×1Ñ1Ð2JÐPRÐ1ÓS€OäŸ*™* _°eÀÔDÑ€AÐä—(‘(×%Ñ%×-Ñ-Ð.>ÀÓL€KàÐä!ŸJ™J {×'8Ñ'8Ó':ÀÔBÐô "'§¡¨OÀÔ!CÒà&4×&:Ñ&:Ñ#ˆ
�OØ4×:Ñ:¸1Ñ=À*ÈÑB^Ñ_Ðð ˜4¢¢A t¨TÐ1Ñ2ß‰VÐ&¨
°OÀUÈKÐXÓYß‰W�R˜ Ó,ß‰R�Óð	 	ô "ŸI™I k×&7Ñ&7Ó&9Ð<QÑ&QÐWXÔYÔ\a×\eÑ\eØ! qô]
ñ 
Ðð ˜4¢¢A tÐ+Ñ,ß‰VÐ&¨
°OÀ[ÐQÓRß‰W�R˜Ó%ß‰R�Óð	 	)ô "'§¡¨?Ð=]Ñ+]ÐcdÔ!eÔhm×hqÑhqØ,°!ôi
ñ "
Ðô —9‘9Ð.Ð1G×1QÑ1QÐRSÓ1TÑTÓU€LØ˜+Ñ%Ð%ùò[ .ks   ÁIc                   óì  ‡ — e Zd ZddiZddiZddgdgfiZdefˆ fd„Zd	ej                  fd
„Z
dej                  fd„Zd	ej                  fd„Zdej                  fd„Zdefd„Zd	efd„Zee	 	 	 	 	 	 	 	 	 ddej*                  dz  dej,                  dz  dej*                  dz  dedz  dej0                  dz  dej*                  dz  dedz  dedz  deej,                  z  dee   d	efd„«       «       Zˆ xZS ) ÚDbrxForCausalLMzlm_head.weightztransformer.wte.weightÚlm_headÚcolwise_gather_outputr}   Úlogitsr"   c                 óŠ  •— t         ‰| �  |«       t        |«      | _        |j                  | _        t        j                  |j                  |j                  d¬«      | _        |j                  j                  | _        |j                  j                  | _        |j                  j                  | _        | j!                  «        y rý   )r(   r)   rD  r/  rH  r   r­   rB   rx  r  Úmoe_loss_weightÚrouter_aux_loss_coefrÊ   râ   r  Únum_experts_per_tokrS  rã   s     €r6   r)   zDbrxForCausalLM.__init__ˆ  s�   ø€ Ü‰Ñ˜Ô Ü$ VÓ,ˆÔØ ×+Ñ+ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒØ$*×$5Ñ$5×$EÑ$EˆÔ!Ø!×,Ñ,×<Ñ<ˆÔØ#)×#4Ñ#4×#>Ñ#>ˆÔ Ø�‰Õr7   r9   c                 ó6   — | j                   j                  «       S rc   )r/  rW  rV  s    r6   rW  z$DbrxForCausalLM.get_input_embeddings’  s   € Ø×Ñ×4Ñ4Ó6Ð6r7   rˆ   c                 ó:   — | j                   j                  |«       y rc   )r/  rZ  rY  s     r6   rZ  z$DbrxForCausalLM.set_input_embeddings•  s   € Ø×Ñ×-Ñ-¨eÕ4r7   c                 ó   — | j                   S rc   ©rx  rV  s    r6   Úget_output_embeddingsz%DbrxForCausalLM.get_output_embeddings˜  s   € Ø�|‰|Ðr7   Únew_embeddingsc                 ó   — || _         y rc   r‚  )r2   r„  s     r6   Úset_output_embeddingsz%DbrxForCausalLM.set_output_embeddings›  s	   € Ø%ˆ�r7   Údecoderc                 ó   — || _         y rc   ©r/  )r2   r‡  s     r6   Úset_decoderzDbrxForCausalLM.set_decoderž  s
   € Ø"ˆÕr7   c                 ó   — | j                   S rc   r‰  rV  s    r6   Úget_decoderzDbrxForCausalLM.get_decoder¡  s   € Ø×ÑÐr7   Nr[  r‰   r]   r±   r\  Úlabelsr]  Úoutput_router_logitsÚlogits_to_keeprŒ   c
                 ój  — |�|n| j                   j                  } | j                  d|||||||dœ|
¤Ž}|j                  }t	        |	t
        «      rt        |	 d«      n|	}| j                  |dd…|dd…f   «      }d}|� | j                  ||| j                  fi |
¤Ž}d}|rYt        |j                  | j                  | j                  |«      }|�+|| j                  |j                  |j                   «      z  z  }t#        ||||j$                  |j&                  |j(                  |j                  ¬«      S )a‹  
        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]`.

        Example:

        ```python
        >> from transformers import AutoTokenizer, DbrxForCausalLM

        >> model = DbrxForCausalLM.from_pretrained("transformers-community/dbrx-instruct")
        >> tokenizer = AutoTokenizer.from_pretrained("transformers-community/dbrx-instruct")

        >> prompt = "Hey, are you conscious? Can you talk to me?"
        >> inputs = tokenizer(prompt, return_tensors="pt")

        >> # Generate
        >> generate_ids = model.generate(inputs.input_ids, max_length=30)
        >> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
        ```
        N)r[  r‰   r]   r±   r\  r]  rŽ  )ÚlossÚaux_lossrz  r±   r}   r0  r  r"  )r"   rŽ  r/  r_  rU   rk   Úslicerx  Úloss_functionrH  ru  r  râ   r~  r}  rG   r3   r   r±   r}   r0  )r2   r[  r‰   r]   r±   r\  r�  r]  rŽ  r�  rŒ   Úoutputsr}   Úslice_indicesrz  r‘  r’  s                    r6   rb   zDbrxForCausalLM.forward¤  sW  € ðN %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð
 +;¨$×*:Ñ*:ð 	+
ØØ)Ø%Ø+Ø'ØØ!5ñ	+
ð ñ	+
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ% f¨f°d·o±oÑPÈÑPˆDàˆÙÜ/Ø×%Ñ%Ø× Ñ Ø×(Ñ(Øó	ˆHð Ð!Ø˜×1Ñ1°H·K±KÀÇÁÓ4LÑLÑL�ä(ØØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø!×/Ñ/ô
ð 	
r7   )	NNNNNNNNr   ) re   rf   rg   Ú_tied_weights_keysÚ_tp_planÚ_pp_planr   r)   r   rK  rW  rZ  r­   rƒ  r†  rD  rŠ  rŒ  r   r   rD   rÃ   rh   r
   rf  rg  rk   r   r   r   rb   rn   ro   s   @r6   rw  rw  ƒ  s”  ø„ Ø*Ð,DÐEÐØÐ2Ð3€HØ˜_Ð-°¨zÐ:Ð;€Hð˜zõ ð7 b§l¡ló 7ð5¨"¯,©,ó 5ð r§y¡yó ð&°B·I±Ió &ð# 9ó #ð ˜Yó  ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø,0Ø-.ñP
à×#Ñ# dÑ*ðP
ð Ÿ™ tÑ+ðP
ð ×&Ñ&¨Ñ-ð	P
ð
  ™ðP
ð ×(Ñ(¨4Ñ/ðP
ð × Ñ  4Ñ'ðP
ð ˜$‘;ðP
ð # T™kðP
ð ˜eŸl™lÑ*ðP
ð Ð+Ñ,ðP
ð 
#òP
ó ó ôP
r7   rw  )rw  rD  r.  )r   )rµ   )Nr>   N)CÚcollections.abcr   Útypingr   r   rD   r   Ú r   r6  Úactivationsr	   Úcache_utilsr
   r   Ú
generationr   Úintegrationsr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_dbrxr   rB  r    rs   r|   rh   rk   r„   rH   rœ   rž   rÅ   rß   rû   r  r  r&  r.  rD  rl   ru  rw  Ú__all__r"  r7   r6   ú<module>r¬     s.  ðõ* %ß  ã Ý å &Ý !ß .Ý )Ý 4Ý /Ý 9ß Qß Kß FÝ &ß IÑ Iß GÝ 5Ý *ô><˜"Ÿ)™)ô ><òB(ñ Ð*Ó+òó ,ðð2	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(ó%ô2R)�B—I‘Iô R)ôj�B—I‘Iô ô2$�"—)‘)ô $ôN�—‘ô ô"ˆb�i‰iô ô6%.˜BŸI™Iô %.ôPÐ*ô ôD7˜/ô 7ð4 ôU
Ð#ó U
ó ðU
ðt #Ø
Ø*.ñ	O&Ø—‘  e§l¡lÑ 3Ñ3°dÑ:ðO&à�t‘ðO&ð —L‘L 4Ñ'ð	O&ð
 ‡\�\�CÑóO&ôds
Ð)¨?ô s
òl B�r7   