§
    ‚Štjhu  ã                   ó<  — d dl mZ d dlmZ d dlZd dlmc 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 dd
lmZmZmZmZ ddlmZ ddlmZ ddlmZ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) ddl*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1  ed¦  «         G d„ dej2        ¦  «        ¦   «         Z3 G d„ dej2        ¦  «        Z4 G d„ dej2        ¦  «        Z5e G d„ dej2        ¦  «        ¦   «         Z6 G d„ d ej2        ¦  «        Z7d!„ Z8 ed"¦  «        dAd#„¦   «         Z9d$ej:        d%e;d&ej:        fd'„Z<	 dBd)ej2        d*ej:        d+ej:        d,ej:        d-ej:        dz  d.e=d/e=d0e&e(         fd1„Z> ee9¦  «         G d2„ d3ej2        ¦  «        ¦   «         Z? G d4„ d5e¦  «        Z@e) G d6„ d7e$¦  «        ¦   «         ZAe) G d8„ d9eA¦  «        ¦   «         ZB	 	 	 dCd;ej:        eCej:                 z  dz  d<e;dz  d-ej:        dz  d&ej:        e;z  fd=„ZDe) G d>„ d?eAe¦  «        ¦   «         ZEg d@¢ZFdS )Dé    )ÚCallable)ÚOptionalN)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_experts_implementationÚuse_kernel_forward_from_hubÚuse_kernel_func_from_hubÚuse_kernelized_func)Ú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é   )ÚGraniteMoeConfigÚ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 )
ÚGraniteMoeRMSNormç�íµ ÷Æ°>ÚepsÚreturnNc                 ó¬   •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        || _        dS )z@
        GraniteMoeRMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__r   Ú	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer%   Ú	__class__s      €úp/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/granitemoe/modeling_granitemoe.pyr)   zGraniteMoeRMSNorm.__init__5   sD   ø€ õ 	‰Œ×ÒÑÔÐÝ”l¥5¤:¨kÑ#:Ô#:Ñ;Ô;ˆŒØ #ˆÔÐÐó    Úhidden_statesc                 ó  — |j         }|                     t          j        ¦  «        }|                     d¦  «                             dd¬¦  «        }|t          j        || j        z   ¦  «        z  }| j        |                     |¦  «        z  S )Né   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor+   Úfloat32ÚpowÚmeanÚrsqrtr.   r-   )r/   r4   Úinput_dtypeÚvariances       r2   ÚforwardzGraniteMoeRMSNorm.forward=   s|   € Ø#Ô)ˆØ%×(Ò(­¬Ñ7Ô7ˆØ ×$Ò$ QÑ'Ô'×,Ò,¨R¸Ð,Ñ>Ô>ˆØ%­¬°H¸tÔ?TÑ4TÑ(UÔ(UÑUˆØŒ{˜]×-Ò-¨kÑ:Ô:Ñ:Ð:r3   c                 óH   — t          | j        j        ¦  «        › d| j        › �S )Nz, eps=)Útupler-   Úshaper.   )r/   s    r2   Ú
extra_reprzGraniteMoeRMSNorm.extra_reprD   s&   € Ý˜œÔ)Ñ*Ô*ÐIÐI°$Ô2GÐIÐIÐIr3   )r$   )
Ú__name__Ú
__module__Ú__qualname__Úfloatr)   r+   ÚTensorrA   rE   Ú__classcell__©r1   s   @r2   r#   r#   3   sŒ   ø€ € € € € ð$ð $¨ð $¸$ð $ð $ð $ð $ð $ð $ð; U¤\ð ;°e´lð ;ð ;ð ;ð ;ðJð Jð Jð Jð Jð Jð Jr3   r#   c                   óÔ   ‡ — 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 )ÚGraniteMoeRotaryEmbeddingÚinv_freqNÚconfigc                 ó²  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        | j        j        d         | _        | j        }| j        dk    rt          | j                 } || j        |¦  «        \  }| _
        |                      d|d¬¦  «         |                      d|                     ¦   «         d¬¦  «         d S )NÚ	rope_typeÚdefaultrO   F)Ú
