§
    ‚ŠtjÕé  ã                   ó  — d dl Z d dlmZ d dlmZ d dlZd dlmZ d dlmc 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mZmZmZ dd
lmZ ddlmZmZmZ ddl m!Z! ddl"m#Z#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.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8  e-d¬¦  «        e G d„ de#¦  «        ¦   «         ¦   «         Z9 e-d¬¦  «        e G d„ de+¦  «        ¦   «         ¦   «         Z: ed¦  «         G d„ dej;        ¦  «        ¦   «         Z< G d„ d ej;        ¦  «        Z=d!ej>        d"e?d#ej>        fd$„Z@	 	 ddd&ej;        d'ej>        d(ej>        d)ej>        d*ej>        dz  d+eAd,eAd-ej>        dz  fd.„ZB G d/„ d0ej;        ¦  «        ZC G d1„ d2ej;        ¦  «        ZDe G d3„ d4ej;        ¦  «        ¦   «         ZE G d5„ d6ej;        ¦  «        ZF G d7„ d8ej;        ¦  «        ZG G d9„ d:ej;        ¦  «        ZHd;„ ZI ed<¦  «        	 	 ded!ej>        d=ej>        d>ejJ        d?ejJ        dz  d@eKdz  f
dA„¦   «         ZL edB¦  «        	 	 ded!ej>        d>ejJ        d?ejJ        dz  d@eKdz  fdC„¦   «         ZM eeLeMg¦  «         G dD„ dEej;        ¦  «        ¦   «         ZN G dF„ dGe!¦  «        ZOe- G dH„ dIe'¦  «        ¦   «         ZPe- G dJ„ dKeP¦  «        ¦   «         ZQe- G dL„ dMePe¦  «        ¦   «         ZR G dN„ dOej;        ¦  «        ZS G dP„ dQeP¦  «        ZT G dR„ dSej;        ¦  «        ZUdTe?d#eVe?         fdU„ZW	 dfdWe?dXe?dYe?dZe?d#ejX        f
d[„ZY G d\„ d]eP¦  «        ZZ e-d^¬¦  «         G d_„ d`eP¦  «        ¦   «         Z[ e-d^¬¦  «         G da„ dbePe¦  «        ¦   «         Z\g dc¢Z]dS )gé    N)ÚCallable)Ú	dataclassé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_experts_implementationÚuse_kernel_forward_from_hubÚuse_kernel_func_from_hubÚuse_kernelized_func)Úforce_accelerate_hooks)Úcreate_causal_maskÚcreate_recurrent_attention_maskÚ!create_sliding_window_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚBaseModelOutputWithPooling)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚtorch_compilable_check)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚInklingAudioConfigÚInklingConfigÚInklingTextConfigÚInklingVisionConfigzL
    Base class for Inkling outputs, with hidden states and attentions.
    ©Úcustom_introc                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚInklingModelOutputWithPasta  
    image_hidden_states (`torch.FloatTensor`, *optional*):
        A `torch.FloatTensor` of size `(batch_size, num_images, sequence_length, hidden_size)`.
        image_hidden_states of the model produced by the vision encoder and after projecting the last hidden state.
    NÚimage_hidden_states)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   ÚtorchÚFloatTensorÚ__annotations__© ó    új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/inkling/modeling_inkling.pyr(   r(   4   s7   € € € € € € ðð ð 59Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ð8Ð8r2   r(   zS
    Base class for Inkling causal language model (or autoregressive) outputs.
    c                   óÖ   — 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z  ed<   dZeej                 dz  ed<   dZej        dz  ed<   dS )	ÚInklingCausalLMOutputWithPasta8  
    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.text_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.
    image_hidden_states (`torch.FloatTensor`, *optional*):
        A `torch.FloatTensor` of size `(batch_size, num_images, sequence_length, hidden_size)`.
        image_hidden_states of the model produced by the vision encoder after projecting last hidden state.
    NÚlossÚlogitsÚpast_key_valuesÚhidden_statesÚ
attentionsr)   )r*   r+   r,   r-   r6   r.   r/   r0   r7   r8   r   r9   Útupler:   r)   r1   r2   r3   r5   r5   D   sµ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø$(€O�U˜T‘\Ð(Ð(Ñ(Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ø48Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ð8Ð8r2   r5   ÚRMSNormc                   óT   ‡ — e Zd Zd	deddfˆ fd„Zdej        dej        fd„Zd„ Zˆ xZ	S )
ÚInklingRMSNormç�íµ ÷Æ°>ÚepsÚreturnNc                 ó¬   •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        || _        dS )z=
        InklingRMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__ÚnnÚ	Parameterr.   ÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer@   Ú	__class__s      €r3   rD   zInklingRMSNorm.__init__d   sD   ø€ õ 	‰Œ×ÒÑÔÐÝ”l¥5¤:¨kÑ#:Ô#:Ñ;Ô;ˆŒØ #ˆÔÐÐr2   r9   c                 ó  — |j         }|                     t          j        ¦  «        }|                     d¦  «                             dd¬¦  «        }|t          j        || j        z   ¦  «        z  }| j        |                     |¦  «        z  S )Né   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor.   Úfloat32ÚpowÚmeanÚrsqrtrI   rH   )rJ   r9   Úinput_dtypeÚvariances       r3   ÚforwardzInklingRMSNorm.forwardl   s|   € Ø#Ô)ˆØ%×(Ò(­¬Ñ7Ô7ˆØ ×$Ò$ QÑ'Ô'×,Ò,¨R¸Ð,Ñ>Ô>ˆØ%­¬°H¸tÔ?TÑ4TÑ(UÔ(UÑUˆØŒ{˜]×-Ò-¨kÑ:Ô:Ñ:Ð:r2   c                 óH   — t          | j        j        ¦  «        › d| j        › �S )Nz, eps=)r;   rH   ÚshaperI   )rJ   s    r3   Ú
extra_reprzInklingRMSNorm.extra_reprs   s&   € Ý˜œÔ)Ñ*Ô*ÐIÐI°$Ô2GÐIÐIÐIr2   )r?   )
r*   r+   r,   ÚfloatrD   r.   ÚTensorrY   r\   Ú__classcell__©rL   s   @r3   r>   r>   b   sŒ   ø€ € € € € ð$ð $¨ð $¸$ð $ð $ð $ð $ð $ð $ð; U¤\ð ;°e´lð ;ð ;ð ;ð ;ðJð Jð Jð Jð Jð Jð Jr2   r>   c                   ól   ‡ — e Zd ZdZdedefˆ fd„Zdej        dej        dej        dej        fd	„Zˆ xZ	S )
ÚInklingRelativeLogitsa|  hidden states conditioned relative position bias. `proj` is a trained bank of bias-vs-distance profiles; each token's
    `relative_states` mixes them into one bias value per backward distance
    (`sglang RelLogitsProj` + the FA4 `score_mod`, materialized densely). The bias is zero
    outside `0 <= distance < rel_extent`; causality and padding stay in the attention mask.
    Úd_relÚ
rel_extentc                 ó®   •— t          ¦   «                              ¦   «          || _        t          j        t          j        ||¦  «        ¦  «        | _        d S ©N)rC   rD   rd   rE   rF   r.   ÚemptyÚproj)rJ   rc   rd   rL   s      €r3   rD   zInklingRelativeLogits.__init__~   sA   ø€ Ý‰Œ×ÒÑÔÐØ$ˆŒÝ”L¥¤¨U°JÑ!?Ô!?Ñ@Ô@ˆŒ	ˆ	ˆ	r2   Úrelative_statesÚquery_positionsÚkey_positionsrA   c                 óx  — || j         z                       dd¦  «        }|d d …d f         |d d d …f         z
  d d d d …d d …f         } |                     d| j        dz
  ¦  «        j        g |j        d d…         ¢d‘d‘R Ž }|                     d|¦  «        }|                     |dk     || j        k    z  d¦  «        S )Nr    rN   r   rO   ç        )rh   Ú	transposeÚclamprd   Úexpandr[   ÚgatherÚmasked_fill)rJ   ri   rj   rk   Ú
rel_logitsÚdistanceÚgather_indexÚposition_biass           r3   rY   zInklingRelativeLogits.forwardƒ   sä   € ð &¨¬	Ñ1×<Ò<¸QÀÑBÔBˆ
Ø# A A A t GÔ,¨}¸TÀ1À1À1¸WÔ/EÑEÀtÈTÐSTÐSTÐSTÐVWÐVWÐVWÐGWÔXˆØD�x—~’~ a¨¬¸1Ñ)<Ñ=Ô=ÔDÐcÀjÔFVÐWYÐXYÐWYÔFZÐcÐ\^ÐcÐ`bÐcÐcÐcˆØ"×)Ò)¨"¨lÑ;Ô;ˆØ×(Ò(¨(°Qª,¸8ÀtÄÒ;VÑ)WÐY\Ñ]Ô]Ð]r2   )
r*   r+   r,   r-   ÚintrD   r.   r^   rY   r_   r`   s   @r3   rb   rb   w   s«   ø€ € € € € ðð ðA˜cð A¨sð Að Að Að Að Að Að
^àœð^ð œð^ð ”|ð	^ð
 
Œð^ð ^ð ^ð ^ð ^ð ^ð ^ð ^r2   rb   r9   Ún_reprA   c                 ó¸   — | j         \  }}}}|dk    r| S | dd…dd…ddd…dd…f                              |||||¦  «        } |                      |||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)r[   rp   Úreshape)r9   rx   ÚbatchÚnum_key_value_headsÚslenÚhead_dims         r3   Ú	repeat_kvr   ‘   s„   € ð
 2?Ô1DÑ.€EÐ  hØ�‚z€zØÐØ! ! ! ! Q Q Q¨¨a¨a¨a°°°Ð"2Ô3×:Ò:¸5ÐBUÐW\Ð^bÐdlÑmÔm€MØ× Ò  Ð(;¸eÑ(CÀTÈ8ÑTÔTÐTr2   rm   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutrv   c                 ó"  — t          || j        ¦  «        }	t          || j        ¦  «        }
t          j        ||	                     dd¦  «        ¦  «        |z  }|�||z   }|�||z   }t
          j                             |dt          j        ¬¦  «         	                    |j
        ¦  «        }t
          j                             ||| j        ¬¦  «        }t          j        ||
¦  «        }|                     dd¦  «                             ¦   «         }||fS )NrN   r   rO   )ÚdimrQ   )ÚpÚtrainingr    )r   Únum_key_value_groupsr.   Úmatmulrn   rE   Ú
functionalÚsoftmaxrS   rR   rQ   r†   rŠ   Ú
contiguous)r€   r�   r‚   rƒ   r„   r…   r†   rv   ÚkwargsÚ
key_statesÚvalue_statesÚattn_weightsÚattn_outputs                r3   Úeager_attention_forwardr•   �   sù   € õ ˜3 Ô ;Ñ<Ô<€JÝ˜U FÔ$?Ñ@Ô@€Lå”<  z×';Ò';¸A¸qÑ'AÔ'AÑBÔBÀWÑL€LØÐ Ø# mÑ3ˆØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€LÝ”,˜|¨\Ñ:Ô:€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r2   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	e
         d
eej        ej        dz  f         fd„Zˆ xZS )ÚInklingAttentionÚconfigÚ	layer_idxc                 ó2  •— t          ¦   «                              ¦   «          || _        || _        |j        | j                 dk    | _        | j        r|j        n|j        | _        | j        r|j        n|j	        | _
        | j        r|j        n|j        | _        | j
        | j        z  | _        | j        r|j        nd | _        | j        r|j        n|j        | _        d| j        z  | _        |j        | _        d| _        t)          j        |j        | j
        | j        z  d¬¦  «        | _        t)          j        |j        | j        | j        z  d¬¦  «        | _        t)          j        |j        | j        | j        z  d¬¦  «        | _        t)          j        |j        | j
        |j        z  d¬¦  «        | _        t)          j        | j
        | j        z  |j        d¬¦  «        | _        t;          | j        | j        z  |j        |d¬¦  «        | _        t;          | j        | j        z  |j        |d¬¦  «        | _         tC          | j        |j"        ¬	¦  «        | _#        tC          | j        |j"        ¬	¦  «        | _$        tK          |j        | j        ¦  «        | _&        d S )
NÚhybrid_slidingç      ð?TF©Úbiasr   )Úconv_idxr    ©r@   )'rC   rD   r˜   r™   Úlayer_typesÚ
is_slidingÚswa_head_dimr~   Úswa_num_attention_headsÚnum_attention_headsÚ	num_headsÚswa_num_key_value_headsr|   r‹   Úsliding_window_sizeÚsliding_windowrd   r…   Úattention_dropoutÚ	is_causalrE   ÚLinearrK   Úq_projÚk_projÚv_projrc   Úr_projÚo_projÚInklingShortConvolutionÚsconv_kernel_sizeÚk_sconvÚv_sconvr>   Úrms_norm_epsÚq_normÚk_normrb   Úrel_logits_proj©rJ   r˜   r™   rL   s      €r3   rD   zInklingAttention.__init__º   sW  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒØ Ô,¨T¬^Ô<Ð@PÒPˆŒØ/3¬ÐS˜Ô+Ð+ÀFÄOˆŒØ;?¼?Ðj˜Ô7Ð7ÐPVÔPjˆŒØEIÄ_Ð#t 6Ô#AÐ#AÐZ`ÔZtˆÔ Ø$(¤N°dÔ6NÑ$NˆÔ!Ø<@¼OÐU˜fÔ8Ð8ÐQUˆÔØ8<¼Ð^˜&Ô4Ð4ÈVÔM^ˆŒà˜Tœ]Ñ*ˆŒØ!'Ô!9ˆÔØˆŒå”i Ô 2°D´NÀTÄ]Ñ4RÐY^Ð_Ñ_Ô_ˆŒÝ”i Ô 2°DÔ4LÈtÌ}Ñ4\ÐchÐiÑiÔiˆŒÝ”i Ô 2°DÔ4LÈtÌ}Ñ4\ÐchÐiÑiÔiˆŒÝ”i Ô 2°D´NÀVÄ\Ñ4QÐX]Ð^Ñ^Ô^ˆŒÝ”i ¤°´Ñ >ÀÔ@RÐY^Ð_Ñ_Ô_ˆŒÝ.ØÔ$ t¤}Ñ4°fÔ6NÐPYÐdeð
ñ 
ô 
ˆŒõ /ØÔ$ t¤}Ñ4°fÔ6NÐPYÐdeð
ñ 
ô 
ˆŒõ % T¤]¸Ô8KÐLÑLÔLˆŒÝ$ T¤]¸Ô8KÐLÑLÔLˆŒÝ4°V´\À4Ä?ÑSÔSˆÔÐÐr2   Nr9   r„   Ú	conv_maskr8   r�   rA   c                 ó"  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «        }|                      |                      |¦  «        ||¬¦  «        }	|                      |                      |¦  «        ||¬¦  «        }
|                      |¦  «        }|                      | 	                    |¦  «        ¦  «         
                    dd¦  «        }|                      |	 	                    |¦  «        ¦  «         
                    dd¦  «        }	|
 	                    |¦  «         
                    dd¦  «        }
