Ë
    îÿæis/  ã                   ó”  — d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
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 e G d„ de«      «       Z G d„ dej:                  «      Z G d„ dej>                  «      Z  G d„ dejB                  «      Z" eejF                  d¬«      d„ «       Z$ G d„ dej:                  «      Z% G d„ dej:                  «      Z& G d„ dej:                  «      Z' G d„ dej:                  «      Z( G d„ dej:                  «      Z) G d „ d!ej:                  «      Z* G d"„ d#ej:                  «      Z+y)$é    N)Ú	dataclass)Úpartial)Ú
accumulate)ÚAnyÚDictÚOptionalÚUnioné   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)ÚConcatenateKVCacheÚKVCache)Úinitialize_ropec                   ó~   — 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<   dZeed	<   d
Zeed<   dZ	eed<   y)Ú	ModelArgsÚ
model_typeÚ
vocab_sizeÚ
hidden_dimÚ
num_layersÚnum_kv_reuse_layersÚ	num_headsÚnum_kv_headsg      
@Úhidden_dim_scale_factoriPÃ  Ú
rope_thetagñhãˆµøä>Úrms_norm_epsN)
Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úintr   Úfloatr   r   © ó    úg/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/afm7.pyr   r      sF   … àƒOØƒOØƒOØƒOØÓØƒNØÓØ%)Ð˜UÓ)Ø€J�ÓØ€L�%Ôr&   r   c                   óV   ‡ — e Zd Z	 	 	 d
dedee   dededef
ˆ fd„Zddefd„Zd	„ Z	ˆ xZ
S )ÚFusedLoRALinearÚ
input_dimsÚoutput_dimsÚrÚdropoutÚscalec           	      ó�  •— t         ‰| �  «        t        ||«      | _        t	        j
                  |¬«      | _        || _        dt        j                  |«      z  }|D �cg c]'  }t        j                  j                  | |||f¬«      ‘Œ) c}| _        |D �cg c]  }t        j                  ||f«      ‘Œ c}| _        y c c}w c c}w )N)Úpr
   )ÚlowÚhighÚshape)ÚsuperÚ__init__ÚFusedLinearÚlinearÚnnÚDropoutr-   r.   ÚmathÚsqrtÚmxÚrandomÚuniformÚlora_aÚzerosÚlora_b)	Úselfr*   r+   r,   r-   r.   Ú_ÚodÚ	__class__s	           €r'   r5   zFusedLoRALinear.__init__!   sµ   ø€ ô 	‰ÑÔä! *¨kÓ:ˆŒÜ—z‘z GÔ,ˆŒØˆŒ
à”D—I‘I˜jÓ)Ñ)ˆñ !ó
á �ô �I‰I×Ñ 5 &¨u¸ZÈ¸OÐÕLØ ñ
ˆŒñ 4?Ó?±;¨R”r—x‘x  B Õ(°;Ñ?ˆ�ùò	
ùò @s   Á,B>ÂCÚ
dequantizec                 óè  — | j                   }|j                  }t        |t        «      }|j                  }|rW|j
                  j                  }t        j                  ||j
                  |j                  |j                  |j                  «      }|j                  d   }|j                  }t        ||«      }||_        t        | j                  | j                   «      D �	�
cg c]:  \  }	}
| j"                  |
j$                  z  |	j$                  z  j'                  |«      ‘Œ< }}	}
t        j(                  |d¬«      }||z   |_        |r(|s&|j+                  |j                  |j                  «      }|S c c}
}	w )Néÿÿÿÿr   ©Úaxis)r7   ÚweightÚ
isinstanceÚFusedQuantizedLinearÚdtypeÚscalesr<   rF   ÚbiasesÚ
group_sizeÚbitsr3   r+   r6   Úzipr?   rA   r.   ÚTÚastypeÚconcatenateÚto_quantized)rB   rF   r7   rK   Úis_quantizedrN   r*   r+   Úfused_linearÚaÚbÚdeltasÚdeltas                r'   ÚfusezFusedLoRALinear.fuse6   s<  € Ø—‘ˆØ—‘ˆÜ! &Ô*>Ó?ˆð —‘ˆáØ—M‘M×'Ñ'ˆEÜ—]‘]ØØ—‘Ø—‘Ø×!Ñ!Ø—‘óˆFð —\‘\ "Ñ%ˆ
Ø×(Ñ(ˆÜ" :¨{Ó;ˆØ$ˆÔô ˜DŸK™K¨¯©Ô5ô
á5‘��1ð �j‰j˜1Ÿ3™3Ñ !§#¡#Ñ%×-Ñ-¨eÕ4Ø5ð 	ñ 
ô —‘˜v¨AÔ.ˆØ$ u™nˆÔá¡
Ø'×4Ñ4°V×5FÑ5FÈÏÉÓTˆLàÐùó
s   Ã?E.c                 ó  ‡ ‡— |j                   Š‰ j                  |«      }‰ j                  |«      }t        ‰ j                  ‰ j
                  «      D ��cg c]  \  }}||z  |z  ‘Œ }}}t        ˆˆ fd„t        ||«      D «       «      S c c}}w )Nc              3   óf   •K  — | ](  \  }}|‰j                   |z  j                  ‰«      z   –— Œ* y ­w©N)r.   rU   )Ú.0ÚyiÚziÚdtrB   s      €€r'   Ú	<genexpr>z+FusedLoRALinear.__call__.<locals>.<genexpr>]   s.   øè ø€ ÐOÁY¹6¸2¸r�R˜4Ÿ:™:¨™?×2Ñ2°2Ó6Õ6ÁYùs   ƒ.1)rN   r7   r-   rS   r?   rA   Útuple)rB   ÚxÚyrZ   r[   Úzre   s   `     @r'   Ú__call__zFusedLoRALinear.__call__X   st   ù€ Ø�W‰WˆØ�K‰K˜‹NˆØ�L‰L˜‹OˆÜ%(¨¯©°d·k±kÔ%BÔCÑ%B™T˜Q ˆa�!‰e�q‹[Ð%BˆÑCÜÔOÄSÈÈAÄYÓOÓOÐOùó Ds   ÁB©é   g        g      4@)F)r   r   r    r#   Úlistr$   r5   Úboolr^   rk   Ú__classcell__©rE   s   @r'   r)   r)       s`   ø„ ð
 ØØñ@àð@ð ˜#‘Yð@ð ð	@ð
 ð@ð õ@ñ* ˜tó  öDPr&   r)   c                   ój   ‡ — e Zd Zddedefˆ fd„Zed„ «       Zed„ «       Zˆ fd„Zddede	d	e	fd
„Z
ˆ xZS )rM   rQ   rR   c                 óX   •— t        |«      �^ }}|| _        t        ‰| �  ||d||¬«       y )NF)ÚbiasrQ   rR   ©r   Úindicesr4   r5   )rB   r*   r+   rQ   rR   rv   rE   s         €r'   r5   zFusedQuantizedLinear.__init__a   s6   ø€ Ü *¨;Ó 7Ñˆ�+ØˆŒÜ‰ÑØ˜¨%¸JÈTð 	õ 	
r&   c                 óN   — | j                   j                  d   | j                  z  S ©NrH   )rO   r3   rQ   ©rB   s    r'   r*   zFusedQuantizedLinear.input_dimsh   s    € à�{‰{× Ñ  Ñ$ t§¡Ñ6Ð6r&   c                 óÀ   — dg| j                   z   | j                  j                  d   gz   }t        dt	        |«      «      D �cg c]  }||   ||dz
     z
  ‘Œ c}S c c}w ©Nr   r
   ©rv   rK   r3   ÚrangeÚlen©rB   rv   Úis      r'   r+   z FusedQuantizedLinear.output_dimsl   ó_   € à�#˜Ÿ™Ñ$¨¯©×(9Ñ(9¸!Ñ(<Ð'=Ñ=ˆÜ5:¸1¼cÀ'»lÔ5KÓLÑ5K°�˜‘