persistentÚoriginal_inv_freq)r(   r)   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenrP   Úrope_parametersrR   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)r/   rP   ÚdeviceÚrope_init_fnrO   r1   s        €r2   r)   z"GraniteMoeRotaryEmbedding.__init__K   sÊ   ø€ Ý‰Œ×ÒÑÔÐØ"(Ô"@ˆÔØ$*Ô$BˆÔ!àˆŒàœÔ4°[ÔAˆŒØ!%Ô!EˆØŒ>˜YÒ&Ð&Ý.¨t¬~Ô>ˆLØ+7¨<¸¼ÀVÑ+LÔ+LÑ(ˆ�$Ô(à×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUÐUÐUr3   r^   ztorch.deviceÚseq_lenr&   ztorch.Tensorc                 óü   — | j         d         }t          | dd¦  «        p| j        | j        z  }d}d|t	          j        d|dt          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_dimNg      ð?r   r6   ©r9   )r^   r9   )	rY   Úgetattrr0   Únum_attention_headsr+   ÚarangeÚint64r:   rI   )rP   r^   r`   ÚbaseÚdimÚattention_factorrO   s          r2   rZ   z9GraniteMoeRotaryEmbedding.compute_default_rope_parameters[   sŒ   € ð& Ô% lÔ3ˆÝ�f˜j¨$Ñ/Ô/Ðc°6Ô3EÈÔIcÑ3cˆàÐð Ø•U”\ ! S¨!µ5´;Ð?Ñ?Ô?×BÒBÈ&ÕX]ÔXcÐBÑdÔdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r3   c                 óN  — | j         d d d …d f                              ¦   «                              |j        d         dd¦  «                             |j        ¦  «        }|d d …d d d …f                              ¦   «         }t          |j        j        t          ¦  «        r|j        j        dk    r|j        j        nd}t          |d¬¦  «        5  |                     ¦   «         |                     ¦   «         z   
                    dd¦  «        }t          j        ||fd¬	¦  «        }|                     ¦   «         | j        z  }|                     ¦   «         | j        z  }	d d d ¦  «         n# 1 swxY w Y   |                     |j        ¬
¦  «        |	                     |j        ¬
¦  «        fS )Nr   r7   r   ÚmpsÚcpuF)Údevice_typeÚenabledr6   ©rj   rd   )rO   rI   ÚexpandrD   r:   r^   Ú
isinstanceÚtypeÚstrr   Ú	transposer+   ÚcatÚcosr[   Úsinr9   )
r/   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedro   ÚfreqsÚembrx   ry   s
             r2   rA   z!GraniteMoeRotaryEmbedding.forwardy   s·  € ð !œM¨$°°°°4¨-Ô8×>Ò>Ñ@Ô@×GÒGÈÔHZÐ[\ÔH]Ð_aÐcdÑeÔe×hÒhÐijÔiqÑrÔrÐØ ,¨Q¨Q¨Q°°a°a°a¨ZÔ 8× >Ò >Ñ @Ô @Ðå'1°!´(´-ÅÑ'EÔ'EÐkÈ!Ì(Ì-Ð[`ÒJ`ÐJ`�a”h”m�mÐfkˆÝ¨¸UÐCÑCÔCð 	5ð 	5Ø&×,Ò,Ñ.Ô.Ð1F×1LÒ1LÑ1NÔ1NÑN×YÒYÐZ[Ð]^Ñ_Ô_ˆEÝ”)˜U E˜N°Ð3Ñ3Ô3ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCð		5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð �vŠv˜AœGˆvÑ$Ô$ c§f¢f°1´7 fÑ&;Ô&;Ð;Ð;s   ÃBE&Å&E*Å-E*©N©NNN)rF   rG   rH   r+   rJ   Ú__annotations__r    r)   Ústaticmethodr   ÚintrC   rI   rZ   Úno_gradr   rA   rK   rL   s   @r2   rN   rN   H   sú   ø€ € € € € € ØŒlÐÐÑðVð VÐ/ð Vð Vð Vð Vð Vð Vð  à*.Ø+/Ø"ð*ð *Ø  4Ñ'ð*à˜Ô(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ô	%ð	*ð *ð *ñ „\ð*ð: €U„]�_„_Øð<ð <ñ Ôñ „_ð<ð <ð <ð <ð <r3   rN   c                   ór   ‡ — e Zd ZdZdefˆ fd„Zdej        deej        ej        ej        f         fd„Z	ˆ xZ
S )ÚGraniteMoeTopKRoutera¡  Top-k gating that returns the routing decisions without grouping tokens by expert.

    Returns ``(top_k_index, top_k_weights, router_logits)``; the grouping/scattering used to live
    here (via ``expert_size.tolist()``, which broke fullgraph compile) and now happens inside the
    experts forward via ``use_experts_implementation`` so the default ``grouped_mm`` / ``batched_mm``
    paths can compile cleanly.
    rP   c                 óä   •— t          ¦   «                              ¦   «          |j        | _        |j        | _        t          j        t          j	        | j        |j
        ¦  «        ¦  «        | _        d S r€   )r(   r)   Únum_local_expertsÚnum_expertsÚnum_experts_per_tokÚtop_kr   r*   r+   Úemptyr0   r-   ©r/   rP   r1   s     €r2   r)   zGraniteMoeTopKRouter.__init__’   sU   ø€ Ý‰Œ×ÒÑÔÐØ!Ô3ˆÔØÔ/ˆŒ
