§
    ‚ŠtjFµ  ã                   ór  — d Z ddlZddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZmZ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- ddl.m/Z/  e'j0        e1¦  «        Z2 G d„ dej3        ¦  «        Z4dej5        de6dej5        fd„Z7	 d=dej3        dej5        d ej5        d!ej5        d"ej5        dz  d#e8d$e8fd%„Z9 G d&„ d'ej3        ¦  «        Z: G d(„ d)ej3        ¦  «        Z; G d*„ d+ej3        ¦  «        Z< G d,„ d-ej3        ¦  «        Z= G d.„ d/e¦  «        Z> G d0„ d1e¦  «        Z?e% G d2„ d3e ¦  «        ¦   «         Z@e% G d4„ d5e@¦  «        ¦   «         ZA G d6„ d7e@e¦  «        ZB e%d8¬9¦  «         G d:„ d;e@¦  «        ¦   «         ZCg d<¢ZDdS )>zPyTorch Zamba model.é    N)ÚCallable)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úlazy_load_kernel)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚCausalLMOutputWithPastÚ SequenceClassifierOutputWithPast)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úresolve_internal_import)Úcapture_outputsé   )ÚZambaConfigc                   ó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 )
ÚZambaRMSNormç�íµ ÷Æ°>ÚepsÚreturnNc                 ó¬   •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        || _        dS )z;
        ZambaRMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__r   Ú	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer#   Ú	__class__s      €úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/zamba/modeling_zamba.pyr'   zZambaRMSNorm.__init__2   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-   r2   Úinput_dtypeÚvariances       r0   ÚforwardzZambaRMSNorm.forward:   s|   € Ø#Ô)ˆØ%×(Ò(­¬Ñ7Ô7ˆØ ×$Ò$ QÑ'Ô'×,Ò,¨R¸Ð,Ñ>Ô>ˆØ%­¬°H¸tÔ?TÑ4TÑ(UÔ(UÑUˆØŒ{˜]×-Ò-¨kÑ:Ô:Ñ:Ð:r1   c                 óH   — t          | j        j        ¦  «        › d| j        › �S )Nz, eps=)Útupler+   Úshaper,   )r-   s    r0   Ú
extra_reprzZambaRMSNorm.extra_reprA   s&   € Ý˜œÔ)Ñ*Ô*ÐIÐI°$Ô2GÐIÐIÐIr1   )r"   )
Ú__name__Ú
__module__Ú__qualname__Úfloatr'   r)   ÚTensorr?   rC   Ú__classcell__©r/   s   @r0   r!   r!   1   sŒ   ø€ € € € € ð$ð $¨ð $¸$ð $ð $ð $ð $ð $ð $ð; U¤\ð ;°e´lð ;ð ;ð ;ð ;ðJð Jð Jð Jð Jð Jð Jr1   r!   r2   Ú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)rB   ÚexpandÚreshape)r2   rK   ÚbatchÚnum_key_value_headsÚslenÚhead_dims         r0   Ú	repeat_kvrS   F   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ÐTr1   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 ó  — 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 )Nr4   r   r5   )Údimr7   )ÚpÚtrainingr   )rS   Únum_key_value_groupsr)   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxr9   r8   r7   r[   r_   Ú
contiguous)rU   rV   rW   rX   rY   rZ   r[   ÚkwargsÚ
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r0   Úeager_attention_forwardrk   R   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à˜Ð$Ð$r1   c                   óÄ   ‡ — e Zd ZdZdedefˆ fd„Z	 ddej        dedej        dz  de	dz  d	e
e         d
eej        ej        dz  eej                 dz  f         fd„Zˆ xZS )ÚZambaAttentionaA  
    Multi-headed attention from 'Attention Is All You Need' paper. Modified to use sliding window attention: Longformer
    and "Generating Long Sequences with Sparse Transformers".

    Adapted from transformers.models.mistral.modeling_mistral.MistralAttention:
    The input dimension here is attention_hidden_size = 2 * hidden_size, and head_dim = attention_hidden_size // num_heads.
    The extra factor of 2 comes from the input being the concatenation of original_hidden_states with the output of the previous (mamba) layer
    (see fig. 2 in https://huggingface.co/papers/2405.16712).
    Additionally, replaced
    attn_weights = torch.matmul(query_states, key_states.transpose(2, 3)) / math.sqrt(self.head_dim) with
    attn_weights = torch.matmul(query_states, key_states.transpose(2, 3)) / math.sqrt(self.head_dim/2)
    ÚconfigÚ	layer_idxc                 óŽ  •— t          ¦   «                              ¦   «          || _        || _        |j        | _        |j        | _        |j        |j        z  | _	        |j
        | _
        | j        dz  dz  | _        d| _        |j        | _        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¬¦  «        | _        d S )Nr4   ç      à¿TF©Úbias)r&   r'   rn   ro   Úattention_hidden_sizeÚattention_head_dimrR   Únum_attention_headsrP   r`   Úmax_position_embeddingsrZ   Ú	is_causalÚattention_dropoutr   ÚLinearÚq_projÚk_projÚv_projr.   Úo_proj©r-   rn   ro   r/   s      €r0   r'   zZambaAttention.__init__y   s!  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒà%+Ô%AˆÔ"ØÔ1ˆŒØ$*Ô$>À&ÔB\Ñ$\ˆÔ!Ø'-Ô'EˆÔ$Øœ¨Ñ)¨dÑ2ˆŒØˆŒØ!'Ô!9ˆÔå”i Ô <¸fÔ>XÐ[_Ô[hÑ>hÐotÐuÑuÔuˆŒÝ”i Ô <¸fÔ>XÐ[_Ô[hÑ>hÐotÐuÑuÔuˆŒÝ”i Ô <¸fÔ>XÐ[_Ô[hÑ>hÐotÐuÑuÔuˆŒÝ”i Ô :¸T¼]Ñ JÈFÔL^ÐejÐkÑkÔkˆŒˆˆr1   Nr2   rY   Úpast_key_valuesrf   r$   c                 óä  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }	|                      |¦  «                             |¦  «                             dd¦  «        }
|�|                     |	|
|¦  «        \  }	}
t          j	        | j
        j        t          ¦  «        } || ||	|
|f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )Nr5   r   r4   rT   )r[   rZ   )rB   rR   r{   Úviewrb   r|   r}   Úupdater   Úget_interfacern   Ú_attn_implementationrk   r_   ry   rZ   rN   re   r~   )r-   r2   ro   rY   r€   rf   Úinput_shapeÚhidden_shapeÚquery_statesrg   rh   Úattention_interfacerj   ri   s                 r0   r?   zZambaAttention.forward‹   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ˆàÐ&Ø'6×'=Ò'=¸jÈ,ÐXaÑ'bÔ'bÑ$ˆJ˜å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r1   ©N)rD   rE   rF   Ú__doc__r   Úintr'   r)   rH   r   r   r   rA   r?   rI   rJ   s   @r0   rm   rm   k   sé   ø€ € € € € ðð ðl˜{ð l°sð lð lð lð lð lð lð. )-ð#)ð #)à”|ð#)ð ð#)ð œ tÑ+ð	#)ð
  ™ð#)ð Ð+Ô,ð#)ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð#)ð #)ð #)ð #)ð #)ð #)ð #)ð #)r1   rm   c                   ót   ‡ — e Zd ZdZdefˆ fd„Z	 d
