Ë
    îÿæi 7  ã                   ó  — 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
 ddlmZ ddlmZ e G d„ d	e«      «       Z eej                   d
¬«      d„ «       Z eej                   d
¬«      d„ «       Zej                   d„ «       Zd„ Z e«       Zdej,                  dej,                  dej,                  dej,                  dej,                  dej,                  dej,                  fd„Z G d„ de
j0                  «      Z G d„ de
j0                  «      Z G d„ de
j0                  «      Z G d„ de
j0                  «      Z G d „ d!e
j0                  «      Z G d"„ d#e
j0                  «      Z G d$„ d%e
j0                  «      Z G d&„ d'e
j0                  «      Z y)(é    )Ú	dataclass)Úpartial)ÚOptionalNé   )ÚBaseModelArgs)ÚArraysCachec                   óŠ   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   eed<   dZeed<   y)Ú	ModelArgsÚ
model_typeÚ
vocab_sizeÚhidden_sizeÚintermediate_sizeÚnorm_epsÚhead_dimÚnum_hidden_layersÚa_low_rank_dimÚv_low_rank_dimÚgate_low_rank_dimÚdecay_low_rank_dimFÚtie_word_embeddingsN)	Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   Úbool© ó    úh/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/rwkv7.pyr
   r
      sK   … àƒOØƒOØÓØÓØƒOØƒMØÓØÓØÓØÓØÓØ %Ð˜Ô%r    r
   T)Ú	shapelessc                 ó   — | ||z  z   S ©Nr   )ÚxÚyÚzs      r!   Úaddcmulr(      s   € àˆq�1‰u‰9Ðr    c                 ót   — | t        j                  t         j                  j                  | dd¬«      d«      z  S )NéÿÿÿÿT©ÚaxisÚkeepdimsgH¯¼šò×z>)ÚmxÚmaximumÚlinalgÚnorm)r%   s    r!   Úl2_normr2   #   s+   € àŒr�z‰zœ"Ÿ)™)Ÿ.™.¨°¸d˜.ÓCÀTÓJÑJÐJr    c                 óŒ   — ||d   z  |dd d d …f   z  }||d d …d d …d d d …f   z  |d   |dd d d …f   z  z   |z   }|| d   z  }||fS )N).N.r   )	ÚrÚwÚkÚvÚaÚbÚstateÚsabr&   s	            r!   Ú_wkv7_step_opsr<   (   sj   € à�1�Y‘<Ñ 1 S¨$² \¡?Ñ
2€CØ�A’aš˜D¢!�mÑ$Ñ$ q¨¡|°a¸¸TÂ1¸±oÑ'EÑEÈÑK€EØ��)‘Ñ€AØˆeˆ8€Or    c                  ó–   — t         j                  j                  «       sy d} g d¢}t         j                  j	                  d|ddg| ¬«      S )Na÷  
        auto n = thread_position_in_grid.z;
        auto b_idx = n / H;
        auto h_idx = n % H;
        constexpr int n_per_t = D / 32;

        // [B, T, H, D]
        auto r_ = r + b_idx * T * H * D + h_idx * D;
        auto w_ = w + b_idx * T * H * D + h_idx * D;
        auto k_ = k + b_idx * T * H * D + h_idx * D;
        auto v_ = v + b_idx * T * H * D + h_idx * D;
        auto a_ = a + b_idx * T * H * D + h_idx * D;
        auto b_ = b + b_idx * T * H * D + h_idx * D;
        y += b_idx * T * H * D + h_idx * D;

        auto dk_idx = thread_position_in_threadgroup.x;
        auto dv_idx = thread_position_in_grid.y;

        // state_in, state_out: [B, H, D, D]
        auto i_state = state_in  + (n * D + dv_idx) * D;
        auto o_state = state_out + (n * D + dv_idx) * D;

        float state[n_per_t];
        for (int i = 0; i < n_per_t; ++i) {
          auto s_idx = n_per_t * dk_idx + i;
          state[i] = static_cast<float>(i_state[s_idx]);
        }

        for (int t = 0; t < T; ++t) {
          float sa = 0.0f;
          for (int i = 0; i < n_per_t; ++i) {
            auto s_idx = n_per_t * dk_idx + i;
            sa += state[i] * a_[s_idx];
            state[i] = state[i] * w_[s_idx];
          }
          sa = simd_sum(sa);

          float out = 0.0f;
          for (int i = 0; i < n_per_t; ++i) {
            auto s_idx = n_per_t * dk_idx + i;
            state[i] = state[i] + k_[s_idx] * v_[dv_idx] + sa * b_[s_idx];
            out += state[i] * r_[s_idx];
          }
          out = simd_sum(out);
          if (thread_index_in_simdgroup == 0) {
            y[dv_idx] = static_cast<InT>(out);
          }

          // Increment data pointers to next time step
          r_ += H * D;
          w_ += H * D;
          k_ += H * D;
          v_ += H * D;
          a_ += H * D;
          b_ += H * D;
          y  += H * D;
        }
        for (int i = 0; i < n_per_t; ++i) {
          auto s_idx = n_per_t * dk_idx + i;
          o_state[s_idx] = static_cast<InT>(state[i]);
        }
    )r4   r5   r6   r7   r8   r9   Ústate_inÚTÚwkv7_kernelr&   Ú	state_out)ÚnameÚinput_namesÚoutput_namesÚsource)r.   ÚmetalÚis_availableÚfastÚmetal_kernel)rE   Úinputss     r!   Ú_make_wkv7_kernelrK   0   sQ   € Ü�8‰8× Ñ Ô"Øð=€Fò| =€FÜ�7‰7×ÑØØØ˜;Ð'Øð	  ó ð r    r4   r5   r6   r7   r8   r9   r:   c           
      ó°   — | j                   \  }}}	}