Ý”l¥5¤;¨tÔ/?ÀÔASÑ#TÔ#TÑUÔUˆŒˆˆr3   r4   r&   c                 óô   — t          j        || j        ¦  «                             ¦   «         }|                     | j        d¬¦  «        \  }}t          j        |d¬¦  «                             |¦  «        }|||fS )Nr7   rq   )	ÚFÚlinearr-   rI   ÚtopkrŒ   r+   ÚsoftmaxÚtype_as)r/   r4   Úrouter_logitsÚtop_k_logitsÚtop_k_indexÚtop_k_weightss         r2   rA   zGraniteMoeTopKRouter.forward˜   so   € Ýœ °´Ñ<Ô<×BÒBÑDÔDˆØ$1×$6Ò$6°t´zÀrÐ$6Ñ$JÔ$JÑ!ˆ�kÝœ l¸Ð;Ñ;Ô;×CÒCÀMÑRÔRˆØ˜M¨=Ð8Ð8r3   )rF   rG   rH   Ú__doc__r    r)   r+   rJ   rC   rA   rK   rL   s   @r2   r‡   r‡   ‰   sŽ   ø€ € € € € ðð ðVÐ/ð Vð Vð Vð Vð Vð Vð9 U¤\ð 9°e¸E¼LÈ%Ì,ÐX]ÔXdÐ<dÔ6eð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9r3   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 )	ÚGraniteMoeExpertsz2Collection of expert weights stored as 3D tensors.rP   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 )Nr6   )r(   r)   r‰   rŠ   r0   Ú
hidden_dimÚintermediate_sizeÚintermediate_dimr   r*   r+   r�   Úgate_up_projÚ	down_projr   Ú
hidden_actÚact_fnrŽ   s     €r2   r)   zGraniteMoeExperts.__init__£   s£   ø€ Ý‰Œ×ÒÑÔÐØ!Ô3ˆÔØ Ô,ˆŒØ &Ô 8ˆÔÝœ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Ô.Ô/ˆŒˆˆr3   r4   r—   r˜   r&   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_classesr6   r   r   )r7   éþÿÿÿrq   r7   )r+   Ú
zeros_liker…   r   Ú
functionalÚone_hotrŠ   ÚpermuteÚgreaterÚsumÚnonzeroÚwherer‘   r    Úchunkr£   r¡   Ú
index_add_r:   r9   )r/   r4   r—   r˜   Úfinal_hidden_statesÚexpert_maskÚ
expert_hitÚ
expert_idxÚ	top_k_posÚ	token_idxÚcurrent_stateÚgateÚupÚcurrent_hidden_statess                 r2   rA   zGraniteMoeExperts.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©
rF   rG   rH   r™   r    r)   r+   rJ   rA   rK   rL   s   @r2   r›   r›   Ÿ   s�   ø€ € € € € à<Ð<ð0Ð/ð 0ð 0ð 0ð 0ð 0ð 0ð#à”|ð#ð ”\ð#ð ”|ð	#ð
 
Œð#ð #ð #ð #ð #ð #ð #ð #r3   r›   c                   óL   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚGraniteMoeMoEzISparsely-gated mixture-of-experts block: router decides, experts compute.rP   c                 ó°   •— t          ¦   «                              ¦   «          |j        | _        t	          |¦  «        | _        t          |¦  «        | _        d S r€   )r(   r)   r0   Ú
input_sizer‡   Úrouterr›   ÚexpertsrŽ   s     €r2   r)   zGraniteMoeMoE.__init__Ê   sE   ø€ Ý‰Œ×ÒÑÔÐØ Ô,ˆŒÝ*¨6Ñ2Ô2ˆŒÝ(¨Ñ0Ô0ˆŒˆˆr3   Úlayer_inputr&   c                 óö   — |                      ¦   «         \  }}}|                     d|¦  «        }|                      |¦  «        \  }}}|                      |||¦  «        }	|	                     ||| j        ¦  «        S )Nr7   )ÚsizeÚreshaperÀ   rÁ   Úviewr¿   )
r/   rÂ   ÚbszÚlengthÚemb_sizer4   r—   r˜   Ú_Úlayer_outputs
             r2   rA   zGraniteMoeMoE.forwardÐ   sv   € Ø +× 0Ò 0Ñ 2Ô 2ÑˆˆV�XØ#×+Ò+¨B°Ñ9Ô9ˆØ(,¯ª°MÑ(BÔ(BÑ%ˆ�] AØ—|’| M°;ÀÑNÔNˆØ× Ò   f¨d¬oÑ>Ô>Ð>r3   r»   rL   s   @r2   r½   r½   Ç   sq   ø€ € € € € ØSÐSð1Ð/ð 1ð 1ð 1ð 1ð 1ð 1ð? 5¤<ð ?°E´Lð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?r3   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..Nr7   r6   rq   )rD   r+   rw   )rz   Úx1Úx2s      r2   Úrotate_halfrÏ   Ø   s]   € à	