˜W Q¨¡U™^Ó+Ð5KÑLÐLùÒLó   ÁAc                 ó\   •— t         ‰| �  |«      }|j                  | j                  d¬«      S ©NrH   rI   ©r4   rk   Úsplitrv   ©rB   rh   rE   s     €r'   rk   zFusedQuantizedLinear.__call__q   ó)   ø€ Ü‰GÑ˜QÓˆØ�w‰w�t—|‘|¨"ˆwÓ-Ð-r&   r,   r-   r.   c                 óZ   — t        | j                  | j                  |||«      }| |_        |S ra   ©r)   r*   r+   r7   ©rB   r,   r-   r.   Úlora_lins        r'   Úto_lorazFusedQuantizedLinear.to_lorau   ó+   € Ü" 4§?¡?°D×4DÑ4DÀaÈÐRWÓXˆØˆŒØˆr&   ©é@   é   rl   )r   r   r    r#   r5   Úpropertyr*   r+   rk   r$   r�   rp   rq   s   @r'   rM   rM   `   s_   ø„ ñ
¸Cð 
ÈCõ 
ð ñ7ó ð7ð ñMó ðMô.ñ˜ð ¨5ð ¸u÷ r&   rM   c                   óp   ‡ — e Zd Zˆ fd„Zed„ «       Zed„ «       Zˆ fd„Zddedefd„Z	dded	e
d
e
fd„Zˆ xZS )r6   c                 óT   •— t        |«      �^ }}|| _        t        ‰| �  ||d¬«       y ©NF©rt   ru   )rB   r*   r+   rv   rE   s       €r'   r5   zFusedLinear.__init__|   s-   ø€ Ü *¨;Ó 7Ñˆ�+ØˆŒÜ‰Ñ˜ [°uÐÕ=r&   c                 ó4   — | j                   j                  d   S rx   )rK   r3   ry   s    r'   r*   zFusedLinear.input_dims�   s   € à�{‰{× Ñ  Ñ$Ð$r&   c                 óÀ   — dg| j                   z   | j                  j                  d   gz   }t        dt	        |«      «      D �cg c]  }||   ||dz
     z
  ‘Œ c}S c c}w r{   r|   r   s      r'   r+   zFusedLinear.output_dims…   r�   r‚   c                 ó\   •— t         ‰| �  |«      }|j                  | j                  d¬«      S r„   r…   r‡   s     €r'   rk   zFusedLinear.__call__Š   rˆ   r&   rQ   rR   c                 óº   — | j                   }| j                  }t        ||||«      }t        j                  | j
                  ||«      \  |_        |_        |_        |S ra   )r*   r+   rM   r<   ÚquantizerK   rO   rP   )rB   rQ   rR   r*   r+   Úqls         r'   rW   zFusedLinear.to_quantizedŽ   sN   € Ø—_‘_ˆ
Ø×&Ñ&ˆÜ! *¨k¸:ÀtÓLˆÜ*,¯+©+°d·k±kÀ:ÈtÓ*TÑ'ˆŒ	�2”9˜bœiàˆ	r&   r,   r-   r.   c                 óZ   — t        | j                  | j                  |||«      }| |_        |S ra   rŠ   r‹   s        r'   r�   zFusedLinear.to_lora–   rŽ   r&   r�   rl   )r   r   r    r5   r’   r*   r+   rk   r#   rW   r$   r�   rp   rq   s   @r'   r6   r6   {   sd   ø„ ô>ð
 ñ%ó ð%ð ñMó ðMô.ñ sð °só ñ˜ð ¨5ð ¸u÷ r&   r6   T)Ú	shapelessc                 óÔ   — | j                   }| j                  t        j                  «      } | |z  j	                  «       } t        j
                  | dd«      } | |z  j                  |«      S )Ni€ÿÿÿé   )rN   rU   r<   Úfloat32ÚroundÚclip)rh   r.   re   s      r'   Úfake_8bit_quantr¤   œ   sV   € à	
