+
    UV-j"  ã                   ó  € ^ RI HtHtHtHtHt ^ RIHt ^ RI	H
t
 ]P                  ! ]P                  ! 4       4      tR R ltR R ltR R ltR	 R
 lt ! R R4      tR R ltR R ltR R ltR R ltR R ltR R ltR R ltR# )é    )ÚAnyÚCallableÚListÚOptionalÚTupleNc                óN   € V ^8„  d   QhR\         \        P                  ,          /# )é   Úreturn©r   ÚmxÚarray)Úformats   "Úk/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/speculative/common.pyÚ__annotate__r   	   s   € ÷ :ñ :œœbŸh™h�ñ :ó    c                  óˆ   € \         P                  P                   U u. uF  p \         P                  ! V 4      NK  	  up # u up i ©N)r   ÚrandomÚstater   )r   s    r   Ú_copy_rng_stater   	   s*   € Ü)+¯©¯ªÓ9© ŒB�HŠH�UŽO©Ñ9Ð9ùÒ9s   �?c                óR   € V ^8„  d   QhR\         \        P                  ,          RR/# )r	   r   r
   Nr   )r   s   "r   r   r      s"   € ÷ #ñ #œd¤2§8¡8�nð #°ñ #r   c                 óh   € \        V 4       F"  w  rV\        P                  P                  V&   K$  	  R # r   )Ú	enumerater   r   r   )r   ÚiÚvalues   &  r   Ú_restore_rng_stater      s%   € Ü˜eÖ$‰ˆØ"Œ�	‰	�‰˜Óó %r   c                ó^   € V ^8„  d   QhR\         R\        \        P                  ,          RR/# )r	   r   Úarraysr
   N)r   r   r   r   )r   s   "r   r   r      s)   € ÷ )ñ )œ#ð )¤t¬B¯H©H¥~ð )¸$ñ )r   c                 óD  € \        V \        P                  4      '       d   VP                  V 4       R # \        V \        4      '       d%   V P                  4        F  p\        W!4       K  	  R # \        V \        \        34      '       d   V  F  p\        W!4       K  	  R # R # r   )	Ú
isinstancer   r   ÚappendÚdictÚvaluesÚ_append_arraysÚlistÚtuple)r   r   Úitems   && r   r$   r$      sl   € Ü�%œŸ™×"Ò"Ø�‰�eÖÜ	�Eœ4×	 Ò	 Ø—L‘L–NˆDÜ˜4Ö(ó #ä	�EœD¤%˜=×	)Ò	)ÛˆDÜ˜4Ö(ó ñ 
*r   c                ón   € V ^8„  d   QhR\         P                  R\        \        P                  ,          /# ©r	   Údraft_modelr
   )ÚnnÚModuler   r   r   )r   s   "r   r   r      s&   € ÷ ñ ¬R¯Y©Yð ¼4ÄÇÁ½>ñ r   c                 óú   € \        V R R4      p\        V4      '       d   . p\        V! 4       V4       V# \        V RR4      p\        V\        4      '       d   V3p. pV F  p\        \        WR4      V4       K  	  V# )Údraft_eval_stateNÚsampler_state_attrs)Ú_seed_token)ÚgetattrÚcallabler$   r    Ústr)r*   Ústate_fnr   ÚattrsÚattrs   &    r   Ú_draft_sampler_state_arraysr7      s{   € Ü�{Ð$6¸Ó=€HÜ�×ÒØ!#ˆÜ‘x“z 6Ô*Øˆä�KÐ!6Ð8HÓI€EÜ�%œ×ÒØ�ˆà€FÛˆÜ”w˜{°$Ó7¸Ö@ñ à€Mr   c                   ó˜   a € ] tR t^.t o RtV 3R lR ltV 3R lR ltV 3R lR ltRR	/V 3R
 lR lltV 3R lR lt	V 3R lR lt