ˆ3Ð"�!”'˜"”+ Ñ"Ð"Ð"Ô	#€BØ	
ˆ3�”˜”˜qÑ Ð"Ð"Ð"Ô	#€BÝŒ9�r�c˜2�Y BÐ'Ñ'Ô'Ð'r3   Úrotary_pos_embc                 ó¾   — |                      |¦  «        }|                      |¦  «        }| |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.
    )Ú	unsqueezerÏ   )ÚqÚkrx   ry   Úunsqueeze_dimÚq_embedÚk_embeds          r2   Úapply_rotary_pos_embrØ   ß   sc   € ð& �-Š-˜Ñ
&Ô
&€CØ
�-Š-˜Ñ
&Ô
&€CØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�GÐÐr3   r4   Ún_repr&   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)rD   rr   rÅ   )r4   rÙ   ÚbatchÚnum_key_value_headsÚslenrc   s         r2   Ú	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ÐTr3   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t          || j        ¦  «        }t          || j        ¦  «        }	t          j        ||                     dd¦  «        ¦  «        |z  }
|�|
|z   }
t
          j                             |
dt          j        ¬¦  «         	                    |j
        ¦  «        }
t
          j                             |
|| j        ¬¦  «        }
t          j        |
|	¦  «        }|                     dd¦  «                             ¦   «         }||
fS )Nr6   r   r7   )rj   r9   )ÚpÚtrainingr   )rÞ   Únum_key_value_groupsr+   Úmatmulrv   r   r¨   r“   r;   r:   r9   ræ   rê   Ú
contiguous)rà   rá   râ   rã   rä   rå   ræ   rç   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r2   Úeager_attention_forwardrò     sé   € õ ˜3 Ô ;Ñ<Ô<€JÝ˜U FÔ$?Ñ@Ô@€Lå”<  z×';Ò';¸A¸qÑ'AÔ'AÑBÔBÀWÑL€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€LÝ”,˜|¨\Ñ:Ô:€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r3   c                   óÎ   ‡ — e Zd ZdZdedefˆ fd„Z	 	 	 ddej        de	ej        ej        f         dz  dej        dz  d	e
dz  d
ee         de	ej        ej        f         fd„Zˆ xZS )ÚGraniteMoeAttentionz=Multi-headed attention from 'Attention Is All You Need' paperrP   Ú	layer_idxc                 ó¨  •— t          ¦   «                              ¦   «          || _        || _        t	          |d|j        |j        z  ¦  «        | _        |j        |j        z  | _	        |j
        | _        |j        | _        d| _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        | j        z  |j        |j        ¬¦  «        | _        d S )Nrc   T©Úbias)r(   r)   rP   rõ   re   r0   rf   rc   rÜ   rë   Úattention_multiplierrå   Úattention_dropoutÚ	is_causalr   ÚLinearÚattention_biasÚq_projÚk_projÚv_projÚo_proj©r/   rP   rõ   r1   s      €r2   r)   zGraniteMoeAttention.__init__"  s>  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒÝ ¨
°FÔ4FÈ&ÔJdÑ4dÑeÔeˆŒØ$*Ô$>À&ÔB\Ñ$\ˆÔ!ØÔ2ˆŒØ!'Ô!9ˆÔØˆŒå”iØÔ Ô :¸T¼]Ñ JÐQWÔQfð
ñ 
ô 
ˆŒõ ”iØÔ Ô :¸T¼]Ñ JÐQWÔQfð
ñ 
ô 
ˆŒõ ”iØÔ Ô :¸T¼]Ñ JÐQWÔQfð
ñ 
ô 
ˆŒõ ”iØÔ&¨¬Ñ6¸Ô8JÐQWÔQfð
ñ 
ô 
ˆŒˆˆr3   Nr4   Úposition_embeddingsrä   Úpast_key_valuesrç   r&   c                 ó"  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }	|                      |¦  «                             |¦  «                             dd¦  «        }
|\  }}t          ||	||¦  «        \  }}	|�|                     |	|
| j	        ¦  «        \  }	}
t          j        | j        j        t          ¦  «        } || ||	|
|f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )Nr7   r   r6   rß   )ræ   rå   )rD   rc   rþ   rÆ   rv   rÿ   r   rØ   Úupdaterõ   r   Úget_interfacerP   Ú_attn_implementationrò   rê   rú   rå   rÅ   rí   r  )r/   r4   r  rä   r  rç   Úinput_shapeÚhidden_shapeÚquery_statesrî   rï   rx   ry   Úattention_interfacerñ   rð   s                   r2   rA   zGraniteMoeAttention.forward9  sÀ  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆà&‰ˆˆSÝ#7¸ÀjÐRUÐWZÑ#[Ô#[Ñ ˆ�jàÐ&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r3   r�   )rF   rG   rH   r™   r    r„   r)   r+   rJ   rC   r	   r   r   rA   rK   rL   s   @r2   rô   rô     sæ   ø€ € € € € àGÐGð
Ð/ð 
¸Cð 
ð 
ð 
ð 
ð 
ð 
ð4 IMØ.2Ø(,ð&)ð &)à”|ð&)ð # 5¤<°´Ð#=Ô>ÀÑEð&)ð œ tÑ+ð	&)ð
  ™ð&)ð Ð+Ô,ð&)ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð&)ð &)ð &)ð &)ð &)ð &)ð &)ð &)r3   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dz  de	ej        ej        f         dz  d	ej        f