dej        dedz  fd„Z	d
dedz  fd„Z
d
dedz  fd	„Zˆ xZS )ÚZambaMambaMixeruE  
    Compute âˆ†, A, B, C, and D the state space parameters and compute the `contextualized_states`.
    A, D are input independent (see Mamba paper [1] Section 3.5.2 "Interpretation of A" for why A isn't selective)
    âˆ†, B, C are input-dependent (this is a key difference between Mamba and the linear time invariant S4,
    and is why Mamba is called **selective** state spaces)

    This module differs from `transformers.models.mamba.modeling_mamba.MambaMixer` in two ways:
    - Added multi-head: the output of `self.in_proj` is split into `self.n_mamba_heads` heads, and each head
    undergoes an independent forward pass, identical to the original `MambaMixer`, up until the pre-activations of
    `self.out_proj`. The pre-activations, coming from different mamba heads, are then concatenated and fed into `self.out_proj`.
    rn   c           	      ó  •— t          ¦   «                              ¦   «          || _        || _        |j        | _        |j        | _        |j        | _        |j	        |j        z  | _
        |j        | _        |j        | _        | j
        | j        z  | _        |j        | _        |j        | _        t'          j        | j
        | j
        | j        | j        | j
        | j        dz
  ¬¦  «        | _        |j        | _        t0          |j                 | _        |j        | _        t'          j        | j        | j
        dz  | j        ¬¦  «        | _        t'          j        t?          j         | j        | j        | j        dz  z   | j        ¦  «        ¦  «        | _!        t'          j        t?          j         | j        | j        | j        ¦  «        dz
  dz  | j        dz  z  ¦  «        | _"        t'          j        t?          j         | j        | j        ¦  «        ¦  «        | _#        t?          j$        d| j        dz   t>          j%        ¬¦  «        d d d …f         }| &                    | j
        d¦  «         '                    ¦   «         }t'          j        t?          j(        |¦  «         )                    | j        | j        d¦  «        ¦  «        | _*        t'          j        t?          j+        | j        | j        ¦  «        ¦  «        | _,        t'          j        | j
        | j        | j        ¬¦  «        | _-        t]          d¦  «        a/ta          t^          d	d ¦  «        a1ta          t^          d
d ¦  «        a2t]          d¦  «        a3ti          tf          d¬¦  «        a5ta          tf          dd ¦  «        a6ta          tf          dd ¦  «        a7tq          tj          tl          td          tb          tn          f¦  «        a9tr          stt           ;                    d¦  «         |j<        |         | _=        d S )Nr   )Úin_channelsÚout_channelsrs   Úkernel_sizeÚgroupsÚpaddingr4   rr   g      à?©r7   r5   zcausal-conv1dÚcausal_conv1d_updateÚcausal_conv1d_fnz	mamba-ssmz8ops.triton.selective_state_update.selective_state_update)Úchained_pathÚselective_scan_fnÚmamba_inner_fnaq  The fast path is not available because one of `(selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn)` is None. To install follow https://github.com/state-spaces/mamba/#installation and https://github.com/Dao-AILab/causal-conv1d. If you want to use the naive implementation, set `use_mamba_kernels=False` in the model config)>r&   r'   rn   ro   r.   Úmamba_d_stateÚssm_state_sizeÚmamba_d_convÚconv_kernel_sizeÚmamba_expandÚintermediate_sizeÚmamba_dt_rankÚtime_step_rankÚn_mamba_headsÚmamba_head_dimÚmamba_conv_biasÚuse_conv_biasÚmamba_proj_biasÚuse_biasr   ÚConv1dÚconv1dÚhidden_mamba_actÚ
activationr
   ÚactÚuse_mamba_kernelsÚuse_fast_kernelsrz   Úin_projr(   r)   ÚzerosÚx_proj_weightÚdt_proj_weightÚdt_proj_biasÚaranger9   rM   re   ÚlogrN   ÚA_logr*   ÚDÚout_projr   Úcausal_conv1dÚgetattrr–   r—   Ú	mamba_ssmr   Úselective_state_updater™   rš   ÚallÚis_fast_path_availableÚloggerÚwarning_onceÚlayer_typesÚ
layer_type)r-   rn   ro   ÚAr/   s       €r0   r'   zZambaMambaMixer.__init__¾   s“  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒØ!Ô-ˆÔØ$Ô2ˆÔØ &Ô 3ˆÔØ!'Ô!4°vÔ7IÑ!IˆÔØ$Ô2ˆÔØ#Ô1ˆÔØ"Ô4¸Ô8JÑJˆÔØ#Ô3ˆÔØÔ.ˆŒÝ”iØÔ.ØÔ/ØÔ#ØÔ-ØÔ)ØÔ)¨AÑ-ð
ñ 
ô 
ˆŒð !Ô1ˆŒÝ˜&Ô1Ô2ˆŒà &Ô 8ˆÔõ ”y Ô!1°4Ô3IÈAÑ3MÐTXÔTaÐbÑbÔbˆŒõ  œ\ÝŒKØÔ"ØÔ# dÔ&9¸AÑ&=Ñ=ØÔ#ñô ñ
ô 
ˆÔõ !œlÝŒ[˜Ô+¨TÔ-@À$ÔBUÑVÔVÐY\Ñ\ØñàÔ! 3Ñ&ñ'ñ
ô 
ˆÔõ
 œL­¬°TÔ5GÈÔI\Ñ)]Ô)]Ñ^Ô^ˆÔõ ŒL˜˜DÔ/°!Ñ3½5¼=ÐIÑIÔIÈ$ÐPQÐPQÐPQÈ'ÔRˆØ�HŠH�TÔ+¨RÑ0Ô0×;Ò;Ñ=Ô=ˆÝ”\¥%¤)¨A¡,¤,×"6Ò"6°tÔ7IÈ4ÔK^Ð`bÑ"cÔ"cÑdÔdˆŒ
Ý”�eœj¨Ô);¸TÔ=PÑQÔQÑRÔRˆŒÝœ	 $Ô"8¸$Ô:JÐQUÔQ^Ð_Ñ_Ô_ˆŒõ )¨Ñ9Ô9ˆÝ&¥}Ð6LÈdÑSÔSÐÝ"¥=Ð2DÀdÑKÔKÐõ % [Ñ1Ô1ˆ	Ý!8ÝÐ$^ð"
ñ "
ô "
Ðõ $¥IÐ/BÀDÑIÔIÐÝ ¥Ð,<¸dÑCÔCˆõ "%Ý#Õ%6Õ8HÕJ^Õ`nÐoñ"
ô "
Ðõ &ð 	Ý×Òð^ñô ð ð !Ô,¨YÔ7ˆŒˆˆr1   Nr2   Úcache_paramsc                 ó  — |j         \  }}}|d uo|                     | j        ¦  «        o|dk    }|                      |¦  «                             dd¦  «        }|                     |dd|¦  «                             dd¬¦  «        \  }}	|                     d¦  «                             ¦   «         }|	                     d¦  «        }	|	 	                    || j
        d|¦  «                             dd¦  «        }	| j        j                             | j        j                             d¦  «        | j        j                             d¦  «        ¦  «        }