RtV tR# )Ú_SpeculativeSamplerRNGz8Keep target and drafter sampler RNG streams independent.c                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# )r	   r*   Úenabled)r+   r,   Úbool)r   Ú__classdict__s   "€r   r   Ú#_SpeculativeSamplerRNG.__annotate__1   s#   ø€ ÷ Lñ L¡B§I¡Ið L¹4ñ Lr   c               óÌ   € Wn         \        V4      V n        V P                  '       d   \        4       MR V n        V P                  '       d   \        4       V n        R # R V n        R # r   )r*   r<   r;   r   Ú_target_rng_stateÚ_draft_rng_state)Úselfr*   r;   s   &&$r   Ú__init__Ú_SpeculativeSamplerRNG.__init__1   sB   € Ø&ÔÜ˜G“}ˆŒØ6:·l·l°l¤Ô!2ÈˆÔØ59·\·\°\¤Ó 1ˆÖÀtˆÖr   c                ó    <€ V ^8„  d   QhRS[ /# ©r	   Úfn©r   )r   r=   s   "€r   r   r>   7   s   ø€ ÷ ñ áñr   c                ó,  € V P                   '       gX   V! V/ VB p. p\        WE4       VP                  \        V P                  4      4       V'       d   \
        P                  ! V!   V# \        4       V n        \        V P                  4       V! V/ VB p\        V P                  4      pVP                  \
        P                  P                  4       V'       d   \
        P                  ! V!   \        4       V n
        \        V P                  4       V# r   )r;   r$   Úextendr7   r*   r   Ú
async_evalr   r@   r   rA   r   r   ©rB   rG   ÚargsÚkwargsÚresultr   s   &&*,  r   Ú
draft_callÚ!_SpeculativeSamplerRNG.draft_call7   sÎ   € ð �|�|ˆ|Ù˜Ð( Ñ(ˆFØˆFÜ˜6Ô*Ø�M‰MÔ5°d×6FÑ6FÓGÔHßÜ—’˜vÒ&ØˆMä!0Ó!2ˆÔÜ˜4×0Ñ0Ô1Ù�TÐ$˜VÑ$ˆä,¨T×-=Ñ-=Ó>ˆØ�‰”b—i‘i—o‘oÔ&ßÜ�MŠM˜6Ò"ä /Ó 1ˆÔÜ˜4×1Ñ1Ô2Øˆr   c                ó    <€ V ^8„  d   QhRS[ /# rF   rH   )r   r=   s   "€r   r   r>   S   s   ø€ ÷ ñ ™xñ r   c                ó  € V P                   '       g4   V! V/ VB p. p\        WE4       V'       d   \        P                  ! V!   V# \	        4       V n        \        V P                  4       V! V/ VB p. p\        WE4       VP                  \        V P                  4      4       VP                  \        P                  P                  4       V'       d   \        P                  ! V!   \	        4       V n        \        V P
                  4       V# r   )r;   r$   r   rK   r   r@   r   rA   rJ   r7   r*   r   r   rL   s   &&*,  r   Údraft_tokensÚ#_SpeculativeSamplerRNG.draft_tokensS   sÉ   € Ø�|�|ˆ|Ù˜Ð( Ñ(ˆFØ%'ˆFÜ˜6Ô*ßÜ—’˜vÒ&ØˆMä!0Ó!2ˆÔÜ˜4×0Ñ0Ô1Ù�TÐ$˜VÑ$ˆàˆÜ�vÔ&Ø�‰Ô1°$×2BÑ2BÓCÔDØ�‰”b—i‘i—o‘oÔ&ßÜ�MŠM˜6Ò"ä /Ó 1ˆÔÜ˜4×1Ñ1Ô2Øˆr   Ú
sync_draftFc                ó$   <€ V ^8„  d   QhRS[ RR/# )r	   rV   r
   N)r<   )r   r=   s   "€r   r   r>   k   s   ø€ ÷ :ñ :©Dð :¸Tñ :r   c               ó~   € V P                   '       d+   \        4       V n        V'       d   \        4       V n        R # R # R # r   )r;   r   r@   rA   )rB   rV   s   &$r   Útarget_sampledÚ%_SpeculativeSamplerRNG.target_sampledk   s.   € Ø�<�<ˆ<Ü%4Ó%6ˆDÔ"ßÜ(7Ó(9�Ö%ñ ñ r   c                ó   <€ V ^8„  d   QhRR/# )r	   r
   N© )r   r=   s   "€r   r   r>   q   s   ø€ ÷ 6ñ 6 dñ 6r   c                óL   € V P                   '       d   \        4       V n        R # R # r   )r;   r   rA   )rB   s   &r   Úsync_draft_to_targetÚ+_SpeculativeSamplerRNG.sync_draft_to_targetq   s   € Ø�<�<ˆ<Ü$3Ó$5ˆDÖ!ñ r   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r	   r#   r
   N)r   )r   r=   s   "€r   r   r>   u   s   ø€ ÷ 3ñ 3¡3ð 3¨4ñ 3r   c                óf  € V P                   '       g5   . pV F  p\        W24       K  	  V'       d   \        P                  ! V!   R # . pV F  p\        W24       K  	  VP	                  \        P
                  P                  4       V'       d   \        P                  ! V!   \        4       V n        R # r   )	r;   r$   r   rK   rJ   r   r   r   r@   )rB   r#   r   r   s   &*  r   Útarget_evalÚ"_SpeculativeSamplerRNG.target_evalu   sy   € Ø�|�|ˆ|Ø%'ˆFÛ�Ü˜uÖ-ñ  çÜ—’˜vÒ&ÙàˆÛˆEÜ˜5Ö)ñ à�‰”b—i‘i—o‘oÔ&ßÜ�MŠM˜6Ò"Ü!0Ó!2ˆÖr   )rA   r@   r*   r;   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rC   rP   rT   rY   r^   rb   Ú__static_attributes__Ú__classdictcell__)r=   s   @r   r9   r9   .   sM   ø‡ € ÙB÷Lð L÷ð ÷8ð ð0:°5÷ :ò :÷6ð 6÷3ö 3r   r9   c                ó¨   € V ^8„  d   QhR\         P                  R\         P                  R\        R\        \        \        \        ,          3,          /# )r	   rT   Útarget_tokensÚbudgetr
   )r   r   Úintr   r   )r   s   "r   r   r   ‡   sE   € ÷ )ñ )Ü—(‘(ð)ä—8‘8ð)ô ð)ô Œ3””S•	ˆ>Õñ	)r   c                óJ  € \        V P                  ^,          4      pV P                  R4      P                  4       RV pVP                  R4      P                  4       pTp\	        \        WE4      4       F  w  pw  r‰W‰8w  g   K  Tp M	  VRV WVV^,            ,           p