d
„Z
ˆ xZS )ÚGraniteMoeDecoderLayerrP   rõ   c                 óL  •— t          ¦   «                              ¦   «          |j        | _        t          ||¬¦  «        | _        t          |j        |j        ¬¦  «        | _        t          |j        |j        ¬¦  «        | _        t          |¦  «        | _
        |j        | _        d S )N)rP   rõ   ©r%   )r(   r)   r0   rô   Ú	self_attnr#   Úrms_norm_epsÚinput_layernormÚpost_attention_layernormr½   Úblock_sparse_moeÚresidual_multiplierr  s      €r2   r)   zGraniteMoeDecoderLayer.__init__c  s�   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔÝ,°FÀiÐPÑPÔPˆŒÝ0°Ô1CÈÔI\Ð]Ñ]Ô]ˆÔÝ(9¸&Ô:LÐRXÔReÐ(fÑ(fÔ(fˆÔ%Ý -¨fÑ 5Ô 5ˆÔØ#)Ô#=ˆÔ Ð Ð r3   Nr4   rä   r  r  r&   c                 óê   — |}|                       |¦  «        } | j        d||||dœ|¤Ž\  }}||| j        z  z   }|}|                      |¦  «        }|                      |¦  «        }||| j        z  z   }|S )N)r4   rä   r  r  © )r  r  r  r  r  )r/   r4   rä   r  r  rç   ÚresidualrÊ   s           r2   rA   zGraniteMoeDecoderLayer.forwardl  s«   € ð !ˆØ×,Ò,¨]Ñ;Ô;ˆØ)˜4œ>ð 
Ø'Ø)Ø+Ø 3ð	
ð 
ð
 ð
ð 
Ñˆ�qð ! =°4Ô3KÑ#KÑKˆØ ˆØ×5Ò5°mÑDÔDˆØ×-Ò-¨mÑ<Ô<ˆØ  =°4Ô3KÑ#KÑKˆØÐr3   r�   )rF   rG   rH   r    r„   r)   r+   rJ   r	   rC   rA   rK   rL   s   @r2   r  r  b  sÂ   ø€ € € € € ð>Ð/ð >¸Cð >ð >ð >ð >ð >ð >ð /3Ø(,ØHLðð à”|ðð œ tÑ+ðð  ™ð	ð
 # 5¤<°´Ð#=Ô>ÀÑEðð 
Œðð ð ð ð ð ð ð r3   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        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚGraniteMoePreTrainedModelrP   ÚmodelTr  r  )r4   Ú
attentionsc                 óŠ  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rNt	          j        |j        d| j        j        ¬¦  «         t	          j        |j	        d| j        j        ¬¦  «         d S t          |t          ¦  «        r(t	          j        |j        d| j        j        ¬¦  «         d S d S )Nrß   )r=   Ústd)r(   Ú_init_weightsrs   r›   ÚinitÚnormal_r    rP   Úinitializer_ranger¡   r‡   r-   )r/   rà   r1   s     €r2   r   z'GraniteMoePreTrainedModel._init_weights–  s·   ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ/Ñ0Ô0ð 	UÝŒL˜Ô,°3¸D¼KÔ<YÐZÑZÔZÐZÝŒL˜Ô)°¸¼Ô9VÐWÑWÔWÐWÐWÐWÝ˜Õ 4Ñ5Ô5ð 	UÝŒL˜œ¨S°d´kÔ6SÐTÑTÔTÐTÐTÐTð	Uð 	Ur3   )rF   rG   rH   r    r‚   Ú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_backendr  rô   Ú_can_record_outputsr+   r…   r   rK   rL   s   @r2   r  r  …  s±   ø€ € € € € € àÐÐÑØÐØ&*Ð#Ø1Ð2ÐØ#4Ð"5ÐØÐØ€NØÐØ!ÐØ"&Ðà/Ø)ðð Ðð
 €U„]�_„_ðUð Uð Uð Uñ „_ðUð Uð Uð Uð Ur3   r  c                   óâ   ‡ — e Zd Z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 )ÚGraniteMoeModelrP   c                 óö  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        t          j        ‰j        ‰j        | j        ¦  «        | _        t          j	        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          ‰j        ‰j        ¬¦  «        | _        t!          ‰¬¦  «        | _        d| _        ‰j        | _        |                      ¦   «          d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r  )r  )Ú.0rõ   rP   s     €r2   ú