|rft          |                     d¦  «        |j        | j                 j        d         |
| j        j        | j        ¦  «        }|                     d¦  «        }nè|�0t)          j        |dk    ¦  «        s||                     d¦  «        z  }|�`t,          j                             || j        |j         d         z
  df¦  «        }|                     || j        ¦  «        d| j         d …f         }t7          ||
| j        j        | j        ¬¦  «        }|�0t)          j        |dk    ¦  «        s||                     d¦  «        z  }| 	                    d| j
        | j        |¦  «                             dd¦  «        }| j        d d …d d d …d d …f         |z                       dd¦  «        }t)          j        || j        | j         | j         gd¬¦  «        \  }}}| j!        d d …d f         |                     dd¦  «        z  }t)          j"        | j#         $                    ¦   «         ¦  «         }| j%        �| j%         $                    ¦   «         nd }t)          j&        |d|f|j'        |j(        ¬	¦  «        }|rÊtS          | j
        ¦  «        D ]³}tU          |j        | j                 j+        d         d d …|f         ||ddf         ||ddf         ||         ||d d …df         ||d d …df         | j,        |         |	|ddf         ||         d
¬¦
  «
                             d¦  «        }t)          j-        ||fd¬¦  «        }Œ´�nEt)          j&        |d| j        | j         f|j'        |j(        ¬	¦  «        }tS          | j
        ¦  «        D ]â}t]          ||         ||         ||         ||                              dd¦  «        ||                              dd¦  «        | j,        |          $                    ¦   «         |	|         ||         d
d
¬¦
  «
        \  }}t)          j-        ||fd¬¦  «                             ¦   «         }t)          j-        ||                     d¦  «        fd¬¦  «        }Œã|�|�| /                    || j        ¦  «         |  0                    |                     dd¦  «        ¦  «        }|S )Nr   r4   r5   ©r]   r   .)r¬   éþÿÿÿ©Údevicer7   T)Údt_softplus)Údelta_softplusÚreturn_last_state)1rB   Úhas_previous_statero   r°   rb   r‚   ÚchunkÚsqueezere   rN   r£   rª   r+   Úsizer–   ÚlayersÚconv_statesrs   r¬   Ú	unsqueezer)   r¾   r   rc   Úpadrž   Úupdate_conv_stater—   r¤   r²   Úsplitr¢   rœ   r³   Úexpr·   rG   r´   ÚemptyrÊ   r7   Úranger½   Úrecurrent_statesr¸   Úcatr™   Úupdate_recurrent_stater¹   )r-   r2   rÅ   rY   Ú
batch_sizeÚseq_lenÚ_Úuse_precomputed_statesÚprojected_statesÚgateÚconv_weightsrÓ   Ússm_parametersÚ	time_stepÚBÚCÚdiscrete_time_steprÄ   Útime_proj_biasÚscan_outputsÚnÚscan_outputs_Ú	ssm_stateÚ
ssm_state_Úcontextualized_statess                            r0   Úcuda_kernels_forwardz$ZambaMambaMixer.cuda_kernels_forward  s#  € ð "/Ô!4Ñˆ
�G˜Qà Ð$Ði¨×)HÒ)HÈÌÑ)XÔ)XÐiÐ]dÐhiÒ]ið 	ð
  Ÿ<š<¨Ñ6Ô6×@Ò@ÀÀAÑFÔFÐà.×3Ò3°JÀÀAÀwÑOÔO×UÒUÐVWÐ]^ÐUÑ_Ô_Ñˆ�tØ%×-Ò-¨aÑ0Ô0×;Ò;Ñ=Ô=ˆØ�|Š|˜A‰ŒˆØ�|Š|˜J¨Ô(:¸BÀÑHÔH×RÒRÐSTÐVWÑXÔXˆð ”{Ô)×.Ò.¨t¬{Ô/A×/FÒ/FÀqÑ/IÔ/IÈ4Ì;ÔK]×KbÒKbÐcdÑKeÔKeÑfÔfˆØ!ð 	LÝ0Ø×%Ò% bÑ)Ô)ØÔ# D¤NÔ3Ô?ÀÔBØØ”Ô Ø”ñô ˆMð *×3Ò3°BÑ7Ô7ˆMˆMàÐ)µ%´)¸NÈaÒ<OÑ2PÔ2PÐ)Ø -°×0HÒ0HÈÑ0KÔ0KÑ K�ØÐ'Ý œm×/Ò/°ÀÔ@UÐXeÔXkÐlnÔXoÑ@oÐqrÐ?sÑtÔt�Ø*×<Ò<¸[È$Ì.ÑYÔYØ˜$Ô/Ð/Ð1Ð1Ð1ô�õ -¨]¸LÈ$Ì+ÔJZÐgkÔgvÐwÑwÔwˆMØÐ)µ%´)¸NÈaÒ<OÑ2PÔ2PÐ)Ø -°×0HÒ0HÈÑ0KÔ0KÑ K�ð
 &×-Ò-¨b°$Ô2DÀdÔFYÐ[bÑcÔc×mÒmÐnoÐqrÑsÔsˆØÔ,¨Q¨Q¨Q°°a°a°a¸¸¸¨]Ô;¸mÑK×VÒVÐWYÐ[]Ñ^Ô^ˆåœ+Ø˜TÔ0°$Ô2EÀtÔGZÐ[Ðacð
ñ 
ô 
‰ˆ	�1�að "Ô0°°°°D°Ô9¸I×<OÒ<OÐPRÐTVÑ<WÔ<WÑWÐåŒY�t”z×'Ò'Ñ)Ô)Ñ*Ô*Ð*ˆð 7;Ô6GÐ6S˜Ô*×0Ò0Ñ2Ô2Ð2ÐY]ˆÝ”{ J°°7Ð#;ÀMÔDXÐ`mÔ`sÐtÑtÔtˆà!ð &	OÝ˜4Ô-Ñ.Ô.ð Oð O�Ý 6Ø Ô'¨¬Ô7ÔHÈÔKÈAÈAÈAÈqÈDÔQØ! ! S¨! )Ô,Ø& q¨#¨q yÔ1Ø�a”DØ�a˜˜˜˜A�g”JØ�a˜˜˜˜A�g”JØ”F˜1”IØ˜˜C ˜”OØ" 1Ô%Ø $ð!ñ !ô !÷ ’)˜B‘-”-ð õ  %œy¨,¸Ð)FÈAÐNÑNÔN��ñOõ  œØ˜Q Ô 3°TÔ5HÐIØ$Ô+Ø#Ô)ðñ ô ˆIõ
 ˜4Ô-Ñ.Ô.ð Sð S�Ý,=Ø! !Ô$Ø& qÔ)Ø�a”DØ�a”D—N’N 1 aÑ(Ô(Ø�a”D—N’N 1 aÑ(Ô(Ø”F˜1”I—O’OÑ%Ô%Ø˜”GØ" 1Ô%Ø#'Ø&*ð-ñ -ô -Ñ)�˜zõ  %œy¨,¸Ð)FÈAÐNÑNÔN×YÒYÑ[Ô[�Ý!œI y°*×2FÒ2FÀqÑ2IÔ2IÐ&JÐPQÐRÑRÔR�	�	ØÐ$¨Ð)AØ×3Ò3°I¸t¼~ÑNÔNÐNð !%§¢¨l×.DÒ.DÀQÈÑ.JÔ.JÑ KÔ KÐØ$Ð$r1   c           
      óÌ  — |j         \  }}}|j        }|                      |¦  «                             dd¦  «        }|                     |dd|¦  «                             dd¬¦  «        \  }	}
|	                     d¦  «                             ¦   «         }	|
                     d¦  «        }
|
                     || j	        d|¦  «                             dd¦  «        }
|�J| 
                    | j        ¦  «        r0|j        | j                 j        d                              ¦   «         }n/t          j        || j	        | j        | j        f|	j        |¬¦  «        }|��Å| 
                    | j        ¦  «        r´|dk    r®|                     |	| j        ¦  «        d| j         d …f         }t          j        || j        j        d d …dd d …f         z  d¬¦  «        }	| j        r|	| j        j        z  }	|                      |	¦  «                             |¦  «                             d¦  «        }	�n]|�0|	|d d …|	j         d          d …f                              d¦  «        z  }	t<          j                              |	| j        |	j         d         z
  df¦  «        }|                     || j        ¦  «        d| j         d …f         }|                      |                      |	¦  «        dd |…f         ¦  «        }	|�0|	|d d …|	j         d          d …f                              d¦  «        z  }	nf|�|	|                     d¦  «        z  }	|                      |                      |	¦  «        dd |…f         ¦  «        }	|�|	|                     d¦  «        z  }	|	                     d| j	        | j        |¦  «                             dd¦  «        }	| j!        d d …d d d …d d …f         |	z                       dd¦  «        }t          j"        || j#        | j        | j        gd¬¦  «        \  }}}| j$        d d …d f         |                     dd¦  «        z  | j%        d d …d d d …d f         z   }t<          j         &                    |¦  «        }t          j'        | j(         )                    ¦   «         ¦  «         }t          j'        |d d …d d d …d d d …f         |d d …d d …d d …d d …d f         z  ¦  «        }|d d …d d …d d …d d …d f         |d d …d d …d d d …d d …f          )                    ¦   «         z  }||	d d …d d …d d …d d …d f          )                    ¦   «         z  }g }tU          |¦  «        D ]Ü}|d d …d d …d d …|d d …f                              dd¦  «        |z  |d d …d d …d d …|d d …f                              dd¦  «        z   }t          j+        |                     dd¦  «                             |¦  «        |d d …d d …|d d …f                              d¦  «        ¦  «        }| ,                    |d d …d d …d d …df         ¦  «         ŒÝt          j-        |d¬¦  «        }||	| j.        d d …d d d …d f         z  z   }||                      |
¦  «        z  }|�| /                    || j        ¦  «         |  0                    |                     dd¦  «                             |d|¦  «                             dd¦  «        ¦  «        }|S )	Nr   r4   r5   rÇ   r   rÉ   .rÈ   )1rB   r7   r°   rb   r‚   rÏ   rÐ   re   rN   r£   rÎ   ro   rÒ   rÛ   Úcloner)   r±   r¤   rœ   rÊ   rÖ   rž   Úsumrª   r+   r¦   rs   r­   r8   rÔ   r   rc   rÕ   r²   r×   r¢   r³   r´   ÚsoftplusrØ   r·   rG   rÚ   ra   ÚappendÚstackr¸   rÝ   r¹   )r-   Úinput_statesrÅ   rY   rÞ   rß   rà   r7   râ   r2   rã   rî   Ú
conv_staterå   ræ   rç   rè   ré   rÄ   Ú
discrete_AÚ
discrete_BÚdeltaB_urë   ÚiÚscan_outputrð   s                             r0   Úslow_forwardzZambaMambaMixer.slow_forwardt  s|  € Ø!-Ô!3Ñˆ
�G˜QØÔ"ˆàŸ<š<¨Ñ5Ô5×?Ò?ÀÀ1ÑEÔEÐà.×3Ò3°JÀÀAÀwÑOÔO×UÒUÐVWÐ]^ÐUÑ_Ô_Ñˆ�tØ%×-Ò-¨aÑ0Ô0×;Ò;Ñ=Ô=ˆØ�|Š|˜A‰ŒˆØ�|Š|˜J¨Ô(:¸BÀÑHÔH×RÒRÐSTÐVWÑXÔXˆàÐ#¨×(GÒ(GÈÌÑ(WÔ(WÐ#à$Ô+¨D¬NÔ;ÔLÈQÔO×UÒUÑWÔWˆIˆIåœØ˜TÔ/°Ô1DÀdÔFYÐZØ$Ô+Øðñ ô ˆIð Ñ#Ø×.Ò.¨t¬~Ñ>Ô>ð oÀ7ÈaÂ<À<Ø)×;Ò;¸MÈ4Ì>ÑZÔZØ˜$Ô/Ð/Ð1Ð1Ð1ô�
õ !&¤	¨*°t´{Ô7IÈ!È!È!ÈQÐPQÐPQÐPQÈ'Ô7RÑ*RÐXZÐ [Ñ [Ô [�ØÔ%ð 6Ø! T¤[Ô%5Ñ5�MØ $§¢¨Ñ 7Ô 7× :Ò :¸5Ñ AÔ A× KÒ KÈBÑ OÔ O�‘à!Ð-Ø$1°NÀ1À1À1À}ÔGZÐ[]ÔG^ÐF^ÐF`ÐF`ÐC`Ô4a×4kÒ4kÐlmÑ4nÔ4nÑ$n�MÝœ]×.Ò.¨}¸tÔ?TÐWdÔWjÐkmÔWnÑ?nÐpqÐ>rÑsÔs�
Ø)×;Ò;¸JÈÌÑWÔWÐX[Ð^bÔ^sÐ]sÐ]uÐ]uÐXuÔv�
Ø $§¢¨¯ª°]Ñ)CÔ)CÀCÈÈ'ÈÀMÔ)RÑ SÔ S�Ø!Ð-Ø$1°NÀ1À1À1À}ÔGZÐ[]ÔG^ÐF^ÐF`ÐF`ÐC`Ô4a×4kÒ4kÐlmÑ4nÔ4nÑ$n�MøàÐ)Ø -°×0HÒ0HÈÑ0KÔ0KÑ K�Ø ŸHšH T§[¢[°Ñ%?Ô%?ÀÀXÀgÀXÀÔ%NÑOÔOˆMØÐ)Ø -°×0HÒ0HÈÑ0KÔ0KÑ K�ð &×-Ò-¨b°$Ô2DÀdÔFYÐ[bÑcÔc×mÒmÐnoÐqrÑsÔsˆØÔ,¨Q¨Q¨Q°°a°a°a¸¸¸¨]Ô;¸mÑK×VÒVÐWYÐ[]Ñ^Ô^ˆåœ+Ø˜TÔ0°$Ô2EÀtÔGZÐ[Ðacð
ñ 
ô 
‰ˆ	�1�að #Ô1°!°!°!°T°'Ô:¸Y×=PÒ=PÐQSÐUWÑ=XÔ=XÑXÐ\`Ô\mØˆAˆAˆt�Q�Q�Q˜Ðô]
ñ 
Ðõ  œ]×3Ò3Ð4FÑGÔGÐõ ŒY�t”z×'Ò'Ñ)Ô)Ñ*Ô*Ð*ˆÝ”Y˜q    D¨!¨!¨!¨T°1°1°1Ð!4Ô5Ð8JÈ1È1È1ÈaÈaÈaÐQRÐQRÐQRÐTUÐTUÐTUÐW[ÐK[Ô8\Ñ\Ñ]Ô]ˆ
Ø'¨¨¨¨1¨1¨1¨a¨a¨a°°°°DÐ(8Ô9¸A¸a¸a¸aÀÀÀÀDÈ!È!È!ÈQÈQÈQÐ>NÔ<O×<UÒ<UÑ<WÔ<WÑWˆ
Ø ¨a¨a¨a°°°°A°A°A°q°q°q¸$Ð.>Ô ?× EÒ EÑ GÔ GÑGˆàˆÝ�w‘”ð 	9ð 	9ˆAØ" 1 1 1 a a a¨¨¨¨A¨q¨q¨q =Ô1×;Ò;¸A¸qÑAÔAÀIÑMÐPXÐYZÐYZÐYZÐ\]Ð\]Ð\]Ð_`Ð_`Ð_`ÐbcÐefÐefÐefÐYfÔPg×PqÒPqÐrsÐuvÑPwÔPwÑwˆIÝœ, y×':Ò':¸1¸aÑ'@Ô'@×'CÒ'CÀEÑ'JÔ'JÈAÈaÈaÈaÐQRÐQRÐQRÐTUÐWXÐWXÐWXÈjÌM×LcÒLcÐdfÑLgÔLgÑhÔhˆKØ×Ò ¨A¨A¨A¨q¨q¨q°!°!°!°Q¨JÔ 7Ñ8Ô8Ð8Ð8Ý”k ,°BÐ7Ñ7Ô7ˆØ! ]°T´V¸A¸A¸A¸tÀQÀQÀQÈÐ<LÔ5MÑ%MÑNˆØ! D§H¢H¨T¡N¤NÑ2ˆàÐ#Ø×/Ò/°	¸4¼>ÑJÔJÐJð !%§¢Ø×!Ò! ! QÑ'Ô'×/Ò/°
¸BÀÑHÔH×RÒRÐSTÐVWÑXÔXñ!
ô !
Ðð %Ð$r1   c                 ó  — t          t          t          t          t          t
          f¦  «        }| j        r<|rd| j        j        j	        vrt          d¦  «        ‚|                      |||¬¦  «        S |                      |||¬¦  «        S )NÚcudazôFast Mamba kernels are not available. Make sure to they are installed and that the mamba module is on a CUDA device. lease run 'pip install causal-conv1d>=1.2.0' and 'pip install mamba-ssm', or set use_mamba_kernels=False in the model's config.)rY   )r¾   r½   r™   r—   r–   rš   r¯   r²   rÊ   ÚtypeÚ