WjRV 3# )zþExact-greedy speculative-decoding walk.

Accept drafted tokens up to the first mismatch with the target's
greedy choice, then take the target's bonus at that position.
Returns ``(accepted_count, new_tokens)`` with ``new_tokens``
truncated to ``budget``.
Néÿÿÿÿ)rn   ÚshapeÚreshapeÚtolistr   Úzip)rT   rl   rm   Ún_draftÚ	draft_rowÚ
target_rowÚacceptedr   Ú	draft_tokÚ
target_tokÚ
new_tokenss   &&&        r   Ú_speculative_walkr|   ‡   s®   € ô �,×$Ñ$ QÕ'Ó(€GØ×$Ñ$ RÓ(×/Ñ/Ó1°(°7Ð;€IØ×&Ñ& rÓ*×1Ñ1Ó3€Jà€HÜ&/´°IÓ0JÖ&KÑ"ˆÑ"ˆIØÖ"ØˆHÙñ 'Lð
 ˜9˜HÐ%¨
¸hÈ½lÐ(KÕK€JØ  Ð(Ð(Ð(r   c                óê   € V ^8„  d   QhR\         P                  R\         P                  R\        \        ,          R\        \        \        ,          \        \        \        ,          ,          3,          /# )r	   rT   rl   Úbudgetsr
   ©r   r   r   rn   r   )r   s   "r   r   r   ¡   sR   € ÷ *ñ *Ü—(‘(ð*ä—8‘8ð*ô ”#�Yð*ô Œ4”�9”dœ4¤�9•oÐ%Õ&ñ	*r   c                óô  € \        V P                  ^ ,          4      p\        V P                  ^,          4      pV P                  4       pVP                  4       p. p. p\        V4       F‹  p	Tp
\	        \        WY,          RV Wi,          4      4       F  w  pw  rÍWÍ8w  g   K  Tp
 M	  VP                  V
4       WY,          RV
 Wi,          Wª^,            ,           pVP                  VRW),           4       K�  	  Wx3# )z’Per-sequence speculative walk for B > 1.

Returns ``(accepted_list, new_tokens_list)`` where each entry
corresponds to one sequence in the batch.
N)rn   rq   rs   Úranger   rt   r!   )rT   rl   r~   ÚBru   Ú
draft_rowsÚtarget_rowsÚaccepted_listÚnew_tokens_listr   rx   Újry   rz   r{   s   &&&            r   Ú_speculative_walk_batchrˆ   ¡   sô   € ô 	ˆL×Ñ˜qÕ!Ó"€AÜ�,×$Ñ$ QÕ'Ó(€GØ×$Ñ$Ó&€JØ×&Ñ&Ó(€KØ€MØ')€OÜ�1ŽXˆØˆÜ*3Ü�
•˜h˜wÐ'¨­Ó8ö+
Ñ&ˆAÑ&�	ð Ö&Ø�Ùñ+
ð 	×Ñ˜XÔ&Ø•] 9 HÐ-°µ¸xÐUVÍ,Ð0WÕWˆ
Ø×Ñ˜z¨,¨G­JÐ7Ö8ñ ð Ð)Ð)r   c                ó  € V ^8„  d   QhR\         P                  R\         P                  R\        \        ,          R\        \        ,          R\        \        \        ,          \        \        \        ,          ,          3,          /# )r	   rT   rl   r…   r~   r
   r   )r   s   "r   r   r   ¿   s`   € ÷ <ñ <Ü—(‘(ð<ä—8‘8ð<ô œ•9ð<ô ”#�Yð	<ô
 Œ4”�9”dœ4¤�9•oÐ%Õ&ñ<r   c                ór  € \        V4      p. p\        V4       F‡  w  rgWV^,           1RV13,          pWV^,           1WD^,           13,          p	\        P                  ! W‰.^R7      RRV13,          P	                  R4      P                  4       p