|j         d         }|�X|                     || j        ¦  «        \  }}|                     | j        ¦  «        }|                     |	|
| j        ¦  «        \  }	}
n|	j         d         }d\  }}t!          j        ||j        ¬¦  «        |z   }t!          j        ||j        ¬¦  «        |z   } |j	        g |¢| j        ‘d‘R Ž }|                      |||¦  «        }| j        sÞ| j        j        �Ò|dz                        ¦   «         }d| j        j        t!          j        || j        j        z                       d¬¦  «        ¦  «        z  z   }| 	                    dddd¦  «        }|                     ¦   «         |z                       |j        ¦  «        }|                     ¦   «         |z                       |j        ¦  «        }t=          j        | j        j         tB          ¦  «        } || ||	|
|f| j"        sd	n| j#        | j$        | j%        |d
œ|¤Ž\  }} |j&        g |¢d‘R Ž  '                    ¦   «         }|  (                    |¦  «        }||fS )NrO   ©r8   r»   r    rN   )r   r   ©Údevicerœ   )Úminrm   )r†   r…   r©   rv   ))r[   r~   r­   r´   r®   rµ   r¯   r°   r·   Úviewrn   r¸   Úget_mask_sizesr™   Úget_query_offsetÚupdater.   Úaranger¿   r¦   r¹   r¢   r˜   Úlog_scaling_n_floorr]   Úlog_scaling_alphaÚlogro   rR   rQ   r   Úget_interfaceÚ_attn_implementationr•   rŠ   rª   r…   r©   rz   r�   r±   )rJ   r9   r„   r»   r8   r�   Úinput_shapeÚhidden_shapeÚquery_statesr‘   r’   ri   Úq_lengthÚ	kv_lengthÚ	kv_offsetÚq_offsetÚkv_positionsÚq_positionsrv   Úeffective_nÚtauÚattention_interfacer”   r“   s                           r3   rY   zInklingAttention.forwardÙ   s   € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1ˆØ—\’\ $§+¢+¨mÑ"<Ô"<ÈoÐir�\ÑsÔsˆ
Ø—|’| D§K¢K°Ñ$>Ô$>ÐP_Ðkt�|ÑuÔuˆØŸ+š+ mÑ4Ô4ˆà—{’{ <×#4Ò#4°\Ñ#BÔ#BÑCÔC×MÒMÈaÐQRÑSÔSˆØ—[’[ §¢°Ñ!>Ô!>Ñ?Ô?×IÒIÈ!ÈQÑOÔOˆ
Ø#×(Ò(¨Ñ6Ô6×@Ò@ÀÀAÑFÔFˆàÔ% aÔ(ˆØÐ&à#2×#AÒ#AÀ(ÈDÌNÑ#[Ô#[Ñ ˆI�yØ&×7Ò7¸¼ÑGÔGˆHà'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜˜à"Ô(¨Ô+ˆIØ"&ÑˆH�iå”| I°mÔ6JÐKÑKÔKÈiÑWˆÝ”l 8°MÔ4HÐIÑIÔIÈHÑTˆØ.˜/Ô.ÐP°ÐP¸T¼^ÐPÈRÐPÐPÐPˆØ×,Ò,¨_¸kÈ<ÑXÔXˆð Œð 	R 4¤;Ô#BÐ#NØ&¨™?×1Ò1Ñ3Ô3ˆKØ˜œÔ5½¼	Ø˜tœ{Ô>Ñ>×EÒEÈ#ÐEÑNÔNñ9ô 9ñ ñ ˆCð —(’(˜1˜a  QÑ'Ô'ˆCØ(×.Ò.Ñ0Ô0°3Ñ6×:Ò:¸<Ô;MÑNÔNˆLØ*×0Ò0Ñ2Ô2°SÑ8×<Ò<¸]Ô=PÑQÔQˆMå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð%
ð  $œ}ÐH�C�C°$Ô2HØ”LØÔ.Ø'ð%
ð %
ð ð%
ð %
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r2   ©NN)r*   r+   r,   r#   rw   rD   r.   r^   r   r   r   r;   rY   r_   r`   s   @r3   r—   r—   ¹   sì   ø€ € € € € ðTÐ0ð T¸Sð Tð Tð Tð Tð Tð TðF *.Ø(,ðA)ð A)à”|ðA)ð œ tÑ+ðA)ð ”< $Ñ&ð	A)ð
  ™ðA)ð Ð+Ô,ðA)ð 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ðA)ð A)ð A)ð A)ð A)ð A)ð A)ð A)r2   r—   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )Ú
InklingMLPr˜   c                 óî  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _	        t          |j                 | _        t          j        t          j        d¦  «        ¦  «        | _        d S )NFr�   r    )rC   rD   r˜   rK   Úintermediate_sizerE   r¬   Ú	gate_projÚup_projÚ	down_projr   Ú
hidden_actÚact_fnrF   r.   rG   Úglobal_scale©rJ   r˜   rL   s     €r3   rD   zInklingMLP.__init__  sÂ   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ!Ô-ˆÔØ!'Ô!9ˆÔÝœ 4Ô#3°TÔ5KÐRWÐXÑXÔXˆŒÝ”y Ô!1°4Ô3IÐPUÐVÑVÔVˆŒÝœ 4Ô#9¸4Ô;KÐRWÐXÑXÔXˆŒÝ˜VÔ.Ô/ˆŒÝœL­¬°A©¬Ñ7Ô7ˆÔÐÐr2   r9   rA   c                 ó¸   — |                       |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        }|| j        z  S rf   )rÞ   rà   rÜ   rÝ   rá   ©rJ   r9   s     r3   rY   zInklingMLP.forward)  sN   € ØŸš t§{¢{°4·>²>À-Ñ3PÔ3PÑ'QÔ'QÐTX×T`ÒT`ÐanÑToÔToÑ'oÑpÔpˆØ˜tÔ0Ñ0Ð0r2   )	r*   r+   r,   r#   rD   r.   r^   rY   r_   r`   s   @r3   rÙ   rÙ     sk   ø€ € € € € ð	8Ð0ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð1 U¤\ð 1°e´lð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1r2   rÙ   c                   óh   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        dej        dej        fd„Zˆ xZ	S )	ÚInklingExpertsz2Collection of expert weights stored as 3D tensors.r˜   c                 ó´  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        t          j	        t          j        | j        d| j        z  | j        ¦  «        ¦  «        | _        t          j	        t          j        | j        | j        | j        ¦  «        ¦  «        | _        t          |j                 | _        d S )NrN   )rC   rD   Ún_routed_expertsÚnum_expertsrK   Ú
hidden_dimÚmoe_intermediate_sizeÚintermediate_dimrE   rF   r.   rg   Úgate_up_projrÞ   r   rß   rà   râ   s     €r3   rD   zInklingExperts.__init__2  s£   ø€ Ý‰Œ×ÒÑÔÐØ!Ô2ˆÔØ Ô,ˆŒØ &Ô <ˆÔÝœL­¬°TÔ5EÀqÈ4ÔK`ÑG`ÐbfÔbqÑ)rÔ)rÑsÔsˆÔÝœ¥e¤k°$Ô2BÀDÄOÐUYÔUjÑ&kÔ&kÑlÔlˆŒÝ˜VÔ.Ô/ˆŒˆˆr2   r9   Útop_k_indexÚtop_k_weightsrA   c                 ó€  — t          j        |¦  «        }t          j        ¦   «         5  t           j        j                             || j        ¬¦  «        }|                     ddd¦  «        }t          j        | 	                    d¬¦  «        d¦  «         
                    ¦   «         }d d d ¦  «         n# 1 swxY w Y   |D ]þ}|d         }|| j        k    rŒt          j        ||         ¦  «        \  }}	||	         }