| j                  }t        | |||||||gd|fd|	fd|
fgd|
||	z  fd|||	|
f|j                   g||g¬«      S )NÚInTÚHÚDé    )rP   é   r   )rJ   ÚtemplateÚgridÚthreadgroupÚoutput_shapesÚoutput_dtypes)ÚshapeÚdtypeÚ_wkv7_kernel)r4   r5   r6   r7   r8   r9   r:   ÚBr?   rN   rO   Úinput_dtypes               r!   r@   r@   }   sˆ   € ð —‘�J€A€qˆ!ˆQØ—'‘'€KäØ�1�a˜˜A˜q %¨Ð+à�KÐ Ø�!ˆHØ�!ˆHð
ð
 �!�Q˜‘Uˆ^ØØ˜1˜a �| U§[¡[Ð1Ø" KÐ0ôð r    c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLayerNormPerHeadc                 ó    •— t         ‰| �  «        t        j                  ||f«      | _        t        j                  ||f«      | _        || _        y r$   )ÚsuperÚ__init__r.   ÚzerosÚweightÚbiasÚeps)Úselfr   Ú	num_headsrd   Ú	__class__s       €r!   r`   zLayerNormPerHead.__init__˜   s?   ø€ Ü‰ÑÔÜ—h‘h 	¨8Ð4Ó5ˆŒÜ—H‘H˜i¨Ð2Ó3ˆŒ	Øˆ�r    c                 óŽ   — | j                   t        j                  j                  |d d | j                  «      z  | j
                  z   S r$   )rb   r.   rH   Ú
layer_normrd   rc   ©re   r%   s     r!   Ú__call__zLayerNormPerHead.__call__ž   s3   € Ø�{‰{œRŸW™W×/Ñ/°°4¸¸t¿x¹xÓHÑHÈ4Ï9É9ÑTÐTr    )r   r   r   r`   rk   Ú__classcell__©rg   s   @r!   r]   r]   —   s   ø„ ôöUr    r]   c                   óf   ‡ — e Zd Z	 	 d	dedededee   dee   f
ˆ fd„Zdej                  fd„Z
ˆ xZS )
ÚLoRAÚ	input_dimÚ
output_dimÚlow_rank_dimrc   Ú
activationc                 óN  •— t         ‰| �  «        || _        || _        || _        || _        |€t        j                  «       | _        nl|dk(  rt        j                  «       | _        nM|dk(  rt        j                  «       | _        n.|dk(  rt        j                  «       | _        nt        d|› d�«      ‚t        j                  | j                  | j                  d¬«      | j                  t        j                  | j                  | j                  | j
                  ¬«      g| _        y )NÚsigmoidÚtanhÚreluzUnsupported activation type: Ú.F©rc   )r_   r`   rp   rq   rr   rc   ÚnnÚIdentityrs   ÚSigmoidÚTanhÚReLUÚ
ValueErrorÚLinearÚlora)re   rp   rq   rr   rc   rs   rg   s         €r!   r`   zLoRA.__init__£   sÞ   ø€ ô 	‰ÑÔØ"ˆŒØ$ˆŒØ(ˆÔØˆŒ	àÐÜ Ÿk™k›mˆD�OØ˜9Ò$Ü Ÿj™j›lˆD�OØ˜6Ò!Ü Ÿg™g›iˆD�OØ˜6Ò!Ü Ÿg™g›iˆD�OäÐ<¸Z¸LÈÐJÓKÐKô �I‰I�d—n‘n d×&7Ñ&7¸eÔDØ�O‰OÜ�I‰I�d×'Ñ'¨¯©¸t¿y¹yÔIð
ˆ�	r    Úreturnc                 óx   —  | j                   d    | j                   d    | j                   d   |«      «      «      S )Né   r   r   )r�   rj   s     r!   rk   zLoRA.__call__Â   s4   € Øˆt�y‰y˜‰|˜L˜DŸI™I a™L¨¨¯©°1©°a«Ó9Ó:Ð:r    )Trv   )r   r   r   r   r   r   r   r`   r.   Úarrayrk   rl   rm   s   @r!   ro   ro   ¢   sX   ø„ ð  $Ø$*ñ
àð
ð ð
ð ð	
ð
 �t‰nð
ð ˜S‘Mõ
ð>;˜RŸX™X÷ ;r    ro   c                   ó   — e Zd Zd„ Zy)Ú
TokenShiftc                 óÄ   — |j                   \  }}}|€#t        j                  |d|f|j                  «      }|dk(  r|S t        j                  ||d d …d d…d d …f   gd¬«      S )Nr   r*   ©r,   )rW   r.   ra   rX   Úconcatenate)re   r%   r:   rZ   ÚLrO   s         r!   rk   zTokenShift.__call__Ç   s`   € Ø—'‘'‰ˆˆ1ˆaØˆ=Ü—H‘H˜a  A˜Y¨¯©Ó0ˆEØ�Š6ØˆLä—>‘> 5¨!ªA¨s°¨s²A¨I©,Ð"7¸aÔ@Ð@r    N)r   r   r   rk   r   r    r!   r‡   r‡   Æ   s   „ óAr    r‡   c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )ÚRwkv7ChannelMixingÚargsc                 ó  •— t         ‰| �  «        |j                  }|j                  }t	        j
                  ||d¬«      | _        t	        j
                  ||d¬«      | _        t        j                  |«      | _
        t        «       | _        y ©NFry   )r_   r`   r   r   rz   r€   ÚkeyÚvaluer.   ra   Úx_kr‡   Útoken_shift)re   rŽ   Ú
hidden_dimr   rg   s       €r!   r`   zRwkv7ChannelMixing.__init__Ò   si   ø€ Ü‰ÑÔà×%Ñ%ˆ
Ø ×2Ñ2Ðä—9‘9˜ZÐ):ÀÔGˆŒÜ—Y‘YÐ0°*À5ÔIˆŒ
ä—8‘8˜ZÓ)ˆŒä%›<ˆÕr    r‚   c                 óø   — |�|d   nd }| j                  ||«      }t        |||z
  | j                  «      }|�|d d …dd …d d …f   |d<   | j                  t	        j
                  | j                  |«      «      «      S )Nr„   r*   )r”   r(   r“   r’   rz   Úrelu2r‘   )re   r%   Úcacher:   Úx_prevÚxxs         r!   rk   zRwkv7ChannelMixing.__call__ß   su   € Ø!Ð-��a’°4ˆØ×!Ñ! ! UÓ+ˆÜ�Q˜ ™
 D§H¡HÓ-ˆØÐØš˜B™C¢˜‘|ˆE�!‰HØ�z‰zœ"Ÿ(™( 4§8¡8¨B£<Ó0Ó1Ð1r    ©	r   r   r   r
   r`   r.   r…   rk   rl   rm   s   @r!   r�   r�   Ñ   s   ø„ ð(˜Yõ (ð2 B§H¡H÷ 2r    r�   c                   ó4   ‡ — e Zd Zdedefˆ fd„Zd„ Zd„ Zˆ xZS )ÚRwkv7TimeMixingrŽ   Ú	layer_idxc                 óÞ  •— t         ‰| �  «        || _        || _        |j                  | _        |j
                  | _        | j                  | j
                  z  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _
        t        «       | _        t        j                  dd| j                  f«      | _        t        j                  dd| j                  f«      | _        t        j                  dd| j                  f«      | _        t        j                  dd| j                  f«      | _        t        j                  dd| j                  f«      | _        t        j                  dd| j                  f«      | _        t        j                  | j                  | j
                  f«      | _        t        j                  | j                  | j
                  f«      | _        t        j                  | j                  | j
                  f«      | _        t1        j2                  | j                  | j                  d¬«      | _        t1        j2                  | j                  | j                  d¬«      | _        t1        j2                  | j                  | j                  d¬«      | _        t1        j2                  | j                  | j                  d¬«      | _        t=        | j
                  | j                  d¬«      | _        tA        | j                  | j                  | j                  d¬«      | _!        | j                  dkD  r2tA        | j                  | j                  | j                  d ¬«      | _"        tA        | j                  | j                  | j                  d ¬«      | _#        tA        | j                  | j                  | j                  d	d¬
«      | _$        y )Nr   Fry   gñhãˆµøD?©rd   rv   )rr   rs   r   ru   )rr   rs   rc   )%r_   r`   rž   rŽ   r   r   rf   r   r   r   r   r‡   r”   r.   ra   Úx_rÚx_wr“   Úx_vÚx_aÚx_gÚk_kÚk_aÚr_krz   r€   Úr_projÚk_projÚv_projÚo_projr]   Úg_normro   Úw_loraÚv_loraÚa_loraÚg_lora©re   rŽ   rž   rg   s      €r!   r`   zRwkv7TimeMixing.__init__é   sç  ø€ Ü‰ÑÔØ"ˆŒØˆŒ	Ø×+Ñ+ˆÔØŸ™ˆŒØ×)Ñ)¨T¯]©]Ñ:ˆŒØ"×1Ñ1ˆÔØ"×1Ñ1ˆÔØ!%×!7Ñ!7ˆÔØ"&×"9Ñ"9ˆÔä%›<ˆÔä—8‘8˜Q  4×#3Ñ#3Ð4Ó5ˆŒÜ—8‘8˜Q  4×#3Ñ#3Ð4Ó5ˆŒÜ—8‘8˜Q  4×#3Ñ#3Ð4Ó5ˆŒÜ—8‘8˜Q  4×#3Ñ#3Ð4Ó5ˆŒÜ—8‘8˜Q  4×#3Ñ#3Ð4Ó5ˆŒÜ—8‘8˜Q  4×#3Ñ#3Ð4Ó5ˆŒä—8‘8˜TŸ^™^¨T¯]©]Ð;Ó<ˆŒÜ—8‘8˜TŸ^™^¨T¯]©]Ð;Ó<ˆŒÜ—8‘8˜TŸ^™^¨T¯]©]Ð;Ó<ˆŒä—i‘i × 0Ñ 0°$×2BÑ2BÈÔOˆŒÜ—i‘i × 0Ñ 0°$×2BÑ2BÈÔOˆŒÜ—i‘i × 0Ñ 0°$×2BÑ2BÈÔOˆŒÜ—i‘i × 0Ñ 0°$×2BÑ2BÈÔOˆŒä& t§}¡}°d·n±nÈ%ÔPˆŒäØ×ÑØ×ÑØ×0Ñ0Øô	
ˆŒð �>‰>˜AÒÜØ× Ñ Ø× Ñ Ø!×0Ñ0Øô	ˆDŒKô Ø×ÑØ×ÑØ×,Ñ,Øô	
ˆŒô Ø×ÑØ×ÑØ×/Ñ/Ø Øô
ˆ�r    c                 ó€  — |j                   \  }}	}
}
|€Ct        j                  || j                  | j                  | j                  f|j
                  ¬«      }t        j                  «       t        j                  k(  r/t        j                  j                  «       rt        |||||||«      S g }t        |	«      D ]Q  }t        |d d …|f   |d d …|f   |d d …|f   |d d …|f   |d d …|f   |d d …|f   |«      \  }}|j                  |«       ŒS t        j                  |d¬«      j                  |j
                  «      }||fS )N)rX   r   r‰   )rW   r.   ra   rf   r   rX   Údefault_deviceÚgpurF   rG   r@   Úranger<   ÚappendÚstackÚastype)re   r4   r5   r6   r7   r8   r9   r:   rZ   r‹   Ú_ÚysÚtr&   s                 r!   Ú_wkv7zRwkv7TimeMixing._wkv7'  s  € Ø—W‘W‰
ˆˆ1ˆa�Øˆ=Ü—H‘HØ�D—N‘N D§M¡M°4·=±=ÐAÈÏÉôˆEô ×ÑÓ¤"§&¡&Ò(¬R¯X©X×-BÑ-BÔ-DÜ˜q ! Q¨¨1¨a°Ó7Ð7àˆBÜ˜1–X�Ü)Ø’a˜�d‘G˜Qšq !˜t™W aª¨1¨¡g¨q²°A°©w¸º!¸Q¸$¹ÀÂ1ÀaÀ4ÁÈ%ó‘��5ð —	‘	˜!•ð	 ô —‘˜ !Ô$×+Ñ+¨A¯G©GÓ4ˆAØ�e�8ˆOr    c           	      óx  — |€d\  }}n
|d   |d   }}|j                   \  }}}| j                  ||«      }	|	|z
  }
t        ||
| j                  «      }t        ||
| j                  «      }t        ||
| j
                  «      }t        ||
| j                  «      }t        ||
| j                  «      }t        ||
| j                  «      }| j                  |«      j                  ||| j                  | j                  «      }| j                  |«      j                  ||| j                  | j                  «      }| j                  |«      j                  ||| j                  | j                  «      }t        j                   | j#                  |«      «      j                  ||| j                  | j                  «      }| j%                  |«      }| j&                  dk(  r|}nZt        j                   | j)                  |«      «      j                  ||| j                  | j                  «      }t        |||z
  |«      }t        j                   | j+                  |«      j                  ||| j                  | j                  «      «      j-                  t        j.                  «      }t        j0                  d|z  «      j-                  |j2                  «      }t5        || j6                  z  «      }|d|dz
  | j8                  z  z   z  }| }||z  }| j;                  |||||||«      \  }}| j=                  |j                  ||| j                  | j                  «      «      }|||z  | j>                  z  jA                  dd¬«      |z  z   j                  |||g«      }|�|d d …dd …d d …f   |d<   ||d<   | jC                  ||z  «      }||fS )N)NNr   r   g]S ³³hã¿r*   Tr+   )"rW   r”   r(   r¡   r¢   r“   r£   r¤   r¥   rª   Úreshaperf   r   r«   r©   r.   ru   r°   r±   rž   r¯   r®   r¹   Úfloat32ÚexprX   r2   r¦   r§   r½   r­   r¨   Úsumr¬   )re   r%   Úv_firstr˜   Útoken_shift_cacheÚstate_cacherZ   r‹   rO   r™   rš   ÚxrÚxwÚxkÚxvÚxaÚxgr‘   r’   Ú
receptanceÚiclrÚgateÚvvÚdecayÚkkr8   r9   ÚoutÚnew_state_caches                                r!   rk   zRwkv7TimeMixing.__call__;  s2  € Øˆ=Ø-7Ñ*Ð™{à-2°1©X°u¸Q±x˜{Ðà—'‘'‰ˆˆ1ˆaØ×!Ñ! !Ð%6Ó7ˆØ�a‰Zˆä�Q˜˜DŸH™HÓ%ˆÜ�Q˜˜DŸH™HÓ%ˆÜ�Q˜˜DŸH™HÓ%ˆÜ�Q˜˜DŸH™HÓ%ˆÜ�Q˜˜DŸH™HÓ%ˆÜ�Q˜˜DŸH™HÓ%ˆà�k‰k˜"‹o×%Ñ% a¨¨D¯N©N¸D¿M¹MÓJˆØ—‘˜B“×'Ñ'¨¨1¨d¯n©n¸d¿m¹mÓLˆØ—[‘[ “_×,Ñ,¨Q°°4·>±>À4Ç=Á=ÓQˆ
Ü�z‰z˜$Ÿ+™+ b›/Ó*×2Ñ2°1°a¸¿¹ÈÏÉÓWˆØ�{‰{˜2‹ˆà�>‰>˜QÒØ‰Gä—‘˜DŸK™K¨›OÓ,×4Ñ4Ø�1�d—n‘n d§m¡móˆBô ˜E 7¨U¡?°BÓ7ˆEä—
‘
Ø�K‰K˜‹O×#Ñ# A q¨$¯.©.¸$¿-¹-ÓHó
ç
‰&”—‘Ó
ð 	ô —‘�y 5Ñ(Ó)×0Ñ0°×1AÑ1AÓBˆÜ�c˜DŸH™H‘nÓ&ˆØ�Q˜$ ™( d§h¡hÑ.Ñ.Ñ/ˆØˆCˆØ�‰Iˆà#Ÿz™zØ˜˜s E¨1¨a°ó 
Ñˆˆ_ð �k‰k˜#Ÿ+™+ a¨¨D¯N©N¸D¿M¹MÓJÓKˆà�: Ñ# d§h¡hÑ.×3Ñ3¸ÀdÐ3ÓKÈeÑSÑSß
‰'�1�a˜�)Ó
ð 	ð ÐØš˜B™C¢˜‘|ˆE�!‰HØ&ˆE�!‰Hà�k‰k˜# ™*Ó%ˆØ�Gˆ|Ðr    )	r   r   r   r
   r   r`   r½   rk   rl   rm   s   @r!   r�   r�   è   s!   ø„ ð<