VP                  V
4       K‰  	  V.\        V4      ,          V3# )zEClamp a batch to the earliest rejection with verifier-token fallback.N)Úaxis:NNNrp   )Úminr   r   Úconcatenaterr   rs   r!   Úlen)rT   rl   r…   r~   rx   r†   r   rm   Úaccepted_prefixÚbonusÚnews   &&&&       r   Ú*_speculative_walk_batch_uniform_acceptancer’   ¿   sµ   € ô �=Ó!€HØ')€OÜ˜wÖ'‰	ˆØ&¨1¨q­5 y°)°8°)Ð';Õ<ˆØ ! a¥%˜i¨¸qµLÐ)@Ð@ÕAˆä�NŠN˜OÐ3¸!Ô<¸QÀÀÀ¸ZÕHß‰W�R‹[ß‰V‹Xð 	ð
 	×Ñ˜sÖ#ñ (ð ˆ:œ˜MÓ*Õ*¨OÐ;Ð;r   c                óT   € V ^8„  d   QhR\         P                  R\        R\        RR/# )r	   r*   rx   Údraft_countr
   N)r+   r,   Úfloatrn   )r   s   "r   r   r   Ô   s0   € ÷ 8ñ 8Ü—‘ð8Ü&+ð8Ü:=ð8à	ñ8r   c                 ó¬   € V P                   P                  V4       \        V R 4      '       d'   V P                  P                  \	        V4      4       R# R# )Ú