t          j                             |
| j        |         ¦  «                             dd¬¦  «        \  }}|                      |¦  «        |z  }t          j                             || j        |         ¦  «        }|||	|d f         z  }|                     d|	|                     |j        ¦  «        ¦  «         Œÿ|S )N)Únum_classesrN   r    r   )rO   éþÿÿÿ©rˆ   rO   )r.   Ú
zeros_likeÚno_gradrE   r�   Úone_hotré   ÚpermuteÚgreaterÚsumÚnonzeroÚwhereÚlinearrí   Úchunkrà   rÞ   Ú
index_add_rR   rQ   )rJ   r9   rî   rï   Úfinal_hidden_statesÚexpert_maskÚ
expert_hitÚ
expert_idxÚ	top_k_posÚ	token_idxÚcurrent_stateÚgateÚupÚcurrent_hidden_statess                 r3   rY   zInklingExperts.forward;  sø  € õ $Ô.¨}Ñ=Ô=ÐÝŒ]‰_Œ_ð 	Sð 	SÝœ(Ô-×5Ò5°kÈtÔO_Ð5Ñ`Ô`ˆKØ%×-Ò-¨a°°AÑ6Ô6ˆKÝœ {§¢¸8 Ñ'DÔ'DÀaÑHÔH×PÒPÑRÔRˆJð	Sð 	Sð 	Sñ 	Sô 	Sð 	Sð 	Sð 	Sð 	Sð 	Sð 	Søøøð 	Sð 	Sð 	Sð 	Sð
 %ð 
	nð 
	nˆJØ# AœˆJØ˜TÔ-Ò-Ð-ØÝ#(¤;¨{¸:Ô/FÑ#GÔ#GÑ ˆI�yØ)¨)Ô4ˆMÝ”}×+Ò+¨M¸4Ô;LÈZÔ;XÑYÔY×_Ò_Ð`aÐgiÐ_ÑjÔj‰HˆD�"Ø$(§K¢K°Ñ$5Ô$5¸Ñ$:Ð!Ý$&¤M×$8Ò$8Ð9NÐPTÔP^Ð_iÔPjÑ$kÔ$kÐ!Ø$9¸MÈ)ÐU^Ð`dÐJdÔ<eÑ$eÐ!Ø×*Ò*¨1¨iÐ9N×9QÒ9QÐReÔRkÑ9lÔ9lÑmÔmÐmÐmà"Ð"s   ¨A>B2Â2B6Â9B6)
r*   r+   r,   r-   r#   rD   r.   r^   rY   r_   r`   s   @r3   ræ   ræ   .  s�   ø€ € € € € à<Ð<ð0Ð0ð 0ð 0ð 0ð 0ð 0ð 0ð#à”|ð#ð ”\ð#ð ”|ð	#ð
 
Œð#ð #ð #ð #ð #ð #ð #ð #r2   ræ   c                   óZ   ‡ — e Zd Zˆ fd„Zdeej        ej        ej        f         fd„Zˆ xZS )ÚInklingTopkRouterc                 ó
  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        | j        | j        z   | _        |j        | _        |j        | _        |j	        | _
        t          j        t          j        | j        |j        ¦  «        ¦  «        | _        t          j        t          j        d¦  «        ¦  «        | _        t          j        t          j        | j        ¦  «        ¦  «        | _        d S ©Nr    )rC   rD   rè   ré   Ún_shared_expertsÚn_total_expertsrK   rê   Úroute_scaleÚnum_experts_per_tokÚtop_krE   rF   r.   rg   rH   rG   rá   Úe_score_correction_biasrâ   s     €r3   rD   zInklingTopkRouter.__init__W  sÃ   ø€ Ý‰Œ×ÒÑÔÐØ!Ô2ˆÔØ &Ô 7ˆÔØ#Ô/°$Ô2GÑGˆÔØ Ô,ˆŒØ!Ô-ˆÔØÔ/ˆŒ
å”l¥5¤;¨tÔ/CÀVÔEWÑ#XÔ#XÑYÔYˆŒÝœL­¬°A©¬Ñ7Ô7ˆÔÝ')¤|µE´KÀÔ@PÑ4QÔ4QÑ'RÔ'RˆÔ$Ð$Ð$r2   rA   c                 óð  — |                      d| j        ¦  «        }t          j        || j        ¦  «        }|                     ¦   «         }|dd | j         …f         }|| j        z   }t          j	        || j
        dd¬¦  «        d         }|dd | j         …f         }|d| j         d …f         }	t          j        |                     d|¦  «        |	gd¬¦  «        }
t          j        |
¦  «        }t          j        |t          j        |dd¬¦  «        z
  ¦  «        }|| j        z  | j        z  }|d| j         d …f                              ¦   «         }|dd | j
        …f                              ¦   «         }||||fS )	NrO   .F)rˆ   Úsortedr    ró   T)rˆ   rP   )rz   rê   ÚFrü   rH   Úsigmoidr  r  r.   Útopkr  Úcatrq   Ú
logsigmoidÚexpÚ	logsumexpr  rá   r�   )rJ   r9   ÚflatÚrouter_logitsÚscoresÚrouted_scoresÚscores_for_choiceÚtopk_indicesÚrouted_logitsÚshared_logitsÚtopk_logitsÚtopk_log_probsÚtopk_weightsÚshared_gammass                 r3   rY   zInklingTopkRouter.forwardd  sŒ  € Ø×$Ò$ R¨¬Ñ9Ô9ˆÝœ  t¤{Ñ3Ô3ˆð ×&Ò&Ñ(Ô(ˆØ˜sÐ$< tÔ'<Ð&<Ð$<Ð<Ô=ˆØ)¨DÔ,HÑHÐÝ”zÐ"3°T´ZÀRÐPUÐVÑVÔVÐWXÔYˆà% cÐ+C¨dÔ.CÐ-CÐ+CÐ&CÔDˆØ% c¨DÔ,AÐ+AÐ+CÐ+CÐ&CÔDˆÝ”i ×!5Ò!5°b¸,Ñ!GÔ!GÈÐ WÐ]_Ð`Ñ`Ô`ˆÝœ kÑ2Ô2ˆÝ”y µ%´/À.ÐVXÐbfÐ2gÑ2gÔ2gÑ!gÑhÔhˆà# dÔ&6Ñ6¸Ô9JÑJˆà$ S¨4Ô+@Ð*@Ð*BÐ*BÐ%BÔC×NÒNÑPÔPˆØ# C¨¨4¬:¨Ð$5Ô6×AÒAÑCÔCˆà˜l¨L¸-ÐGÐGr2   )	r*   r+   r,   rD   r;   r.   r^   rY   r_   r`   s   @r3   r
  r
  V  ss   ø€ € € € € ðSð Sð Sð Sð SðH¨¨e¬l¸E¼LÈ%Ì,Ð.VÔ(Wð Hð Hð Hð Hð Hð Hð Hð Hr2   r
  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚInklingSharedExpertsc                 óæ  •— t          ¦   «                              ¦   «          |j        | _        |j        }t	          j        t          j        |j        ||j        ¦  «        ¦  «        | _	        t	          j        t          j        |j        ||j        ¦  «        ¦  «        | _
        t	          j        t          j        |j        |j        |¦  «        ¦  «        | _        t          |j                 | _        d S rf   )rC   rD   r  rë   rE   rF   r.   rg   rK   rÜ   rÝ   rÞ   r   rß   rà   )rJ   r˜   rì   rL   s      €r3   rD   zInklingSharedExperts.__init__}  s¶   ø€ Ý‰Œ×ÒÑÔÐØ &Ô 7ˆÔØ!Ô7Ðõ
 œ¥e¤k°&Ô2IÐK[Ð]cÔ]oÑ&pÔ&pÑqÔqˆŒÝ”|¥E¤K°Ô0GÐIYÐ[aÔ[mÑ$nÔ$nÑoÔoˆŒÝœ¥e¤k°&Ô2IÈ6ÔK]Ð_oÑ&pÔ&pÑqÔqˆŒÝ˜VÔ.Ô/ˆŒˆˆr2   c                 óÒ  — |j         }|                     dd|d         ¦  «                             | j        dd¦  «        }|                     d| j        d¦  «                             dd¦  «        }t          j        || j                             dd¦  «        ¦  «        }t          j        || j                             dd¦  «        ¦  «        }|  	                    |¦  «        |z  |z  }t          j        || j
                             dd¦  «        ¦  «        }|                     ¦   «                              d¬¦  «                             |j        ¦  «        }|                     |¦  «        S )Nr    rO   r   rN   ró   )r[   rz   rp   r  rn   r.   ÚbmmrÜ   rÝ   rà   rÞ   r]   rù   rR   rQ   rÁ   )	rJ   r9   ÚgammasrË   r  r  Ú	activatedÚdownÚouts	            r3   rY   zInklingSharedExperts.forwardŠ  s)  € Ø#Ô)ˆØ%×-Ò-¨a°°[À´_ÑEÔE×LÒLÈTÔMbÐdfÐhjÑkÔkˆØ—’  DÔ$9¸1Ñ=Ô=×GÒGÈÈ1ÑMÔMˆåŒy˜¨¬×(@Ò(@ÀÀAÑ(FÔ(FÑGÔGˆÝŒY�} d¤l×&<Ò&<¸QÀÑ&BÔ&BÑCÔCˆØ—K’K Ñ%Ô%¨Ñ*¨VÑ3ˆ	ÝŒy˜ D¤N×$<Ò$<¸QÀÑ$BÔ$BÑCÔCˆà�jŠj‰lŒl×Ò 1ÐÑ%Ô%×(Ò(¨Ô)<Ñ=Ô=ˆØ�xŠx˜Ñ$Ô$Ð$r2   ©r*   r+   r,   rD   rY   r_   r`   s   @r3   r)  r)  |  sG   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð%ð %ð %ð %ð %ð %ð %r2   r)  c                   ó8   ‡ — e Zd ZdZˆ fd„Zdej        fd„Zˆ xZS )Ú