ValueErrorrñ   rÿ   )r-   r2   rÅ   rY   rf   r¿   s         r0   r?   zZambaMambaMixer.forwardÈ  sž   € Ý!$Ý#Õ%6Õ8HÕJ^Õ`nÐoñ"
ô "
Ðð Ô ð 	iØ)ð ¨V¸4Ô;MÔ;TÔ;YÐ-YÐ-YÝ ðiñô ð ð
 ×,Ò,¨]¸LÐYgÐ,ÑhÔhÐhØ× Ò  °È^Ð Ñ\Ô\Ð\r1   )NN)rD   rE   rF   r‹   r   r'   r)   rH   r   rñ   rÿ   r?   rI   rJ   s   @r0   rŽ   rŽ   ±   sí   ø€ € € € € ð
ð 
ðO8˜{ð O8ð O8ð O8ð O8ð O8ð O8ðd ^bðc%ð c%Ø"œ\ðc%Ø9>À¹ðc%ð c%ð c%ð c%ðJR%ð R%°u¸t±|ð R%ð R%ð R%ð R%ðh]ð ]°5¸4±<ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]r1   rŽ   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚZambaMLPc                 ó˜  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _	        t          |j                 | _        d S ©NFrr   )r&   r'   rn   r.   r    r   rz   Ú	gate_projÚup_projÚ	down_projr
   Ú
hidden_actÚact_fn©r-   rn   r/   s     €r0   r'   zZambaMLP.__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Ô.Ô/ˆŒˆˆr1   c                 ó¨   — |                       |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        }|S rŠ   )r
  r  r  r	  )r-   Úxr
  s      r0   r?   zZambaMLP.forwardä  sA   € Ø—N’N 4§;¢;¨t¯~ª~¸aÑ/@Ô/@Ñ#AÔ#AÀDÇLÂLÐQRÁOÄOÑ#SÑTÔTˆ	ØÐr1   )rD   rE   rF   r'   r?   rI   rJ   s   @r0   r  r  Ù  sG   ø€ € € € € ð0ð 0ð 0ð 0ð 0ðð ð ð ð ð ð r1   r  c                   óà   ‡ — e Zd Zddededz  fˆ fd„Z	 	 	 ddej        dej        dedej        dz  d	edz  d