<listcomp>z,GraniteMoeModel.__init__.<locals>.<listcomp>©  s$   ø€ ÐhÐhÐh¸9Õ# F¨IÑ6Ô6ÐhÐhÐhr3   r  ©rP   F)r(   r)   Úpad_token_idÚpadding_idxÚ
vocab_sizer   Ú	Embeddingr0   Úembed_tokensÚ
ModuleListÚrangeÚnum_hidden_layersÚlayersr#   r  ÚnormrN   Ú
rotary_embÚgradient_checkpointingÚembedding_multiplierÚ	post_initrŽ   s    `€r2   r)   zGraniteMoeModel.__init__¢  sß   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø!Ô.ˆÔØ Ô+ˆŒåœL¨Ô):¸FÔ<NÐPTÔP`ÑaÔaˆÔÝ”mØhÐhÐhÐhÍÈfÔNfÑHgÔHgÐhÑhÔhñ
ô 
ˆŒõ & fÔ&8¸fÔ>QÐRÑRÔRˆŒ	Ý3¸6ÐBÑBÔBˆŒØ&+ˆÔ#Ø$*Ô$?ˆÔ!ð 	�ŠÑÔÐÐÐr3   NÚ	input_idsrä   r{   r  Úinputs_embedsÚ	use_cacherç   r&   c           
      óZ  — |d u |d uz  rt          d¦  «        ‚|r|€t          | j        ¬¦  «        }|€|                      |¦  «        }|€V|�|                     ¦   «         nd}t          j        |j        d         |j        ¬¦  «        |z   }| 	                    d¦  «        }t          | j        ||||¬¦  «        }	|| j        z  }|}
|                      |
|¦  «        }| j        d | j        j        …         D ]} ||
f||	|||dœ|¤Ž}
Œ|                      |
¦  «        }
t!          |
|¬¦  «        S )	Nz:You must specify exactly one of input_ids or inputs_embedsr4  r   r   )r^   )rP   rD  rä   r  r{   )r  rä   r{   r  rE  )Úlast_hidden_stater  )Ú
ValueErrorr
   rP   r9  Úget_seq_lengthr+   rg   rD   r^   rÒ   r   rA  r?  r=  r<  r>  r   )r/   rC  rä   r{   r  rD  rE  rç   Úpast_seen_tokensÚcausal_maskr4   r  Údecoder_layers                r2   rA   zGraniteMoeModel.forward³  s—  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOàÐ Ø ×-Ò-¨iÑ8Ô8ˆMàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4ˆLå(Ø”;Ø'Ø)Ø+Ø%ð
ñ 
ô 
ˆð &¨Ô(AÑAˆØ%ˆð #Ÿošo¨m¸\ÑJÔJÐà!œ[Ð)H¨4¬;Ô+HÐ)HÔIð 		ð 		ˆMØ)˜MØðà$7Ø*Ø)Ø /Ø#ðð ð ðð ˆMˆMð Ÿ	š	 -Ñ0Ô0ˆå%Ø+Ø+ð
ñ 
ô 
ð 	
r3   )NNNNNN)rF   rG   rH   r    r)   r   r   r   r+   Ú
LongTensorrJ   r	   ÚFloatTensorÚboolr   r   r   rA   rK   rL   s   @r2   r/  r/     s  ø€ € € € € ðÐ/ð ð ð ð ð ð ð"  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ð5
ð 5
àÔ# dÑ*ð5
ð œ tÑ+ð5
ð Ô&¨Ñ-ð	5
ð
  ™ð5
ð Ô(¨4Ñ/ð5
ð ˜$‘;ð5
ð Ð+Ô,ð5
ð 
 ð5
ð 5
ð 5
ñ „^ñ „_ñ  Ôð5
ð 5
ð 5
ð 5
ð 5
r3   r/  r6   Úgate_logitsrŠ   c                 óÆ  ‡— | �t          | t          ¦  «        sdS t          | t          ¦  «        r/| d         j        Št          j        ˆfd„| D ¦   «         d¬¦  «        }t          j        j                             |d¬¦  «        }t          j        ||d¬¦  «        \  }}t          j        j         	                    ||¦  «        }|€@t          j
        |                     ¦   «         d¬¦  «        }	t          j
        |d¬¦  «        }