InklingMoEz7Gate -> routed experts (+ shared experts), TML flavour.c                 óÎ   •— t          ¦   «                              ¦   «          || _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        d S rf   )	rC   rD   r˜   r
  r  ræ   Úexpertsr)  Úshared_expertsrâ   s     €r3   rD   zInklingMoE.__init__›  sT   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ% fÑ-Ô-ˆŒ	Ý% fÑ-Ô-ˆŒÝ2°6Ñ:Ô:ˆÔÐÐr2   rA   c                 ó   — |}|j         }|                      |¦  «        \  }}}}|                     d|j         d         ¦  «        } |                      |||¦  «        j        |Ž }||                      ||¬¦  «        z   }|S )NrO   )r-  )r[   r  rÁ   r5  r6  )rJ   r9   Ú	residualsrË   Ú_r&  r!  r'  s           r3   rY   zInklingMoE.forward¢  s‰   € Ø!ˆ	Ø#Ô)ˆØ7;·y²yÀÑ7OÔ7OÑ4ˆˆ<˜ }Ø%×*Ò*¨2¨}Ô/BÀ2Ô/FÑGÔGˆØT˜Ÿš ]°LÀ,ÑOÔOÔTÐVaÐbˆØ%¨×(;Ò(;¸IÈmÐ(;Ñ(\Ô(\Ñ\ˆØÐr2   )	r*   r+   r,   r-   rD   r.   r^   rY   r_   r`   s   @r3   r3  r3  ˜  s[   ø€ € € € € ØAÐAð;ð ;ð ;ð ;ð ;ð¨¬ð ð ð ð ð ð ð ð r2   r3  c                 ó¦   — |�N|j         d         dk    r=|j         d         dk    r,| j        }| |dd…dd…df         z                       |¦  «        } | S )zm
    Tunes out the hidden states for padding tokens, see https://github.com/state-spaces/mamba/issues/66
    Nr    r   )r[   rQ   rR   )r9   r„   rQ   s      r3   Úapply_mask_to_padding_statesr;  ¬  si   € ð
 Ð! nÔ&:¸1Ô&=ÀÒ&AÐ&AÀnÔFZÐ[\ÔF]Ð`aÒFaÐFaØÔ#ˆØ&¨¸¸¸¸1¸1¸1¸d¸
Ô)CÑC×GÒGÈÑNÔNˆàÐr2   Úcausal_conv1d_updateÚ
conv_staterH   rž   Ú
activationc                 óº  — | j         \  }}}|j         d         }t          j        || gd¬¦  «                             |j        ¦  «        }	|                     |	d d …d d …| d …f         ¦  «         t          j        |	|                     d¦  «        |d|¬¦  «        }
|
d d …d d …| d …f         }
|�t          |         |
¦  «        }
|
                     | j        ¦  «        S )NrO   ró   r    r   )ÚpaddingÚgroups)
r[   r.   r  rR   rQ   Úcopy_r  Úconv1dÚ	unsqueezer   )r9   r=  rH   rž   r>  r9  rK   Úseq_lenÚ	state_lenÚhidden_states_newr0  s              r3   r<  r<  ¸  sî   € ð ,Ô1Ñ€A€{�GØÔ  Ô$€Iåœ	 :¨}Ð"=À2ÐFÑFÔF×IÒIÈ&Ì,ÑWÔWÐØ×ÒÐ& q q q¨!¨!¨!¨i¨Z¨[¨[Ð'8Ô9Ñ:Ô:Ð:Ý
Œ(Ð$ f×&6Ò&6°qÑ&9Ô&9¸4ÈÐS^Ð
_Ñ
_Ô
_€CØ
ˆaˆaˆa����W�H�I�IˆoÔ
€CØÐÝ�ZÔ  Ñ%Ô%ˆØ�6Š6�-Ô%Ñ&Ô&Ð&r2   Úcausal_conv1d_fnc                 ó@  — | j         \  }}}|j         d         dz
  }t          j        |                      |j        ¦  «        |                     d¦  «        |||¬¦  «        d d …d d …d |…f         }	|�t          |         |	¦  «        }	|	                     | j        ¦  «        S )NrO   r    )rH   rž   r@  rA  )r[   r  rC  rR   rQ   rD  r   )
r9   rH   rž   r>  r�   r9  rK   rE  r@  r0  s
             r3   rH  rH  Ì  s²   € ð ,Ô1Ñ€A€{�GØŒl˜2Ô Ñ"€Gå
Œ(Ø×Ò˜œÑ&Ô&Ø×Ò Ñ"Ô"ØØØðñ ô ð €a€aˆˆˆˆHˆWˆH€nô€Cð ÐÝ�ZÔ  Ñ%Ô%ˆØ�6Š6�-Ô%Ñ&Ô&Ð&r2   c                   óœ   ‡ — e Zd Zdedededefˆ fd„Z ed¦  «        	 	 ddej        d	edz  d
ej        dz  de	e
         fd„¦   «         Zˆ xZS )r²   rK   Úconv_kernel_sizer™   rŸ   c                 ó¶   •— t          ¦   «                              ¦   «          || _        || _        || _        t          j        |||||dz
  d¬¦  «        | _        d S )Nr    F)Úin_channelsÚout_channelsÚkernel_sizerA  r@  rž   )rC   rD   r™   rŸ   rK  rE   ÚConv1drC  )rJ   rK   rK  r™   rŸ   rL   s        €r3   rD   z InklingShortConvolution.__init__å  sb   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒØ ˆŒØ 0ˆÔå”iØ#Ø$Ø(ØØ$ qÑ(Øð
ñ 
ô 
ˆŒˆˆr2   rC  Nr9   r8   r»   r�   c                 óX  — |j         }|                     ¦   «         }|}t          ||¦  «        }|j        d         }|                     dd¦  «        }|d uo|                     | j        | j        ¦  «        }|ry|dk    rs|j        | j                 j	        s\|j        | j                 j
        | j                 }	t          ||	| j        j                             d¦  «        | j        j        ¦  «        }n‹|�(|                     || j        | j        | j        ¬¦  «        }t%          || j        j                             d¦  «        | j        j        |                     d¦  «        ¬¦  «        }|r|d d …d d …| d …f         }|                     dd¦  «        }||z                        |¬¦  «        }|S )Nr    rN   )Ú	state_idxrK  Úseq_idx)rS  )rQ   )rQ   r]   r;  r[   rn   Úhas_previous_stater™   rŸ   ÚlayersÚrecord_pastÚconv_statesr<  rC  rH   Úsqueezerž   Úupdate_conv_staterK  rH  ÚgetrR   )
rJ   r9   r8   r»   r�   rW   ÚresidualrE  Úuse_precomputed_statesr=  s
             r3   rY   zInklingShortConvolution.forwardô  sÉ  € ð $Ô)ˆØ%×+Ò+Ñ-Ô-ˆà ˆÝ4°]ÀIÑNÔNˆØÔ% aÔ(ˆØ%×/Ò/°°1Ñ5Ô5ˆà!0¸Ð!<ð "
À×AcÒAcØŒN˜DœMñB
ô B
Ðð "ð 	? g°¢l l¸?Ô;QÐRVÔR`Ô;aÔ;m lØ(Ô/°´Ô?ÔKÈDÌMÔZˆJå0Ø˜z¨4¬;Ô+=×+EÒ+EÀaÑ+HÔ+HÈ$Ì+ÔJZñô ˆMˆMð Ð*Ø /× AÒ AØ! 4¤>¸T¼]Ð]aÔ]rð !Bñ !ô !�õ -Ø˜tœ{Ô1×9Ò9¸!Ñ<Ô<¸d¼kÔ>NÐX^×XbÒXbÐclÑXmÔXmðñ ô ˆMð
 &ð ?Ø -¨a¨a¨a°°°°W°H°I°I¨oÔ >�à%×/Ò/°°1Ñ5Ô5ˆØ&¨Ñ1×5Ò5¸KÐ5ÑHÔHˆØÐr2   r×   )r*   r+   r,   rw   rD   r   r.   r^   r   r   r   rY   r_   r`   s   @r3   r²   r²   ã  sÌ   ø€ € € € € ð
 Cð 
¸3ð 
È3ð 
ÐZ]ð 
ð 
ð 
ð 
ð 
ð 
ð Ð˜HÑ%Ô%ð )-Ø)-ð	*ð *à”|ð*ð  ™ð*ð ”< $Ñ&ð	*ð
 Ð+Ô,ð*ð *ð *ñ &Ô%ð*ð *ð *ð *ð *r2   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	e
         d
ej        fd„Zˆ xZS )ÚInklingDecoderLayerr˜   r™   c                 ó&  •— t          ¦   «                              ¦   «          |j        | _        t          ||¦  «        | _        |j        |         dk    rt          |¦  «        | _        nt          |¦  «        | _        t          |j        |j
        ¦  «        | _        t          |j        |j
        ¦  «        | _        |j        |         | _        t          |j        |j        |d¬¦  «        | _        t          |j        |j        |d¬¦  «        | _        d S )NÚsparserN   )r™   rŸ   r   )rC   rD   rK   r—   Ú	self_attnÚmlp_layer_typesr3  ÚmlprÙ   r>   r¶   Úinput_layernormÚpost_attention_layernormr¡   Ú
layer_typer²   rK  Ú
attn_sconvÚ	mlp_sconvrº   s      €r3   rD   zInklingDecoderLayer.__init__#  sù   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔÝ)¨&°)Ñ<Ô<ˆŒàÔ! )Ô,°Ò8Ð8Ý! &Ñ)Ô)ˆDŒHˆHå! &Ñ)Ô)ˆDŒHå-¨fÔ.@À&ÔBUÑVÔVˆÔÝ(6°vÔ7IÈ6ÔK^Ñ(_Ô(_ˆÔ%Ø Ô,¨YÔ7ˆŒÝ1ØÔ Ô 7À9ÐWXð
ñ 
ô 
ˆŒõ 1ØÔ Ô 7À9ÐWXð
ñ 
ô 
ˆŒˆˆr2   Nr9   r„   r»   r8   r�   rA   c                 ó*  — |}|                       |¦  «        } | j        d||||dœ|¤Ž\  }}|                      |||¬¦  «        }||z   }|}|                      |¦  «        }|                      |¦  «        }|                      |||¬¦  «        }||z   }|S )N)r9   r„   r»   r8   r½   r1   )rd  ra  rg  re  rc  rh  )rJ   r9   r„   r»   r8   r�   r[  r9  s           r3   rY   zInklingDecoderLayer.forward7  sÉ   € ð !ˆØ×,Ò,¨]Ñ;Ô;ˆØ)˜4œ>ð 
Ø'Ø)ØØ+ð	
ð 
ð
 ð
ð 
Ñˆ�qð Ÿš¨ÀÐbk˜ÑlÔlˆØ  =Ñ0ˆà ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆØŸš }ÀoÐaj˜ÑkÔkˆØ  =Ñ0ˆØÐr2   )NNN)r*   r+   r,   r#   rw   rD   r.   r^   r   r   r   rY   r_   r`   s   @r3   r^  r^  "  sÆ   ø€ € € € € ð
Ð0ð 
¸Sð 
ð 
ð 
ð 
ð 
ð 
ð. /3Ø)-Ø(,ðð à”|ðð œ tÑ+ðð ”< $Ñ&ð	ð
  ™ðð Ð+Ô,ðð 
Œðð ð ð ð ð ð ð r2   r^  c                   óŒ   ‡ — e Zd ZeZdZdZdgZdgZdZ	dZ
dZdZdZdgZg d¢ZeedœZ ej        ¦   «         ˆ fd	„¦   «         Zˆ xZS )
ÚInklingPreTrainedModelÚmodelTr^  r8   Fzmodel\.mtp\..*)rg  rh  r´   rµ   )r9   r:   c                 ó`  •— t          ¦   «                              |¦  «         | j                             ¦   «         j        }t          |t          ¦  «        rt          j        |j	        d|¬¦  «         d S t          |t          ¦  «        rt          j        |j        ¦  «         d S t          |t          ¦  «        r:t          j        |j        d|¬¦  «         t          j        |j        d|¬¦  «         d S t          |t           ¦  «        rPt          j        |j        d|¬¦  «         t          j        |j        ¦  «         t          j        |j        ¦  «         d S t          |t(          ¦  «        rVt          j        |j        d|¬¦  «         t          j        |j        d|¬¦  «         t          j        |j        d|¬¦  «         d S t          |t.          ¦  «        rVt1          | j        d| j        ¦  «        }t          j        |j        t7          j        |j        ¦  «        |j        z  ¦  «         d S d S )Nrm   )rU   ÚstdÚaudio_config)rC   Ú_init_weightsr˜   Úget_text_configÚinitializer_rangeÚ
isinstancerb   ÚinitÚnormal_rh   rÙ   Úones_rá   ræ   rí   rÞ   r
  rH   Úzeros_r  r)  rÜ   rÝ   ÚInklingAudioModelEmbeddingsÚgetattrrB  Úaudio_tokens_offsetsr.   rÅ   Ú
n_mel_binsÚmel_vocab_size)rJ   r€   rn  ro  rL   s       €r3   rp  z$InklingPreTrainedModel._init_weightsh  s  ø€ å‰Œ×Ò˜fÑ%Ô%Ð%ØŒk×)Ò)Ñ+Ô+Ô=ˆÝ�fÕ3Ñ4Ô4ð 	ÝŒL˜œ¨3°CÐ8Ñ8Ô8Ð8Ð8Ð8Ý˜¥
Ñ+Ô+ð 	ÝŒJ�vÔ*Ñ+Ô+Ð+Ð+Ð+Ý˜¥Ñ/Ô/ð 	ÝŒL˜Ô,°3¸CÐ@Ñ@Ô@Ð@ÝŒL˜Ô)°¸Ð=Ñ=Ô=Ð=Ð=Ð=Ý˜Õ 1Ñ2Ô2ð 	ÝŒL˜œ¨S°cÐ:Ñ:Ô:Ð:ÝŒJ�vÔ*Ñ+Ô+Ð+ÝŒK˜Ô6Ñ7Ô7Ð7Ð7Ð7Ý˜Õ 4Ñ5Ô5ð 	ÝŒL˜Ô)°¸Ð=Ñ=Ô=Ð=ÝŒL˜œ¨c°sÐ;Ñ;Ô;Ð;ÝŒL˜Ô)°¸Ð=Ñ=Ô=Ð=Ð=Ð=Ý˜Õ ;Ñ<Ô<ð 	õ # 4¤;°ÀÄÑLÔLˆLÝŒJØÔ+Ý”˜\Ô4Ñ5Ô5¸Ô8SÑSñô ð ð ð ð		ð 	r2   )r*   r+   r,   r"   Úconfig_classÚbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphÚ_supports_attention_backendÚ"_keys_to_ignore_on_load_unexpectedÚ_keep_in_fp32_modules_strictr^  r—   Ú_can_record_outputsr.   rõ   rp  r_   r`   s   @r3   rk  rk  S  s¶   ø€ € € € € à €LØÐØ&*Ð#Ø.Ð/ÐØ#4Ð"5Ðð !ÐØ€NØÐØ"ÐØ"'ÐØ*;Ð)<Ð&Ø#TÐ#TÐ#TÐ à,Ø&ðð Ðð
 €U„]�_„_ðð ð ð ñ „_ðð ð ð ð r2   rk  c                   óî   ‡ — e Zd ZU eed<   defˆ 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 )ÚInklingTextModelr˜   c                 óô  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        t          j        ‰j        ‰j        | j        ¦  «        | _        t          j	        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          ‰j        ‰j        ¬¦  «        | _        t          ‰j        ‰j        ¬¦  «        | _        d| _        |                      ¦   «          d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r1   )r^  )Ú.0r™   r˜   s     €r3   ú