e	dz  de
e         deej        eej        ej        f         dz  f         fd„Zˆ xZS )ÚZambaAttentionDecoderLayerNrn   ro   c                 ó  •— t          ¦   «                              ¦   «          t          ||¦  «        | _        t	          |¦  «        | _        t          |j        |j        ¬¦  «        | _	        t          |j
        |j        ¬¦  «        | _        d S )N©r#   )r&   r'   rm   Ú	self_attnr  Úfeed_forwardr!   rt   Úrms_norm_epsÚinput_layernormr.   Úpre_ff_layernormr   s      €r0   r'   z#ZambaAttentionDecoderLayer.__init__ê  sv   ø€ Ý‰Œ×ÒÑÔÐÝ'¨°	Ñ:Ô:ˆŒå$ VÑ,Ô,ˆÔÝ+¨FÔ,HÈfÔNaÐbÑbÔbˆÔÝ ,¨VÔ-?ÀVÔEXÐ YÑ YÔ YˆÔÐÐr1   Fr2   Úoriginal_hidden_statesrY   r€   Ú	use_cacherf   r$   c           	      óà   — t          j        ||gd¬¦  «        }|                      |¦  «        } | j        d|||||dœ|¤Ž\  }}|                      |¦  «        }|                      |¦  «        }|S )ac  
        Args:
            hidden_states (`torch.FloatTensor`): output of previous Mamba layer of shape `(batch, seq_len, embed_dim)`
            original_hidden_states (`torch.FloatTensor`): word embedding output of shape `(batch, seq_len, embed_dim)`.
                This is concatenated with `hidden_states` (which is the output of the previous (mamba) layer). The
                concatenated tensor is then used as input of the pre-attention RMSNorm
                (see fig. 2 in https://huggingface.co/papers/2405.16712).
            layer_idx (`int`): layer_idx in the forward pass. Used to distinguish Zamba's tied transformer layers.
            attention_mask (`torch.FloatTensor`, *optional*): attention mask of size
                `(batch, sequence_length)` where padding elements are indicated by 0.
            past_key_values (`Cache`, *optional*): cached past key and value projection states
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
        r5   rÇ   )r2   ro   rY   r€   r  © )r)   Úconcatenater  r  r  r  )	r-   r2   r  ro   rY   r€   r  rf   rà   s	            r0   r?   z"ZambaAttentionDecoderLayer.forwardò  sœ   € õ2 Ô)¨=Ð:PÐ*QÐWYÐZÑZÔZˆØ×,Ò,¨]Ñ;Ô;ˆØ)˜4œ>ð 
Ø'ØØ)Ø+Øð
ð 
ð ð
ð 
Ñˆ�qð ×-Ò-¨mÑ<Ô<ˆØ×)Ò)¨-Ñ8Ô8ˆàÐr1   rŠ   )NNF)rD   rE   rF   r   rŒ   r'   r)   rH   r   Úboolr   r   rA   ÚFloatTensorr?   rI   rJ   s   @r0   r  r  é  s  ø€ € € € € ðZð Z˜{ð Z°s¸T±zð Zð Zð Zð Zð Zð Zð /3Ø(,Ø!&ð'ð 'à”|ð'ð !&¤ð'ð ð	'ð
 œ tÑ+ð'ð  ™ð'ð ˜$‘;ð'ð Ð+Ô,ð'ð 
ˆuÔ  %¨Ô(9¸5Ô;LÐ(LÔ"MÐPTÑ"TÐTÔ	Uð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r1   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j        dz  d	ej        dz  d
edz  de	dz  dej
        dz  dej        dz  dee         deej        eej        ej        f         dz  f         fd„Zˆ xZS )ÚZambaMambaDecoderLayerrn   ro   c                 óÂ   •— t          ¦   «                              ¦   «          t          ||¬¦  «        | _        t	          |j        |j        ¬¦  «        | _        || _        d S )N)rn   ro   r  )	r&   r'   rŽ   Úmambar!   r.   r  r  ro   r   s      €r0   r'   zZambaMambaDecoderLayer.__init__  sS   ø€ Ý‰Œ×ÒÑÔÐÝ$¨F¸iÐHÑHÔHˆŒ
Ý+¨FÔ,>ÀFÔDWÐXÑXÔXˆÔØ"ˆŒˆˆr1   NFr2   r  rY   Úcausal_maskr€   r  Úposition_idsÚtransformer_hidden_statesrf   r$   c
                 ór   — |}|	�||	z   n|}|                       |¦  «        } | j        d|||dœ|