�‰€BØ	�‰”—‘Ó€AØ	
ˆU‰×ÑÓ€AÜ
�‰��4˜Ó€AØ�‰I×Ñ˜bÓ!Ð!r&   c            	       óŠ   ‡ — e Zd Zdefˆ fd„Z	 	 ddej                  deej                     dee   dej                  fd„Z	ˆ xZ
S )	Ú	AttentionÚargsc                 óp  •— t         ‰| �  «        |j                  }|j                  x| _        }|j
                  x| _        }|j                  |z  x| _        }|dz  | _        |d|z  z   |z  }t        |||z  gd||z  gz  z   «      | _
        t        j                  ||d¬«      | _        t        | j                  |j                  d«      | _        t        j"                  |«      | _        t        j"                  |«      | _        t)        j*                  d«      | _        t)        j*                  d«      | _        y )Nç      à¿é   Fr–   Tg      ð?)r4   r5   r   r   Ún_headsr   Ú
n_kv_headsÚhead_dimr.   r6   Úqkv_projr8   ÚLinearÚout_projr   r   ÚropeÚRMSNormÚq_normÚk_normr<   ÚarrayÚquant_key_scaleÚquant_value_scale)rB   r§   Údimr«   r¬   r­   Úqkv_dimrE   s          €r'   r5   zAttention.__init__¦   s  ø€ Ü‰ÑÔà�o‰oˆØ!%§¡Ð/ˆŒ�wØ'+×'8Ñ'8Ð8ˆŒ˜*Ø#'§?¡?°gÑ#=Ð=ˆŒ˜Ø˜t‘^ˆŒ
à˜Q ™^Ñ+¨xÑ7ˆÜ#Ø�'˜HÑ$Ð%¨¨Z¸(Ñ-BÐ,CÑ(CÑCó
ˆŒô Ÿ	™	 # s°Ô7ˆŒÜ#Ø�M‰MØ�O‰OØó
ˆŒ	ô
 —j‘j Ó*ˆŒÜ—j‘j Ó*ˆŒÜ!Ÿx™x¨›}ˆÔÜ!#§¡¨#£ˆÕr&   rh   ÚmaskÚcacheÚreturnc                 ó  — |j                   \  }}}| j                  |«      \  }}}	|j                  ||| j                  d«      j	                  dddd«      }|j                  ||| j
                  d«      j	                  dddd«      }|	j                  ||| j
                  d«      j	                  dddd«      }	|�š| j                  | j                  ||j                  ¬«      «      }| j                  | j                  ||j                  ¬«      «      }t        || j                  «      }t        |	| j                  «      }	|j                  ||	«      \  }}	nl| j                  | j                  |«      «      }| j                  | j                  |«      «      }t        || j                  «      }t        |	| j                  «      }	t        |||	|| j                  |¬«      }
|
j	                  dddd«      j                  ||d«      }
| j!                  |
«      S ©NrH   r   rª   r
   é   )Úoffset)r»   r.   rº   )r3   r®   Úreshaper«   Ú	transposer¬   r³   r±   rÀ   r´   r¤   r¶   r·   Úupdate_and_fetchr   r.   r°   )rB   rh   rº   r»   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r'   rk   zAttention.__call__¾   sÇ  € ð —'‘'‰ˆˆ1ˆað !%§¡¨aÓ 0Ñˆ��vð —/‘/ ! Q¨¯©°bÓ9×CÑCÀAÀqÈ!ÈQÓOˆØ�|‰|˜A˜q $§/¡/°2Ó6×@Ñ@ÀÀAÀqÈ!ÓLˆØ—‘  1 d§o¡o°rÓ:×DÑDÀQÈÈ1ÈaÓPˆàÐØ—k‘k $§)¡)¨G¸E¿L¹L )Ó"IÓJˆGØ—;‘;˜tŸy™y¨°e·l±l˜yÓCÓDˆDÜ" 4¨×)=Ñ)=Ó>ˆDÜ$ V¨T×-CÑ-CÓDˆFØ ×1Ñ1°$¸Ó?‰LˆD‘&à—k‘k $§)¡)¨GÓ"4Ó5ˆGØ—;‘;˜tŸy™y¨›Ó/ˆDÜ" 4¨×)=Ñ)=Ó>ˆDÜ$ V¨T×-CÑ-CÓDˆFä-Ø�T˜6¨°d·j±jÀtô