<listcomp>z-InklingTextModel.__init__.<locals>.<listcomp>�  s$   ø€ ÐeÐeÐe¸	Õ  ¨Ñ3Ô3ÐeÐeÐer2   r    F)rC   rD   Úpad_token_idÚpadding_idxÚ
vocab_sizerE   Ú	EmbeddingrK   Úembed_tokensÚ
ModuleListÚrangeÚnum_hidden_layersrU  r>   r¶   ÚnormÚ
embed_normÚgradient_checkpointingÚ	post_initrâ   s    `€r3   rD   zInklingTextModel.__init__‰  sÜ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø!Ô.ˆÔØ Ô+ˆŒåœL¨Ô):¸FÔ<NÐPTÔP`ÑaÔaˆÔÝ”mØeÐeÐeÐeÅUÈ6ÔKcÑEdÔEdÐeÑeÔeñ
ô 
ˆŒõ # 6Ô#5¸6Ô;NÐOÑOÔOˆŒ	Ý(¨Ô);ÀÔATÐUÑUÔUˆŒØ&+ˆÔ#ð 	�ŠÑÔÐÐÐr2   NÚ	input_idsr„   Úposition_idsr8   Úinputs_embedsÚ	use_cacher�   rA   c                 óâ  — |d u |d uz  rt          d¦  «        ‚|€(|                      |                      |¦  «        ¦  «        }|r|€t          | j        ¬¦  «        }|€V|�|                     ¦   «         nd}t          j        |j        d         |j	        ¬¦  «        |z   }| 
                    d¦  «        }t          |x}	t          ¦  «        s1| j        ||||dœ}
t          di |
¤Žt          di |
¤Žt          di |
¤Ždœ}	|}t!          | j        ¦  «        D ]8\  }}| j        j        |         dk    rd	nd
} ||f|	|         |	d         |dœ|¤Ž}Œ9|                      |¦  «        }t)          ||¬¦  «        S )Nú:You must specify exactly one of input_ids or inputs_embeds)r˜   r   r    r¾   ©r˜   rž  r„   r8   r�  ©Úfull_attentionÚsliding_attentionÚlinear_attentionÚhybridr¤  r¥  r¦  )r„   r»   r8   )Úlast_hidden_stater8   r1   )Ú
ValueErrorr™  r”  r	   r˜   Úget_seq_lengthr.   rÅ   r[   r¿   rD  rs  Údictr   r   r   Ú	enumeraterU  r¡   r˜  r   )rJ   rœ  r„   r�  r8   rž  rŸ  r�   Úpast_seen_tokensÚcausal_mask_mappingÚmask_kwargsr9   ÚiÚdecoder_layerÚattention_types                  r3   rY   zInklingTextModel.forward™  sö  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ŸOšO¨D×,=Ò,=¸iÑ,HÔ,HÑIÔIˆMàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4ˆLõ °Ð?Ð-ÅÑFÔFð 	àœ+Ø!.Ø"0Ø#2Ø ,ðð ˆKõ #5Ð"CÐ"C°{Ð"CÐ"CÝ%FÐ%UÐ%UÈÐ%UÐ%UÝ$CÐ$RÐ$RÀkÐ$RÐ$Rð#ð #Ðð &ˆÝ )¨$¬+Ñ 6Ô 6ð 	ð 	ÑˆAˆ}Ø15´Ô1HÈÔ1KÈxÒ1WÐ1WÐ-Ð-Ð]pˆNØ)˜MØðà2°>ÔBØ-Ð.@ÔAØ /ð	ð ð
 ðð ˆMˆMð Ÿ	š	 -Ñ0Ô0ˆÝ&Ø+Ø+ð
ñ 
ô 
ð 	
r2   )NNNNNN)r*   r+   r,   r#   r0   rD   r   r   r   r.   Ú
LongTensorr^   r   r/   Úboolr   r   r   rY   r_   r`   s   @r3   r‹  r‹  …  s  ø€ € € € € € àÐÐÑðÐ0ð ð ð ð ð ð ð   ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ð6
ð 6
àÔ# dÑ*ð6
ð œ tÑ+ð6
ð Ô&¨Ñ-ð	6
ð
  ™ð6
ð Ô(¨4Ñ/ð6
ð ˜$‘;ð6
ð Ð+Ô,ð6
ð 
!ð6
ð 6
ð 6
ñ „^ñ „_ñ  Ôð6
ð 6
ð 6
ð 6
ð 6
r2   r‹  c                   ó&  ‡ — e Zd ZU i ZddiZddgdgfiZeed<   defˆ fd„Ze	e
	 	 	 	 	 	 	 	 dd	ej        dz  d
ej        dz  dej        dz  de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ˆ xZS )ÚInklingForCausalLMÚlm_headÚrowwise_split_inputr9   r7   r˜   c                 óþ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        t          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S ©NFr�   )
rC   rD   r‹  rl  r’  rE   r¬   rK   r·  r›  râ   s     €r3   rD   zInklingForCausalLM.__init__Ý  sj   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý% fÑ-Ô-ˆŒ
Ø Ô+ˆŒÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr2   Nr   rœ  r„   r�  r8   rž  ÚlabelsrŸ  Úlogits_to_keepr�   rA   c	           
      óÂ  —  | j         d||||||dœ|	¤Ž}
|
j        | j        j        z  }t	          |t
          ¦  «        rt          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }| j        j        }|�||j	        d         k     r|dd|…f         }d}|� | j
        d|||j	        d         dœ|	¤Ž}t          |||
j        |
j        |
j        ¬¦  «        S )a„  
        Example:

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

        >>> model = InklingForCausalLM.from_pretrained("google/gemma-2-9b")
        >>> tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-9b")

        >>> prompt = "What is your favorite condiment?"
        >>> 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]
        "What is your favorite condiment?"
        ```)rœ  r„   r�  r8   rž  rŸ  NrO   .©r7   r»  r’  )r6   r7   r8   r9   r:   r1   )rl  r¨  r˜   Úlogits_mup_width_multiplierrs  rw   Úslicer·  Úunpadded_vocab_sizer[   Úloss_functionr5   r8   r9   r:   )rJ   rœ  r„   r�  r8   rž  r»  rŸ  r¼  r�   Úoutputsr9   Úslice_indicesr7   rÁ  r6   s                   r3   rY   zInklingForCausalLM.forwardæ  s;  € ð> �$”*ð 
ØØ)Ø%Ø+Ø'Øð
ð 
ð ð
ð 
ˆð  Ô1°D´KÔ4[Ñ[ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆØ"œkÔ=ÐØÐ*Ð/BÀVÄ\ÐRTÔEUÒ/UÐ/UØ˜CÐ!5Ð"5Ð!5Ð5Ô6ˆFàˆØÐØ%�4Ô%Ðj¨V¸FÈvÌ|Ð\^ÔO_ÐjÐjÐciÐjÐjˆDå,ØØØ#Ô3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r2   )NNNNNNNr   )r*   r+   r,   Ú_tied_weights_keysÚ_tp_planÚ_pp_planr#   r0   rD   r   r   r.   r³  r^   r   r/   r´  rw   r   r   r5   rY   r_   r`   s   @r3   r¶  r¶  Õ  sb  ø€ € € € € € ð ÐØÐ0Ð1€HØ˜_Ð-°¨zÐ:Ð;€HØÐÐÑðÐ0ð ð ð ð ð ð ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ð9
ð 9
àÔ# dÑ*ð9
ð œ tÑ+ð9
ð Ô&¨Ñ-ð	9
ð
  ™ð9
ð Ô(¨4Ñ/ð9
ð Ô  4Ñ'ð9
ð ˜$‘;ð9
ð ˜eœlÑ*ð9
ð Ð+Ô,ð9
ð 
'ð9
ð 9
ð 9
ñ „^ñ Ôð9
ð 9
ð 9
ð 9
ð 9
r2   r¶  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )rx  c                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        z  |j        ¦  «        | _        |                      dt          j
        |j        ¦  «        |j        z  d¬¦  «         d S )Nrz  F)Ú