�n.|j        \  }}|j        d         ||z  z  }|ddd…dd…ddf                              |||||f¦  «                             d||¦  «                             ‰¦  «        }t          j        |                     ¦   «         |z  d¬¦  «        t          j        |d¬¦  «        z  }	|ddd…dd…df                              ||||f¦  «                             d|¦  «                             ‰¦  «        }t          j        ||z  d¬¦  «        t          j        |d¬¦  «        z  }
t          j        |	|
                     d¦  «        z  ¦  «        }||z  S )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   c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS r  )r:   )r2  Ú
layer_gateÚcompute_devices     €r2   r3  z,load_balancing_loss_func.<locals>.<listcomp>  s&   ø€ Ð-jÐ-jÐ-jÐPZ¨j¯mªm¸NÑ.KÔ.KÐ-jÐ-jÐ-jr3   rq   r7   )rs   rC   r^   r+   rw   r   r¨   r“   r’   r©   r=   rI   rD   rr   rÅ   r:   r¬   rÒ   )rP  rŠ   rŒ   rä   Úconcatenated_gate_logitsÚrouting_weightsrÊ   Úselected_expertsr²   Útokens_per_expertÚrouter_prob_per_expertÚ
batch_sizeÚsequence_lengthr<  Úexpert_attention_maskÚ router_per_expert_attention_maskÚoverall_lossrT  s                    @r2   Úload_balancing_loss_funcr_  î  s�  ø€ ð: Ð¥*¨[½%Ñ"@Ô"@ÐØˆqå�+�uÑ%Ô%ð sØ$ QœÔ.ˆÝ#(¤9Ð-jÐ-jÐ-jÐ-jÐ^iÐ-jÑ-jÔ-jÐpqÐ#rÑ#rÔ#rÐ å”hÔ)×1Ò1Ð2JÐPRÐ1ÑSÔS€Oåœ* _°eÀÐDÑDÔDÑ€AÐå”(Ô%×-Ò-Ð.>ÀÑLÔL€KàÐå!œJ {×'8Ò'8Ñ':Ô':ÀÐBÑBÔBÐõ "'¤¨OÀÐ!CÑ!CÔ!CÐÑà&4Ô&:Ñ#ˆ
�OØ4Ô:¸1Ô=À*ÈÑB^Ñ_Ðð ˜4    A A A t¨TÐ1Ô2ßŠVÐ&¨
°OÀUÈKÐXÑYÔYßŠW�R˜ Ñ,Ô,ßŠR�ÑÔð	 	õ "œI k×&7Ò&7Ñ&9Ô&9Ð<QÑ&QÐWXÐYÑYÔYÕ\aÔ\eØ! qð]
ñ ]
ô ]
ñ 
Ðð ˜4    A A A tÐ+Ô,ßŠVÐ&¨
°OÀ[ÐQÑRÔRßŠW�R˜Ñ%Ô%ßŠR�ÑÔð	 	)õ "'¤¨?Ð=]Ñ+]ÐcdÐ!eÑ!eÔ!eÕhmÔhqØ,°!ði
ñ i
ô i
ñ "
Ðõ ”9Ð.Ð1G×1QÒ1QÐRSÑ1TÔ1TÑTÑUÔU€LØ˜+Ñ%Ð%r3   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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z  fd„¦   «         ¦   «         Zˆ xZS )ÚGraniteMoeForCausalLMzlm_head.weightzmodel.embed_tokens.weightÚlm_headÚcolwise_gather_outputr4   ÚlogitsrP   c                 ó^  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        t          j        |j        |j        d¬¦  «        | _        |j	        | _	        |j
        | _        |j        | _        |j        | _        |                      ¦   «          d S )NFr÷   )r(   r)   r/  r  r7  r   rü   r0   rb  Úrouter_aux_loss_coefr‰   rŠ   r‹   Úlogits_scalingrB  rŽ   s     €r2   r)   zGraniteMoeForCausalLM.__init__F  s–   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý$ VÑ,Ô,ˆŒ
Ø Ô+ˆŒÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒØ$*Ô$?ˆÔ!Ø!Ô3ˆÔØ#)Ô#=ˆÔ Ø$Ô3ˆÔð 	�ŠÑÔÐÐÐr3   Nr   rC  rä   r{   r  rD  ÚlabelsÚoutput_router_logitsÚlogits_to_keepr&   c	           	      ó2  — |�|n| j         j        } | j        d|||||dœ|	¤Ž}
|
j        }t	          |t
          ¦  «        rt          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }|| j         j        z  }d}|� | j	        ||fd| j         j
        i|	¤Ž}d}|rHt          |