ˆð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�}‰}˜VÓ$Ð$r&   ©NN©r   r   r    r   r5   r<   rµ   r   r   rk   rp   rq   s   @r'   r¦   r¦   ¥   sW   ø„ ð/˜Yõ /ð6 $(Ø#ñ	!%à�8‰8ð!%ð �r—x‘xÑ ð!%ð ˜‰}ð	!%ð
 
�‰÷!%r&   r¦   c                   ó®   ‡ — e Zd Zdefˆ fd„Z	 d	dej                  dej                  dej                  deej                     dej                  f
d„Zˆ xZ	S )
ÚKVReuseAttentionr§   c                 ó”  •— t         ‰| �  «        |j                  }|j                  x| _        }|j                  |z  x| _        }|dz  | _        t        j                  ||d¬«      | _	        t        j                  ||d¬«      | _
        t        | j
                  |j                  d«      | _        t        j                  |«      | _        y )Nr©   Fr–   T)r4   r5   r   r   r«   r­   r.   r8   r¯   Úq_projr°   r   r   r±   r²   r³   )rB   r§   r¸   r«   r­   rE   s        €r'   r5   zKVReuseAttention.__init__ã   sž   ø€ Ü‰ÑÔà�o‰oˆØ!%§¡Ð/ˆŒ�wØ#'§?¡?°gÑ#=Ð=ˆŒ˜Ø˜t‘^ˆŒ
ä—i‘i  S¨uÔ5ˆŒÜŸ	™	 # s°Ô7ˆŒÜ#Ø�M‰MØ�O‰OØó
ˆŒ	ô
 —j‘j Ó*ˆ�r&   rh   rÈ   rÉ   rº   r¼   c                 ó²  — |j                   \  }}}|j                   \  }}}	}| j                  |«      }
|
j                  ||| j                  d«      j	                  dddd«      }
| j                  | j                  |
|	|z
  ¬«      «      }
t        |
||d | j                  |¬«      }|j	                  dddd«      j                  ||d«      }| j                  |«      S r¾   )
r3   rÐ   rÁ   r«   rÂ   r³   r±   r   r.   r°   )rB   rh   rÈ   rÉ   rº   rÄ   rÅ   rÆ   rC   ÚSrÇ   rÊ   s               r'   rk   zKVReuseAttention.__call__ô   sÊ   € ð —'‘'‰ˆˆ1ˆaØ—Z‘Z‰
ˆˆ1ˆa�à—+‘+˜a“.ˆØ—/‘/ ! Q¨¯©°bÓ9×CÑCÀAÀqÈ!ÈQÓOˆØ—+‘+˜dŸi™i¨¸¸A¹˜iÓ>Ó?ˆä-Ø�T˜6¨°T·Z±ZÀdô
ˆð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�}‰}˜VÓ$Ð$r&   ra   ©
r   r   r    r   r5   r<   rµ   r   rk   rp   rq   s   @r'   rÎ   rÎ   â   sb   ø„ ð+˜Yõ +ð, $(ñ%à�8‰8ð%ð �h‰hð%ð —‘ð	%ð
 �r—x‘xÑ ð%ð 
�‰÷%r&   rÎ   c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )ÚMLPr§   c                 ó  •— t         ‰| �  «        |j                  }t        ||j                  z  «      }t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _	        y r•   )
r4   r5   r   r#   r   r8   r¯   Ú	gate_projÚ	down_projÚup_proj)rB   r§   r¸   r   rE   s       €r'   r5   zMLP.__init__  sh   ø€ Ü‰ÑÔà�o‰oˆÜ˜˜t×;Ñ;Ñ;Ó<ˆ
äŸ™ 3¨
¸Ô?ˆŒÜŸ™ :¨s¸Ô?ˆŒÜ—y‘y  j°uÔ=ˆ�r&   r¼   c                 ó|   — | j                  |«      }| j                  |«      }| j                  t        ||«      «      S ra   )r×   rÙ   rØ   r   )rB   rh   Úgs      r'   rk   zMLP.__call__  s2   € Ø�N‰N˜1ÓˆØ�L‰L˜‹OˆØ�~‰~œf Q¨›lÓ+Ð+r&   ©	r   r   r    r   r5   r<   rµ   rk   rp   rq   s   @r'   rÕ   rÕ   
  s   ø„ ð>˜Yõ >ð,˜RŸX™X÷ ,r&   rÕ   c            	       óŠ   ‡ — e Zd Zdefˆ fd„Z	 	 ddej                  deej                     dee   dej                  fd„Z	ˆ xZ