¤Ž}||z   }|S )aX  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`, *optional*): attention mask of size
                `(batch, sequence_length)` where padding elements are indicated by 0.
            past_key_values (`Cache`, *optional*): cached past key and value projection states
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
        N)r2   rÅ   rY   r  )r  r#  )r-   r2   r  ro   rY   r$  r€   r  r%  r&  rf   Úresiduals               r0   r?   zZambaMambaDecoderLayer.forward#  s|   € ð0 !ˆð
 :SÐ9^ˆMÐ5Ñ5Ð5Ðdqð 	ð ×,Ò,¨]Ñ;Ô;ˆà"˜œ
ð 
Ø'Ø(Ø)ð
ð 
ð ð	
ð 
ˆð ! =Ñ0ˆàÐr1   )NNNNNFNN)rD   rE   rF   r   rŒ   r'   r)   rH   r   r  Ú
LongTensorr   r   rA   r  r?   rI   rJ   s   @r0   r!  r!    sE  ø€ € € € € ð#˜{ð #°sð #ð #ð #ð #ð #ð #ð 7;Ø $Ø.2Ø+/Ø(,Ø!&Ø04Ø9=ð*ð *à”|ð*ð !&¤¨tÑ 3ð*ð ˜‘:ð	*ð
 œ tÑ+ð*ð ”\ DÑ(ð*ð  ™ð*ð ˜$‘;ð*ð Ô&¨Ñ-ð*ð $)¤<°$Ñ#6ð*ð Ð+Ô,ð*ð 
ˆuÔ  %¨Ô(9¸5Ô;LÐ(LÔ"MÐPTÑ"TÐTÔ	Uð*ð *ð *ð *ð *ð *ð *ð *r1   r!  c                   ó  ‡ — e Zd Zdedej        defˆ fd„Z	 	 	 	 	 	 ddej	        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dz  dee         deej        eej        ej        f         dz  f         fd„Zˆ xZS )ÚZambaHybridLayerÚshared_transfÚlinearr#  c                 ór   •— t          ¦   «                              ¦   «          || _        || _        || _        d S rŠ   )r&   r'   r,  r-  Úmamba_decoder)r-   r,  r-  r#  r/   s       €r0   r'   zZambaHybridLayer.__init__Q  s6   ø€ Ý‰Œ×ÒÑÔÐØ*ˆÔØˆŒØ"ˆÔÐÐr1   NFr2   r  ro   rY   r$  r€   r  rf   r$   c           	      ó~   —  | j         |f|||||dœ|¤Ž}	|                      |	¦  «        }	 | j        |f|	|||dœ|¤Ž}|S )aF  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            original_hidden_states (`torch.FloatTensor`): word embedding output that will be concatenated with
            hidden activations to form the input of the shared transformer layer.
            layer_idx (`int`): layer number.
            attention_mask (`torch.FloatTensor`, *optional*): attention mask of size
                `(batch, sequence_length)` where padding elements are indicated by 0.
            past_key_values (`Cache`, *optional*): cached past key and value projection states
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
        )r  ro   rY   r€   r  )r&  rY   r€   r  )r,  r-  r/  )
r-   r2   r  ro   rY   r$  r€   r  rf   r&  s
             r0   r?   zZambaHybridLayer.forwardW  s“   € ð2 %7 DÔ$6Øð%
à#9ØØ&Ø+Øð%
ð %
ð ð%
ð %
Ð!ð %)§K¢KÐ0IÑ$JÔ$JÐ!à*˜Ô*Øð
à&?Ø)Ø+Øð
ð 
ð ð
ð 
ˆð Ðr1   )NNNNNF)rD   rE   rF   r  r   rz   r!  r'   r)   rH   rŒ   r   r  r   r   rA   r  r?   rI   rJ   s   @r0   r+  r+  P  s'  ø€ € € € € ð#Ð&@ð #È"Ì)ð #Ð\rð #ð #ð #ð #ð #ð #ð 7;Ø $Ø.2Ø+/Ø(,Ø!&ð-ð -à”|ð-ð !&¤¨tÑ 3ð-ð ˜‘:ð	-ð
 œ tÑ+ð-ð ”\ DÑ(ð-ð  ™ð-ð ˜$‘;ð-ð Ð+Ô,ð-ð 
ˆuÔ  %¨Ô(9¸5Ô;LÐ(LÔ"MÐPTÑ"TÐTÔ	Uð-ð -ð -ð -ð -ð -ð -ð -r1   r+  c                   ó€   ‡ — e Zd ZU eed<   dZdZddgZdgZdZ	dZ
dZeedœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )	ÚZambaPreTrainedModelrn   ÚmodelTr+  r!  r€   )r2   Ú
attentionsc                 óÖ  •— | j         j        }t          ¦   «                              |¦  «         t	          |t
          ¦  «        �r$t          j        |j        d|¬¦  «         | j         j	        dz  }t          j
        |j        | |¦  «         | j         j        | j         j        z  | j         j        z  }t          j        t          j        | j         j        |¦  «        t%          j        | j         j        ¦  «        t%          j        | j         j        ¦  «        z
  z  t%          j        | j         j        ¦  «        z   ¦  «                             | j         j        ¬¦  «        }|t          j        t          j        | ¦  «         ¦  «        z   }t          j        |j        |¦  «         t          j        d|j        dz   t          j        ¬¦  «        d d d …f         }|                     |j        d¦  «                              ¦   «         }t          j        |j!        t          j        |¦  «         "                    |j        |j#        d¦  «        ¦  «         t          j$        |j%        ¦  «         d S d S )NrT   )r;   Ústdrq   )Úminr   r•   r5   )&rn   Úinitializer_ranger&   Ú_init_weightsÚ
isinstancerŽ   ÚinitÚnormal_r²   r¡   Úuniform_r³   rŸ   r.   r£   r)   rØ   ÚrandÚmathr¶   Útime_step_maxÚtime_step_minÚclampÚtime_step_floorÚexpm1Úcopy_r´   rµ   rœ   r9   rM   r    re   r·   rN   r¤   Úones_r¸   )	r-   rU   r6  Údt_init_stdr¤   ÚdtÚinv_dtrÄ   r/   s	           €r0   r9  z"ZambaPreTrainedModel._init_weights–  s   ø€ àŒkÔ+ˆÝ‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�oÑ.Ô.ñ 	!ÝŒL˜Ô-°C¸SÐAÑAÔAÐAØœ+Ô3°TÑ9ˆKÝŒM˜&Ô/°+°¸{ÑKÔKÐKà!œ[Ô5¸¼Ô8OÑOÐSWÔS^ÔSlÑlˆNÝ”Ý”
˜4œ;Ô4°nÑEÔEÝ”8˜DœKÔ5Ñ6Ô6½¼À$Ä+ÔB[Ñ9\Ô9\Ñ\ñ^å”(˜4œ;Ô4Ñ5Ô5ñ6ñô ÷ Še˜œÔ3ˆeÑ4Ô4ð	 ð �%œ)¥U¤[°"°Ñ%5Ô%5Ð$5Ñ6Ô6Ñ6ˆFÝŒJ�vÔ*¨FÑ3Ô3Ð3å”˜Q Ô 5¸Ñ 9ÅÄÐOÑOÔOÐPTÐVWÐVWÐVWÐPWÔXˆAØ—’˜Ô1°2Ñ6Ô6×AÒAÑCÔCˆAÝŒJ�v”|¥U¤Y¨q¡\¤\×%9Ò%9¸&Ô:NÐPVÔPeÐgiÑ%jÔ%jÑkÔkÐkÝŒJ�v”xÑ Ô Ð Ð Ð ð%	!ð 	!r1   )rD   rE   rF   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_is_statefulr!  rm   Ú_can_record_outputsr)   Úno_gradr9  rI   rJ   s   @r0   r2  r2  ‡  sž   ø€ € € € € € àÐÐÑØÐØ&*Ð#Ø+Ð-EÐFÐØ#4Ð"5ÐØÐØ€NØ€Là/Ø$ðð Ðð
 €U„]�_„_ð!ð !ð !ð !ñ „_ð!ð !ð !ð !ð !r1   r2  c                   óì   ‡ — e Zd 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ez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )Ú
ZambaModelz›
    Transformer decoder consisting of *config.num_hidden_layers* layers. Each layer is a [`ZambaDecoderLayer`]

    Args:
        config: ZambaConfig
    rn   c                 ó  •— t          ¦   «                              |¦  «         |j        | _        |j        | _        t          j        |j        |j        | j        ¦  «        | _        |j	        | _	        g }d | _
        t          | j	        ¦  «        D ]¦\  }}t          ||¬¦  «        }|dk    rut          j        | j        j        | j        j        d¬¦  «        }|                     t!          t#          |¦  «        ||¦  «        ¦  «         | j
        €d|› d�d|› d�i| _
        Œ‘|                     |¦  «         Œ§t          j        |¦  «        | _        t)          |j        |j        ¬	¦  «        | _        d| _        |                      ¦   «          d S )
N)ro   ÚhybridFrr   z
layers.(?!z\.)\d+.shared_transfzlayers.z.shared_transfr  )r&   r'   Úpad_token_idÚpadding_idxÚ
vocab_sizer   Ú	Embeddingr.   Úembed_tokensÚlayers_block_typeÚ_tied_weights_keysÚ	enumerater!  rz   rn   rö   r+  r  Ú
ModuleListrÒ   r!   r  Úfinal_layernormÚgradient_checkpointingÚ	post_init)r-   rn   rÒ   Úlayer_idrÃ   r#  r-  r/   s          €r0   r'   zZambaModel.__init__¸  s�  ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø!Ô.ˆÔØ Ô+ˆŒåœL¨Ô):¸FÔ<NÐPTÔP`ÑaÔaˆÔØ!'Ô!9ˆÔØˆØ"&ˆÔÝ$-¨dÔ.DÑ$EÔ$Eð 
	%ð 
	%Ñ ˆH�jÝ*¨6¸XÐFÑFÔFˆEØ˜XÒ%Ð%Ýœ 4¤;Ô#:¸D¼KÔ<SÐZ_Ð`Ñ`Ô`�Ø—’Õ.Õ/IÈ&Ñ/QÔ/QÐSYÐ[`ÑaÔaÑbÔbÐbØÔ*Ð2àD hÐDÐDÐDÐFhÐPXÐFhÐFhÐFhð/�DÔ+øð —’˜eÑ$Ô$Ð$Ð$Ý”m FÑ+Ô+ˆŒå+¨FÔ,>ÀFÔDWÐXÑXÔXˆÔà&+ˆÔ#à�ŠÑÔÐÐÐr1   NÚ	input_idsrY   r%  r€   Úinputs_embedsr  rf   r$   c                 óH  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        }|}t          j        |¦  «        }	|r|€t	          | j        ¬¦  «        }|€V|�|                     ¦   «         nd}