˜Yð <
°3õ <
ò|ö(5r    r�   c                   ó.   ‡ — e Zd Zdedefˆ fd„Zd„ Zˆ xZS )Ú
Rwkv7LayerrŽ   rž   c                 óÆ  •— t         ‰| �  «        || _        | j                  dk(  r0t        j                  |j
                  |j                  ¬«      | _        t        || j                  ¬«      | _	        t        |«      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j
                  |j                  ¬«      | _        y )Nr   r    ©rž   )r_   r`   rž   rz   Ú	LayerNormr   r   Úpre_normr�   Úattnr�   ÚffnÚ	attn_normÚffn_normr²   s      €r!   r`   zRwkv7Layer.__init__t  s“   ø€ Ü‰ÑÔØ"ˆŒØ�>‰>˜QÒÜŸL™L¨×)9Ñ)9¸t¿}¹}ÔMˆDŒMÜ# D°D·N±NÔCˆŒ	Ü% dÓ+ˆŒÜŸ™ d×&6Ñ&6¸D¿M¹MÔJˆŒÜŸ™ T×%5Ñ%5¸4¿=¹=ÔIˆ�r    c                 óæ   — | j                   dk(  r| j                  |«      }| j                  | j                  |«      ||«      \  }}||z   }|| j	                  | j                  |«      |«      z   }||fS )Nr   )rž   rÙ   rÚ   rÜ   rÛ   rÝ   )re   r%   rÃ   r˜   ÚhrÒ   s         r!   rk   zRwkv7Layer.__call__~  sl   € Ø�>‰>˜QÒØ—‘˜aÓ ˆAà—Y‘Y˜tŸ~™~¨aÓ0°'¸5ÓA‰