draft_lensN)Úaccept_lensr!   Úhasattrr—   rn   )r*   rx   r”   s   &&&r   Ú_record_speculative_roundrš   Ô   sC   € ð ×Ñ×"Ñ" 8Ô,Üˆ{˜L×)Ò)Ø×Ñ×%Ñ%¤c¨+Ó&6Ö7ñ *r   c                óf   € V ^8„  d   QhR\         P                  R\        \        ,          R\        /# )r	   r*   Údraft_block_sizer
   )r+   r,   r   rn   )r   s   "r   r   r   Ü   s*   € ÷ 1ñ 1¤R§Y¡Yð 1Ä(Ì3Å-ð 1ÔTWñ 1r   c           	      óÖ   € Ve   \        V4      # \        V P                  P                  4      p\        V P                  RR 4      pVf   V# \	        V\        ^\        V4      4      4      # )NÚruntime_block_size)rn   ÚconfigÚ
block_sizer1   rŒ   Úmax)r*   rœ   Ú
configuredÚruntimes   &&  r   Ú_dflash_block_totalr¤   Ü   sb   € ØÒ#ÜÐ#Ó$Ð$ä�[×'Ñ'×2Ñ2Ó3€JÜ�k×(Ñ(Ð*>ÀÓE€GØ‚ØÐÜˆzœ3˜q¤# g£,Ó/Ó0Ð0r   c                óp   € V ^8„  d   QhR\         \        ,          R\        \        P                  ,          /# )r	   Úprompt_cacher
   )r   r   r   r   r   )r   s   "r   r   r   ç   s'   € ÷ ñ ¬D´­Ið ¼(Ä2Ç8Á8Õ:Lñ r   c                 óB   € V  F  p\        VR R4      pVf   K  Vu # 	  R# )Úleft_paddingN)r1   )r¦   Úcache_entryr¨   s   &  r   Ú_batch_cache_left_paddingrª   ç   s+   € Û#ˆÜ˜{¨N¸DÓAˆØÔ#ØÒñ $ñ r   c                óZ   € V ^8„  d   QhR\         P                  R\        \        ,          /# r)   )r+   r,   r   r3   )r   s   "r   r   r   ï   s"   € ÷ ñ ¬2¯9©9ð ¼Ä#½ñ r   c                 ó¢  € \        V R R4      ;'       g    . pV'       g   R# \        V4      p\        V4      pW2,          pW2,           V,          p\        V RR4      ;'       g    . p\        V4      V8X  dR   \        V4      ^ 8”  dB   ^dV,          \        V4      ,          p\        V4      V,          pRVR RVR RVR RVR R	V R
2# RVR RV R
2# )r˜   Nr—   zSpeculative decoding: z.2fz accepted tokens/round (z accepted drafts/round, z.1fz% of drafted, avg draft z) over z roundsz accepted tokens over )r1   rŽ   Úsum)	r*   Úaccepted_lensÚroundsÚaccepted_draftsÚmean_acceptÚmean_accepted_tokensr—   Úaccept_rateÚ
mean_drafts	   &        r   Ú_format_speculative_statsrµ   ï   sú   € Ü˜K¨¸Ó=×CÐCÀ€MßÙä�Ó€FÜ˜-Ó(€OØ!Õ*€KØ+Õ4¸Õ>ÐÜ˜ l°DÓ9×?Ð?¸R€JÜ
ˆ:ƒ˜&Ô ¤S¨£_°qÔ%8Ø˜OÕ+¬c°*«oÕ=ˆÜ˜“_ vÕ-ˆ
à$Ø# CÐ(ð )Ø˜CÐ Ð 8Ø˜3Ðð  Ø# CÐ(¨°¨x°wð	@ð	
ð 	!Ø Ð
$Ð$:¸6¸(À'ð	Kðr   )Útypingr   r   r   r   r   Úmlx.coreÚcorer   Úmlx.nnr+   Únew_thread_local_streamÚdefault_deviceÚgeneration_streamr   r   r$   r7   r9   r|   rˆ   r’   rš   r¤   rª   rµ   r\   r   r   Ú<module>r½      so   ðß 7Õ 7å Ý à×.Ò.¨r×/@Ò/@Ó/BÓCÐ õ:õ#õ
)õ÷"V3ñ V3õr)õ4*õ<<õ*8õ1õ÷r   