persistent)rC   rD   rE   r“  Únum_codebooksÚcodebook_sizerK   Úembed_audio_tokensÚregister_bufferr.   rÅ   râ   s     €r3   rD   z$InklingAudioModelEmbeddings.__init__%  s€   ø€ Ý‰Œ×ÒÑÔÐÝ"$¤,°Ô0DÀvÔG[Ñ0[Ð^dÔ^pÑ"qÔ"qˆÔØ×ÒØ"¥E¤L°Ô1EÑ$FÔ$FÈÔI]Ñ$]Ðjoð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r2   c                 ól   — |                       || j        z   ¦  «        }|                     d¬¦  «        }|S )Nrò   ró   )rÍ  rz  rù   )rJ   rœ  rž  s      r3   rY   z#InklingAudioModelEmbeddings.forward,  s9   € Ø×/Ò/°	¸DÔ<UÑ0UÑVÔVˆØ%×)Ò)¨bÐ)Ñ1Ô1ˆØÐr2   r1  r`   s   @r3   rx  rx  $  sG   ø€ € € € € ð
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð r2   rx  c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚInklingAudioModelr˜   c                 ó¨   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |j        d¬¦  «        | _        d S )Nr?   r    )rC   rD   rx  rÍ  r>   Útext_hidden_sizer˜  râ   s     €r3   rD   zInklingAudioModel.__init__3  sF   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý"=¸fÑ"EÔ"EˆÔÝ" 6Ô#:ÀÐEÑEÔEˆŒ	ˆ	ˆ	r2   Úaudio_input_idsrA   c                 óx   — |                       |¦  «        }|                      |¦  «        }t          ||¬¦  «        S )N©r¨  Úpooler_output)rÍ  r˜  r   )rJ   rÔ  r9   s      r3   rY   zInklingAudioModel.forward8  sC   € Ø×/Ò/°Ñ@Ô@ˆØŸ	š	 -Ñ0Ô0ˆÝ)Ø+Ø'ð
ñ 
ô 
ð 	
r2   )	r*   r+   r,   r!   rD   r.   r^   rY   r_   r`   s   @r3   rÑ  rÑ  2  sr   ø€ € € € € ðFÐ1ð Fð Fð Fð Fð Fð Fð

 u¤|ð 
¸¼ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r2   rÑ  c            
       ó|   ‡ — e Zd Zdededededef
ˆ fd„Zdej        dej        fd	„Zdej        dej        fd
„Z	ˆ xZ
S )ÚInklingVisionEncoderLayerÚ	input_dimÚ
output_dimÚt_foldÚhw_foldÚadd_normc                 óÖ   •— t          ¦   «                              ¦   «          t          j        ||d¬¦  «        | _        |rt          |¦  «        | _        || _        || _        || _	        d S rº  )
rC   rD   rE   r¬   Ú
projectionr>   Ú
layer_normrÝ  rÜ  rÞ  )rJ   rÚ  rÛ  rÜ  rÝ  rÞ  rL   s         €r3   rD   z"InklingVisionEncoderLayer.__init__B  sa   ø€ Ý‰Œ×ÒÑÔÐÝœ) I¨zÀÐFÑFÔFˆŒØð 	9Ý,¨ZÑ8Ô8ˆDŒOØˆŒØˆŒØ ˆŒˆˆr2   r9   rA   c           
      óL  — |j         \  }}}}}|| j        z  }|| j        z  }|| j        z  }	|                     ||| j        || j        |	| j        |¦  «        }|                     dddddddd¦  «        }|                     ||||	| j        | j        z  | j        z  |z  ¦  «        }|S )	z€
        Convert a tensor of shape (B, T, H, W, C) to a tensor of shape (B, T // t, H // hw, W //  hw, C * (t * hw**2))
        r   r    r   é   rN   é   é   é   )r[   rÜ  rÝ  rz   r÷   )
rJ   r9   ÚBÚTÚHÚWÚCÚt_newÚh_newÚw_news
             r3   Úfold_timespace_to_depthz1InklingVisionEncoderLayer.fold_timespace_to_depthK  sÁ   € ð &Ô+‰ˆˆ1ˆa��Aà�T”[Ñ ˆØ�T”\Ñ!ˆØ�T”\Ñ!ˆà%×-Ò-¨a°¸¼ÀUÈDÌLÐZ_ÐaeÔamÐopÑqÔqˆà%×-Ò-¨a°°A°q¸!¸QÀÀ1ÑEÔEˆØ%×-Ò-¨a°¸¸uÀdÄkÐTXÔT`ÑF`ÐcgÔcoÑFoÐrsÑFsÑtÔtˆØÐr2   c                 óæ   — | j         dk    s| j        dk    r|                      |¦  «        }|                      |¦  «        }| j        r)|                      |¦  «        }t          j        |¦  «        }|S r  )rÝ  rÜ  rï  rà  rÞ  rá  r  Úgelurä   s     r3   rY   z!InklingVisionEncoderLayer.forward[  sm   € ØŒ<˜!ÒÐ˜tœ{¨Qš˜Ø ×8Ò8¸ÑGÔGˆMàŸš¨Ñ6Ô6ˆØŒ=ð 	2Ø ŸOšO¨MÑ:Ô:ˆMÝœF =Ñ1Ô1ˆMØÐr2   )r*   r+   r,   rw   r´  rD   r.   r^   rï  rY   r_   r`   s   @r3   rÙ  rÙ  A  s­   ø€ € € € € ð! #ð !°3ð !Àð !Ècð !Ð]að !ð !ð !ð !ð !ð !ð°U´\ð ÀeÄlð ð ð ð ð  U¤\ð °e´lð ð ð ð ð ð ð ð r2   rÙ  Únumberc                 óB  — g }| dz  dk    r#|                      d¦  «         | dz  } | dz  dk    °#t          dt          j        | ¦  «        dz   d¦  «        D ].}| |z  dk    r#|                      |¦  «         | |z  } | |z  dk    °#Œ/| dk    r|                      | ¦  «         |S )NrN   r   r   r    )Úappendr–  ÚmathÚisqrt)rò  Úfactorsr‰   s      r3   Úprime_factorsrø  f  sÄ   € Ø€Gà
�1‰*˜Š/ˆ/Ø�Š�qÑÔÐØ�1‰ˆð �1‰*˜Š/ˆ/õ �1•d”j Ñ(Ô(¨1Ñ,¨aÑ0Ô0ð ð ˆØ�q‰j˜AŠoˆoØ�NŠN˜1ÑÔÐØ�q‰LˆFð �q‰j˜AŠoˆoøð �‚z€zØ�Š�vÑÔÐØ€Nr2   ÚcpuÚtemporal_patch_sizeÚ
patch_sizeÚn_layersÚ
n_channelsc           	      óø  — t          j        t          j        t          |¦  «        ddd…         |¬¦  «        d¬¦  «        }t          j        t          j        t          | ¦  «        ddd…         |¬¦  «        d¬¦  «        }t          j        |dz  |z  dz  ¦  «                             ¦   «         dz  }t          j        |d         dz  |z  |z  ¦  «                             ¦   «         dz  }t          j        ddd|gg|¬¦  «        }	t          j        t          j        |¦  «        |||gd¬¦  «        }
t          j        |t          j        ||d         ¦  «        t          j        ||d         ¦  «        |gd¬¦  «        }t          j	        |	|
|gd¬¦  «        }t          j
        |dd…dd…f         d¬¦  «                             ¦   «         }||z  | z  |z  }t          j        dt          j        t          j        ||¬¦  «        ¦  «        |dz   |¬¦  «        }t          j        |                     d¦  «        t          j        |¦  «                             d¦  «        z
  ¦  «        }||j        d         k    rt          j        |d¬¦  «        }nNdd	lm}  ||                     ¦   «                              ¦   «         ¦  «        \  }}t          j        ||¬¦  «        }d|d<   |j        d         dz
  |d<   ||         S )
a  
    Plan out the dimensions for each layer in the HMLP encoder.

    This function determines the progression of dimensions (temporal, height, width, channels)
    for a multi-layer perceptual model that processes image/video patches. It follows these
    principles:
    1. Start with small dimensions and increase to full size
    2. Expand spatial dimensions (height/width) first, then temporal
    3. Increase channel count to avoid information bottlenecks
    4. Round channel dimensions to multiples of 64 for hardware efficiency

    The function computes optimal assignments of scale configurations to layers using either:
    - For n_layers >= len(scales): Individual best matching scales for each layer (allowing duplicates)
    - For n_layers < len(scales): Global optimal assignment via linear_sum_assignment

    The first and last scales are always fixed to ensure the proper input and output dimensions.

    Args:
        temporal_patch_size: Temporal dimension of input patches
        patch_size: Spatial dimension (height/width) of input patches
        n_layers: Number of layers in the encoder
        n_channels: Number of input channels (default: 3 for RGB)

    Returns:
        torch.LongTensor of shape `(n_layers + 1, 4)` where the last dim holds values for (t, h, w, c) grids.
    NrO   r¾   r   ró   rN   é@   r    )Úlinear_sum_assignment)r.   ÚcumprodÚtensorrø  Úceilrw   ÚstackÚ	ones_likeÚ	full_liker  Úprodr]   ÚlinspacerÈ   ÚabsrD  r[   ÚargminÚscipy.optimizer   rù  Únumpy)rú  rû  rü  rý  r¿   ÚhÚtÚh_chÚt_chÚbaseÚspatialÚtemporalÚscalesÚsize_reductionÚtotal_elementsÚlog_ideal_scalesÚcost_matrixÚidxsr   r9  Úidxs_nps                        r3   Úplan_out_scalesr  w  sÖ  € õ: 	Œ•e”l¥=°Ñ#<Ô#<¸T¸T¸r¸TÔ#BÈ6ÐRÑRÔRÐXYÐZÑZÔZ€AÝŒ•e”l¥=Ð1DÑ#EÔ#EÀdÀdÈÀdÔ#KÐTZÐ[Ñ[Ô[ÐabÐcÑcÔc€AåŒ:�a˜‘d˜ZÑ'¨"Ñ,Ñ-Ô-×1Ò1Ñ3Ô3°bÑ8€DÝŒ:�a˜”e˜q‘j :Ñ-°Ñ1Ñ2Ô2×6Ò6Ñ8Ô8¸2Ñ=€DåŒ<˜!˜Q  :Ð.Ð/¸Ð?Ñ?Ô?€DÝŒk�5œ?¨1Ñ-Ô-¨q°!°TÐ:ÀÐBÑBÔB€GÝŒ{˜A�uœ¨q°!°B´%Ñ8Ô8½%¼/È!ÈQÈrÌUÑ:SÔ:SÐUYÐZÐ`aÐbÑbÔb€HÝŒY˜˜g xÐ0°aÐ8Ñ8Ô8€Få”Z  q q q¨#¨2¨# v¤°AÐ6Ñ6Ô6×<Ò<Ñ>Ô>€Nà *Ñ,Ð/BÑBÀZÑO€NÝ”~Ø	�5Œ9•U”\ .¸Ð@Ñ@Ô@ÑAÔAÀ8ÈaÁ<ÐX^ðñ ô Ðõ ”)Ð,×6Ò6°qÑ9Ô9½E¼IÀnÑ<UÔ<U×<_Ò<_Ð`aÑ<bÔ<bÑbÑcÔc€Kà�6”< ”?Ò"Ð"ÝŒ|˜K¨QÐ/Ñ/Ô/ˆˆà8Ð8Ð8Ð8Ð8Ð8à*Ð*¨;¯?ª?Ñ+<Ô+<×+BÒ+BÑ+DÔ+DÑEÔE‰
ˆˆ7ÝŒ|˜G¨FÐ3Ñ3Ô3ˆð €Dˆ�GØŒ|˜AŒ Ñ"€Dˆ�HØ�$Œ<Ðr2   c                   óX   ‡ — e Zd Zdefˆ fd„Zdej        dee         dej        fd„Z	ˆ xZ
S )ÚInklingVisionModelr˜   c                 ó  •— t          ¦   «                              |¦  «         t          |j        |j        |j        |j        ¦  «        | _        t          j	        ¦   «         | _
        t          t          | j        d d…         | j        dd …         ¦  «        ¦  «        D ]½\  }\  }}|d         |d         z  |d         |d         z  z  |d         |d         z  z  }||j        dz
  k    r|j        n|d         }|d         |d         z  }|d         |d         z  }| j
                             t          |d         |z  |||||j        dz
  k    ¬¦  «        ¦  «         Œ¾t!          |j        ¦  «        | _        |                      ¦   «          d S )NrO   r    r   rN   r   )rÚ  rÛ  rÝ  rÜ  rÞ  )rC   rD   r  rú  rû  r—  Únum_channelsr  rE   r•  Úencoder_layersr¬  ÚziprÓ  rô  rÙ  r>   Ú