j        | j        | j        |¦  «        }|�%|| j        |                     |j        ¦  «        z  z  }t%          ||||
j        |
j        |
j        |
j        ¬¦  «        S )al  
        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, GraniteMoeForCausalLM

        >>> model = GraniteMoeForCausalLM.from_pretrained("ibm/PowerMoE-3b")
        >>> tokenizer = AutoTokenizer.from_pretrained("ibm/PowerMoE-3b")

        >>> 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)rC  rä   r{   r  rD  r7  )ÚlossÚaux_lossrd  r  r4   r  r•   r  )rP   ri  r  rG  rs   r„   Úslicerb  rg  Úloss_functionr7  r_  r•   rŠ   r‹   rf  r:   r^   r   r  r4   r  )r/   rC  rä   r{   r  rD  rh  ri  rj  rç   Úoutputsr4   Úslice_indicesrd  rl  rm  s                   r2   rA   zGraniteMoeForCausalLM.forwardS  s‘  € ðJ %9Ð$DÐ Ð È$Ì+ÔJjð 	ð �$”*ð 
ØØ)Ø%Ø+Ø'ð
ð 
ð ð
ð 
ˆð  Ô1ˆÝ8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆØ˜$œ+Ô4Ñ4ˆàˆØÐà%�4Ô%ØØðð ð  œ;Ô1ðð ð	ð ˆDð ˆØð 	MÝ/ØÔ%ØÔ ØÔ(Øñ	ô ˆHð Ð!Ø˜Ô1°H·K²KÀÄÑ4LÔ4LÑLÑL�Ý(ØØØØ#Ô3Ø!Ô/ØÔ)Ø!Ô/ð
ñ 
ô 
ð 	
r3   )NNNNNNNr   )rF   rG   rH   Ú_tied_weights_keysÚ_tp_planÚ_pp_planr    r)   r   r   r+   rM  rJ   r	   rN  rO  r„   rC   r   rA   rK   rL   s   @r2   ra  ra  @  s`  ø€ € € € € à*Ð,GÐHÐØÐ2Ð3€HØ˜_Ð-°¨zÐ:Ð;€HðÐ/ð ð ð ð ð ð ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø,0Ø-.ðQ
ð Q
àÔ# dÑ*ðQ
ð œ tÑ+ðQ
ð Ô&¨Ñ-ð	Q
ð
  ™ðQ
ð Ô(¨4Ñ/ðQ
ð Ô  4Ñ'ðQ
ð # T™kðQ
ð ˜eœlÑ*ðQ
ð 
Ð*Ñ	*ðQ
ð Q
ð Q
ñ Ôñ „^ðQ
ð Q
ð Q
ð Q
ð Q
r3   ra  )ra  r/  r  )r   )rß   )Nr6   N)GÚcollections.abcr   Útypingr   r+   Útorch.nn.functionalr   r¨   r�   Ú r   r!  Úactivationsr   Úcache_utilsr	   r
   Ú
generationr   Úintegrationsr   r   r   r   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   Úutils.genericr   r   r   Úutils.output_capturingr   Úconfiguration_granitemoer    ÚModuler#   rN   r‡   r›   r½   rÏ   rØ   rJ   r„   rÞ   rI   rò   rô   r  r  r/  rC   r_  ra  Ú__all__r  r3   r2   ú<module>r‰     s‚  ðð, %Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð 0Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø YÐ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ð Ð˜YÑ'Ô'ðJð Jð Jð Jð J˜œ	ñ Jô Jñ (Ô'ðJð(><ð ><ð ><ð ><ð >< ¤	ñ ><ô ><ð ><ðB9ð 9ð 9ð 9ð 9˜2œ9ñ 9ô 9ð 9ð, ð$#ð $#ð $#ð $#ð $#˜œ	ñ $#ô $#ñ Ôð$#ðN?ð ?ð ?ð ?ð ?�B”Iñ ?ô ?ð ?ð"(ð (ð (ð ÐÐ*Ñ+Ô+ðð ð ñ ,Ô+ðð2	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð& ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð2 ÐÐ)Ñ*Ô*ð@)ð @)ð @)ð @)ð @)˜"œ)ñ @)ô @)ñ +Ô*ð@)ðF ð  ð  ð  ð  Ð7ñ  ô  ð  ðF ðUð Uð Uð Uð U ñ Uô Uñ „ðUð4 ðJ
ð J
ð J
ð J
ð J
Ð/ñ J
ô J
ñ „ðJ
ð^ #Ø
Ø*.ð	O&ð O&Ø”  e¤lÔ 3Ñ3°dÑ:ðO&à�t‘ðO&ð ”L 4Ñ'ð	O&ð
 „\�CÑðO&ð O&ð O&ð O&ðd ðe
ð e
ð e
ð e
ð e
Ð5°ñ e
ô e
ñ „ðe
ðP TÐ
SÐ
S€€€r3   