t          j        |j        d         |j	        ¬¦  «        |
z   }| 
                    d¦  «        }t          | j        ||||¬¦  «        }t          | j        ¦  «        D ]\  }} |||	|||f||dœ|¤Ž}Œ|                      |¦  «        }t          ||r|nd ¬¦  «        S )	NzaYou cannot specify both input_ids and inputs_embeds at the same time, and must specify either one)rn   r   r   ©rÊ   )rn   rf  rY   r€   r%  )r€   r  )Úlast_hidden_stater€   )r  r\  r)   ró   r   rn   Úget_seq_lengthrµ   rB   rÊ   rÔ   r   r_  rÒ   ra  r   )r-   re  rY   r%  r€   rf  r  rf   r2   r  Úpast_seen_tokensr$  ro   Úlayers                 r0   r?   zZambaModel.forwardÔ  sš  € ð ˜Ð -°tÐ";Ñ<ð 	ÝØsñô ð ð Ð Ø ×-Ò-¨iÑ8Ô8ˆMà%ˆå!&¤¨]Ñ!;Ô!;Ðð ð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4ˆLå(Ø”;Ø'Ø)Ø+Ø%ð
ñ 
ô 
ˆõ !*¨$¬+Ñ 6Ô 6ð 
	ð 
	ÑˆI�uØ!˜EØØ&ØØØð	ð !0Ø#ð	ð 	ð ð	ð 	ˆMˆMð ×,Ò,¨]Ñ;Ô;ˆå&Ø+Ø/8ÐB˜O˜O¸dð
ñ 
ô 
ð 	
r1   )NNNNNN)rD   rE   rF   r‹   r   r'   r   r   r   r)   r)  rH   r   r  r  r   r   rA   r   r?   rI   rJ   s   @r0   rU  rU  ¯  s  ø€ € € € € ðð ð˜{ð ð ð ð ð ð ð8  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ð8
ð 8
àÔ# dÑ*ð8
ð œ tÑ+ð8
ð Ô&¨Ñ-ð	8
ð
  ™ð8
ð Ô(¨4Ñ/ð8
ð ˜$‘;ð8
ð Ð+Ô,ð8
ð 
Ð(Ñ	(ð8
ð 8
ð 8
ñ „^ñ „_ñ  Ôð8
ð 8
ð 8
ð 8
ð 8
r1   rU  c                   ó$  ‡ — e Zd Zdd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         deez  fd„¦   «         ¦   «         Z	 	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚZambaForCausalLMzlm_head.weightzmodel.embed_tokens.weightrn   c                 óþ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        t          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S r  )
r&   r'   rU  r3  rZ  r   rz   r.   Úlm_headrc  r  s     €r0   r'   zZambaForCausalLM.__init__  sj   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý Ñ'Ô'ˆŒ
Ø Ô+ˆŒÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr1   Nr   re  rY   r%  r€   rf  Úlabelsr  Úlogits_to_keeprf   r$   c	           
      óD  —  | j         d||||||dœ|	¤Ž}
|
j        }t          |t          ¦  «        rt	          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }d}|� | j        ||| j        fi |	¤Ž}t          |||
j	        |
j
        |