final_normr›  )
rJ   r˜   r°  Ústart_scaleÚ	end_scaleÚshuffle_multrÛ  rÝ  rÜ  rL   s
            €r3   rD   zInklingVisionModel.__init__¶  s¥  ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý%ØÔ&ØÔØÔ$ØÔñ	
ô 
ˆŒõ !œm™oœoˆÔÝ+4µS¸¼ÀSÀbÀSÔ9IÈ4Ì;ÐWXÐWYÐWYÌ?Ñ5[Ô5[Ñ+\Ô+\ð 	ð 	Ñ'ˆAÑ'�˜Yà˜1” ¨Q¤Ñ/°I¸a´LÀKÐPQÄNÑ4RÑSÐW`ÐabÔWcÐgrÐstÔguÑWuÑvð ð 56¸Ô9QÐTUÑ9UÒ4UÐ4U˜Ô0Ð0Ð[dÐefÔ[gˆJØ ”l k°!¤nÑ4ˆGØ˜q”\ [°¤^Ñ3ˆFØÔ×&Ò&Ý)Ø)¨!œn¨|Ñ;Ø)Ø#Ø!Ø &Ô":¸QÑ">Ò>ðñ ô ñô ð ð õ )¨Ô)@ÑAÔAˆŒØ�ŠÑÔÐÐÐr2   Úpixel_valuesr�   rA   c                 óÄ   — |j         d         }|}| j        D ]} ||¬¦  «        }Œ|                      |¦  «        }|                     |d¦  «        }t	          ||¬¦  «        S )Nr   )r9   rO   rÖ  )r[   r   r"  rz   r   )rJ   r&  r�   Únum_patchesr9   Úlayers         r3   rY   zInklingVisionModel.forwardÕ  s}   € Ø"Ô(¨Ô+ˆØ$ˆØÔ(ð 	?ð 	?ˆEØ!˜E°Ð>Ñ>Ô>ˆMˆMàŸš¨Ñ6Ô6ˆØ%×-Ò-¨k¸2Ñ>Ô>ˆÝ)Ø+Ø'ð
ñ 
ô 
ð 	
r2   )r*   r+   r,   r$   rD   r.   r^   r   r   rY   r_   r`   s   @r3   r  r  µ  sz   ø€ € € € € ðÐ2ð ð ð ð ð ð ð>
 E¤Lð 
¸FÐCUÔ<Vð 
Ð[`Ô[gð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r2   r  zz
    The Base Inkling model which consists of a vision backbone and a language model without language modeling head.,
    c                   óP  ‡ — e Zd ZdZdefˆ fd„Ze ed¬¦  «        dej	        de
e         deez  fd	„¦   «         ¦   «         Ze ed
¬¦  «        	 ddej        dej        dz  deez  fd„¦   «         ¦   «         Zdej        dej	        dej	        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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j        dz  dedz  de
e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚInklingModelFr˜   c                 ó*  •— t          ¦   «                              |¦  «         |j        j        | _        t	          |j        ¦  «        | _        t          |j        ¦  «        | _        t          |j
        ¦  «        | _        |                      ¦   «          d S rf   )rC   rD   Útext_configr’  r‹  Úlanguage_modelrÑ  ro  Úaudio_towerr  Úvision_configÚvision_towerr›  râ   s     €r3   rD   zInklingModel.__init__ì  sw   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô,Ô7ˆŒÝ.¨vÔ/AÑBÔBˆÔÝ,¨VÔ-@ÑAÔAˆÔÝ.¨vÔ/CÑDÔDˆÔØ�ŠÑÔÐÐÐr2   zOProjects the last hidden state from the vision model into language model space.r%   r&  r�   rA   c                 ó    —  | j         dd|i|¤ŽS )Nr&  r1   )r1  ©rJ   r&  r�   s      r3   Úget_image_featureszInklingModel.get_image_featuresô  s"   € ð
 !ˆtÔ ÐEÐE¨lÐE¸fÐEÐEÐEr2   zCProjects discretized dMel bin tokens into the language model space.NrÔ  Úaudio_input_ids_maskc                 ó¨   — |�||                      ¦   «                  }n!|                     d|j        d         ¦  «        }|                      |¦  «        S )aì  
        audio_input_ids (`torch.LongTensor` of shape `(num_audios, max_num_frames, n_mel_bins)`):
            Batch of (padded) dMel bin tokens produced by [`InklingProcessor`].
        audio_input_ids_mask (`torch.Tensor` of shape `(num_audios, max_num_frames)`, *optional*):
            Mask marking valid (non-padding) frames. When provided, only valid frames are encoded so that the
            number of returned audio embeddings matches the number of audio placeholder tokens.
        NrO   )r´  rz   r[   r/  )rJ   rÔ  r5  s      r3   Úget_audio_featureszInklingModel.get_audio_featuresû  sU   € ð  Ð+Ø-Ð.B×.GÒ.GÑ.IÔ.IÔJˆOˆOà-×5Ò5°b¸/Ô:OÐPRÔ:SÑTÔTˆOØ×Ò Ñ0Ô0Ð0r2   rœ  rž  ÚfeaturesÚtoken_idc                 ó  — |€[| |                       ¦   «         t          j        |t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }n||k    }|                     ¦   «         }|                     d¦  «                             |¦  «         	                    |j        ¦  «        }t          ||                              ¦   «         |                     ¦   «         k    d|› d|j        d         › �¦  «         |S )zö
        Obtains a multimodal placeholder mask from `input_ids` or `inputs_embeds` for the given `token_id`, and checks
        that the placeholder token count matches the length of `features`. If the lengths differ, an error is raised.
        N)rQ   r¿   rO   zAMultimodal features and placeholder tokens do not match, tokens: z, features: r   )Úget_input_embeddingsr.   r  Úlongr¿   Úallrù   rD  Ú	expand_asrR   r   Únumelr[   )rJ   rœ  rž  r8  r9  Úspecial_maskÚn_tokenss          r3   Úget_placeholder_maskz!InklingModel.get_placeholder_mask  s  € ð ÐØ(Ð,G¨D×,EÒ,EÑ,GÔ,GÝ”˜X­U¬ZÀÔ@TÐUÑUÔUñ-ô -ò ˆLð (×+Ò+¨BÑ/Ô/ˆLˆLà$¨Ò0ˆLà×#Ò#Ñ%Ô%ˆØ#×-Ò-¨bÑ1Ô1×;Ò;¸MÑJÔJ×MÒMÈmÔNbÑcÔcˆÝØ˜,Ô'×-Ò-Ñ/Ô/°8·>²>Ñ3CÔ3CÒCØyÐPXÐyÐyÐfnÔftÐuvÔfwÐyÐyñ	
ô 	
ð 	
ð Ðr2   r„   r�  r8   Útoken_type_idsr»  rŸ  Ú	lm_kwargsc           	      ó¨  — |du |	duz  rt          d¦  «        ‚|	€5| j                              |                      ¦   «         |¦  «        ¦  «        }	|�r|                      |¦  «        j        }|                     |	j        |	j        ¦  «        }|  	                    ||	|| j
        j        ¦  «        }|	                     ||¦  «        }	d}|�s|                      ||¦  «        j        }|                     |	j        |	j        ¦  «        }|  	                    ||	|| j
        j        ¦  «        }|	                     ||¦  «        }	t!          |x}t"          ¦  «        sC| j
                             ¦   «         |	|||dœ}t'          di |¤Žt)          di |¤Žt+          di |¤Ždœ} | j        d||||	|dœ|¤Ž}t-          |j        |j        |j        |j        |�|nd¬¦  «        S )a/  
        audio_input_ids (`torch.LongTensor` of shape `(num_audios, max_num_frames, n_mel_bins)`, *optional*):
            Batch of (padded) discretized dMel bin tokens produced by [`InklingProcessor`].
        audio_input_ids_mask (`torch.Tensor` of shape `(num_audios, max_num_frames)`, *optional*):
            Mask marking valid (non-padding) audio frames in `audio_input_ids`.
        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.text_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.text_config.vocab_size]`.

        Example:

        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, InklingForConditionalGeneration

        >>> model = InklingForConditionalGeneration.from_pretrained("google/inkling2-3b-mix-224")
        >>> processor = AutoProcessor.from_pretrained("google/inkling2-3b-mix-224")

        >>> prompt = "Where is the cat standing?"
        >>> url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(images=image, text=prompt,  return_tensors="pt")

        >>> # Generate
        >>> generate_ids = model.generate(**inputs,)
        >>> processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "Where is the cat standing?\nsnow"
        ```Nr¡  r¢  r£  )r„   r�  r8   rž  rŸ  )r¨  r8   r9   r:   r)   r1   )r©  r.  r™  r;  r4  r×  rR   r¿   rQ   rB  r˜   Úimage_token_idÚmasked_scatterr7  r¨  Úaudio_token_idrs  r«  rq  r   r   r   r(   r8   r9   r:   )rJ   rœ  r&  rÔ  r5  r„   r�  r8   rC  rž  r»  rŸ  rD  Úimage_featuresÚspecial_image_maskÚaudio_featuresÚspecial_audio_maskr®  r¯  rÃ  s                       r3   rY   zInklingModel.forward*  sN  € ðd ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø Ô/×:Ò:Ð;V¸4×;TÒ;TÑ;VÔ;VÐW`Ñ;aÔ;aÑbÔbˆMð Ð#Ø!×4Ò4°\ÑBÔBÔPˆNØ+×.Ò.¨}Ô/CÀ]ÔEXÑYÔYˆNØ!%×!:Ò!:Ø˜=¨.¸$¼+Ô:Tñ"ô "Ðð *×8Ò8Ð9KÈ^Ñ\Ô\ˆMð ˆØÐ&Ø!×4Ò4°_ÐFZÑ[Ô[ÔmˆNØ+×.Ò.¨}Ô/CÀ]ÔEXÑYÔYˆNØ!%×!:Ò!:Ø˜=¨.¸$¼+Ô:Tñ"ô "Ðð *×8Ò8Ð9KÈ^Ñ\Ô\ˆMõ °Ð?Ð-ÅÑFÔFð 	àœ+×5Ò5Ñ7Ô7Ø!.Ø"0Ø#2Ø ,ðð ˆKõ #5Ð"CÐ"C°{Ð"CÐ"CÝ%FÐ%UÐ%UÈÐ%UÐ%UÝ$CÐ$RÐ$RÀkÐ$RÐ$Rð#ð #Ðð &�$Ô%ð 
Ø.Ø%Ø+Ø'Øð
ð 
ð ð
ð 
ˆõ *Ø%Ô7Ø#Ô3Ø!Ô/ØÔ)Ø2>Ð2J  ÐPTð
ñ 
ô 
ð 	
r2   rf   )NNNNNNNNNNN)r*   r+   r,   Úaccepts_loss_kwargsr"   rD   r   r   r.   r/   r   r   r;   r   r4  r³  r^   r7  rw   rB  r   r´  r(   rY   r_   r`   s   @r3   r+  r+  ã  s¬  ø€ € € € € ð  Ðð˜}ð ð ð ð ð ð ð Ø€^Ð!rÐsÑsÔsðFØ!Ô-ðFØ9?Ð@RÔ9SðFà	Ð+Ñ	+ðFð Fð Fñ tÔsñ ÔðFð
 Ø€^Ð!fÐgÑgÔgð 59ð1ð 1àÔ)ð1ð $œl¨TÑ1ð1ð 