S )	ÚTransformerBlockr§   c                 ó"  •— t         ‰| �  «        t        |«      | _        t	        |«      | _        t        j                  |j                  |j                  ¬«      | _
        t        j                  |j                  |j                  ¬«      | _        y ©N)Úeps)r4   r5   r¦   Ú	self_attnrÕ   Úmlpr8   r²   r   r   Úinput_layernormÚpost_attention_layernorm©rB   r§   rE   s     €r'   r5   zTransformerBlock.__init__  sa   ø€ Ü‰ÑÔÜ" 4›ˆŒÜ�t“9ˆŒÜ!Ÿz™z¨$¯/©/¸t×?PÑ?PÔQˆÔÜ(*¯
©
Ø�O‰O ×!2Ñ!2ô)
ˆÕ%r&   rh   rº   r»   r¼   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S ra   ©râ   rä   rã   rå   )rB   rh   rº   r»   r,   ÚhÚouts          r'   rk   zTransformerBlock.__call__%  sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r&   rË   rÌ   rq   s   @r'   rÞ   rÞ     sW   ø„ ð
˜Yõ 
ð $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r&   rÞ   c                   ó®   ‡ — e Zd Zdefˆ fd„Z	 d	dej                  dej                  dej                  deej                     dej                  f
d„Zˆ xZ	S )
ÚKVReuseTransformerBlockr§   c                 ó"  •— t         ‰| �  «        t        |«      | _        t	        |«      | _        t        j                  |j                  |j                  ¬«      | _
        t        j                  |j                  |j                  ¬«      | _        y rà   )r4   r5   rÎ   râ   rÕ   rã   r8   r²   r   r   rä   rå   ræ   s     €r'   r5   z KVReuseTransformerBlock.__init__3  sb   ø€ Ü‰ÑÔÜ)¨$Ó/ˆŒÜ�t“9ˆŒÜ!Ÿz™z¨$¯/©/¸t×?PÑ?PÔQˆÔÜ(*¯
©
Ø�O‰O ×!2Ñ!2ô)
ˆÕ%r&   rh   rÈ   rÉ   rº   r¼   c                 ó    — | j                  | j                  |«      |||«      }||z   }| j                  | j                  |«      «      }||z   }|S ra   rè   )rB   rh   rÈ   rÉ   rº   r,   ré   rê   s           r'   rk   z KVReuseTransformerBlock.__call__<  sS   € ð �N‰N˜4×/Ñ/°Ó2°D¸&À$ÓGˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r&   ra   rÓ   rq   s   @r'   rì   rì   2  sb   ø„ ð
˜Yõ 
ð $(ñà�8‰8ðð �h‰hðð —‘ð	ð
 �r—x‘xÑ ðð 
�‰÷r&   rì   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )ÚAFMModelr§   c                 ó  •— t         ‰| �  «        || _        |j                  | _        t	        j
                  |j                  |j                  «      | _        t        |j                  |j                  z
  «      D �cg c]  }t        |«      ‘Œ c}| _        t        |j                  «      D �cg c]  }t        |«      ‘Œ c}| _        t	        j                  |j                  |j                   ¬«      | _        y c c}w c c}w rà   )r4   r5   r§   r   r8   Ú	Embeddingr   Ú	embeddingr}   r   r   rÞ   Úlayersrì   Úkv_reuse_layersr²   r   Úoutput_norm)rB   r§   rC   rE   s      €r'   r5   zAFMModel.__init__K  sÍ   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒäŸ™ d§o¡o°t·±ÓGˆŒô ˜4Ÿ?™?¨T×-EÑ-EÑEÔFó