j        ¬¦  «        S )ah  
        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, ZambaForCausalLM

        >>> model = ZambaForCausalLM.from_pretrained("Zyphra/Zamba-7B-v1")
        >>> tokenizer = AutoTokenizer.from_pretrained("Zyphra/Zamba-7B-v1")

        >>> 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."
        ```)re  rY   r%  r€   rf  r  N©ÚlossÚlogitsr€   r2   r4  r  )r3  ri  r:  rŒ   Úslicerp  Úloss_functionrZ  r   r€   r2   r4  )r-   re  rY   r%  r€   rf  rq  r  rr  rf   Úoutputsr2   Úslice_indicesrv  ru  s                  r0   r?   zZambaForCausalLM.forward  sþ   € ðH ,6¨4¬:ð ,
ØØ)Ø%Ø+Ø'Øð,
ð ,
ð ð,
ð ,
ˆð  Ô1ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô%ØØØ”ðð ð ð	ð ˆDõ &ØØØ#Ô3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r1   TFc           
      óh   •— | j         j        |d<    t          ¦   «         j        |f||||||dœ|¤Ž}	|	S )Nrr  )r€   rY   rf  r%  r  Úis_first_iteration)rn   Únum_logits_to_keepr&   Úprepare_inputs_for_generation)r-   re  r€   rY   rf  r%  r  r|  rf   Úmodel_inputsr/   s             €r0   r~  z.ZambaForCausalLM.prepare_inputs_for_generationc  s^   ø€ ð $(¤;Ô#AˆÐÑ Ø<•u‘w”wÔ<Øð	
à+Ø)Ø'Ø%ØØ1ð	
ð 	
ð ð	
ð 	
ˆð Ðr1   )NNNNNNNr   )NNNNTF)rD   rE   rF   r^  r   r'   r   r   r)   r)  rH   r   r  r  rŒ   r   r   rA   r   r?   r~  rI   rJ   s   @r0   rn  rn    s€  ø€ € € € € Ø*Ð,GÐHÐð˜{ð ð ð ð ð ð ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ð@
ð @
àÔ# dÑ*ð@
ð œ tÑ+ð@
ð Ô&¨Ñ-ð	@
ð
  ™ð@
ð Ô(¨4Ñ/ð@
ð Ô  4Ñ'ð@
ð ˜$‘;ð@
ð ˜eœlÑ*ð@
ð Ð+Ô,ð@
ð 
Ð'Ñ	'ð@
ð @
ð @
ñ „^ñ Ôð@
ðJ ØØØØØ ðð ð ð ð ð ð ð ð ð r1   rn  aÊ  
    The Zamba Model with a sequence classification head on top (linear layer).

    [`ZambaForSequenceClassification`] uses the last token in order to do the classification, as other causal models
    (e.g. GPT-2) do.

    Since it does classification on the last token, it requires to know the position of the last token. If a
    `pad_token_id` is defined in the configuration, it finds the last token that is not a padding token in each row. If
    no `pad_token_id` is defined, it simply takes the last value in each row of the batch. Since it cannot guess the
    padding tokens when `inputs_embeds` are passed instead of `input_ids`, it does the same (take the last value in
    each row of the batch).
    )Úcustom_introc                   óè   ‡ — e Zd Zˆ 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         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚZambaForSequenceClassificationc                 óþ   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        | j        d¬¦  «        | _        |  	                    ¦   «          d S r  )
r&   r'   Ú
num_labelsrU  r3  r   rz   r.   Úscorerc  r  s     €r0   r'   z'ZambaForSequenceClassification.__init__Œ  si   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒÝ Ñ'Ô'ˆŒ
Ý”Y˜vÔ1°4´?ÈÐOÑOÔOˆŒ
ð 	�ŠÑÔÐÐÐr1   Nre  rY   r%  r€   rf  rq  r  rf   r$   c           	      óÊ  —  | j         |f|||||dœ|¤Ž}	|	j        }
|                      |
¦  «        }|�|j        d         }n|j        d         }| j        j        €|dk    rt          d¦  «        ‚| j        j        €d}n¨|�}|| j        j        k                         |j        t          j
        ¦  «        }t          j        |j        d         |j        t          j
        ¬¦  «        }||z                       d¦  «        }n)d}t                               | j        j        › d�¦  «         |t          j        ||j        ¬	¦  «        |f         }d}|��t|                     |j        ¦  «        }| j        j        €f| j        dk    rd
| j        _        nN| j        dk    r7|j        t          j        k    s|j        t          j        k    rd| j        _        nd| j        _        | j        j        d
k    rWt-          ¦   «         }| j        dk    r1 ||                     ¦   «         |                     ¦   «         ¦  «        }nŽ |||¦  «        }n�| j        j        dk    rGt1          ¦   «         } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }n*| j        j        dk    rt5          ¦   «         } |||¦  «        }t7          |||	j        |	j        |	j        ¬¦  «        S )a�  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        )rY   r%  r€   rf  r  Nr   r   z=Cannot handle batch sizes > 1 if no padding token is defined.r5   rÉ   zŠ will not detect padding tokens in `inputs_embeds`. Results may be unexpected if using padding tokens in conjunction with `inputs_embeds.`rh  Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrt  )r3  ri  r…  rB   rn   rX  r  r8   rÊ   r)   Úint32rµ   ÚargmaxrÀ   rÁ   r/   rD   Úproblem_typer„  r7   ÚlongrŒ   r   rÐ   r   r‚   r   r   r€   r2   r4  )r-   re  rY   r%  r€   rf  rq  r  rf   Útransformer_outputsr2   rv  rÞ   Úlast_non_pad_tokenÚnon_pad_maskÚtoken_indicesÚpooled_logitsru  Úloss_fcts                      r0   r?   z&ZambaForSequenceClassification.forward•  s  € ð& 8B°t´zØð8
à)Ø%Ø+Ø'Øð8
ð 8
ð ð8
ð 8
Ðð ,Ô=ˆØ—’˜MÑ*Ô*ˆàÐ Ø"œ¨Ô+ˆJˆJà&Ô,¨QÔ/ˆJàŒ;Ô#Ð+°
¸a²°ÝÐ\Ñ]Ô]Ð]ØŒ;Ô#Ð+Ø!#ÐÐØÐ"à%¨¬Ô)AÒA×EÒEÀfÄmÕUZÔU`ÑaÔaˆLÝ!œL¨¬¸Ô)<ÀVÄ]ÕZ_ÔZeÐfÑfÔfˆMØ"/°,Ñ">×!FÒ!FÀrÑ!JÔ!JÐÐà!#ÐÝ×ÒØ”>Ô*ð Zð Zð Zñô ð ð
 �uœ|¨J¸v¼}ÐMÑMÔMÐOaÐaÔbˆàˆØÑØ—Y’Y˜vœ}Ñ-Ô-ˆFØŒ{Ô'Ð/Ø”? aÒ'Ð'Ø/;�D”KÔ,Ð,Ø”_ qÒ(Ð(¨f¬l½e¼jÒ.HÐ.HÈFÌLÕ\aÔ\eÒLeÐLeØ/L�D”KÔ,Ð,à/K�D”KÔ,àŒ{Ô'¨<Ò7Ð7Ý"™9œ9�Ø”? aÒ'Ð'Ø#˜8 M×$9Ò$9Ñ$;Ô$;¸V¿^º^Ñ=MÔ=MÑNÔN�D�Dà#˜8 M°6Ñ:Ô:�D�DØ”Ô)Ð-JÒJÐJÝ+Ñ-Ô-�Ø�x × 2Ò 2°2°t´Ñ GÔ GÈÏÊÐUWÉÌÑYÔY��Ø”Ô)Ð-IÒIÐIÝ,Ñ.Ô.�Ø�x ¨vÑ6Ô6�å/ØØ Ø/Ô?Ø-Ô;Ø*Ô5ð
ñ 
ô 
ð 	
r1   )NNNNNNN)rD   rE   rF   r'   r   r   r)   r)  rH   r   r  r  r   r   rA   r   r?   rI   rJ   s   @r0   r‚  r‚  }  s$  ø€ € € € € ðð ð ð ð ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%ðR
ð R
àÔ# dÑ*ðR
ð œ tÑ+ðR
ð Ô&¨Ñ-ð	R
ð
  ™ðR
ð Ô(¨4Ñ/ðR
ð Ô  4Ñ'ðR
ð ˜$‘;ðR
ð Ð+Ô,ðR
ð 
Ð1Ñ	1ðR
ð R
ð R
ñ „^ñ ÔðR
ð R
ð R
ð R
ð R
r1   r‚  )rn  r‚  rU  r2  )rT   )Er‹   r?  Úcollections.abcr   r)   r   Útorch.nnr   r   r   Ú r	   r;  Úactivationsr
   Úcache_utilsr   r   Ú
generationr   Úintegrations.hub_kernelsr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.import_utilsr   Úutils.output_capturingr   Úconfiguration_zambar   Ú
get_loggerrD   rÀ   ÚModuler!   rH   rŒ   rS   rG   rk   rm   rŽ   r  r  r!  r+  r2  rU  rn  r‚  Ú__all__r  r1   r0   ú<module>r¨     s¿  ðð& Ð à €€€Ø $Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø /Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø qÐ qÐ qÐ qÐ qÐ qÐ qÐ qÐ qÐ qØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð 
ˆÔ	˜HÑ	%Ô	%€ðJð Jð Jð Jð J�2”9ñ Jô Jð Jð*	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð& ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð %ð %ð %ð2C)ð C)ð C)ð C)ð C)�R”Yñ C)ô C)ð C)ðLd]ð d]ð d]ð d]ð d]�b”iñ d]ô d]ð d]ðP	ð ð ð ð ˆrŒyñ ô ð ð 0ð 0ð 0ð 0ð 0 ¤ñ 0ô 0ð 0ðf1ð 1ð 1ð 1ð 1Ð7ñ 1ô 1ð 1ðh4ð 4ð 4ð 4ð 4Ð1ñ 4ô 4ð 4ðn ð$!ð $!ð $!ð $!ð $!˜?ñ $!ô $!ñ „ð$!ðN ð_
ð _
ð _
ð _
ð _
Ð%ñ _
ô _
ñ „ð_
ðFgð gð gð gð gÐ+¨_ñ gô gð gðT €ððñ ô ð^
ð ^
ð ^
ð ^
ð ^
Ð%9ñ ^
ô ^
ñô ð^
ðB gÐ
fÐ
f€€€r1   