Ð+Ñ	+ð	1ð 1ð 1ñ hÔgñ Ôð1ð$àÔ#ðð Ô(ðð Ô#ð	ð
 ðð ð ð ð6 Øð .2Ø15Ø37Ø48Ø.2Ø04Ø(,Ø26Ø26Ø*.Ø!%ðh
ð h
àÔ# dÑ*ðh
ð Ô'¨$Ñ.ðh
ð Ô)¨DÑ0ð	h
ð
 $œl¨TÑ1ðh
ð œ tÑ+ðh
ð Ô&¨Ñ-ðh
ð  ™ðh
ð Ô(¨4Ñ/ðh
ð Ô(¨4Ñ/ðh
ð Ô  4Ñ'ðh
ð ˜$‘;ðh
ð Ð.Ô/ðh
ð 
Ð+Ñ	+ðh
ð h
ð h
ñ „^ñ Ôðh
ð h
ð h
ð h
ð h
r2   r+  c                   ó®  ‡ — e Zd Zi ZddiZdZdefˆ fd„Zede	j
        dee         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	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	 	 	 	 	 	 	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚInklingForConditionalGenerationr·  r¸  Fr˜   c                 óú   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        j        |j        j        d¬¦  «        | _	        |  
                    ¦   «          d S rº  )rC   rD   r+  rl  rE   r¬   r-  rK   r’  r·  r›  râ   s     €r3   rD   z(InklingForConditionalGeneration.__init__¤  sg   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý! &Ñ)Ô)ˆŒ
õ ”y Ô!3Ô!?ÀÔASÔA^ÐejÐkÑkÔkˆŒØ�ŠÑÔÐÐÐr2   r&  r�   c                 ó(   —  | j         j        |fi |¤ŽS rf   )rl  r4  r3  s      r3   r4  z2InklingForConditionalGeneration.get_image_features¬  s   € à,ˆtŒzÔ,¨\ÐDÐD¸VÐDÐDÐDr2   Nr   rœ  r„   r�  r8   rÔ  r5  rž  r»  rŸ  r¼  rA   c                 óì  —  | j         d|||||||||
|	dœ
|¤Ž}|d         | j        j        j        z  }t	          |t
          ¦  «        rt          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }| j        j        j        }|�||j	        d         k     r|dd|…f         }d}|	� | j
        d||	|j	        d         dœ|¤Ž}t          |||j        |j        |j        |j        ¬¦  «        S )	a€	  
        audio_input_ids (`torch.LongTensor` of shape `(num_audios, max_num_frames, n_mel_bins)`, *optional*):
            Batch of (padded) discretized dMel bin tokens produced by [`InklingProcessor`].
        audio_input_ids_mask (`torch.Tensor` of shape `(num_audios, max_num_frames)`, *optional*):
            Mask marking valid (non-padding) audio frames in `audio_input_ids`.
        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.text_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.text_config.vocab_size]`.

        Example:

        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, InklingForConditionalGeneration

        >>> model = InklingForConditionalGeneration.from_pretrained("google/gemma-3-4b-it")
        >>> processor = AutoProcessor.from_pretrained("google/gemma-3-4b-it")

        >>> messages = [
        ...     {
        ...         "role": "system",
        ...         "content": [
        ...             {"type": "text", "text": "You are a helpful assistant."}
        ...         ]
        ...     },
        ...     {
        ...         "role": "user", "content": [
        ...             {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"},
        ...             {"type": "text", "text": "Where is the cat standing?"},
        ...         ]
        ...     },
        ... ]

        >>> inputs = processor.apply_chat_template(
        ...     messages,
        ...     tokenize=True,
        ...     return_dict=True,
        ...     return_tensors="pt",
        ...     add_generation_prompt=True
        ... )
        >>> # Generate
        >>> generate_ids = model.generate(**inputs)
        >>> processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "user\nYou are a helpful assistant.\n\n\n\n\n\nWhere is the cat standing?\nmodel\nBased on the image, the cat is standing in a snowy area, likely outdoors. It appears to"
        ```
        )
rœ  r&  rÔ  r5  r„   r�  r8   rž  rŸ  r»  r   NrO   .r¾  )r6   r7   r8   r9   r:   r)   r1   )rl  r˜   r-  r¿  rs  rw   rÀ  r·  rÁ  r[   rÂ  r5   r8   r9   r:   r)   )rJ   rœ  r&  r„   r�  r8   rÔ  r5  rž  r»  rŸ  r¼  r�   rÃ  r9   rÄ  r7   rÁ  r6   s                      r3   rY   z'InklingForConditionalGeneration.forward°  sU  € ðD �$”*ð 
ØØ%Ø+Ø!5Ø)Ø%Ø+Ø'ØØð
ð 
ð ð
ð 
ˆð   œ
 T¤[Ô%<Ô%XÑXˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆØ"œkÔ5ÔIÐØÐ*Ð/BÀVÄ\ÐRTÔEUÒ/UÐ/UØ˜CÐ!5Ð"5Ð!5Ð5Ô6ˆFàˆØÐØ%�4Ô%Ðj¨V¸FÈvÌ|Ð\^ÔO_ÐjÐjÐciÐjÐjˆDå,ØØØ#Ô3Ø!Ô/ØÔ)Ø 'Ô ;ð
ñ 
ô 
ð 	
r2   Tc                 ór   •—  t          ¦   «         j        |f|||||	|
|dœ|¤Ž}|s|	s||d<   ||d<   ||d<   |S )N)r8   rž  r„   r�  rŸ  r¼  Úis_first_iterationr&  rÔ  r5  )rC   Úprepare_inputs_for_generation)rJ   rœ  r8   rž  r�  r&  r„   rÔ  r5  rŸ  r¼  r»  rT  r�   Úmodel_inputsrL   s                  €r3   rU  z=InklingForConditionalGeneration.prepare_inputs_for_generation  s‚   ø€ ð" =•u‘w”wÔ<Øð

à+Ø'Ø)Ø%ØØ)Ø1ð

ð 

ð ð

ð 

ˆð ð 	H Yð 	HØ+7ˆL˜Ñ(Ø.=ˆLÐ*Ñ+Ø3GˆLÐ/Ñ0àÐr2   )NNNNNNNNNNr   )NNNNNNNTNNF)r*   r+   r,   rÅ  rÆ  rM  r"   rD   r   r.   r/   r   r   r4  r   r³  r^   r   r´  rw   r;   r5   rY   rU  r_   r`   s   @r3   rO  rO  —  s  ø€ € € € € ð ÐØÐ0Ð1€Hð  Ðð˜}ð ð ð ð ð ð ð ðE¨uÔ/@ð EÈFÐSeÔLfð Eð Eð Eñ „^ðEð Øð .2Ø15Ø.2Ø04Ø(,Ø37Ø48Ø26Ø*.Ø!%Ø-.ða
ð a
àÔ# dÑ*ða
ð Ô'¨$Ñ.ða
ð œ tÑ+ð	a
ð
 Ô&¨Ñ-ða
ð  ™ða
ð Ô)¨DÑ0ða
ð $œl¨TÑ1ða
ð Ô(¨4Ñ/ða
ð Ô  4Ñ'ða
ð ˜$‘;ða
ð ˜eœlÑ*ða
ð Ð+Ô,ða
ð 
Ð.Ñ	.ða
ð a
ð a
ñ „^ñ Ôða
ðL ØØØØØØ!ØØØØ ð"ð "ð "ð "ð "ð "ð "ð "ð "ð "r2   rO  )rk  r‹  r¶  rÑ  r  r+  rO  )rm   Nr×   )rù  )^rõ  Úcollections.abcr   Údataclassesr   r.   Útorch.nnrE   Útorch.nn.functionalr�   r  Ú r   rt  Úactivationsr   Úcache_utilsr   r	   Ú
generationr
   Úintegrationsr   r   r   r   Úintegrations.accelerater   Úmasking_utilsr   r   r   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_inklingr!   r"   r#   r$   r(   r5   ÚModuler>   rb   r^   rw   r   r]   r•   r—   rÙ   ræ   r
  r)  r3  r;  rF   Ústrr<  rH  r²   r^  rk  r‹  r¶  rx  rÑ  rÙ  Úlistrø  r³  r  r  r+  rO  Ú__all__r1   r2   r3   ú<module>rn     s	  ðð, €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =Ø sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lð €ððñ ô ð
 ð9ð 9ð 9ð 9ð 9Ð!8ñ 9ô 9ñ „ñô ð9ð €ððñ ô ð
 ð9ð 9ð 9ð 9ð 9 Kñ 9ô 9ñ „ñô ð9ð0 Ð˜YÑ'Ô'ðJð Jð Jð Jð J�R”Yñ Jô Jñ (Ô'ðJð(^ð ^ð ^ð ^ð ^˜BœIñ ^ô ^ð ^ð4	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð& Ø)-ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð ”< $Ñ&ð%ð %ð %ð %ð8a)ð a)ð a)ð a)ð a)�r”yñ a)ô a)ð a)ðH1ð 1ð 1ð 1ð 1�”ñ 1ô 1ð 1ð" ð$#ð $#ð $#ð $#ð $#�R”Yñ $#ô $#ñ Ôð$#ðN#Hð #Hð #Hð #Hð #H˜œ	ñ #Hô #Hð #HðL%ð %ð %ð %ð %˜2œ9ñ %ô %ð %ð8ð ð ð ð �”ñ ô ð ð(	ð 	ð 	ð ÐÐ0Ñ1Ô1ð
 !%Ø!ð'ð 'Ø”<ð'à”ð'ð ŒLð'ð Œ,˜Ñ
ð	'ð
 �d‘
ð'ð 'ð 'ñ 2Ô1ð'ð& ÐÐ,Ñ-Ô-ð !%Ø!ð	'ð 'Ø”<ð'àŒLð'ð Œ,˜Ñ
ð'ð �d‘
ð	'ð 'ð 'ñ .Ô-ð'ð, ÐÐ*Ð,<Ð=Ñ>Ô>ð;ð ;ð ;ð ;ð ;˜bœiñ ;ô ;ñ ?Ô>ð;ð|.ð .ð .ð .ð .Ð4ñ .ô .ð .ðb ð.ð .ð .ð .ð .˜_ñ .ô .ñ „ð.ðb ðL
ð L
ð L
ð L
ð L
Ð-ñ L
ô L
ñ „ðL
ð^ ðK
ð K
ð K
ð K
ð K
Ð/°ñ K
ô K
ñ „ðK
ð\ð ð ð ð  "¤)ñ ô ð ð
ð 
ð 
ð 
ð 
Ð.ñ 
ô 
ð 
ð"ð "ð "ð "ð " ¤	ñ "ô "ð "ðJ˜#ð  $ s¤)ð ð ð ð ð$ W\ð;ð ;Øð;Ø*-ð;Ø9<ð;ØJMð;à
Ôð;ð ;ð ;ð ;ð|+
ð +
ð +
ð +
ð +
Ð/ñ +
ô +
ð +
ð\ €ððñ ô ð
l
ð l
ð l
ð l
ð l
Ð)ñ l
ô l
ñô ð
l
ð^ €ððñ ô ð
[ð [ð [ð [ð [Ð&<¸oñ [ô [ñô ð
[ð|ð ð €€€r2   