áF�ô ˜TÕ"ØFñ
ˆŒô
 49¸×9QÑ9QÔ3Ró 
Ù3R¨aÔ# DÕ)Ð3Rñ 
ˆÔô Ÿ:™: d§o¡o¸4×;LÑ;LÔMˆÕùò
ùò 
s   Á;C7Â,C<Úinputsc                 ób  — | j                  |«      }|€&d gt        | j                  «      z  }t        «       |d<   t	        ||d   «      }t        | j                  |«      D ]  \  }} ||||¬«      }Œ |d   j                  \  }}| j                  D ]  } |||||«      }Œ | j                  |«      S )NrH   r   )r»   )	ró   r~   rô   r   r   rS   Ústaterõ   rö   )	rB   r÷   r»   ré   rº   ÚlayerÚcrÈ   rÉ   s	            r'   rk   zAFMModel.__call__Z  sµ   € ð
 �N‰N˜6Ó"ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEÜ*Ó,ˆE�"‰Iä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜ QÔ'‰Að 0ð ˜R‘y—‘‰ˆˆfØ×)Ô)ˆEÙ�a˜˜v tÓ,‰Að *ð ×Ñ Ó"Ð"r&   ra   rÜ   rq   s   @r'   rð   rð   J  s'   ø„ ðN˜Yõ Nð$ ñ#à—‘÷#r&   rð   c                   ó^   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zd„ Ze	d„ «       Z
ˆ xZS )ÚModelr§   c                 ór   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        y ra   )r4   r5   r§   r   rð   Úmodelræ   s     €r'   r5   zModel.__init__r  s+   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ˜d“^ˆ�
r&   r÷   c                 ót   — | j                  ||«      }| j                   j                  j                  |«      }|S ra   )rÿ   ró   Ú	as_linear)rB   r÷   r»   rê   s       r'   rk   zModel.__call__x  s3   € ð
 �j‰j˜ Ó'ˆØ�j‰j×"Ñ"×,Ñ,¨SÓ1ˆØˆ
r&   c                 óˆ   — t        t        | j                  j                  «      «      D �cg c]  }t	        «       ‘Œ c}S c c}w ra   )r}   r~   rÿ   rô   r   )rB   rC   s     r'   Ú
make_cachezModel.make_cache�  s2   € Ü#(¬¨T¯Z©Z×->Ñ->Ó)?Ô#@ÓAÑ#@˜a”•	Ð#@ÑAÐAùÒAs   «?c                 ó\   — | j                   j                  | j                   j                  z   S ra   )rÿ   rô   rõ   ry   s    r'   rô   zModel.layers„  s!   € à�z‰z× Ñ  4§:¡:×#=Ñ#=Ñ=Ð=r&   ra   )r   r   r    r   r5   r<   rµ   rk   r  r’   rô   rp   rq   s   @r'   rý   rý   q  s?   ø„ ð$˜Yõ $ð ñà—‘óòBð ñ>ó ô>r&   rý   ),r:   Údataclassesr   Ú	functoolsr   Ú	itertoolsr   Útypingr   r   r   r	   Úmlx.coreÚcorer<   Úmlx.nnr8   Úactivationsr   Úbaser   r   r   r»   r   r   Ú
rope_utilsr   r   ÚModuler)   ÚQuantizedLinearrM   r¯   r6   Úcompiler¤   r¦   rÎ   rÕ   rÞ   rì   rð   rý   r%   r&   r'   Ú<module>r     s  ðó Ý !Ý Ý  ß -Ó -å Ý å ß TÑ Tß .Ý 'ð ô
�ó 
ó ð
ô=P�b—i‘iô =Pô@˜2×-Ñ-ô ô6�"—)‘)ô ñB 	ˆ�‰˜tÔ$ñ"ó %ð"ô:%�—	‘	ô :%ôz%%�r—y‘yô %%ôP,ˆ"�)‰)ô ,ô"�r—y‘yô ô.˜bŸi™iô ô0$#ˆr�y‰yô $#ôN>ˆB�I‰Iõ >r&   