ˆˆ7Ø�‰EˆØ�$—(‘(˜4Ÿ=™=¨Ó+¨UÓ3Ñ3ˆØ�Gˆ|Ðr    )r   r   r   r
   r   r`   rk   rl   rm   s   @r!   rÕ   rÕ   s  s   ø„ ðJ˜Yð J°3õ Jör    rÕ   c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )Ú
Rwkv7ModelrŽ   c                 óP  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}| _
        t        j                  |j
                  |j                  ¬«      | _        y c c}w )Nr×   r    )r_   r`   rz   Ú	Embeddingr   r   Ú
embeddingsr¶   r   rÕ   ÚlayersrØ   r   r1   )re   rŽ   Úirg   s      €r!   r`   zRwkv7Model.__init__‰  s{   ø€ Ü‰ÑÔÜŸ,™, t§¡¸×8HÑ8HÓIˆŒä38¸×9OÑ9OÔ3Pó
Ù3P¨aŒJ�t qÖ)Ð3Pñ
ˆŒô —L‘L ×!1Ñ!1°t·}±}ÔEˆ�	ùò
s   ÁB#r%   c                 óÖ   — | j                  |«      }|€d gt        | j                  «      z  }d }t        | j                  |«      D ]  \  }} ||||«      \  }}Œ | j	                  |«      S r$   )rä   Úlenrå   Úzipr1   )re   r%   r˜   rÃ   ÚlayerÚcs         r!   rk   zRwkv7Model.__call__‘  sh   € Ø�O‰O˜AÓˆØˆ=Ø�FœS §¡Ó-Ñ-ˆEàˆÜ˜DŸK™K¨Ö/‰HˆE�1Ù˜q '¨1Ó-‰JˆA‰wð 0à�y‰y˜‹|Ðr    r›   rm   s   @r!   rá   rá   ˆ  s!   ø„ ðF˜Yõ Fð˜"Ÿ(™(÷ r    rá   c                   ór   ‡ — e Zd Zdefˆ fd„Zd	dej                  fd„Zd„ Ze	d„ «       Z
d„ Ze	d„ «       Zˆ xZS )
ÚModelrŽ   c                 óî   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y r�   )r_   r`   rŽ   r   rá   Úmodelr   rz   r€   r   r   Úlm_head)re   rŽ   rg   s     €r!   r`   zModel.__init__�  sX   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ Ó%ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r    rJ   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S r$   )rï   rŽ   r   rä   Ú	as_linearrð   )re   rJ   r˜   r%   Úlogitss        r!   rk   zModel.__call__¥  sT   € Ø�J‰J�v˜uÓ%ˆà�9‰9×(Ò(Ø—Z‘Z×*Ñ*×4Ñ4°QÓ7ˆFð ˆð —\‘\ !“_ˆFàˆr    c                 óx   — t        t        | j                  «      «      D �cg c]  }t        d¬«      ‘Œ c}S c c}w )Né   )Úsize)r¶   rè   rå   r   )re   rº   s     r!   Ú
make_cachezModel.make_cache¯  s/   € Ü-2´3°t·{±{Ó3CÔ-DÓEÑ-D¨” Ö#Ð-DÑEÐEùÒEs   ¡7c                 ó.   — | j                   j                  S r$   )rï   rå   )re   s    r!   rå   zModel.layers²  s   € à�z‰z× Ñ Ð r    c                 óþ   — |j                  «       D ]i  \  }}d|v s	d|v sd|v sŒ||   j                  | j                  j                  | j                  j                  z  | j                  j                  «      ||<   Œk |S )Nr¦   r§   r­   )Úitemsr¿   rŽ   r   r   )re   Úweightsr6   r7   s       r!   ÚsanitizezModel.sanitize¶  sp   € Ø—M‘M–O‰DˆAˆqØ˜‰z˜U a™Z¨8°qª=Ø$ Q™Z×/Ñ/Ø—I‘I×)Ñ)¨T¯Y©Y×-?Ñ-?Ñ?ÀÇÁ×ASÑASó�˜’
ð $ð
 ˆr    c                 ó   — d„ }|S )Nc                 ó   — d| v sd| v rddiS y)Nzlora.2rä   Úbitsé   Tr   )Úpathrº   s     r!   Ú	predicatez(Model.quant_predicate.<locals>.predicateÀ  s   € Ø˜4Ñ <°4Ñ#7Ø �{Ð"Ør    r   )re   r  s     r!   Úquant_predicatezModel.quant_predicate¾  s   € ò	ð
 Ðr    r$   )r   r   r   r
   r`   r.   r…   rk   r÷   Úpropertyrå   rü   r  rl   rm   s   @r!   rí   rí   œ  sT   ø„ ðT˜Yõ Tñ˜rŸx™xó òFð ñ!ó ð!òð ñó ôr    rí   )!Údataclassesr   Ú	functoolsr   Útypingr   Úmlx.coreÚcorer.   Úmlx.nnrz   Úbaser   r˜   r   r
   Úcompiler(   r2   r<   rK   rY   r…   r@   ÚModuler]   ro   r‡   r�   r�   rÕ   rá   rí   r   r    r!   Ú<module>r     s‹  ðõ "Ý Ý å Ý å Ý ð ô&�ó &ó ð&ñ 	ˆ�‰˜tÔ$ñó %ðñ 	ˆ�‰˜tÔ$ñKó %ðKð ‡�ñó ðòGñT !Ó"€ðØ	‡x�xðà	‡x�xðð 
‡x�xðð 
‡x�xð	ð
 
‡x�xðð 
‡x�xðð �8‰8óô4U�r—y‘yô Uô!;ˆ2�9‰9ô !;ôHA�—‘ô Aô2˜Ÿ™ô 2ô.H�b—i‘iô HôV�—‘ô ô*�—‘ô ô()ˆB�I‰Iõ )r    