+
    UV-j9³ ã                  ó.  € ^ RI Ht ^ RIt^ RIHt ^ RIHtHt ^ RIH	t
 ^ RIt^ RIHtHtHt ^ tRt^tR R lt]! RR	7      R
 4       t]! RR	7      R R l4       t]! RR	7      R 4       t]! RR	7      R 4       t]! RR	7      R 4       t]! RR	7      R 4       t]! RR	7      R 4       t]! RR	7      R R l4       t]! RR	7      R R l4       t]! RR	7      R R l4       t]! RR	7      R R l4       t]! RR	7      R R l4       t ]! RR	7      R R l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* R+ llt(R±R, R- llt)R±R. R/ llt*]! RR	7      R0 R1 l4       t+]! RR	7      R²R2 R3 ll4       t,]! RR	7      R4 R5 l4       t-]! RR	7      R6 R7 l4       t.]! RR	7      R²R8 R9 ll4       t/]! RR	7      R³R: R; ll4       t0R´R< R= llt1R´R> R? llt2R´R@ RA llt3]! RR	7      RµRB RC ll4       t4]! RR	7      RµRD RE ll4       t5]! RR	7      RF 4       t6R¶RG RH llt7R¶RI RJ llt8]! RR	7      RK RL l4       t9]! RR	7      RM RN l4       t:R·RO RP llt;]! RR	7      R·RQ RR ll4       t<]! RR	7      RS RT l4       t=]! RR	7      RU RV l4       t> ! RW RX]4      t? ! RY RZ]4      t@ ! R[ R\]4      tA ! R] R^]4      tB ! R_ R`]4      tCRa Rb ltDR±Rc Rd lltERe Rf ltFRg Rh ltGRi Rj ltH]! RR	7      Rk Rl l4       tIRm Rn ltJ]! RR	7      Ro Rp l4       tK]! RR	7      Rq Rr l4       tLRs Rt ltMRu Rv ltN]! RR	7      Rw Rx l4       tORy Rz ltP]! RR	7      R{ R| l4       tQR} R~ ltR]! RR	7      R R€ l4       tSR� R‚ ltTRƒ R„ ltUR… R† ltVR‡ tWRˆ R‰ ltXRŠ R‹ ltYRŒ R� ltZRŽ R� lt[R� R‘ lt\R’ R“ lt]R” t^R• t_R– R— lt`R˜ R™ ltaRš tbR› Rœ ltc ! R� Rž4      td ! RŸ R 4      te ! R¡ R¢4      tf ! R£ R¤4      tgR¥ R¦ lth ! R§ R¨4      tiR© Rª ltj ! R« R¬4      tk ! R­ R®]4      tl ! R¯ R°]4      tmR# )¸é    )ÚannotationsN)Ú	lru_cache)Ú
NamedTupleÚOptional)Ú
_BaseCacheÚcreate_attention_maskÚcreate_causal_maskç�íµ ÷Æ°>c               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚbool© )Úformats   "Úc/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/turboquant.pyÚ__annotate__r      s   € ÷ <ñ <˜$ñ <ó    c                 ón   € \        \        R 4      ;'       d    \        P                  P                  4       # )Úmetal)ÚhasattrÚmxr   Úis_availabler   r   r   Ú_metal_availabler      s$   € Ü”2�wÓ×;Ð;¤B§H¡H×$9Ñ$9Ó$;Ð;r   )Úmaxsizec                 óv   € \        4       '       g   R # Rp \        P                  P                  R. ROR.V R7      # )NaË  
        auto lane = thread_position_in_grid.x;
        auto repeat_idx = thread_position_in_grid.y;
        auto n = thread_position_in_grid.z;

        auto token_count = norms_shape[2];
        auto kv_heads = norms_shape[1];
        auto repeat_count = q_rot_shape[2];
        if (repeat_idx >= repeat_count) {
            return;
        }

        auto b = n / (kv_heads * token_count);
        auto rem = n % (kv_heads * token_count);
        auto h = rem / token_count;
        auto t = rem % token_count;

        auto q_ptr = q_rot + ((b * kv_heads + h) * repeat_count + repeat_idx) * Dim;
        auto packed_ptr = packed + ((b * kv_heads + h) * token_count + t) * PackedWidth;

        float acc = 0.0f;
        for (int d = lane; d < Dim; d += 32) {
            int bit_offset = d * Bits;
            int word_idx = bit_offset / 32;
            int offset = bit_offset % 32;
            uint value = packed_ptr[word_idx] >> offset;
            int spill = offset + Bits - 32;
            if (spill > 0) {
                value |= packed_ptr[word_idx + 1] << (Bits - spill);
            }
            value &= ((1u << Bits) - 1u);
            acc += static_cast<float>(q_ptr[d]) * codebook[value];
        }

        acc = simd_sum(acc);
        if (thread_index_in_simdgroup == 0) {
            out[((b * kv_heads + h) * repeat_count + repeat_idx) * token_count + t] =
                acc * static_cast<float>(norms[(b * kv_heads + h) * token_count + t]);
        }
    Úturboquant_mse_scoreÚout©ÚnameÚinput_namesÚoutput_namesÚsource©Úq_rotÚnormsÚpackedÚcodebook©r   r   ÚfastÚmetal_kernel©r"   s    r   Ú_mse_score_kernelr,      sB   € ä×ÒÙð'€FôP �7‰7×ÑØ#Ú<Ø�WØð	  ó ð r   c               ó   € V ^8„  d   QhRR/# ©r   Úrepeat_countÚintr   )r   s   "r   r   r   J   s   € ÷ [ñ [¨#ñ [r   c           	     ó|  € \        4       '       d   V ^8  d   R# . ROp\        V 4       F  pVRV R2RRV RV R2.,          pK  	  V. RO,          p\        V 4       F  pVR
V R2.,          pK  	  V. RO,          p\        V 4       F  pVRV RV R2.,          pK  	  VRR.,          p\        V 4       F  pVRV RV R2.,          pK  	  VR.,          p\        V 4       F  pVRV RV R2.,          pK  	  VRR	.,          p\        P                  P	                  RV  2. ROR.RP                  V4      R7      # )uÉ   Tiled MSE score: preload R queries into registers, loop over tokens.
Processes TokTileSize tokens per threadgroup instead of 1.
Reduces threadgroup count by TokTileSizeÃ—, amortizing dispatch overhead.NÚ z        float qr_z[DimsPerLane];ú@        for (int i = 0, d = lane; i < DimsPerLane; i++, d += 32)z            qr_z,[i] = (d < Dim) ? static_cast<float>(q_base[z * Dim + d]) : 0.0f;ú	        }ú            float ps_ú = 0.0f;ú                ps_z += qr_z[i] * code;ú            }ú            float s_ú = simd_sum(ps_ú);z1            if (thread_index_in_simdgroup == 0) {ú(                out[(bh * RepeatCount + z) * token_count + t] = kn * s_Ú;Úturboquant_mse_score_tiled_r   Ú
r   )ú.        auto lane = thread_position_in_grid.x;ú+        auto n = thread_position_in_grid.z;r2   ú*        auto token_count = norms_shape[2];ú'        auto kv_heads = norms_shape[1];úK        auto num_tok_tiles = (token_count + TokTileSize - 1) / TokTileSize;ú$        auto bh = n / num_tok_tiles;ú*        auto tok_tile = n % num_tok_tiles;ú-        int t_start = tok_tile * TokTileSize;úA        int t_end = min(t_start + TokTileSize, (int)token_count);r2   z7        auto q_base = q_rot + (bh * RepeatCount) * Dim;ú:        auto pk = packed + bh * token_count * PackedWidth;ú+        auto nm = norms + bh * token_count;r2   zK        // Preload query values into registers (constant across all tokens))r2   z3        // Precompute bit offsets for key unpackingz6        int k_words[DimsPerLane], k_offs[DimsPerLane];z#        bool k_spills[DimsPerLane];úB        for (int i = 0, d = lane; i < DimsPerLane; i++, d += 32) {z            int bo = d * Bits;z!            k_words[i] = bo / 32;z             k_offs[i] = bo % 32;z0            k_spills[i] = (bo % 32 + Bits) > 32;r4   z0        constexpr uint mask = (1u << Bits) - 1u;r2   zB        // Token loop: key data changes, queries stay in registersú/        for (int t = t_start; t < t_end; t++) {ú+            auto pt = pk + t * PackedWidth;z1            float kn = static_cast<float>(nm[t]);r2   )z3            for (int i = 0; i < DimsPerLane; i++) {z8                uint vv = (pt[k_words[i]] >> k_offs[i]);zX                if (k_spills[i]) vv |= pt[k_words[i]+1] << (Bits - (k_offs[i]+Bits-32));z1                float code = codebook[vv & mask];r#   ©r   Úranger   r)   r*   Újoin)r/   ÚlinesÚrs   &  r   Ú_mse_score_tiled_kernelrS   I   s»  € ô
 ×Ò °Ô!1Ùò€Eô& �<Ö ˆØØ ˜s .Ð1ØNØ˜a˜SÐ LÈQÈCÐOcÐdð
õ 	
Šñ !ð 
ò õ €Eô( �<Ö ˆØÐ)¨!¨¨HÐ5Ð6Õ6Šñ !ð 
ò õ €Eô �<Ö ˆØÐ'¨ s¨'°!°°KÐ@ÐAÕAŠñ !ð 
ØØ
ðõ €Eô
 �<Ö ˆØÐ(¨¨¨?¸1¸#¸RÐ@ÐAÕAŠñ !ð 
Ø;ðõ €Eô �<Ö ˆØØ6°q°cÐ9WÐXYÐWZÐZ[Ð\ð
õ 	
Šñ !ð 
ØØðõ €Eô
 �7‰7×ÑØ*¨<¨.Ð9Ú<Ø�WØ�y‰y˜Óð	  ó ð r   c                 ót   € \        4       '       g   R # Rp \        P                  P                  RR.R.V R7      # )Na  
        auto word = thread_position_in_grid.x;
        auto row = thread_position_in_grid.y;

        if (row >= values_shape[0] || word >= PackedWidth) {
            return;
        }

        auto values_ptr = values + row * Length;
        uint packed_word = 0u;
        int start = max(0, (int(word) * 32 - (Bits - 1)) / Bits);
        int end = min(Length, ((int(word) + 1) * 32 + (Bits - 1)) / Bits);

        for (int idx = start; idx < end; ++idx) {
            int bit_offset = idx * Bits;
            int word_idx = bit_offset / 32;
            int offset = bit_offset % 32;
            uint value = values_ptr[idx] & ((1u << Bits) - 1u);
            if (word_idx == word) {
                packed_word |= value << offset;
            }
            if (word_idx + 1 == word) {
                int spill = offset + Bits - 32;
                if (spill > 0) {
                    packed_word |= value >> (Bits - spill);
                }
            }
        }

        out[row * PackedWidth + word] = packed_word;
    Úturboquant_pack_lowbitÚvaluesr   r   r(   r+   s    r   Ú_pack_lowbit_kernelrW   ¨   sC   € ä×ÒÙð€Fô> �7‰7×ÑØ%Ø�JØ�WØð	  ó ð r   c                 ót   € \        4       '       g   R # Rp \        P                  P                  RR.R.V R7      # )Naa  
        auto idx = thread_position_in_grid.x;
        auto row = thread_position_in_grid.y;

        if (row >= packed_shape[0] || idx >= Length) {
            return;
        }

        auto packed_ptr = packed + row * PackedWidth;
        int bit_offset = idx * Bits;
        int word_idx = bit_offset / 32;
        int offset = bit_offset % 32;
        uint value = packed_ptr[word_idx] >> offset;
        int spill = offset + Bits - 32;
        if (spill > 0) {
            value |= packed_ptr[word_idx + 1] << (Bits - spill);
        }
        out[row * Length + idx] = value & ((1u << Bits) - 1u);
    Úturboquant_unpack_lowbitr&   r   r   r(   r+   s    r   Ú_unpack_lowbit_kernelrZ   Ô   sC   € ä×ÒÙð€Fô& �7‰7×ÑØ'Ø�JØ�WØð	  ó ð r   c                 óv   € \        4       '       g   R # Rp \        P                  P                  R. ROR.V R7      # )Nau  
        auto lane = thread_position_in_grid.x;
        auto repeat_idx = thread_position_in_grid.y;
        auto n = thread_position_in_grid.z;

        auto token_count = norms_shape[2];
        auto kv_heads = norms_shape[1];
        auto repeat_count = q_proj_shape[2];
        if (repeat_idx >= repeat_count) {
            return;
        }

        auto b = n / (kv_heads * token_count);
        auto rem = n % (kv_heads * token_count);
        auto h = rem / token_count;
        auto t = rem % token_count;

        auto q_ptr = q_proj + ((b * kv_heads + h) * repeat_count + repeat_idx) * Dim;
        auto packed_ptr = signs + ((b * kv_heads + h) * token_count + t) * PackedWidth;

        float acc = 0.0f;
        for (int d = lane; d < Dim; d += 32) {
            int word_idx = d / 32;
            int offset = d % 32;
            uint bit = (packed_ptr[word_idx] >> offset) & 1u;
            float sign = bit ? 1.0f : -1.0f;
            acc += static_cast<float>(q_ptr[d]) * sign;
        }

        acc = simd_sum(acc);
        if (thread_index_in_simdgroup == 0) {
            auto idx = (b * kv_heads + h) * token_count + t;
            out[((b * kv_heads + h) * repeat_count + repeat_idx) * token_count + t] =
                acc
                * static_cast<float>(norms[idx])
                * static_cast<float>(residual_norms[idx])
                * scale[0];
        }
    Úturboquant_qjl_scorer   r   )Úq_projr%   Úresidual_normsÚsignsÚscaler(   r+   s    r   Ú_qjl_score_kernelra   ô   sB   € ä×ÒÙð&€FôN �7‰7×ÑØ#ÚKØ�WØð	  ó ð r   c                 óv   € \        4       '       g   R # Rp \        P                  P                  R. ROR.V R7      # )Na{  
        auto lane = thread_position_in_grid.x;
        auto repeat_idx = thread_position_in_grid.y;
        auto n = thread_position_in_grid.z;

        auto token_count = norms_shape[2];
        auto kv_heads = norms_shape[1];
        auto repeat_count = q_rot_shape[2];
        if (repeat_idx >= repeat_count) {
            return;
        }

        auto b = n / (kv_heads * token_count);
        auto rem = n % (kv_heads * token_count);
        auto h = rem / token_count;
        auto t = rem % token_count;

        auto q_rot_ptr = q_rot + ((b * kv_heads + h) * repeat_count + repeat_idx) * Dim;
        auto q_proj_ptr = q_proj + ((b * kv_heads + h) * repeat_count + repeat_idx) * Dim;
        auto mse_ptr = mse_packed + ((b * kv_heads + h) * token_count + t) * MsePackedWidth;
        auto sign_ptr = signs + ((b * kv_heads + h) * token_count + t) * SignPackedWidth;

        float mse_acc = 0.0f;
        float qjl_acc = 0.0f;
        for (int d = lane; d < Dim; d += 32) {
            int bit_offset = d * MseBits;
            int word_idx = bit_offset / 32;
            int offset = bit_offset % 32;
            uint value = mse_ptr[word_idx] >> offset;
            int spill = offset + MseBits - 32;
            if (spill > 0) {
                value |= mse_ptr[word_idx + 1] << (MseBits - spill);
            }
            value &= ((1u << MseBits) - 1u);
            mse_acc += static_cast<float>(q_rot_ptr[d]) * codebook[value];

            int sign_word = d / 32;
            int sign_offset = d % 32;
            uint bit = (sign_ptr[sign_word] >> sign_offset) & 1u;
            float sign = bit ? 1.0f : -1.0f;
            qjl_acc += static_cast<float>(q_proj_ptr[d]) * sign;
        }

        mse_acc = simd_sum(mse_acc);
        qjl_acc = simd_sum(qjl_acc);
        if (thread_index_in_simdgroup == 0) {
            auto idx = (b * kv_heads + h) * token_count + t;
            out[((b * kv_heads + h) * repeat_count + repeat_idx) * token_count + t] =
                static_cast<float>(norms[idx]) * (
                    mse_acc
                    + scale[0] * static_cast<float>(residual_norms[idx]) * qjl_acc
                );
        }
    Úturboquant_prod_scorer   r   ©r$   r]   r%   r^   Ú
mse_packedr_   r'   r`   r(   r+   s    r   Ú_prod_score_kernelrf   (  sF   € ä×ÒÙð5€Fôl �7‰7×ÑØ$ò	
ð �WØð  ó ð r   c                 óv   € \        4       '       g   R # Rp \        P                  P                  R. ROR.V R7      # )NaV  
        auto lane = thread_position_in_grid.x;
        auto dim_idx = thread_position_in_grid.y;
        auto n = thread_position_in_grid.z;

        if (dim_idx >= Dim) {
            return;
        }

        auto token_count = norms_shape[2];
        auto kv_heads = norms_shape[1];
        auto repeat_count = weights_shape[2];
        auto b = n / (kv_heads * repeat_count);
        auto rem = n % (kv_heads * repeat_count);
        auto h = rem / repeat_count;
        auto repeat_idx = rem % repeat_count;

        auto weights_ptr = weights + ((b * kv_heads + h) * repeat_count + repeat_idx) * token_count;
        auto norms_ptr = norms + (b * kv_heads + h) * token_count;
        auto packed_ptr = packed + ((b * kv_heads + h) * token_count) * PackedWidth;

        float acc = 0.0f;
        for (int t = lane; t < token_count; t += 32) {
            auto token_ptr = packed_ptr + t * PackedWidth;
            int bit_offset = dim_idx * Bits;
            int word_idx = bit_offset / 32;
            int offset = bit_offset % 32;
            uint value = token_ptr[word_idx] >> offset;
            int spill = offset + Bits - 32;
            if (spill > 0) {
                value |= token_ptr[word_idx + 1] << (Bits - spill);
            }
            value &= ((1u << Bits) - 1u);
            acc += static_cast<float>(weights_ptr[t])
                * static_cast<float>(norms_ptr[t])
                * codebook[value];
        }

        acc = simd_sum(acc);
        if (thread_index_in_simdgroup == 0) {
            out[((b * kv_heads + h) * repeat_count + repeat_idx) * Dim + dim_idx] = acc;
        }
    Úturboquant_mse_weighted_rotr   r   ©Úweightsr%   r&   r'   r(   r+   s    r   Ú_mse_weighted_rot_kernelrk   t  sB   € ä×ÒÙð*€FôV �7‰7×ÑØ*Ú>Ø�WØð	  ó ð r   c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   r   ­  s   € ÷ kñ k¨Cñ kr   c                óÆ  € \        4       '       d   V ^8:  d   R# . R!Op\        V 4       F-  pVP                  RV R24       VP                  RV R24       K/  	  V. R"O,          p\        V 4       F3  pVP                  RV RV R	24       VP                  R
V RV R24       K5  	  V. R#O,          p\        V 4       FA  pVP                  RV R24       VP                  R4       VP                  RV RV R24       KC  	  VP                  R4       \        V 4       F3  pVP                  RV RV R24       VP                  RV RV R24       K5  	  VRR.,          p\        V 4       F0  pVP                  RV R24       VP                  RV RV R24       K2  	  VR.,          pRP                  V4      p\        P
                  P                  RV  2. R$OR.VR 7      # )%é   Nr2   z        float grp_z[num_entries] = {};ú        float qjl_acc_r6   z            grp_z)[value] += static_cast<float>(q_rot_base[z * Dim + d]);ú            qjl_acc_ú# += static_cast<float>(q_proj_base[ú * Dim + d]) * sign;r4   z        float mse_acc_z-        for (int k = 0; k < num_entries; k++)z            mse_acc_z += grp_z[k] * codebook[k];z        float mse_sum_z = simd_sum(mse_acc_r;   ú        float qjl_sum_ú = simd_sum(qjl_acc_ú-        if (thread_index_in_simdgroup == 0) {ú5            out[((b * kv_heads + h) * repeat_count + ú) * token_count + t] =z                 norm * (mse_sum_ú& + scale[0] * residual_norm * qjl_sum_r?   Úturboquant_prod_score_repeat_r   r   )r@   rA   r2   rB   rC   ú+        auto repeat_count = q_rot_shape[2];z7        constexpr uint mse_mask = (1u << MseBits) - 1u;z1        constexpr int num_entries = 1 << MseBits;r2   ú.        auto b = n / (kv_heads * token_count);ú0        auto rem = n % (kv_heads * token_count);ú#        auto h = rem / token_count;ú#        auto t = rem % token_count;r2   zL        auto q_rot_base = q_rot + ((b * kv_heads + h) * repeat_count) * Dim;zN        auto q_proj_base = q_proj + ((b * kv_heads + h) * repeat_count) * Dim;z\        auto mse_ptr = mse_packed + ((b * kv_heads + h) * token_count + t) * MsePackedWidth;úY        auto sign_ptr = signs + ((b * kv_heads + h) * token_count + t) * SignPackedWidth;r2   ú8        auto idx = (b * kv_heads + h) * token_count + t;ú4        float norm = static_cast<float>(norms[idx]);úF        float residual_norm = static_cast<float>(residual_norms[idx]);r2   )r2   ú.        for (int d = lane; d < Dim; d += 32) {z)            int bit_offset = d * MseBits;z+            int word_idx = bit_offset / 32;z)            int offset = bit_offset % 32;z5            uint value = mse_ptr[word_idx] >> offset;z.            int spill = offset + MseBits - 32;ú            if (spill > 0) {zD                value |= mse_ptr[word_idx + 1] << (MseBits - spill);r8   z            value &= mse_mask;r2   ú#            int sign_word = d / 32;ú%            int sign_offset = d % 32;úA            uint bit = (sign_ptr[sign_word] >> sign_offset) & 1u;ú,            float sign = bit ? 1.0f : -1.0f;r2   )r4   r2   u6           // Dot product: group sums Ã— codebook entriesrd   ©r   rO   ÚappendrP   r   r)   r*   ©r/   rQ   rR   r"   s   &   r   Ú_prod_score_repeat_kernelrŒ   ¬  s4  € ä×Ò °Ô!2Ùò
€Eô4 �<Ö ˆØ�‰Ð)¨!¨Ð,AÐBÔCØ�‰Ð-¨a¨S°Ð9Ö:ñ !ð 
ò õ €Eô( �<Ö ˆØ�‰Ø˜q˜cÐ!JÈ1È#È]Ð[ô	
ð 	�‰Ø" 1 #Ð%HÈÈÐK_Ð`ö	
ñ	 !ð 
ò õ €Eô
 �<Ö ˆØ�‰Ð-¨a¨S°Ð9Ô:Ø�‰ÐDÔFØ�‰Ð+¨A¨3¨h°q°cÐ9KÐLÖMñ !ð
 
‡L�L�ÔÜ�<Ö ˆØ�‰Ð-¨a¨SÐ0DÀQÀCÀrÐJÔKØ�‰Ð-¨a¨SÐ0DÀQÀCÀrÐJÖKñ !ð 
Ø
Ø7ðõ €Eô �<Ö ˆØ�‰ØCÀAÀ3ÐF\Ð]ô	
ð 	�‰Ø.¨q¨cÐ1WÐXYÐWZÐZ\Ð]ö	
ñ	 !ð 
Øðõ €Eð �Y‰Y�uÓ€FÜ�7‰7×ÑØ,¨\¨NÐ;ò	
ð �WØð  ó ð r   c               ó   € V ^8„  d   QhRR/# )r   Ú
level_bitsútuple[int, ...]r   )r   s   "r   r   r     s   € ÷ Jñ J¨ñ Jr   c                ó†  € \        4       '       d   \        V 4      ^ 8X  d   R# . R6Op\        \        V 4      4       F  pVP                  RV^,            24       K   	  \        \        V 4      4       F9  pVP                  RV^,            24       VP                  RV^,            24       K;  	  . R7Op\	        V ^R7       F¥  w  r$^V,          ^,
          pVRV RV R	V R
2RV RV R
2RV RV RV R
2RV RV R2RV RV R2RV RV RV RV R
2	RV RV RV R2RV R2RV R V RV R!V R"V R#2R$R%V R&V R'2R(V R)V^,
           R*2R+V R,V R-V R.V R-V R/2R.,          pK§  	  V. R8O,          p\
        P                  P                  R0R1P                  R2 V  4       4      ,           VR3.R4P                  V4      R57      # )9r   NÚangles_Úcos_Úsin_r2   ©Ústartz            auto angle_ptr_z
 = angles_z7 + ((b * kv_heads + h) * token_count + t) * PackedWidthr=   z            int angle_idx_z = d >> z            int bit_offset_z = angle_idx_z * z            int word_idx_z = bit_offset_z / 32;z            int offset_z % 32;z            uint value_z = angle_ptr_z
[word_idx_z] >> offset_z            int spill_z
 = offset_ú + ú - 32;z            if (spill_z > 0) {z                value_z |= angle_ptr_z
 + 1] << (z	 - spill_r;   r8   z            value_z &= úu;z            bool use_sin_z
 = ((d >> z) & 1) != 0;z            coeff *= use_sin_z ? static_cast<float>(sin_z[value_z]) : static_cast<float>(cos_ú]);Úturboquant_polar_prod_score_Ú_c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5i©N©Ústr©Ú.0Úbits   & r   Ú	<genexpr>Ú+_polar_prod_score_kernel.<locals>.<genexpr>b  s   é € Ð6VÉ:ÀC´s¸3·x°xË:ùó   ‚r   r?   r   )r$   r%   Úradii)r@   z4        auto repeat_idx = thread_position_in_grid.y;rA   r2   rB   rC   rz   z)        if (repeat_idx >= repeat_count) {ú            return;r4   r2   r{   r|   r}   r~   r2   zT        auto q_ptr = q_rot + ((b * kv_heads + h) * repeat_count + repeat_idx) * Dim;úU        auto radii_ptr = radii + ((b * kv_heads + h) * token_count + t) * BlockCount;r2   z        float acc = 0.0f;rƒ   z(            int block_idx = d >> Levels;zC            float coeff = static_cast<float>(radii_ptr[block_idx]);r2   )	z8            acc += static_cast<float>(q_ptr[d]) * coeff;r4   r2   z        acc = simd_sum(acc);ru   z<            auto idx = (b * kv_heads + h) * token_count + t;zU            out[((b * kv_heads + h) * repeat_count + repeat_idx) * token_count + t] =z5                acc * static_cast<float>(norms[idx]);r4   )	r   ÚlenrO   rŠ   Ú	enumerater   r)   r*   rP   )rŽ   r    ÚlevelrQ   ÚbitsÚmasks   &     r   Ú_polar_prod_score_kernelr®     s{  € ä×Ò¤ Z£°AÔ!5Ùâ-€KÜ”s˜:“Ö'ˆØ×Ñ˜W U¨Q¥Y KÐ0Ö1ñ (ä”s˜:“Ö'ˆØ×Ñ˜T %¨!¥) Ð-Ô.Ø×Ñ˜T %¨!¥) Ð-Ö.ñ (ò€Eô6 ! °1×5‰ˆØ�T•	˜Q�ˆØØ)¨%¨°
¸5¸'ÐAxÐy~Ðxð  @Að  BØ(¨¨¨x¸°w¸aÐ@Ø)¨%¨°¸e¸WÀCÈÀvÈQÐOØ'¨ w¨n¸U¸GÀ6ÐJØ% e W¨N¸5¸'ÀÐHØ% e W¨M¸%¸À
È5È'ÐQ]Ð^cÐ]dÐdeÐfØ$ U G¨:°e°W¸CÀ¸vÀVÐLØ$ U G¨8Ð4Ø$ U G¨>¸%¸À
È5È'ÐQ[Ð\`Ð[aÐajÐkpÐjqÐqsÐtØØ    t¨D¨6°Ð4Ø'¨ w¨j¸À½¸À<ÐPØ+¨E¨7Ð2LÈUÈGÐSZÐ[`ÐZaÐa}ð  Dð  ~Eð  ELð  MRð  LSð  SVð  WØð
õ 	
Šñ 6ð& 
ò 
õ 
€Eô �7‰7×ÑØ+¨c¯h©hÑ6VÉ:Ó6VÓ.VÕVØØ�WØ�y‰y˜Óð	  ó ð r   c               ó    € V ^8„  d   QhRRRR/# )r   rŽ   r�   r/   r0   r   )r   s   "r   r   r   j  s   € ÷ ~ñ ~°ð ~ÐPSñ ~r   c                ór  € \        4       '       d   \        V 4      ^8w  g   V^ 8:  d   R# V w  r#rE^V,          ^,
          p^V,          ^,
          p^V,          ^,
          p^V,          ^,
          p	. RpOp
\        ^4       F  pV
P                  RV^,            24       K   	  V
P	                  . RqO4       \        ^4       F9  pV
P                  RV^,            24       V
P                  RV^,            24       K;  	  . RrOp\        V4       FW  pVP                  RV R24       VP                  RV R	24       VP                  R
V R24       VP                  RV R24       KY  	  VR.,          p\        V4       F  pVP                  RV R24       K  	  VRRRV R2RRRRV R2RRV R2RRV R2RRR R!R.,          p\        V4       F  pVP                  R"V R#V R$V R%24       K   	  VR&R'RR(R)V R2R*R+R,R-V R2R.R/V R02RR1V R2R2R3R4R.,          p\        V4       F  pVP                  R5V R6V R7V R824       K   	  VR&R'RR9R:V R2R;R<R=R>V R2R?R@V RA2RRBV R2RCRDR4R.,          p\        V4       F  pVP                  REV RFV RGV RH24       K   	  VR&R'RRIRJV R2RKRLRMRNV R2RORPV RQ2RRRV	 R2RSRTR4R.,          p\        V4       F  pVP                  RUV RVV RWV RX24       K   	  V. RsO,          p\        V4       F  pVP                  RYV RZV R[24       K  	  VR&R.,          p\        V4       FK  pVP                  R\V R]V R^24       VP                  R_V R`V Ra24       VP                  RbV RcV Ra24       KM  	  VRRd.,          p\        V4       F0  pVP                  ReV Rf24       VP                  RgV RhV Ra24       K2  	  VR&.,          p\
        P                  P                  RiRjP                  Rk V  4       4      ,           RlV 2,           V
Rm.RnP                  V4      Ro7      # )té   Nr‘   r’   r“   r2   z!        threadgroup float level1_z
[Dim / 2];z!        threadgroup float level2_z
[Dim / 4];z!        threadgroup float level3_z
[Dim / 8];z!        threadgroup float level4_z[BlockCount];ro   r6   zG        for (int pair_idx = lane; pair_idx < Dim / 2; pair_idx += 32) {z*            int bit_offset_1 = pair_idx * r=   z/            int word_idx_1 = bit_offset_1 / 32;z-            int offset_1 = bit_offset_1 % 32;z>            uint value_1 = angle1_ptr[word_idx_1] >> offset_1;z%            int spill_1 = offset_1 + r—   z            if (spill_1 > 0) {z:                value_1 |= angle1_ptr[word_idx_1 + 1] << (z - spill_1);r8   z            value_1 &= r˜   zA            float cos_1_val = static_cast<float>(cos_1[value_1]);zA            float sin_1_val = static_cast<float>(sin_1[value_1]);z#            int d0 = pair_idx << 1;z            int d1 = d0 + 1;z            level1_z+[pair_idx] = static_cast<float>(q_rot_base[z: * Dim + d0]) * cos_1_val + static_cast<float>(q_rot_base[z * Dim + d1]) * sin_1_val;r4   ú8        threadgroup_barrier(mem_flags::mem_threadgroup);zG        for (int pair_idx = lane; pair_idx < Dim / 4; pair_idx += 32) {z*            int bit_offset_2 = pair_idx * z/            int word_idx_2 = bit_offset_2 / 32;z-            int offset_2 = bit_offset_2 % 32;z>            uint value_2 = angle2_ptr[word_idx_2] >> offset_2;z%            int spill_2 = offset_2 + z            if (spill_2 > 0) {z:                value_2 |= angle2_ptr[word_idx_2 + 1] << (z - spill_2);z            value_2 &= zA            float cos_2_val = static_cast<float>(cos_2[value_2]);zA            float sin_2_val = static_cast<float>(sin_2[value_2]);z&            int child = pair_idx << 1;z            level2_z[pair_idx] = level1_z[child] * cos_2_val + level1_z[child + 1] * sin_2_val;zG        for (int pair_idx = lane; pair_idx < Dim / 8; pair_idx += 32) {z*            int bit_offset_3 = pair_idx * z/            int word_idx_3 = bit_offset_3 / 32;z-            int offset_3 = bit_offset_3 % 32;z>            uint value_3 = angle3_ptr[word_idx_3] >> offset_3;z%            int spill_3 = offset_3 + z            if (spill_3 > 0) {z:                value_3 |= angle3_ptr[word_idx_3 + 1] << (z - spill_3);z            value_3 &= zA            float cos_3_val = static_cast<float>(cos_3[value_3]);zA            float sin_3_val = static_cast<float>(sin_3[value_3]);z            level3_z[pair_idx] = level2_z[child] * cos_3_val + level2_z[child + 1] * sin_3_val;zJ        for (int pair_idx = lane; pair_idx < BlockCount; pair_idx += 32) {z*            int bit_offset_4 = pair_idx * z/            int word_idx_4 = bit_offset_4 / 32;z-            int offset_4 = bit_offset_4 % 32;z>            uint value_4 = angle4_ptr[word_idx_4] >> offset_4;z%            int spill_4 = offset_4 + z            if (spill_4 > 0) {z:                value_4 |= angle4_ptr[word_idx_4 + 1] << (z - spill_4);z            value_4 &= zA            float cos_4_val = static_cast<float>(cos_4[value_4]);zA            float sin_4_val = static_cast<float>(sin_4[value_4]);z            level4_z[pair_idx] = level3_z[child] * cos_4_val + level3_z[child + 1] * sin_4_val;rp   rq   rr   z        float polar_acc_zD = lane < BlockCount ? static_cast<float>(radii_ptr[lane]) * level4_z[lane] : 0.0f;z        float polar_sum_z = simd_sum(polar_acc_r;   rs   rt   ru   z4            out[((b * kv_heads + h) * RepeatCount + rw   z"                norm * (polar_sum_rx   Úturboquant_polar_turbo_score_r›   c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir�   rž   r    s   & r   r£   Ú3_polar_turbo_score_repeat_kernel.<locals>.<genexpr>#  s   é € Ð2¡z ”3�s—8�8£zùr¥   Ú_repeat_r   r?   r   )r$   r]   r%   r¦   )r^   r_   r`   )r@   rA   r2   rB   rC   r2   r{   r|   r}   r~   r2   zK        auto q_rot_base = q_rot + ((b * kv_heads + h) * RepeatCount) * Dim;zM        auto q_proj_base = q_proj + ((b * kv_heads + h) * RepeatCount) * Dim;r¨   z[        auto angle1_ptr = angles_1 + ((b * kv_heads + h) * token_count + t) * PackedWidth1;z[        auto angle2_ptr = angles_2 + ((b * kv_heads + h) * token_count + t) * PackedWidth2;z[        auto angle3_ptr = angles_3 + ((b * kv_heads + h) * token_count + t) * PackedWidth3;z[        auto angle4_ptr = angles_4 + ((b * kv_heads + h) * token_count + t) * PackedWidth4;r   r2   r€   r�   r‚   r2   )	r4   r²   r2   rƒ   r…   r†   r‡   rˆ   r2   )	r   r©   rO   rŠ   Úextendr   r)   r*   rP   )rŽ   r/   Úbits1Úbits2Úbits3Úbits4Úmask1Úmask2Úmask3Úmask4r    r«   rQ   rR   s   &&            r   Ú _polar_turbo_score_repeat_kernelrÀ   i  s´  € ä×Ò¤ Z£°AÔ!5¸ÈÔ9JÙà!+Ñ€E�%Ø�%�Z˜1Õ€EØ�%�Z˜1Õ€EØ�%�Z˜1Õ€EØ�%�Z˜1Õ€Eâ7€KÜ�q–ˆØ×Ñ˜W U¨Q¥Y KÐ0Ö1ñ à×ÑÒ;Ô<Ü�q–ˆØ×Ñ˜T %¨!¥) Ð-Ô.Ø×Ñ˜T %¨!¥) Ð-Ö.ñ ò€Eô4 �<Ö ˆØ�‰Ð8¸¸¸:ÐFÔGØ�‰Ð8¸¸¸:ÐFÔGØ�‰Ð8¸¸¸:ÐFÔGØ�‰Ð8¸¸¸=ÐIÖJñ	 !ð
 
ˆbˆT…M€EÜ�<Ö ˆØ�‰Ð-¨a¨S°Ð9Ö:ñ !à	Ø
ØQØ
4°U°G¸1Ð=Ø9Ø7ØHØ
/°¨w°fÐ=Ø(Ø
DÀUÀGÈ<ÐXØØ
! % ¨Ð+ØKØKØ-Ø&Ø
ð!õ €Eô$ �<Ö ˆØ�‰Ø! ! Ð$OÐPQÈsð  SMð  NOð  MPð  Pjð  kö	
ñ !ð 
ØØBØ
ØQØ
4°U°G¸1Ð=Ø9Ø7ØHØ
/°¨w°fÐ=Ø(Ø
DÀUÀGÈ<ÐXØØ
! % ¨Ð+ØKØKØ0Ø
ð#õ €Eô& �<Ö ˆØ�‰Ø! ! Ð$8¸¸Ð;XÐYZÐX[Ð[sÐtö	
ñ !ð 
ØØBØ
ØQØ
4°U°G¸1Ð=Ø9Ø7ØHØ
/°¨w°fÐ=Ø(Ø
DÀUÀGÈ<ÐXØØ
! % ¨Ð+ØKØKØ0Ø
ð#õ €Eô& �<Ö ˆØ�‰Ø! ! Ð$8¸¸Ð;XÐYZÐX[Ð[sÐtö	
ñ !ð 
ØØBØ
ØTØ
4°U°G¸1Ð=Ø9Ø7ØHØ
/°¨w°fÐ=Ø(Ø
DÀUÀGÈ<ÐXØØ
! % ¨Ð+ØKØKØ0Ø
ð#õ €Eô& �<Ö ˆØ�‰Ø! ! Ð$8¸¸Ð;XÐYZÐX[Ð[sÐtö	
ñ !ð 
ò 
õ 
€Eô �<Ö ˆØ�‰Ø" 1 #Ð%HÈÈÐK_Ð`ö	
ñ !ð 
ØØ
ðõ €Eô �<Ö ˆØ�‰Ø& q cÐ)mÐnoÐmpÐp~Ðô	
ð 	�‰Ð/°¨sÐ2HÈÈÈ2ÐNÔOØ�‰Ð-¨a¨SÐ0DÀQÀCÀrÐJÖKñ !ð 
Ø
Ø7ðõ €Eô �<Ö ˆØ�‰ØBÀ1À#ÐE[Ð\ô	
ð 	�‰Ø0°°Ð3YÐZ[ÐY\Ð\^Ð_ö	
ñ	 !ð 
Øðõ €Eô �7‰7×ÑØ,Ø
�(‰(Ñ2¡zÓ2Ó
2õ3à�\�NÐ
#õ$ð  Ø�WØ�y‰y˜Óð  ó ð r   c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   r   ,  s   € ÷ Gñ G°#ñ Gr   c                óP  € \        4       '       d   V ^8:  d   R# . ROp\        V 4       F  pVP                  RV R24       K  	  V. RO,          p\        V 4       F  pVP                  RV RV R24       K  	  VRR.,          p\        V 4       F  pVP                  R	V R
V R24       K  	  VRR.,          p\        V 4       F  pVP                  RV RV R24       K  	  VR.,          pRP                  V4      p\        P
                  P                  RV  2. ROR.VR7      # )rn   Nr2   r4   ú        float acc_r6   ú            acc_z$ += static_cast<float>(weights_base[z# * token_count + t]) * norm * code;ú        float acc_sum_ú = simd_sum(acc_r;   ru   rv   ú) * Dim + dim_idx] = acc_sum_r=   r?   Ú#turboquant_mse_weighted_rot_repeat_r   r   )r@   ú1        auto dim_idx = thread_position_in_grid.y;rA   r2   ú        if (dim_idx >= Dim) {r§   r4   r2   rB   rC   z-        auto repeat_count = weights_shape[2];ú        auto b = n / kv_heads;ú        auto h = n % kv_heads;r2   zX        auto weights_base = weights + ((b * kv_heads + h) * repeat_count) * token_count;úB        auto norms_ptr = norms + (b * kv_heads + h) * token_count;úT        auto packed_ptr = packed + ((b * kv_heads + h) * token_count) * PackedWidth;r2   ú(        int bit_offset = dim_idx * Bits;ú'        int word_idx = bit_offset / 32;ú%        int offset = bit_offset % 32;r2   ©r2   z6        for (int t = lane; t < token_count; t += 32) {z:            auto token_ptr = packed_ptr + t * PackedWidth;z7            uint value = token_ptr[word_idx] >> offset;z+            int spill = offset + Bits - 32;r„   zC                value |= token_ptr[word_idx + 1] << (Bits - spill);r8   z)            value &= ((1u << Bits) - 1u);z)            float code = codebook[value];z:            float norm = static_cast<float>(norms_ptr[t]);ri   r‰   r‹   s   &   r   Ú_mse_weighted_rot_repeat_kernelrÓ   +  se  € ä×Ò °Ô!2Ùò€Eô0 �<Ö ˆØ�‰Ð)¨!¨¨HÐ5Ö6ñ !à	ò õ €Eô �<Ö ˆØ�‰Ø˜q˜cÐ!EÀaÀSÐHkÐlö	
ñ !ð 
ØØ
ðõ €Eô �<Ö ˆØ�‰Ð-¨a¨SÐ0@ÀÀÀ2ÐFÖGñ !à	Ø
Ø7ðõ €Eô �<Ö ˆØ�‰ØCÀAÀ3ÐFcÐdeÐcfÐfgÐhö	
ñ !ð 
Øðõ €Eð �Y‰Y�uÓ€FÜ�7‰7×ÑØ2°<°.ÐAÚ>Ø�WØð	  ó ð r   c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   r   w  s   € ÷ Tñ T¸ñ Tr   c           
     ój  € \        4       '       d   V ^8:  d   R# . R!Op\        V 4       FE  pVP                  RV RV R24       VP                  RV R24       VP                  R	V R24       KG  	  V. R"O,          p\        V 4       FN  pVP                  R
V RV RV R24       VP                  RV RV R24       VP                  RV RV R24       KP  	  VRR.,          p\        V 4       F3  pVP                  RV RV R24       VP                  RV RV R24       K5  	  VRR.,          p\        V 4       F0  pVP                  RV R24       VP                  RV RV R24       K2  	  VR.,          pRP                  V4      p\        P
                  P                  RV  2. R#OR.VR 7      # )$zySingle-pass fused softmax + weighted sum kernel.

Takes precomputed max_scores to avoid a separate token-dimension pass.
Nr2   r4   ú        float max_score_ú = static_cast<float>(max_base[r™   rÃ   r6   z        float denom_ú            float weight_ú& = exp(static_cast<float>(scores_base[ú! * token_count + t]) - max_score_r;   rÄ   ú += weight_ú * norm * code;z            denom_r=   rÅ   rÆ   z        float denom_sum_z = simd_sum(denom_ru   rv   z) * Dim + dim_idx] =z                acc_sum_z / max(denom_sum_z	, 1e-6f);r?   Ú*turboquant_mse_scores_weighted_rot_repeat_r   r   ©r@   rÉ   rA   r2   rÊ   r§   r4   r2   rB   rC   z,        auto repeat_count = scores_shape[2];rË   rÌ   r2   zV        auto scores_base = scores + ((b * kv_heads + h) * repeat_count) * token_count;rÍ   rÎ   zG        auto max_base = max_scores + (b * kv_heads + h) * repeat_count;r2   rÏ   rÐ   rÑ   r2   rÒ   ©Úscoresr%   r&   r'   Ú
max_scoresr‰   r‹   s   &   r   Ú&_mse_scores_weighted_rot_repeat_kernelrâ   v  s  € ô ×Ò °Ô!2Ùò€Eô2 �<Ö ˆØ�‰Ø& q cÐ)HÈÈÈ3ÐOô	
ð 	�‰Ð)¨!¨¨HÐ5Ô6Ø�‰Ð+¨A¨3¨hÐ7Ö8ñ !ð 
ò õ €Eô �<Ö ˆØ�‰Ø'¨ sÐ*PÐQRÐPSÐStÐuvÐtwÐwyÐzô	
ð 	�‰Ð'¨ s¨+°a°S¸ÐHÔIØ�‰Ð)¨!¨¨K¸°s¸!Ð<Ö=ñ !ð 
ØØ
ðõ €Eô �<Ö ˆØ�‰Ð-¨a¨SÐ0@ÀÀÀ2ÐFÔGØ�‰Ð/°¨sÐ2DÀQÀCÀrÐJÖKñ !ð 
Ø
Ø7ðõ €Eô �<Ö ˆØ�‰ØCÀAÀ3ÐFZÐ[ô	
ð 	�‰Ð/°¨sÐ2CÀAÀ3ÀiÐPÖQñ	 !ð
 
Øðõ €Eð �Y‰Y�uÓ€FÜ�7‰7×ÑØ9¸,¸ÐHÚKØ�WØð	  ó ð r   c               ó   € V ^8„  d   QhRR/# r.   r   )r   s   "r   r   r   Ï  s   € ÷ Pñ P¸Sñ Pr   c           
     ó¶  € \        4       '       d   V ^8:  d   R# . ROp\        V 4       F0  pVP                  RV RV R24       VP                  RV R24       K2  	  V. RO,          p\        V 4       F6  pVP                  R	V R
V RV R24       VP                  RV RV R24       K8  	  VRR.,          p\        V 4       F  pVP                  RV RV R24       K  	  VRR.,          p\        V 4       F  pVP                  RV RV R24       K  	  VR.,          pRP                  V4      p\        P
                  P                  RV  2. ROR.VR7      # )z–Single-pass kernel for unnormalized weighted sum (used in chunked attention).

Takes precomputed max_scores to avoid a separate token-dimension pass.
Nr2   r4   rÖ   r×   r™   rÃ   r6   rØ   rÙ   rÚ   r;   rÄ   rÛ   rÜ   rÅ   rÆ   ru   rv   rÇ   r=   r?   Ú.turboquant_mse_scores_weighted_rot_sum_repeat_r   r   rÞ   rÒ   rß   r‰   r‹   s   &   r   Ú*_mse_scores_weighted_rot_sum_repeat_kernelræ   Î  s³  € ô ×Ò °Ô!2Ùò€Eô2 �<Ö ˆØ�‰Ø& q cÐ)HÈÈÈ3ÐOô	
ð 	�‰Ð)¨!¨¨HÐ5Ö6ñ	 !ð
 
ò õ €Eô �<Ö ˆØ�‰Ø'¨ sÐ*PÐQRÐPSÐStÐuvÐtwÐwyÐzô	
ð 	�‰Ð'¨ s¨+°a°S¸ÐHÖIñ	 !ð
 
ØØ
ðõ €Eô �<Ö ˆØ�‰Ð-¨a¨SÐ0@ÀÀÀ2ÐFÖGñ !à	Ø
Ø7ðõ €Eô �<Ö ˆØ�‰ØCÀAÀ3ÐFcÐdeÐcfÐfgÐhö	
ñ !ð 
Øðõ €Eð �Y‰Y�uÓ€FÜ�7‰7×ÑØ=¸l¸^ÐLÚKØ�WØð	  ó ð r   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   r$   úmx.arrayÚstateÚTurboQuantMSEStater¬   r0   r'   r   úOptional[mx.array]r   )r   s   "r   r   r   "  s:   € ÷ 8*ñ 8*Øð8*àð8*ð ð8*ð ð	8*ð
 ñ8*r   c           
     óº  € V^ 8:  gD   \        4       '       d4   V P                  ^8w  g#   VP                  P                  ^,          ^ 8X  d   R# V P                  w  rErgVP                  P                  ^,          pV^,           ^ ,          p	\	        V4      p
V
e¬   ^@pW‹,           ^,
          V,          pV
! WP                  VP
                  V.RV3RV	3RV3RVP
                  P                  R
,          3RV3RV3.^ ^WE,          V,          3RWEWh3.\        P                  .R7      ^ ,          p\        P                  ! V^R	7      # \        4       pVf   R# V! WP                  VP
                  V.RV3RV3RVP
                  P                  R
,          3.^ WdV,          V,          3RWEWh3.\        P                  .R7      ^ ,          p\        P                  ! V^R	7      # )r   NÚDimÚDimsPerLaneÚBitsÚPackedWidthÚRepeatCountÚTokTileSize©ÚinputsÚtemplateÚgridÚthreadgroupÚoutput_shapesÚoutput_dtypes©Úaxiséÿÿÿÿ©é    rn   rn   )
r   Úndimr%   ÚshaperS   Úindicesr   Úfloat32Úexpand_dimsr,   )r$   ré   r¬   r'   ÚBÚHÚRÚDÚTÚdims_per_laneÚtiled_kernelÚtok_tile_sizeÚnum_tok_tilesrà   Úkernels   &&&&           r   Ú_metal_mse_scorer  "  sÍ  € ð 	�Œ	Ü×!Ò!Ø�:‰:˜Œ?Ø�;‰;×Ñ˜QÕ 1Ô$áà—‘�J€Aˆ!Ø�‰×Ñ˜!Õ€AØ˜•V •N€Mô +¨1Ó-€LØÒØˆØÕ*¨QÕ.°=Õ@ˆÙØŸ;™;¨¯©°xÐ@à˜�
Ø Ð.Ø˜�Ø §¡× 3Ñ 3°BÕ 7Ð8Ø Ð"Ø Ð.ðð �a˜� Õ.Ð/Ø"Ø !˜<˜.ÜŸ:™:˜,ô
ð õˆô �~Š~˜f¨1Ô-Ð-äÓ €FØ‚~ÙáØ—{‘{ E§M¡M°8Ð<à�AˆJØ�TˆNØ˜EŸM™M×/Ñ/°Õ3Ð4ð
ð
 �!˜•U˜Q•YÐØØ˜a�|�nÜ—z‘z�lôð õ	€Fô �>Š>˜& qÔ)Ð)r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r]   rè   ré   ÚTurboQuantProdStater`   r   rë   r   )r   s   "r   r   r   ]  s0   € ÷ *ñ *Øð*àð*ð ð*ð ñ	*r   c           
     ó*  € \        4       '       d4   V P                  ^8w  g#   VP                  P                  ^,          ^ 8X  d   R# \	        4       pVf   R# V P                  w  rErgVP                  P                  ^,          pV! V VP                  VP
                  VP                  V.RV3RVP                  P                  R,          3.^ WdV,          V,          3RWEWh3.\        P                  .R7      ^ ,          p	\        P                  ! V	^R7      # )r±   Nrí   rð   ró   rú   rü   rý   )
r   rÿ   r%   r   ra   r^   Ú	qjl_signsr   r  r  )
r]   ré   r`   r  r  r  r  r  r  rà   s
   &&&       r   Ú_metal_qjl_scorer  ]  s÷   € ô
 ×Ò §¡°Ô!1°U·[±[×5FÑ5FÀqÕ5IÈQÔ5NÙäÓ €FØ‚~Ùà—‘�J€Aˆ!Ø�‰×Ñ˜!Õ€AÙàØ�K‰KØ× Ñ Ø�O‰OØð
ð �AˆJØ˜EŸO™O×1Ñ1°"Õ5Ð6ð
ð �!˜•U˜Q•YÐØØ˜a�|�nÜ—z‘z�lôð  õ!	€Fô" �>Š>˜& qÔ)Ð)r   c               ó4   € V ^8„  d   QhRRRRRRRRRRR	RR
R/# )r   r$   rè   r]   ré   r  Úmse_bitsr0   r'   r`   r   rë   r   )r   s   "r   r   r     sW   € ÷ I*ñ I*ØðI*àðI*ð ðI*ð ð	I*ð
 ðI*ð ðI*ð ñI*r   c           
     ój  € V^ 8:  gU   \        4       '       dE   V P                  ^8w  g4   VP                  ^8w  g#   VP                  P                  ^,          ^ 8X  d   R# V P                  w  rgr‰VP                  P                  ^,          p
V^8”  dÔ   \	        V4      pVeÅ   V! V VVP                  VP
                  VP                  VP                  VV.RV	3RV3RV3RVP                  P                  R	,          3RVP                  P                  R	,          3.^ ^Wg,          V
,          3R
WgWŠ3.\        P                  .R7      ^ ,          p\        P                  ! V^R7      # \        4       pVf   R# V! V VVP                  VP
                  VP                  VP                  VV.RV	3RV3RVP                  P                  R	,          3RVP                  P                  R	,          3.^ W†V,          V
,          3R
WgWŠ3.\        P                  .R7      ^ ,          p\        P                  ! V^R7      # )r   Nrí   rñ   ÚMseBitsÚMsePackedWidthÚSignPackedWidthró   rú   rü   rý   )r   rÿ   r%   r   rŒ   r^   Úmse_indicesr  r   r  r  rf   )r$   r]   ré   r  r'   r`   r  r  r  r  r  r  rà   s   &&&&&&       r   Ú_metal_prod_scorer    s  € ð 	�AŒÜ×!Ò!Ø�:‰:˜Œ?Ø�;‰;˜!ÔØ�;‰;×Ñ˜QÕ 1Ô$áà—‘�J€Aˆ!Ø�‰×Ñ˜!Õ€AØˆ1„uÜ*¨1Ó-ˆØÒÙàØØ—K‘KØ×(Ñ(Ø×%Ñ%Ø—O‘OØØð	ð ˜A�JØ" AÐ&Ø Ð)Ø% u×'8Ñ'8×'>Ñ'>¸rÕ'BÐCØ&¨¯©×(=Ñ(=¸bÕ(AÐBðð ˜!˜Q�U Q�YÐ'Ø&Ø ! a˜|˜nÜ!Ÿz™z˜lô+ð, õ-ˆFô. —>’> &¨qÔ1Ð1äÓ!€FØ‚~ÙáàØØ�K‰KØ× Ñ Ø×ÑØ�O‰OØØð	
ð �AˆJØ˜Ð!Ø˜u×0Ñ0×6Ñ6°rÕ:Ð;Ø §¡× 5Ñ 5°bÕ 9Ð:ð	
ð �!˜•U˜Q•YÐØØ˜a�|�nÜ—z‘z�lô)ð* õ+	€Fô, �>Š>˜& qÔ)Ð)r   c               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )r   r$   rè   ré   ÚTurboQuantPolarProdStaterŽ   r�   Ú
cos_tablesútuple[mx.array, ...]Ú
sin_tablesr   rë   r   )r   s   "r   r   r   Ë  sD   € ÷ +*ñ +*Øð+*à#ð+*ð  ð+*ð %ð	+*ð
 %ð+*ð ñ+*r   c           
     óÆ  € \        4       '       dD   V P                  ^8w  g3   VP                  P                  ^,          ^ 8X  g   \	        V4      ^ 8X  d   R# \        V4      pVf   R# V P                  w  rgr‰VP                  P                  ^,          p
\	        V4      pWP                  VP                  P                  .pVP                  R VP                  P                   4       4       \        W44       F  w  rÞVP                  WÞ.4       K  	  RV	3RV3RVP                  P                  P                  R
,          3.p\        VP                  P                  ^R7       F-  w  ppVP                  RV 2VP                  R
,          34       K/  	  V! VV^ W†V,          V
,          3RWgWŠ3.\        P                  .R7      ^ ,          p\        P                  ! V^R	7      # )r±   Nc              3  ó$   "  € T F  qx € K  	  R # 5ir�   r   ©r¡   r«   s   & r   r£   Ú*_metal_polar_prod_score.<locals>.<genexpr>â  ó   é € ÐEÑ%D˜E”%Ó%Dùó   ‚rí   ÚLevelsÚ
BlockCountr”   rð   ró   rú   rü   rý   )r   rÿ   r%   r   r©   r®   Úpolar_stater¦   r·   Úlevel_indicesÚziprª   rŠ   r   r  r  )r$   ré   rŽ   r  r   r  r  r  r  r  r  Úlevelsrô   Ú	cos_tableÚ	sin_tablerõ   Ú	level_idxr«   rà   s   &&&&&              r   Ú_metal_polar_prod_scorer0  Ë  s£  € ô ×ÒØ�:‰:˜Œ?Ø�;‰;×Ñ˜QÕ 1Ô$Üˆz‹?˜aÔáä% jÓ1€FØ‚~Ùà—‘�J€Aˆ!Ø�‰×Ñ˜!Õ€AÜ�‹_€FØ—[‘[ %×"3Ñ"3×"9Ñ"9Ð:€FØ
‡M�MÑE U×%6Ñ%6×%DÒ%DÓEÔEÜ # JÖ ;Ñˆ	Ø�‰�yÐ,Ö-ñ !<ð 
�ˆ
Ø	�6ÐØ	�u×(Ñ(×.Ñ.×4Ñ4°RÕ8Ð9ð€Hô
 & e×&7Ñ&7×&EÑ&EÈQ×OÑˆ	�5Ø�‰˜; y kÐ2°E·K±KÀµOÐDÖEñ Pñ ØØØ�!˜•U˜Q•YÐØØ˜a�|�nÜ—z‘z�lôð õ	€Fô �>Š>˜& qÔ)Ð)r   c               ó8   € V ^8„  d   QhRRRRRRRRRR	R
R	RRRR/# )r   r$   rè   r]   ré   r  rŽ   r�   r  r  r   r`   r   rë   r   )r   s   "r   r   r   ù  sX   € ÷ 8*ñ 8*Øð8*àð8*ð $ð8*ð  ð	8*ð
 %ð8*ð %ð8*ð ð8*ð ñ8*r   c           
     ó¶  € \        4       '       dp   V P                  ^8w  g_   VP                  ^8w  gN   V P                  VP                  8w  g3   VP                  P                  ^,          ^ 8X  g   \	        V4      ^ 8X  d   R# V P                  w  rxršVP                  P                  ^,          p\	        V4      p\        W94      pVf   R# WVP                  VP                  P                  .pVP                  R VP                  P                   4       4       VP                  VP                  VP                  V.4       \        WE4       F  w  ppVP                  VV.4       K  	  RV
3RV3RV	3RVP                  P                  P                  R,          3RVP                  P                  R,          3.p\        VP                  P                  ^R7       F-  w  ppVP                  R	V 2VP                  R,          34       K/  	  V! VV^ ^Wx,          V,          3RWxW›3.\        P                   .R
7      ^ ,          p\        P"                  ! V^R7      # )r±   Nc              3  ó$   "  € T F  qx € K  	  R # 5ir�   r   r#  s   & r   r£   Ú+_metal_polar_turbo_score.<locals>.<genexpr>  r%  r&  rí   r'  rñ   r(  r  r”   rð   ró   rú   rü   rý   )r   rÿ   r   r%   r©   rÀ   r)  r¦   r·   r*  r^   r  r+  rª   rŠ   r   r  r  )r$   r]   ré   rŽ   r  r   r`   r  r  r  r  r  r,  r  rô   r-  r.  rõ   r/  r«   rà   s   &&&&&&&              r   Ú_metal_polar_turbo_scorer5  ù  s
  € ô ×ÒØ�:‰:˜Œ?Ø�;‰;˜!ÔØ�;‰;˜&Ÿ,™,Ô&Ø�;‰;×Ñ˜QÕ 1Ô$Üˆz‹?˜aÔáà—‘�J€Aˆ!Ø�‰×Ñ˜!Õ€AÜ�‹_€FÜ-¨jÓ<€FØ‚~Ùà˜UŸ[™[¨%×*;Ñ*;×*AÑ*AÐB€FØ
‡M�MÑE U×%6Ñ%6×%DÒ%DÓEÔEØ
‡M�Mà× Ñ Ø�O‰OØð	
ôô !$ JÖ ;Ñˆ	�9Ø�‰�y )Ð,Ö-ñ !<ð 
�ˆ
Ø	�6ÐØ	˜ÐØ	�u×(Ñ(×.Ñ.×4Ñ4°RÕ8Ð9Ø	˜EŸO™O×1Ñ1°"Õ5Ð6ð€Hô & e×&7Ñ&7×&EÑ&EÈQ×OÑˆ	�5Ø�‰˜; y kÐ2°E·K±KÀµOÐDÖEñ Pñ ØØØ�!�Q•U˜Q•YÐØØ˜a�|�nÜ—z‘z�lôð õ	€Fô �>Š>˜& qÔ)Ð)r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úweighted_rotrè   Úrotationr_   rë   r   r   )r   s   "r   r   r   4  s,   € ÷ -ñ -Øð-Ø&.ð-Ø7Ið-àñ-r   c                óL   € Ve   \        W4      # \        P                  ! W4      # )aÞ  Undo the codec rotation on a Metal value-kernel result.

The L=1 value kernels return the weighted value sum in the codec's
*rotated* space. Map it back to model space with the same inverse the
codec uses: an explicit Randomized Hadamard inverse when the codec runs
with RHT (``signs`` provided), otherwise the dense-rotation matmul.
Mirrors ``_TurboQuantMSECodec._rotate_inverse`` so the kernel fast path
stays valid under RHT instead of being skipped for the einsum fallback.
)Ú_rht_inverser   Úmatmul)r7  r8  r_   s   &&&r   Ú_value_rotate_inverser<  4  s$   € ð ÒÜ˜LÓ0Ð0Ü�9Š9�\Ó,Ð,r   c               ó4   € V ^8„  d   QhRRRRRRRRRRR	R
RR
/# )r   rj   rè   ré   rê   r¬   r0   r'   r8  r_   rë   r   r   )r   s   "r   r   r   E  sW   € ÷ G*ñ G*ØðG*àðG*ð ðG*ð ð	G*ð
 ðG*ð ðG*ð ñG*r   c           
     ó^  € V^ 8:  g\   \        4       '       dL   V P                  ^8w  g;   V P                  R,          ^8w  g#   VP                  P                  ^,          ^ 8X  d   R# V P	                  V P                  ^ ,          V P                  ^,          V P                  ^,          V P                  R	,          4      pVP                  w  rxršVP                  ^ ,          pV	^8”  d£   \        V	4      pVe”   V! VVP                  VP                  V.RV3RV	3RV3RVP                  P                  R	,          3.^ W·V,          3R
WxW›3.\        P                  .R7      ^ ,          p\        WÔV4      p\        P                  ! V^R7      # \        4       pVf   R# V! VVP                  VP                  V.RV3RV3RVP                  P                  R	,          3.^ W·V,          V	,          3R
WxW›3.\        P                  .R7      ^ ,          p\        WÔV4      p\        P                  ! V^R7      # )r   Nrí   rñ   rï   rð   ró   rú   éþÿÿÿrü   rý   )r   rÿ   r   r%   ÚreshaperÓ   r  r   r  r<  r  rk   )rj   ré   r¬   r'   r8  r_   Ú
weights_2dr  r  r  r  r  r  r7  Úoutputs   &&&&&&         r   Ú_metal_mse_weighted_sumrC  E  s  € ð 	�Œ	Ü×!Ò!Ø�<‰<˜1ÔØ�=‰=˜Õ Ô!Ø�;‰;×Ñ˜QÕ 1Ô$áà—‘Ø�‰�aÕØ�‰�aÕØ�‰�aÕØ�‰�bÕó	€Jð ×!Ñ!�J€Aˆ!Ø�‰�qÕ€AØˆ1„uÜ0°Ó3ˆØÒÙ!àØ—K‘KØ—M‘MØð	ð ˜A�JØ" AÐ&Ø˜T�NØ" E§M¡M×$7Ñ$7¸Õ$;Ð<ð	ð ˜! �U�^Ø&Ø ! a˜|˜nÜ!Ÿz™z˜lô!ð" õ#ˆLô$ +¨<À5ÓIˆFÜ—>’> &¨qÔ1Ð1ä%Ó'€FØ‚~ÙáàØ�K‰KØ�M‰MØð	
ð �AˆJØ�TˆNØ˜EŸM™M×/Ñ/°Õ3Ð4ð
ð
 �!˜•U˜Q•YÐØØ˜a�|�nÜ—z‘z�lôð  õ!	€Lô" # <¸5ÓA€FÜ�>Š>˜& qÔ)Ð)r   c               ó4   € V ^8„  d   QhRRRRRRRRRRR	R
RR
/# )r   rà   rè   ré   rê   r¬   r0   r'   r8  r_   rë   r   r   )r   s   "r   r   r   �  sN   € ÷ 6*ñ 6*Øð6*àð6*ð ð6*ð ð	6*ð
 ð6*ð ð6*ð ñ6*r   c           
     óD  € V^ 8:  g\   \        4       '       dL   V P                  ^8w  g;   V P                  R,          ^8w  g#   VP                  P                  ^,          ^ 8X  d   R# V P	                  V P                  ^ ,          V P                  ^,          V P                  ^,          V P                  R,          4      pVP                  w  rxršV	^8:  d   R# \        V	4      pVf   R# \        P                  ! VRR7      pVP                  ^ ,          pV! VVP                  VP                  VV.RV3RV3RVP                  P                  R,          3.^ W×V,          3R	WxW�3.\        P                  .R7      ^ ,          p\        WäV4      p\        P                  ! V^R7      # )
r   Nrú   rí   rï   rð   ró   r?  rü   rý   )r   rÿ   r   r%   r@  râ   r   Úmaxr  r  r<  r  )rà   ré   r¬   r'   r8  r_   Ú	scores_2dr  r  r  r  r  rá   r  r7  rB  s   &&&&&&          r   Ú#_metal_mse_weighted_sum_from_scoresrH  �  sn  € ð 	�Œ	Ü×!Ò!Ø�;‰;˜!ÔØ�<‰<˜Õ˜qÔ Ø�;‰;×Ñ˜QÕ 1Ô$áà—‘Ø�‰�Q�Ø�‰�Q�Ø�‰�Q�Ø�‰�RÕó	€Ið —‘�J€Aˆ!ØˆA„vÙä3°AÓ6€FØ‚~Ùô —’˜	¨Ô+€Jà�‰�qÕ€AÙàØ�K‰KØ�M‰MØØð
ð �AˆJØ�TˆNØ˜EŸM™M×/Ñ/°Õ3Ð4ð
ð
 �!˜•Uˆ^ØØ˜a�|�nÜ—z‘z�lô!ð" õ#	€Lô$ # <¸5ÓA€FÜ�>Š>˜& qÔ)Ð)r   c               ó8   € V ^8„  d   QhRRRRRRRRRRR	RR
RRR/# )r   rà   rè   ré   rê   r¬   r0   r'   r8  rá   r_   rë   r   r   )r   s   "r   r   r   È  sX   € ÷ 5*ñ 5*Øð5*àð5*ð ð5*ð ð	5*ð
 ð5*ð ð5*ð ð5*ð ñ5*r   c           
     ó  € V^ 8:  g\   \        4       '       dL   V P                  ^8w  g;   V P                  R,          ^8w  g#   VP                  P                  ^,          ^ 8X  d   R# V P	                  V P                  ^ ,          V P                  ^,          V P                  ^,          V P                  R,          4      pVP                  w  r‰r«V
^8:  d   R# \        V
4      pVf   R# VP                  ^ ,          pV! VVP                  VP                  VV.RV3RV3RVP                  P                  R,          3.^ WØV	,          3R	W‰W­3.\        P                  .R7      ^ ,          p\        WäV4      p\        P                  ! V^R7      # )
r   Nrí   rï   rð   ró   rú   r?  rü   rý   )r   rÿ   r   r%   r@  ræ   r  r   r  r<  r  )rà   ré   r¬   r'   r8  rá   r_   rG  r  r  r  r  r  r  r7  rB  s   &&&&&&&         r   Ú'_metal_mse_weighted_sum_sum_from_scoresrK  È  s^  € ð 	�Œ	Ü×!Ò!Ø�;‰;˜!ÔØ�<‰<˜Õ˜qÔ Ø�;‰;×Ñ˜QÕ 1Ô$áà—‘Ø�‰�Q�Ø�‰�Q�Ø�‰�Q�Ø�‰�RÕó	€Ið —‘�J€Aˆ!ØˆA„vÙä7¸Ó:€FØ‚~Ùð 	�‰�qÕ€AÙàØ�K‰KØ�M‰MØØð
ð �AˆJØ�TˆNØ˜EŸM™M×/Ñ/°Õ3Ð4ð
ð
 �!˜•Uˆ^ØØ˜a�|�nÜ—z‘z�lô!ð" õ#	€Lô$ # <¸5ÓA€FÜ�>Š>˜& qÔ)Ð)r   c               ó   € V ^8„  d   QhRR/# ©r   r¬   r0   r   )r   s   "r   r   r     s   € ÷ /ñ /¨#ñ /r   c                ój   a a€ \        S ^,
          ^ 4      o\        P                  R V V3R ll4       pV# )rn   c               óL   € V ^8„  d   QhRRRRRRRRRRRRRRR	RR
RRRRRRRRR/# )r   Úgrouped_queriesrè   Ú	key_normsÚkey_mse_indicesÚkey_residual_normsÚkey_qjl_signsÚvalue_normsÚvalue_indicesÚkey_query_transform_tÚkey_codebookÚ	key_scaleÚvalue_codebookÚvalue_rotationr   r   )r   s   "r   r   Ú5_compiled_integer_decode_kernel.<locals>.__annotate__  sŠ   € ÷ )
ñ )
Ø!ð)
àð)
ð "ð)
ð %ð	)
ð
  ð)
ð ð)
ð  ð)
ð  (ð)
ð ð)
ð ð)
ð !ð)
ð !ð)
ð 
ñ)
r   c           
     óJ  <€ \         P                  ! W4      pV P                  R,          pVRRV13,          pVRVR13,          p\        VP	                  VP                  ^ ,          VP                  ^,          VP                  ^,          VP                  R,          4      VP	                  VP                  ^ ,          VP                  ^,          VP                  ^,          VP                  R,          4      \        VVVV4      SVV	4      p\        V\        WV4      SV
V4      # )rn   .Nrü   )r   r;  r   r  r@  r  rH  rê   )rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  Úquery_transformedÚdimr$   r]   rà   r¬   r  s   &&&&&&&&&&&&     €€r   Ú_decodeÚ0_compiled_integer_decode_kernel.<locals>._decode  s  ø€ ô ŸIšI oÓMÐØ×#Ñ# BÕ'ˆØ! # t¨ t )Õ,ˆØ" 3¨© 9Õ-ˆÜ"Ø�M‰MØ—‘˜A• §¡¨A¥°·±¸AµÀÇÁÈBÅóð �N‰NØ—‘˜Q• §¡¨a¥°&·,±,¸qµ/À6Ç<Á<ÐPRÕCSóô  ØØØ"Øó	ð ØØó
ˆô" 3ØÜ˜{Ó:ØØØó
ð 	
r   ©rF  r   Úcompile)r¬   r`  r  s   f @r   Ú_compiled_integer_decode_kernelrd     s6   ù€ ä�4˜!•8˜QÓ€Hä‡Z�Z÷)
ð )
ó ð)
ðV €Nr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r¬   r0   r/   Úkey_mse_bitsr   )r   s   "r   r   r   4  s&   € ÷ Mñ M sð M¸#ð MÈSñ Mr   c                ó  € \        4       '       d   V^8  d   R# V^ 8¼  d   TM\        V ^,
          ^ 4      p^V,          ^,
          p^V ,          ^,
          p. RNRNRNRNRNRNRNRNR	NR
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNp\        V4       F  pVRV RV R2RV R V R2.,          pK  	  \        V4       F  pVR!V R"2R#V R$2R%V R$2.,          pK  	  V. RaO,          p\        V4       F  pVR&V R$2.,          pK  	  VR'R(V R)2R*R+V R,V R-V R.2R/V R02R1R2.,          p\        V4       F  pVR3V R4V R5V R6V R72	.,          pK  	  VR8.,          p\        V4       F  pVR9V R:V R;2.,          pK  	  VRR<R=R>R?R@RAV RB2R8.,          p\        V4       FQ  pVRCV RDV R)2REV RFV RGV R;2RHV RIV RJV R;2RKV RLV RJV R;2RMV RNV ROV RPV R)2	RQV RRV ROV RPV RS2	.,          pKS  	  VRTR.,          pVRU.,          p\        V4       F'  pVRVRWV RXV R)2RTRYRZV R)2R[V R)2R\V R)2RT.,          pK)  	  \        P                  P                  R]V  R^V 2. RbO. RcOR_P                  V4      R`7      # )dz<Fused integer decode: score + online-softmax + weighted-sum.Nr@   ú2        auto val_tile = thread_position_in_grid.y;rA   r2   ú+        int val_dim = val_tile * 32 + lane;ú.        auto token_count = key_norms_shape[2];ú+        auto kv_heads = key_norms_shape[1];rD   rE   rF   ú        auto b = bh / kv_heads;ú        auto h = bh % kv_heads;ú'        auto base = (b * kv_heads + h);rG   rH   ú6        auto k_norms = key_norms + base * token_count;úD        auto k_mse = key_mse + base * token_count * KMsePackedWidth;ú8        auto k_res = key_res_norms + base * token_count;úI        auto k_signs = key_signs + base * token_count * KSignPackedWidth;ú6        auto v_norms = val_norms + base * token_count;úG        auto v_packed = val_packed + base * token_count * VPackedWidth;z%        bool v_valid = val_dim < Dim;z%        int v_bo = val_dim * ValBits;ú        int v_word = v_bo / 32;ú        int v_off = v_bo % 32;z/        bool v_spills = (v_off + ValBits > 32);ú        auto qr_ú! = q_rot + (base * RepeatCount + ú) * Dim;ú        auto qp_ú" = q_proj + (base * RepeatCount + ú        float lmax_ú = -INFINITY;ú        float lsum_r6   ú        float lacc_r5   ú2            for (int d = lane; d < Dim; d += 32) {ú                int bo = d * r=   ú9                uint idx = (mse_t[bo >> 5] >> (bo & 31));ú!                if (((bo & 31) + ú() > 32) idx |= mse_t[(bo >> 5) + 1] << (ú - ((bo & 31) + ú - 32));ú                idx &= r˜   ú/                float code = key_codebook[idx];ú<                uint sb = (sign_t[d >> 5] >> (d & 31)) & 1u;r7   ú += kn * static_cast<float>(qr_ú0[d]) * code + ksr * (sb ? static_cast<float>(qp_ú[d]) : -static_cast<float>(qp_ú[d]));r8   r9   r:   r;   ú             float v_code = 0.0f;ú            if (v_valid) {z6                auto vt = v_packed + t * VPackedWidth;z0                uint vv = (vt[v_word] >> v_off);zY                if (v_spills) vv |= vt[v_word + 1] << (ValBits - (v_off + ValBits - 32));z+                v_code = val_codebook[vv & z$u] * static_cast<float>(v_norms[t]);ú            float om_ú = lmax_ú            lmax_ú = max(lmax_ú, s_ú            float rs_ú
 = exp(om_ú - lmax_ú            float w_ú	 = exp(s_ú            lsum_ú = lsum_ú * rs_ú + w_ú            lacc_ú = lacc_ú
 * v_code;r4   z        int out_stride = Dim;ú        if (v_valid) {úE            out_acc[((bh * num_tok_tiles + tok_tile) * RepeatCount + ú!) * out_stride + val_dim] = lacc_ú        if (val_dim == 0) {úJ            int sm_base = (bh * num_tok_tiles + tok_tile) * RepeatCount + ú$            out_sum[sm_base] = lsum_ú$            out_max[sm_base] = lmax_Ú turboquant_fused_integer_decode_Ú_rr?   r   )r2   rL   ú5            auto mse_t = k_mse + t * KMsePackedWidth;ú9            auto sign_t = k_signs + t * KSignPackedWidth;ú6            float kn = static_cast<float>(k_norms[t]);úI            float ksr = kn * key_scale[0] * static_cast<float>(k_res[t]);©r$   r]   rQ  Úkey_mseÚkey_res_normsÚ	key_signsÚ	val_normsÚ
val_packedrX  rY  Úval_codebook©Úout_accÚout_sumÚout_max©r   rF  rO   r   r)   r*   rP   )r¬   r/   rf  r  Úmse_maskÚval_maskrQ   rR   s   &&&     r   Ú_fused_integer_decode_kernelr¼  3  s  € ô ×Ò °Ô!1Ùà+¨qÔ0‰|´c¸$À½(ÀAÓ6F€HØ�X• Õ"€HØ�T•	˜Q�€Hð Ø8ð à<ð ð 	6ð ð 	ð	 ð
 	6ð ð 	ð ð 	9ð ð 	6ð ð 	Vð ð 	/ð ð 	5ð ð 	*ð ð 	*ð ð 	2ð ð 	ð ð  	8ð! ð" 	Lð# ð$ 	ð% ð& 	Að' ð( 	Oð) ð* 	Cð+ ð, 	Tð- ð. 	Að/ ð0 	Rð1 ð2 	ð3 ð4 	0ð5 ð6 	0ð7 ð8 	*ð9 ð: 	)ð; ð< :ð= ð> 	ð? €EôD �<Ö ˆØØ˜q˜cÐ!BÀ1À#ÀXÐNØ˜q˜cÐ!CÀAÀ3ÀhÐOð
õ 	
Šñ !ô �<Ö ˆØØ! !  MÐ2Ø! !  HÐ-Ø! !  HÐ-ð
õ 	
Šñ !ð 
ò õ €Eô �<Ö ˆØÐ)¨!¨¨HÐ5Ð6Õ6Šñ !ð 
Ø
=Ø
'¨ z°Ð3Ø
CØ
+¨H¨:Ð5]Ð^fÐ]gÐgwð  yAð  xBð  BJð  	KØ
! ( ¨2Ð.Ø
9Ø
Fðõ €Eô �<Ö ˆØØ! ! Ð$CÀAÀ3ÐFvÐwxÐvyð  zXð  YZð  X[ð  [að  bð
õ 	
Šñ !ð 
Øðõ €Eô �<Ö ˆØÐ(¨¨¨?¸1¸#¸RÐ@ÐAÕAŠñ !ð 
Ø
Ø*Ø$Ø@Ø:Ø
cØ
5°h°ZÐ?cÐdØð	õ 	€Eô �<Ö ˆØØ# A 3 h¨q¨c°Ð3Ø ˜s ,¨q¨c°°a°S¸Ð;Ø# A 3 j°°°8¸A¸3¸bÐAØ" 1 # Y¨q¨c°¸!¸¸BÐ?Ø ˜s (¨1¨#¨V°A°3°e¸A¸3¸aÐ@Ø ˜s (¨1¨#¨V°A°3°e¸A¸3¸jÐIð
õ 	
Šñ !ð 
ˆk˜2ÐÕ€Eà	Ð-Ð.Õ.€EÜ�<Ö ˆØØ%ØSÐTUÐSVÐVwÐxyÐwzÐz{Ð|ØØ*ØXÐYZÐX[Ð[\Ð]Ø2°1°#°QÐ7Ø2°1°#°QÐ7Øð	
õ 		
Šñ !ô �7‰7×ÑØ/°¨v°R¸°~ÐFò
ò 7Ø�y‰y˜Óð!  ó ð r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rf  r0   r/   Únum_queriesr	  r   )r   s   "r   r   r   Å  s2   € ÷ Añ AØðAØ%(ðAØ7:ðAØKNñAr   c           "     ó  € \        4       '       d   V^8  g   V^8  d   R# ^V ,          ^,
          p\        P                  P                  RV  RV RV 2. ROR.RV RV RV R	V  R
V  RV  RV  RV RV RV RV RV RV RV R2R7      # )z†Multi-query score kernel: unpack key data ONCE per token, loop over L queries.
Avoids R*L repeat explosion that causes register spill.NÚmq_prod_score_r©  Ú_lr   a‡  
            auto lane = thread_position_in_grid.x;
            auto ri = thread_position_in_grid.y;
            auto n = thread_position_in_grid.z;
            auto tc = key_norms_shape[2];
            auto kh = key_norms_shape[1];
            auto b = n / (kh * tc);
            auto rem = n % (kh * tc);
            auto h = rem / tc;
            auto t = rem % tc;
            if (ri >= al  ) return;

            auto mt = key_mse + ((b*kh+h)*tc+t) * KMsePackedWidth;
            auto st = key_signs + ((b*kh+h)*tc+t) * KSignPackedWidth;
            float kn = static_cast<float>(key_norms[(b*kh+h)*tc+t]);
            float ksr = kn * key_scale[0] * static_cast<float>(key_res_norms[(b*kh+h)*tc+t]);

            // Unpack key ONCE
            float kc[z], ksf[zY];
            for (int i=0, d=lane; d < Dim; i++, d+=32) {
                int bo = d * zR;
                uint idx = (mt[bo>>5] >> (bo&31));
                if (((bo&31)+z!) > 32) idx |= mt[(bo>>5)+1] << (z - ((bo&31)+z-32));
                idx &= zøu;
                kc[i] = key_codebook[idx];
                uint sb = (st[d>>5] >> (d&31)) & 1u;
                ksf[i] = sb ? 1.0f : -1.0f;
            }

            // Loop over L queries, reusing unpacked key
            auto bq = (b*kh+h) * z' + ri;
            for (int l = 0; l < z£; l++) {
                float ps = 0.0f;
                for (int i=0, d=lane; d < Dim; i++, d+=32) {
                    ps += kn * static_cast<float>(q_rot[(bq*zR+l)*Dim+d]) * kc[i]
                        + ksr * static_cast<float>(q_proj[(bq*z‘+l)*Dim+d]) * ksf[i];
                }
                float s = simd_sum(ps);
                if (lane == 0)
                    out[((b*kh+h)*z+ri)*z+*tc + l*tc + t] = s;
            }
        r   )r$   r]   rQ  r¯  r°  r±  rX  rY  r(   )rf  r/   r¾  r	  rº  s   &&&& r   Ú_multi_query_prod_score_kernelrÂ  Ä  s  € ô ×Ò °Ô!1°[À1´_Ùà�\Õ! QÕ&€Hä�7‰7×ÑØ˜l˜^¨2¨l¨^¸2¸k¸]ÐKò	
ð �Wð
ð $�nð %ð $�_ G¨M¨?ð ;à*˜^ð ,à*˜^Ð+LÈ\ÈNÐZfÐgsÐftð uØ �zð ""ð #/ ð 0!Ø!, ð .=ð >I¸Mð J?Ø?J¸mð L#ð $0 .°°k°]ð C	ðO)ð  ó 7ð 7r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r¬   r0   r/   r	  r   )r   s   "r   r   r   
  s$   € ÷ =ñ =Ø
ð=Ø ð=Ø14ñ=r   c                ó  € \        4       '       d   V^8  d   R# ^V ,          ^,
          pRRRRRRRR	R
RRRRRRV  R2RRRV  R2R.p\        V4       F  pVRV R2.,          pK  	  VRRRRRV  RV  R2RV R2R.,          p\        V4       F  pVRV R V R!2.,          pK  	  VR"R.,          p\        V4       F  pVR#V R$V R2.,          pK  	  \        P                  P	                  R%V  R&V 2. R*OR'.R(P                  V4      R)7      # )+z§Single-tile value weighted sum with precomputed softmax weights.
TG=Dim: one thread per value dim, no exp() calls in inner loop.
2x faster than online-softmax variant.Nz-        auto dim = thread_position_in_grid.x;rA   rB   rC   rD   rE   rF   rG   rH   r2   z;        auto wt = weights + bh * RepeatCount * token_count;rJ   rI   z        int bo = dim * r=   z        int v_word = bo / 32;z        int v_shift = bo % 32;z"        bool v_spill = (bo % 32 + ú) > 32;rÃ   r6   rL   rM   z.            uint vv = (pt[v_word] >> v_shift);z0            if (v_spill) vv |= pt[v_word+1] << (z - (v_shift+ú-32));z&            float val = codebook[vv & zu] * static_cast<float>(nm[t]);rÄ   z += wt[z*token_count+t] * val;r4   zD        if (dim < Dim) out[((bh*num_tok_tiles+tok_tile)*RepeatCount+z)*Dim+dim] = acc_Úturboquant_single_tile_value_r©  r   r?   r   ri   rN   )r¬   r/   r	  r»  rQ   rR   s   &&&   r   Ú&_single_tile_value_weighted_sum_kernelrÈ  	  s˜  € ô ×Ò °Ô!1Ùà�T•	˜Q�€Hð 	8Ø5Ø4Ø1ØUØ.Ø4Ø7ØKØ
ØEØ5ØDØ
Ø
! $  qÐ)Ø
'Ø
(Ø
,¨T¨F°'Ð:Ø
ð'€Eô, �<Ö ˆØÐ& q c¨Ð2Ð3Õ3Šñ !ð 
Ø
Ø9Ø5Ø8Ø
:¸4¸&ÀÈTÈFÐRXÐYØ
0°°
Ð:YÐZØ
ðõ €Eô �<Ö ˆØÐ$ Q C w¨q¨cÐ1GÐHÐIÕIŠñ !ð 
ˆk˜2ÐÕ€Eä�<Ö ˆØØRÐSTÐRUÐUfÐghÐfiÐijÐkð
õ 	
Šñ !ô
 �7‰7×ÑØ,¨T¨F°"°\°NÐCÚ>Ø�WØ�y‰y˜Óð	  ó ð r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r¬   r0   r/   r	  rf  r   )r   s   "r   r   r   K  s2   € ÷ Uñ UØ
ðUØ ðUØ14ðUØDGñUr   c                óî  € \        4       '       d   V^8  d   R# V^ 8¼  d   TM\        V ^,
          ^ 4      p^V,          ^,
          p^V ,          ^,
          p. RNRNRNRNRNRNRNR	NR
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRV  R2NRNRNRV  R2NR NRNp\        V4       F  pVR!V R"V R#2R$V R%V R#2.,          pK  	  \        V4       F  pVR&V R'V R(2R)V R*2.,          pK  	  V. RbO,          p\        V4       F  pVR+V R(2.,          pK  	  VR,R-V R2R.R/V R0V R1V R22R3V R42R5R6.,          p\        V4       F  pVR7V R8V R9V R:V R;2	.,          pK  	  VR<.,          p\        V4       F  pVR=V R>V R?2.,          pK  	  V. RcO,          p\        V4       FL  pVR@V R2RAV RBV RCV R?2RDV R?2REV RFV R?2RGV RHV RI2RJRKV RL2RMRNROV  RPV  RQ2RRV RSV RT2RURVR<.,          pKN  	  VR R.,          p\        V4       F'  pVRRWV RXV RY2R RZR[V R2R\V R2R]V R2R .,          pK)  	  \        P                  P                  R^V  R_V 2. RdO. ReOR`P                  V4      Ra7      # )fuå   Single-tile fused kernel â€” each lane handles multiple value dims.
Zero key read redundancy: keys are read once per token, not once per val_tile.
Faster than multi-tile at long contexts (256k+) where memory bandwidth dominates.
Nr@   rA   rj  rk  rD   rE   rF   rl  rm  rn  rG   rH   r2   ro  rp  rq  rr  rs  rt  zF        // Precompute value bit offsets for all dims this lane handlesú6        int v_words[DimsPerLane], v_offs[DimsPerLane];ú:        bool v_spills[DimsPerLane], v_valids[DimsPerLane];úD        for (int i = 0, vd = lane; i < DimsPerLane; i++, vd += 32) {ú#            v_valids[i] = vd < Dim;ú            int vbo = vd * r=   ú"            v_words[i] = vbo / 32;ú!            v_offs[i] = vbo % 32;ú&            v_spills[i] = (vbo % 32 + rÅ  r4   rw  rx  ry  rz  r{  r|  ú = -INFINITY, lsum_r6   r  ú[DimsPerLane] = {};r5   r€  r�  r‚  rƒ  r„  r…  r†  r‡  r˜   rˆ  r‰  r7   rŠ  r‹  rŒ  r�  r8   r9   r:   r;   ú            { float om = lmax_ú              lmax_r“  r”  ú'              float rs = exp(om - lmax_ú              float w = exp(s_r—  ú              lsum_r›  ú
 * rs + w;ú5              for (int i = 0; i < DimsPerLane; i++) {ú                  lacc_ú
[i] *= rs;ú$                  if (v_valids[i]) {ú>                      uint vv = (vt[v_words[i]] >> v_offs[i]);úB                      if (v_spills[i]) vv |= vt[v_words[i]+1] << (ú - (v_offs[i]+rÆ  ú                      lacc_ú[i] += w * val_codebook[vv & úu] * vnorm;ú                  }ú              }zK            if (vd < Dim) out_acc[((bh*num_tok_tiles+tok_tile)*RepeatCount+z)*Dim+vd] = lacc_ú[i];z        if (lane == 0) {zB            int sm_base = (bh*num_tok_tiles+tok_tile)*RepeatCount+r¦  r§  Ú%turboquant_fused_integer_single_tile_r©  r?   r   )r2   rL   rª  r«  r¬  r­  r2   ©r2   z2            auto vt = v_packed + t * VPackedWidth;z9            float vnorm = static_cast<float>(v_norms[t]);r®  rµ  r¹  )	r¬   r/   r	  rf  r  rº  r»  rQ   rR   s	   &&&&     r   Ú(_fused_integer_decode_single_tile_kernelrê  J  sè  € ô ×Ò °Ô!1Ùà+¨qÔ0‰|´c¸$À½(ÀAÓ6F€HØ�X• Õ"€HØ�T•	˜Q�€Hð Ø8ð à5ð ð 	9ð ð 	6ð	 ð
 	Vð ð 	/ð ð 	5ð ð 	*ð ð 	*ð ð 	2ð ð 	8ð ð 	Lð ð 	ð ð 	Að ð 	Oð ð  	Cð! ð" 	Tð# ð$ 	Að% ð& 	Rð' ð( 	ð) ð* 	Qð+ ð, 	Að- ð. 	Eð/ ð0 	Oð1 ð2 .ð3 ð4 & d V¨1Ð-ð5 ð6 -ð7 ð8 ,ð9 ð: 1°°°gÐ>ð; ð< 	ð= ð> 	ð? €EôD �<Ö ˆØØ˜q˜cÐ!BÀ1À#ÀXÐNØ˜q˜cÐ!CÀAÀ3ÀhÐOð
õ 	
Šñ !ô �<Ö ˆØØ! ! Ð$7¸°s¸(ÐCØ! ! Ð$9Ð:ð
õ 	
Šñ !ð 
ò õ €Eô �<Ö ˆØÐ)¨!¨¨HÐ5Ð6Õ6Šñ !ð 
Ø
=Ø
'¨ z°Ð3Ø
CØ
+¨H¨:Ð5]Ð^fÐ]gÐgwð  yAð  xBð  BJð  	KØ
! ( ¨2Ð.Ø
9Ø
Fðõ €Eô �<Ö ˆØØ! ! Ð$CÀAÀ3ÐFvÐwxÐvyð  zXð  YZð  X[ð  [að  bð
õ 	
Šñ !ð 
ˆoÐÕ€Eä�<Ö ˆØÐ(¨¨¨?¸1¸#¸RÐ@ÐAÕAŠñ !ð 
ò õ €Eô �<Ö ˆØØ-¨a¨S°Ð2Ø! !  L°°°4¸°s¸"Ð=Ø5°a°S¸Ð;Ø,¨Q¨C¨x¸°s¸"Ð=Ø! !  H¨Q¨C¨zÐ:ØDØ% a S¨
Ð3Ø3ØLØPÐQUÐPVÐVdÐeiÐdjÐjpÐqØ)¨!¨Ð,IÈ(ÈÐS^Ð_Ø"ØØð
õ 	
Šñ !ð$ 
ˆk˜2ÐÕ€Eô �<Ö ˆØØSØYÐZ[ÐY\Ð\mÐnoÐmpÐptÐuØØ'ØPÐQRÐPSÐSTÐUØ2°1°#°QÐ7Ø2°1°#°QÐ7Øð	
õ 		
Šñ !ô �7‰7×ÑØ4°T°F¸"¸\¸NÐKò
ò 7Ø�y‰y˜Óð!  ó ð r   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r   r¬   r0   r/   r	  rf  Úuse_rhtr   r   )r   s   "r   r   r   ä  sA   € ÷ Nñ NØ
ðNàðNð ðNð ð	Nð
 ñNr   c                ó   € \        4       '       d   V^8  d   R# V^ 8¼  d   TM\        V ^,
          ^ 4      p^V,          ^,
          p^V ,          ^,
          p^V,          pRRRRRRRR	R
RRRRRR	RRRRRRV  R2RRRV  R2RR	.p	\        V4       F  p
V	RV
 RV
 R2RV
 R V
 R2.,          p	K  	  \        V4       F  p
V	R!V
 R"V
 R#2R$V
 R%2.,          p	K  	  V	. R‚O,          p	\        V4       F  p
V	R&V
 R#2.,          p	K  	  V	R'R(V R2R)R*V R+V R,V R-2R.V R/2R0R1.,          p	\        V4       F  p
V	R2V
 R3V
 R4V
 R5V
 R62	.,          p	K  	  V	R7.,          p	\        V4       F  p
V	R8V
 R9V
 R:2.,          p	K  	  V	. RƒO,          p	\        V4       FL  p
V	R;V
 R2R<V
 R=V
 R>V
 R:2R?V
 R:2R@V
 RAV
 R:2RBV
 RCV
 RD2RERFV
 RG2RHRIRJV  RKV  RL2RMV
 RNV RO2RPRQR7.,          p	KN  	  V	RR	.,          p	\        V4       F  p
V	RRV
 RSV
 R2RTRUV
 RVV
 R2.,          p	K  	  V'       dj   V	. R„O,          p	\        V4       FN  p
V	RWV
 2RXRYV
 RZ2.,          p	V^8”  g    V	. R…O,          p	V	\        R[R\R]R^4      ,          p	V	R_R`V
 Ra2R	.,          p	KP  	  MjV	R	RbV Rc2.,          p	\        V4       F  p
V	RdReV
 RfV
 Rg2.,          p	K  	  V	. R†O,          p	\        V4       F  p
V	RRhRiRjRkRlV
 Rm2RnV
 Ro2R7R.	,          p	K  	  V'       d   RpMR	pV'       d   R\MRqp\        P
                  P                  RrV  RsV V 2RtRuRvRwRxRyRzR{R|R}R~V.R.R€P                  V	4      R�7      # )‡zÆFully fused decode: score + online softmax + value + normalize + rotation
in a single Metal dispatch. Processes ALL tokens (no tiling), outputs in
original space. Reduces dispatch count from 7 to 1.Nr@   ú,        auto bh = thread_position_in_grid.z;rj  rk  rl  rm  rn  r2   ro  rp  rq  rr  rs  rt  z'        // Precompute value bit offsetsrË  rÌ  rÍ  rÎ  rÏ  r=   rÐ  rÑ  rÒ  rÅ  r4   rw  rx  ry  rz  r{  r|  rÓ  r6   r  rÔ  r5   r€  r�  r‚  rƒ  r„  r…  r†  r‡  r˜   rˆ  r‰  r7   rŠ  r‹  rŒ  r�  r8   r9   r:   r;   rÕ  rÖ  r“  r”  r×  rØ  r—  rÙ  r›  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  rÆ  râ  rã  rä  rå  ræ  z        float inv_sum_z = 1.0f / lsum_ú-        for (int i = 0; i < DimsPerLane; i++)rž  z[i] *= inv_sum_z"        // RHT inverse for repeat zH        for (int i = 0, vd = lane; i < DimsPerLanePadded; vd += 32, i++)z>            shared_rot[vd < Dim ? vd : 0] = (vd < Dim) ? lacc_z[i] : 0.0f;Ú
shared_rotÚsign_vecÚwht_tmpÚDimsPerLanePaddedzB        for (int i = 0, vd = lane; i < DimsPerLane; vd += 32, i++)z2            if (vd < Dim) out[(bh * RepeatCount + z) * Dim + vd] = shared_rot[vd];z%        threadgroup float shared_rot[z * Dim];zB        for (int i = 0, vd = lane; i < DimsPerLane; i++, vd += 32)z%            if (vd < Dim) shared_rot[z * Dim + vd] = lacc_rç  z            if (vd < Dim) {z%                float rot_val = 0.0f;z5                auto rot_row = rotation_t + vd * Dim;ú2                for (int j = 0; j < (int)Dim; j++)z*                    rot_val += shared_rot[z * Dim + j] * rot_row[j];r<   z) * Dim + vd] = rot_val;Ú_rhtÚ
rotation_tÚturboquant_fully_fused_r©  r$   r]   rQ  r¯  r°  r±  r²  r³  rX  rY  r´  r   r?   r   )r2   z4        for (int t = 0; t < (int)token_count; t++) {rª  r«  r¬  r­  r2   ré  )r2   z0        threadgroup float shared_rot[DimPadded];z)        float wht_tmp[DimsPerLanePadded];)úA        if (lane < (DimPadded - Dim) && (Dim + lane) < DimPadded)z*            shared_rot[Dim + lane] = 0.0f;r²   )r²   r2   z9        // Apply dense rotation: output in original space)r   rF  rO   Ú_metal_butterfly_wht_inverser   r)   r*   rP   )r¬   r/   r	  rf  rì  r  rº  r»  Únum_mse_entriesrQ   rR   Úname_suffixÚrotation_inputs   &&&&&        r   Ú_fully_fused_decode_kernelrý  ã  s€  € ô ×Ò °Ô!1Ùà+¨qÔ0‰|´c¸$À½(ÀAÓ6F€HØ�X• Õ"€HØ�T•	˜Q�€HØ˜8•m€Oð 	9Ø6Ø8Ø5Ø)Ø)Ø1Ø
Ø@ØNØBØSØ@ØQØ
Ø1Ø@ØDØNØ
-Ø
% d V¨1Ð-Ø
,Ø
+Ø
0°°°gÐ>ØØ
ð5€Eô: �<Ö ˆØØ˜q˜cÐ!BÀ1À#ÀXÐNØ˜q˜cÐ!CÀAÀ3ÀhÐOð
õ 	
Šñ !ô �<Ö ˆØØ! ! Ð$7¸°s¸(ÐCØ! ! Ð$9Ð:ð
õ 	
Šñ !ð 
ò õ €Eô �<Ö ˆØÐ)¨!¨¨HÐ5Ð6Õ6Šñ !ð 
Ø
=Ø
'¨ z°Ð3Ø
CØ
+¨H¨:Ð5]Ð^fÐ]gÐgwð  yAð  xBð  BJð  	KØ
! ( ¨2Ð.Ø
9Ø
Fðõ €Eô �<Ö ˆØØ! ! Ð$CÀAÀ3ÐFvÐwxÐvyð  zXð  YZð  X[ð  [að  bð
õ 	
Šñ !ð 
ˆoÐÕ€Eä�<Ö ˆØÐ(¨¨¨?¸1¸#¸RÐ@ÐAÕAŠñ !ð 
ò õ €Eô �<Ö ˆØØ-¨a¨S°Ð2Ø! !  L°°°4¸°s¸"Ð=Ø5°a°S¸Ð;Ø,¨Q¨C¨x¸°s¸"Ð=Ø! !  H¨Q¨C¨zÐ:ØDØ% a S¨
Ð3Ø3ØLØPÐQUÐPVÐVdÐeiÐdjÐjpÐqØ)¨!¨Ð,IÈ(ÈÐS^Ð_Ø"ØØð
õ 	
Šñ !ð$ 
ˆk˜2ÐÕ€Eô �<Ö ˆØØ$ Q C °q°c¸Ð;Ø;Ø ˜s /°!°°AÐ6ð
õ 	
Šñ !÷ ð 	ò 
õ 	
ˆô
 �|Ö$ˆAØØ4°Q°CÐ8ØZØPÐQRÐPSÐS^Ð_ðõ ˆEð
 ˜aÔ 4àò õ �ð
 Ô1Ø˜j¨)Ð5Hóõ ˆEð ØTØDÀQÀCÐGfÐgØðõ ŠEò! %ð. 	ØØ3°L°>ÀÐJð
õ 	
ˆô �|Ö$ˆAØØTØ7¸°sÐ:NÈqÈcÐQUÐVðõ ŠEñ %ð
 	ò 
õ 	
ˆô
 �|Ö$ˆAØØWØ.Ø7ØGØDØ<¸Q¸CÐ?XÐYØ:¸1¸#Ð=UÐVØ Øð
õ 
ŠEñ %÷ $‘&¨€Kß#*‘Z°€NÜ�7‰7×ÑØ& t f¨B¨|¨n¸[¸MÐJàØØØØØØØØØØØð
ð �WØ�y‰y˜Óð#  ó ð r   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   r¬   r0   Ún_elemsÚcodebook_namerŸ   Úbit_off_varr   Úlistr   )r   s   "r   r   r   µ  s4   € ÷ 4ñ 4Ø
ð4Øð4Ø,/ð4Ø>Að4à	ñ4r   c                ó|  € ^V ,          ^,
          p. pV'       gº   \        V4       F¨  pW`,          pV^,          pV^,          p	W�,           ^8:  d#   V	^ 8X  d   V RV RV R2p
MZV RV RV	 RV R2p
MK^V	,
          p^W,
          ,          ^,
          pV RV RV	 R^V,          ^,
           RV^,            RV R	V R
2p
VP                  V
4       Kª  	  V# \        V4       FY  pV'       d   RV RW`,           R2MTpRV R2pRV R2pV RV RV  RV RV RV RV RV RV RV R2p
VP                  V
4       K[  	  V# )uÞ  Generate fully-unrolled byte extraction for n_elems packed at `bits` bits.

When *bit_off_var* is empty the extraction assumes element 0 starts at bit 0
of the byte pointer (fast path â€” compile-time constant offsets, works when
``n_elems * bits % 8 == 0``).

When *bit_off_var* names a Metal ``int`` variable (e.g. ``"k_bit_off"``),
each element's bit position is computed as ``bit_off_var + i * bits`` at
runtime, still fully unrolled (one expression per element, no loops).
z[kb[z] & zu]z[(kb[z] >> z) & z[((kb[z
u) | ((kb[zu) << z)]Ú(r–   Ú)z >> 3)z & 7)z[((z <= 8) ? (kb[z	) : ((kb[z) | (kb[z + 1] << (8 - z)))) & )rO   rŠ   )r¬   rÿ  r   r  r­   ÚexprsÚiÚ
bit_offsetÚbyte_idxÚbit_in_byteÚexprÚlow_bitsÚ	high_maskÚboÚbyÚbis   &&&&            r   Ú_gen_unrolled_extractr  µ  s½  € ð ��I˜�?€DØ€Eçä�w–ˆAØ�ˆJØ! Q•ˆHØ$ q�.ˆKàÕ! QÔ&Ø !Ô#Ø+˜_¨D°°
¸$¸t¸fÀBÐG‘Dð )˜/¨¨x¨j¸¸k¸]È$ÈtÈfÐTVÐWñ ð ˜{�?�Ø 4¥?Õ3°qÕ8�	à$�o V¨H¨:°U¸;¸-ÀtÈQÐRZÍ]Ð^_ÕL_ÐK`ð aØ'¨!�|˜n¨D°°¸6À(ÀÈ2ðOð ð �L‰L˜Öñ'  ðD €Lô �w–ˆAß45�1�[�M  Q¥X J¨aÑ0¸;ˆBØ�R�D˜�ˆBØ�R�D˜�ˆBà �/ð "Ø�D˜˜D˜6ð "Ø˜˜U 2 $ð 'Ø˜$˜e B 4 x°¨t°>À"Àð FØ�V˜2ð	ð ð �L‰L˜Öñ  ð €Lr   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   r¬   r0   rÿ  r  rŸ   r   r   )r   s   "r   r   r   ì  s(   € ÷ .ñ .˜cð .¨Cð .¸cð .È3ñ .r   c                ó’   € \        WRV4      p\        V4       UUu. uF  w  rERV RV 2NK  	  pppRP                  V4      # u uppi )z9Generate score accumulation with unrolled key extraction.rX  zq[z] * z
                + )r  rª   rP   )r¬   rÿ  r  r  r  r  Útermss   &&&    r   Ú_gen_unrolled_scorer  ì  sQ   € ä! $°ÀÓM€EÜ/8¸Ô/?Ô@Ñ/?¡G Aˆr�!��D˜˜ÓÑ/?€EÑ@Ø!×&Ñ& uÓ-Ð-ùó As   œAc               ó(   € V ^8„  d   QhRRRRRRRR/# r  r   )r   s   "r   r   r   ó  s(   € ÷ ñ ˜cð ¨Cð ¸cð È3ñ r   c           
     óê   € \        WRV4      pV Uu. uF  qDP                  RR4      NK  	  pp. p\        V4       F   w  rgVP                  RV RV RV R24       K"  	  RP	                  V4      # u upi )	z5Generate value accumulation with unrolled extraction.r´  zkb[zvb[z            o[z] = o[z] * factor + exp_score * z * vn;r?   )r  Úreplacerª   rŠ   rP   )r¬   rÿ  r  r  ÚerQ   r  r  s   &&&     r   Ú_gen_unrolled_valuer  ó  sz   € ä! $°ÀÓM€EÙ.3Ó4©e¨�Y‰Y�u˜eÖ$©e€EÐ4Ø€EÜ˜UÖ#‰ˆØ�‰�~ a S¨¨q¨cÐ1JÈ4È&ÐPVÐWÖXñ $à�9‰9�UÓÐùò	 5s   ’A0c               ó$   € V ^8„  d   QhRRRRRR/# ©r   Úkey_bitsr0   Úval_bitsr_  r   )r   s   "r   r   r   þ  s&   € ÷ Cñ C sð C°cð CÀñ Cr   c                ó6  € \        4       '       d   V ^ 8:  g   V^ 8:  d   R# V^ 8  g   V^ ,          ^ 8w  d   R# ^V ,          ^,
          p^V,          ^,
          pV^ ,          pRT RT RT  RT RWP,          ^,          '       d   RMR R	WQ,          ^,          '       d   R
MR R\        YWP,          ^,          '       d   RMR4       R\        YWQ,          ^,          '       d   RMR4       R2p\        P                  P                  RV  RV RV 2. ROR.VR7      # )uK   Fused MSE decode: 32 simdgroups Ã— 32 lanes, online softmax + weighted sum.Nzõ
        constexpr int BN = 32;  // simdgroups per threadgroup
        constexpr int BD = 32;  // lanes per simdgroup
        constexpr int qk_per_thread = Dim / BD;
        constexpr int v_per_thread = Dim / BD;
        constexpr uint k_mask = ú#u;
        constexpr uint v_mask = ú"u;
        constexpr int k_bits = ú!;
        constexpr int v_bits = u  ;

        typedef float U;

        // Thread identity â€” grid is total threads, so use threadgroup position
        auto bqh = threadgroup_position_in_grid.x;  // batch*q_head index
        auto simd_gid = simdgroup_index_in_threadgroup;
        auto simd_lid = thread_index_in_simdgroup;

        auto token_count = key_norms_shape[2];
        auto kv_heads = key_norms_shape[1];
        auto bh = bqh / RepeatCount;  // map q_head -> kv_head

        auto k_nm = key_norms + bh * token_count;
        auto k_pk = key_packed + bh * token_count * KPackedWidth;
        auto v_nm = val_norms + bh * token_count;
        auto v_pk = val_packed + bh * token_count * VPackedWidth;

        // Shared memory for cross-simdgroup reduction
        threadgroup U max_scores[BN];
        threadgroup U sum_exp_scores[BN];
        threadgroup U shared[BN * BD];

        // Preload pre-rotated query into registers
        thread U q[qk_per_thread];
        auto qr = queries + bqh * Dim + simd_lid * qk_per_thread;
        for (int i = 0; i < qk_per_thread; i++)
            q[i] = static_cast<U>(qr[i]);

        // Initialize accumulators
        thread U o[v_per_thread] = {};
        U max_score = -INFINITY;
        U sum_exp_score = 0;

        // Byte/bit offset for this lane's first element (constant across all tokens)
        int k_bit_start = simd_lid * qk_per_thread * k_bits;
        int v_bit_start = simd_lid * v_per_thread * v_bits;
        int k_byte_base = k_bit_start >> 3;
        int v_byte_base = v_bit_start >> 3;
        ú int k_bit_off = k_bit_start & 7;r2   ú	
        ú int v_bit_off = v_bit_start & 7;u^  

        // KV loop: each simdgroup handles tokens simd_gid, simd_gid+32, ...
        for (int t = simd_gid; t < (int)token_count; t += BN) {
            U kn = static_cast<U>(k_nm[t]);

            // Key score â€” unrolled byte extraction
            auto kb = (const device uint8_t*)(k_pk + t * KPackedWidth) + k_byte_base;
            U score = Ú	k_bit_offu  ;
            score = simd_sum(score) * kn;

            // Online softmax
            auto vb = (const device uint8_t*)(v_pk + t * VPackedWidth) + v_byte_base;
            U vn = static_cast<U>(v_nm[t]);

            U new_max = max(max_score, score);
            U factor = fast::exp(max_score - new_max);
            U exp_score = fast::exp(score - new_max);
            max_score = new_max;
            sum_exp_score = sum_exp_score * factor + exp_score;

            // Value accumulation â€” unrolled byte extraction
            Ú	v_bit_offu}  
        }

        // Cross-simdgroup reduction (matches MLX SDPA pattern)
        // 1. Communicate max and sum_exp across simdgroups
        if (simd_lid == 0) {
            max_scores[simd_gid] = max_score;
            sum_exp_scores[simd_gid] = sum_exp_score;
        }
        threadgroup_barrier(mem_flags::mem_threadgroup);

        // 2. Reduce max and sum across all simdgroups
        U sg_max = max_scores[simd_lid];
        U new_max = simd_max(sg_max);
        U factor = fast::exp(sg_max - new_max);
        U total_sum = simd_sum(sum_exp_scores[simd_lid] * factor);

        // 3. Rescale this simdgroup's factor for the global max
        U my_factor = fast::exp(max_score - new_max);

        // 4. Transpose-reduce outputs through shared memory
        for (int i = 0; i < v_per_thread; i++) {
            shared[simd_lid * BD + simd_gid] = o[i] * my_factor;
            threadgroup_barrier(mem_flags::mem_threadgroup);
            o[i] = simd_sum(shared[simd_gid * BD + simd_lid]);
            o[i] = total_sum > 0 ? o[i] / total_sum : 0;
            threadgroup_barrier(mem_flags::mem_threadgroup);
        }

        // Write output (in rotated space â€” caller applies inverse rotation)
        if (simd_lid == 0) {
            for (int i = 0; i < v_per_thread; i++) {
                out[bqh * Dim + simd_gid * v_per_thread + i] = static_cast<U>(o[i]);
            }
        }
    Úturboquant_fused_mse_sdpa_kÚ_vÚ_dr   r   ©ÚqueriesrQ  Ú
key_packedrX  r²  r³  r´  ©r   r  r  r   r)   r*   ©r  r  r_  Úk_maskÚv_maskÚelems_per_laner"   s   &&&    r   Ú_fused_mse_decode_kernelr4  ý  s[  € ô ×Ò ¨Q¤°(¸a´-ÙØ
ˆR„x�3˜•8˜q”=Ùà�8�m˜qÕ €FØ�8�m˜qÕ €FØ˜B•Y€Nð!ð
 "( ð )!Ø!' ð ) Ø (˜zð * Ø (˜zð '*	ðN 1?Õ0IÈQ×/NÔ/NÑ	+ÐTVÐWð X	Ø0>Õ0IÈQ×/NÔ/NÑ	+ÐTVÐWð Xô +¨8ÐUcÕUnÐrs×TsÔTsÁ[Ðy{Ó|Ð}ð ~ô ! È>ÕKdÐhi×JiÔJi¹;ÐoqÓrÐsð #tðMi€FôV �7‰7×ÑØ*¨8¨*°B°x°jÀÀ3À%ÐHò
ð �WØð  ó ð r   c               ó$   € V ^8„  d   QhRRRRRR/# r  r   )r   s   "r   r   r   …	  s&   € ÷ dñ d¨sð d¸cð dÈñ dr   c                ó8  € \        4       '       d   V ^ 8:  g   V^ 8:  d   R# V^ 8  g   V^ ,          ^ 8w  d   R# ^V ,          ^,
          p^V,          ^,
          pV^ ,          pRT RT RT  RT RWP,          ^,          '       d   RMR R	WQ,          ^,          '       d   R
MR R\        YWP,          ^,          '       d   RMR4       R\        YWQ,          ^,          '       d   RMR4       R2p\        P                  P                  RV  RV RV 2. RO. ROVR7      # )z92-pass decode pass 1: block-parallel quantized attention.NzŸ
        constexpr int BD = 32;
        constexpr int qk_per_thread = Dim / BD;
        constexpr int v_per_thread = Dim / BD;
        constexpr uint k_mask = r!  r"  r#  uç  ;
        typedef float U;

        // Thread identity â€” matches sdpa_vector_2pass_1 layout
        auto kv_head_idx = threadgroup_position_in_grid.x;
        auto batch_idx = threadgroup_position_in_grid.y;
        auto block_idx = threadgroup_position_in_grid.z;
        auto simd_lid = thread_index_in_simdgroup;
        auto gqa_idx = thread_position_in_threadgroup.y;  // which q_head within kv_head

        auto token_count = key_norms_shape[2];
        auto kv_heads = key_norms_shape[1];
        auto bh = batch_idx * kv_heads + kv_head_idx;
        auto bqh = batch_idx * kv_heads * RepeatCount + kv_head_idx * RepeatCount + gqa_idx;

        auto k_nm = key_norms + bh * token_count;
        auto k_pk = key_packed + bh * token_count * KPackedWidth;
        auto v_nm = val_norms + bh * token_count;
        auto v_pk = val_packed + bh * token_count * VPackedWidth;

        // Load pre-rotated query
        thread U q[qk_per_thread];
        auto qr = queries + bqh * Dim + simd_lid * qk_per_thread;
        for (int i = 0; i < qk_per_thread; i++)
            q[i] = static_cast<U>(qr[i]);

        thread U o[v_per_thread] = {};
        U max_score = -INFINITY;
        U sum_exp_score = 0;

        // Byte/bit offset for this lane's first element (constant across all tokens)
        int k_bit_start = simd_lid * qk_per_thread * k_bits;
        int v_bit_start = simd_lid * v_per_thread * v_bits;
        int k_byte_base = k_bit_start >> 3;
        int v_byte_base = v_bit_start >> 3;
        r$  r2   r%  r&  uc  

        // KV loop: stride by blocks (each block handles a different subset)
        for (int t = block_idx; t < (int)token_count; t += Blocks) {
            U kn = static_cast<U>(k_nm[t]);

            // Key score â€” unrolled byte extraction
            auto kb = (const device uint8_t*)(k_pk + t * KPackedWidth) + k_byte_base;
            U score = r'  aº  ;
            score = simd_sum(score) * kn;

            auto vb = (const device uint8_t*)(v_pk + t * VPackedWidth) + v_byte_base;
            U vn = static_cast<U>(v_nm[t]);

            U new_max = max(max_score, score);
            U factor = fast::exp(max_score - new_max);
            U exp_score = fast::exp(score - new_max);
            max_score = new_max;
            sum_exp_score = sum_exp_score * factor + exp_score;

            r(  aŽ  
        }

        // Write partial results for this block
        if (simd_lid == 0) {
            out_sums[bqh * Blocks + block_idx] = sum_exp_score;
            out_maxs[bqh * Blocks + block_idx] = max_score;
        }
        for (int i = 0; i < v_per_thread; i++)
            out_acc[(bqh * Blocks + block_idx) * Dim + simd_lid * v_per_thread + i] =
                static_cast<U>(o[i]);
    Úturboquant_mse_sdpa_2pass1_kr*  r+  r   r,  )r¶  Úout_sumsÚout_maxsr/  r0  s   &&&    r   Ú _fused_mse_decode_2pass_1_kernelr:  „	  sY  € ô ×Ò ¨Q¤°(¸a´-ÙØ
ˆR„x�3˜•8˜q”=Ùà�8�m˜qÕ €FØ�8�m˜qÕ €FØ˜B•Y€Nð!ð "( ð )!Ø!' ð ) Ø (˜zð * Ø (˜zð #*	ðF 1?Õ0IÈQ×/NÔ/NÑ	+ÐTVÐWð X	Ø0>Õ0IÈQ×/NÔ/NÑ	+ÐTVÐWð Xô +¨8ÐUcÕUnÐrs×TsÔTsÁ[Ðy{Ó|Ð}ð ~ô ! È>ÕKdÐhi×JiÔJi¹;ÐoqÓrÐsð tðJ€FôX �7‰7×ÑØ+¨H¨:°R¸°zÀÀCÀ5ÐIò
ò 9Øð  ó ð r   c                 óv   € \        4       '       g   R# Rp \        P                  P                  R. ROR.V R7      # )z32-pass decode pass 2: reduce partial block results.NaØ	  
        constexpr int BN = 32;
        constexpr int BD = 32;
        constexpr int elem_per_thread = Dim / BD;
        typedef float U;

        thread U o[elem_per_thread] = {};
        threadgroup U outputs[BN * BD];

        auto head_idx = threadgroup_position_in_grid.x;
        auto simd_gid = simdgroup_index_in_threadgroup;
        auto simd_lid = thread_index_in_simdgroup;

        auto p = partials + head_idx * Blocks * Dim + simd_gid * Dim +
                 simd_lid * elem_per_thread;
        auto s = sums + head_idx * Blocks;
        auto m = maxs + head_idx * Blocks;

        U max_score = -INFINITY;
        U sum_exp_score = 0;

        // Each simdgroup handles a subset of blocks (stride BN)
        for (int b = simd_gid; b < Blocks; b += BN) {
            U block_max = m[b];
            U block_sum = s[b];

            U new_max = max(max_score, block_max);
            U factor = fast::exp(max_score - new_max);
            U block_factor = fast::exp(block_max - new_max);

            sum_exp_score = sum_exp_score * factor + block_sum * block_factor;
            for (int i = 0; i < elem_per_thread; i++) {
                o[i] = o[i] * factor +
                    partials[(head_idx * Blocks + b) * Dim +
                             simd_lid * elem_per_thread + i] * block_factor;
            }
            max_score = new_max;
        }

        // Cross-simdgroup reduction (same as sdpa_vector_2pass_2)
        threadgroup U sg_maxs[BN];
        threadgroup U sg_sums[BN];
        if (simd_lid == 0) {
            sg_maxs[simd_gid] = max_score;
            sg_sums[simd_gid] = sum_exp_score;
        }
        threadgroup_barrier(mem_flags::mem_threadgroup);

        U sg_max = sg_maxs[simd_lid];
        U new_max = simd_max(sg_max);
        U factor = fast::exp(sg_max - new_max);
        U total_sum = simd_sum(sg_sums[simd_lid] * factor);

        U my_factor = fast::exp(max_score - new_max);

        for (int i = 0; i < elem_per_thread; i++) {
            outputs[simd_lid * BD + simd_gid] = o[i] * my_factor;
            threadgroup_barrier(mem_flags::mem_threadgroup);
            o[i] = simd_sum(outputs[simd_gid * BD + simd_lid]);
            o[i] = total_sum > 0 ? o[i] / total_sum : 0;
            threadgroup_barrier(mem_flags::mem_threadgroup);
        }

        if (simd_lid == 0) {
            for (int i = 0; i < elem_per_thread; i++)
                out[head_idx * Dim + simd_gid * elem_per_thread + i] =
                    static_cast<U>(o[i]);
        }
    Úturboquant_mse_sdpa_2pass2r   r   )ÚpartialsÚsumsÚmaxsr(   r+   s    r   Ú _fused_mse_decode_2pass_2_kernelr@  ì	  sE   € ô ×ÒÙðD€FôL �7‰7×ÑØ)Ú0Ø�WØð	  ó ð r   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   Úshared_namerŸ   Ú	sign_nameÚ	temp_nameÚdims_per_lane_paddedr   )r   s   "r   r   r   @
  s0   € ÷ !ñ !Øð!àð!ð ð!ð ñ	!r   c                ó~   € RRV R2RV  RV R2RRR	R
V R2RRRV  R2RV  R2RV R2RRRR
V R2RV  RV R2RRRRR.# )zæGenerate Metal code for in-place RHT forward in shared memory.
RHT forward = WHT(signs * x) / sqrt(DimPadded).
Requires: shared[DimPadded], sign_vec[Dim], temp[DimsPerLanePadded] (thread-local).
Returns list of Metal source lines.z9        // RHT forward: apply signs, butterfly WHT, scaleú&        for (int i = 0, d = lane; i < ú; d += 32, i++)ú            if (d < Dim) z[d] *= ú[d];r²   r2   ú?        for (int stride = 1; stride < DimPadded; stride *= 2) {ú*            for (int i = 0, d = lane; i < ú; d += 32, i++) {ú$                if (d < DimPadded) {ú*                    int pair = d ^ stride;ú                    float a = ú[min(d, pair)];ú                    float b = ú[max(d, pair)];ú                    ú%[i] = (d < pair) ? (a + b) : (a - b);ú                }r8   ú<            threadgroup_barrier(mem_flags::mem_threadgroup);ú#                if (d < DimPadded) ú[d] = rç  r4   z%        // Scale by 1/sqrt(DimPadded)ú8        float rht_scale = 1.0f / sqrt((float)DimPadded);r   ©rC  rD  rE  rF  s   &&&&r   Ú_metal_butterfly_wht_forwardr]  @
  s­   € ð DØ
0Ð1EÐ0FÀoÐVØ
# K =°¸	°{À$ÐGØ
BØØ
JØ
4Ð5IÐ4JÐJ\Ð]Ø
/Ø
4Ø
(¨¨°_ÐEØ
(¨¨°_ÐEØ
˜y˜kÐ)NÐOØ
Ø
Ø
FØ
4Ð5IÐ4JÈ/ÐZØ
-¨k¨]¸&ÀÀÈ4ÐPØ
FØ
ØØ
/Ø
Bð-ð r   c               ó(   € V ^8„  d   QhRRRRRRRR/# rB  r   )r   s   "r   r   r   d
  s0   € ÷ ñ Øðàðð ðð ñ	r   c                ó|   € RRRV R2RRRV  R2R	V  R
2RV R2RRRRV R2RV  RV R2RRRRRRV R2RV  RV R2R.# )z¡Generate Metal code for in-place RHT inverse in shared memory.
RHT inverse = signs * WHT(x) / sqrt(DimPadded).
Same butterfly as forward, then multiply by signs.zA        // RHT inverse: butterfly WHT, then apply signs and scalerL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  r8   rX  rI  rY  rZ  rç  r4   r2   z         // Scale and apply signsr[  rH  rJ  z[d] *= rht_scale * rK  r²   r   r\  s   &&&&r   rù  rù  d
  s«   € ð LØ
JØ
4Ð5IÐ4JÐJ\Ð]Ø
/Ø
4Ø
(¨¨°_ÐEØ
(¨¨°_ÐEØ
˜y˜kÐ)NÐOØ
Ø
Ø
FØ
4Ð5IÐ4JÈ/ÐZØ
-¨k¨]¸&ÀÀÈ4ÐPØ
FØ
ØØ
*Ø
BØ
0Ð1EÐ0FÀoÐVØ
# K =Ð0CÀIÀ;ÈdÐSØ
Bð+ð r   c               ó    € V ^8„  d   QhRRRR/# )r   r  r0   r  r   )r   s   "r   r   r   ‡
  s   € ÷ yñ y¨ð y°sñ yr   c                óF  € \        4       '       d   V ^ 8:  g   V^ 8:  d   R# ^V ,          ^,
          p^V,          ^,
          p^V ,          ^,
          p^V,          ^,
          pRV RV  RV RV RV RV R2p\        P                  P                  RV  R	V 2. RO. ROVR
7      # )z'Fused key+value quantize in 1 dispatch.Nah  
        auto d = thread_position_in_threadgroup.x;
        auto bh = threadgroup_position_in_grid.x;
        auto is_val = threadgroup_position_in_grid.y;  // 0=key, 1=value
        auto sg_id = simdgroup_index_in_threadgroup;
        auto sg_lid = thread_index_in_simdgroup;

        // Select key or value params based on grid.y
        int bits = is_val ? z : z;
        int n_mid = is_val ? z#;
        uint idx_mask = is_val ? zu : u–  u;
        int pw = is_val ? VPackedWidth : KPackedWidth;

        // Step 1: Load vector element
        float v;
        if (is_val)
            v = (d < Dim) ? static_cast<float>(val_vectors[bh * Dim + d]) : 0.0f;
        else
            v = (d < Dim) ? static_cast<float>(key_vectors[bh * Dim + d]) : 0.0f;

        // Compute norm (2-stage cross-simdgroup reduction)
        float sq = v * v;
        float sg_sum = simd_sum(sq);
        threadgroup float sg_norms[8];
        if (sg_lid == 0) sg_norms[sg_id] = sg_sum;
        threadgroup_barrier(mem_flags::mem_threadgroup);
        float total_sq = (sg_id == 0 && sg_lid < 8) ? sg_norms[sg_lid] : 0.0f;
        total_sq = simd_sum(total_sq);
        if (sg_id == 0 && sg_lid == 0) sg_norms[0] = total_sq;
        threadgroup_barrier(mem_flags::mem_threadgroup);

        float norm = sqrt(sg_norms[0]);
        float inv_norm = (norm > 1e-10f) ? (1.0f / norm) : 0.0f;
        if (d == 0) {
            if (is_val) out_val_norms[bh] = half(norm);
            else out_key_norms[bh] = half(norm);
        }

        // Step 2: Unit vector â†’ shared
        threadgroup float shared[Dim];
        if (d < Dim) shared[d] = v * inv_norm;
        threadgroup_barrier(mem_flags::mem_threadgroup);

        // Step 3: Rotate (1 dim per thread, 256 FMAs)
        float rotated = 0.0f;
        if (d < Dim) {
            auto row = is_val ? (val_rotation + d * Dim) : (key_rotation + d * Dim);
            for (int j = 0; j < (int)Dim; j++)
                rotated += shared[j] * row[j];
        }

        // Step 4: Comparison-based quantize
        threadgroup uint shared_idx[Dim];
        uint idx = 0;
        if (d < Dim) {
            if (is_val) {
                for (int m = 0; m < n_mid; m++)
                    idx += (rotated > val_midpoints[m]) ? 1u : 0u;
            } else {
                for (int m = 0; m < n_mid; m++)
                    idx += (rotated > key_midpoints[m]) ? 1u : 0u;
            }
            shared_idx[d] = idx;
        }
        threadgroup_barrier(mem_flags::mem_threadgroup);

        // Step 5: Pack indices â€” thread-per-word, race-free, no atomics.
        // Each thread d (d < pw) walks the dims whose
        // [i*bits, (i+1)*bits) range intersects [32d, 32(d+1)) and
        // accumulates them into a private register, then writes the
        // word once. `bits` and `pw` are runtime-uniform here so the
        // loop bound is well-defined per dispatch.
        if (d < pw) {
            uint w_val = 0u;
            int word_start = (int)d * 32;
            int i_min = word_start / bits;
            int i_max = (word_start + 31) / bits;
            if (i_max >= (int)Dim) i_max = (int)Dim - 1;
            for (int i = i_min; i <= i_max; i++) {
                uint idx_val = shared_idx[i] & idx_mask;
                int bit_off = i * bits - word_start;
                if (bit_off >= 0) {
                    w_val |= idx_val << bit_off;
                } else {
                    w_val |= idx_val >> (-bit_off);
                }
            }
            if (is_val)
                out_val_packed[bh * pw + d] = w_val;
            else
                out_key_packed[bh * pw + d] = w_val;
        }
    Úturboquant_fused_kv_quantize_kr*  r   )Úkey_vectorsÚval_vectorsÚkey_rotationÚval_rotationÚkey_midpointsÚval_midpoints)Úout_key_normsÚout_key_packedÚout_val_normsÚout_val_packedr(   )r  r  Úk_midpointsÚv_midpointsr1  r2  r"   s   &&     r   Ú_fused_kv_quantize_kernelro  †
  sÒ   € ô ×Ò ¨Q¤°(¸a´-Ùà˜•= AÕ%€KØ˜•= AÕ%€KØ�8�m˜qÕ €FØ�8�m˜qÕ €Fðð &˜J c¨(¨ð 4Ø)˜]¨#¨k¨]ð ;"Ø"( ¨¨f¨Xð R6ð\€Fô| �7‰7×ÑØ-¨h¨Z°r¸(¸ÐDò
ò
ð ð!  ó ð r   c               ó   € V ^8„  d   QhRR/# rM  r   )r   s   "r   r   r     s   € ÷ Iñ I sñ Ir   c                óê   € \        4       '       d   V ^ 8:  d   R# ^V ,          ^,
          p^V ,          ^,
          pRV RV  RV  RV RV  R2p\        P                  P                  RV  2R	R
.R.VR7      # )zƒQuantize pre-rotated vectors: comparison + pack. No rotation inside.
Used with mx.hadamard_transform for external rotation. TG=Dim.Naˆ  
        auto d = thread_position_in_threadgroup.x;
        auto bh = threadgroup_position_in_grid.x;

        // Read pre-rotated, pre-normalized value
        float val = (d < Dim) ? static_cast<float>(rotated[bh * Dim + d]) : 0.0f;

        // Comparison-based quantize
        threadgroup uint shared_idx[Dim];
        uint idx = 0;
        if (d < Dim) {
            for (int m = 0; m < aˆ  ; m++)
                idx += (val > midpoints[m]) ? 1u : 0u;
            shared_idx[d] = idx;
        }
        threadgroup_barrier(mem_flags::mem_threadgroup);

        // Pack indices: thread d builds word d in a private register
        // and writes it once (no shared-memory race, no atomics).
        // Walks every dim whose [i*bits, (i+1)*bits) range intersects
        // [32d, 32(d+1)), including a single spill from the previous
        // word for non-32-aligned bit-widths (3-bit, 5-bit, etc.).
        if (d < PackedWidth) {
            uint w_val = 0u;
            int word_start = (int)d * 32;
            int i_min = word_start / ú.;
            int i_max = (word_start + 31) / ú�;
            if (i_max >= (int)Dim) i_max = (int)Dim - 1;
            for (int i = i_min; i <= i_max; i++) {
                uint idx_val = shared_idx[i] & ú%u;
                int bit_off = i * a   - word_start;
                if (bit_off >= 0) {
                    w_val |= idx_val << bit_off;
                } else {
                    w_val |= idx_val >> (-bit_off);
                }
            }
            out[bh * PackedWidth + d] = w_val;
        }
    Úturboquant_norot_quantize_ÚrotatedÚ	midpointsr   r   r(   )r¬   Únum_midpointsr­   r"   s   &   r   Ú_fused_norot_quantize_kernelry    s­   € ô ×Ò ¨¤Ùà˜$•Y !•O€MØ��I˜�?€Dð(!ð "/ ð 0&ð '+ Vð ,-Ø-1¨Fð 30ð 15¨vð 6#Ø#' &ð 	)ð='€FôR �7‰7×ÑØ)¨$¨Ð0Ø Ð,Ø�WØð	  ó ð r   c               ó    € V ^8„  d   QhRRRR/# )r   r¬   r0   rì  r   r   )r   s   "r   r   r   P  s   € ÷ Xñ X Sð X°4ñ Xr   c                óâ   € \        4       '       d   V ^ 8:  d   R# ^V ,          pV^,
          pV^,
          pRV RV  RV  RV RV  R2p\        P                  P                  RV  2. ROR	R
.VR7      # )zBFused MSE quantize: norm + rotate + quantize + pack in 1 dispatch.Nu¸  
        auto d = thread_position_in_threadgroup.x;  // 0..Dim-1, one dim per thread
        auto bh = threadgroup_position_in_grid.x;
        auto sg_id = simdgroup_index_in_threadgroup;
        auto sg_lid = thread_index_in_simdgroup;
        auto vec_ptr = vectors + bh * Dim;

        // Step 1: Load & compute norm (2-stage cross-simdgroup reduction)
        float val = (d < Dim) ? static_cast<float>(vec_ptr[d]) : 0.0f;
        float sq = val * val;
        float sg_sum = simd_sum(sq);

        threadgroup float sg_norms[8];
        if (sg_lid == 0) sg_norms[sg_id] = sg_sum;
        threadgroup_barrier(mem_flags::mem_threadgroup);

        float total_sq = (sg_id == 0 && sg_lid < 8) ? sg_norms[sg_lid] : 0.0f;
        total_sq = simd_sum(total_sq);
        // Broadcast norm to all threads
        if (sg_id == 0 && sg_lid == 0) sg_norms[0] = total_sq;
        threadgroup_barrier(mem_flags::mem_threadgroup);

        float norm = sqrt(sg_norms[0]);
        float inv_norm = (norm > 1e-10f) ? (1.0f / norm) : 0.0f;
        if (d == 0) out_norms[bh] = half(norm);

        // Step 2: Unit vector â†’ shared for rotation
        threadgroup float shared[Dim];
        if (d < Dim) shared[d] = val * inv_norm;
        threadgroup_barrier(mem_flags::mem_threadgroup);

        // Step 3: Rotate â€” 1 dim per thread, 256 FMAs (was 2048 at TG=32)
        float rotated = 0.0f;
        if (d < Dim) {
            auto row = rotation + d * Dim;
            for (int j = 0; j < (int)Dim; j++)
                rotated += shared[j] * row[j];
        }

        // Step 4: Comparison-based quantize
        threadgroup uint shared_idx[Dim];
        uint idx = 0;
        if (d < Dim) {
            for (int m = 0; m < uñ  ; m++)
                idx += (rotated > midpoints[m]) ? 1u : 0u;
            shared_idx[d] = idx;
        }
        threadgroup_barrier(mem_flags::mem_threadgroup);

        // Step 5: Pack indices â€” thread-per-word, race-free, no atomics.
        // Each thread d (d < PackedWidth) walks the dims whose
        // [i*bits, (i+1)*bits) range intersects [32d, 32(d+1)) and
        // accumulates them into a private register, then writes the
        // word once. This avoids both the original `|=` race and the
        // GPU watchdog hangs that high-contention atomic_or sees on
        // some Metal devices.
        if (d < PackedWidth) {
            uint w_val = 0u;
            int word_start = (int)d * 32;
            int i_min = word_start / rr  rs  rt  a   - word_start;
                if (bit_off >= 0) {
                    w_val |= idx_val << bit_off;
                } else {
                    w_val |= idx_val >> (-bit_off);
                }
            }
            out_packed[bh * PackedWidth + d] = w_val;
        }
    Ú!turboquant_fused_mse_quantize_v2_Ú	out_normsÚ
out_packedr   )Úvectorsr8  rw  r(   )r¬   rì  Únum_entriesrx  r­   r"   s   &&    r   Ú_fused_mse_quantize_kernelr�  P  s­   € ä×Ò ¨¤ÙØ�t•)€KØ !•O€MØ˜�?€Dð+!ðV "/ ð 0&ð  '+ Vð ,-Ø-1¨Fð 30ð 15¨vð 6#Ø#' &ð 	)ðAI€FôV �7‰7×ÑØ0°°Ð7Ú8Ø! <Ð0Øð	  ó ð r   c               ó    € V ^8„  d   QhRRRR/# )r   r  r0   rì  r   r   )r   s   "r   r   r   ¬  s   € ÷ Tñ T¨#ð T¸ñ Tr   c                óÂ  € \        4       '       d   V ^ 8:  d   R# ^V ,          pV^,
          pV^,
          p. R@OpV'       d-   V. RAO,          pV\        RRRR	4      ,          pV. RBO,          pMV. RCO,          pV. RNRNRNRNRNRNRNRV R2NRNRNRNRNRNRNRNRNRNRNRNRV  R2NRV  R2NRV R 2NRNR!NRNRNR"NR#NR$NR%NR&NR'NRNR(NR)NR*NR
NR+NRNRNR,NRNR-NRNR.NRNR/NRNR0NRNRNRNR1NR2NRNR3NR4NR5NRNR6NRN,          pV'       d   R7MRpV'       d   RMR8p\        P                  P	                  R9V  V 2R:VR;R<R=.. RDOR>P                  V4      R?7      # )EzQFused Prod quantize: norm + rotate + MSE quantize + residual + QJL in 1 dispatch.Nr2   rK   r4   r²   Úsharedrñ  Úvró  r3   ú            if (d < Dim) {rô  r8   z:        // Step 4: MSE quantize + compute rotated residualz(        float rot_residual[DimsPerLane];z-        threadgroup uint shared_mse_idx[Dim];z            uint idx = 0;z$                for (int m = 0; m < z; m++)zA                    idx += (rotated[i] > midpoints[m]) ? 1u : 0u;z+            float estimate = codebook[idx];z4            rot_residual[i] = rotated[i] - estimate;z1            if (d < Dim) shared_mse_idx[d] = idx;z#        // Step 5: Pack MSE indicesz9        for (int w = lane; w < MsePackedWidth; w += 32) {z            uint word = 0;z)            for (int b = 0; b < 32; b += z) {z)                int dim = (w * 32 + b) / r=   z>                if (dim < Dim) word |= (shared_mse_idx[dim] & zu) << b;z;            out_mse_packed[bh * MsePackedWidth + w] = word;z         // Step 6: Residual normz        float res_sq = 0.0f;rï  z8            res_sq += rot_residual[i] * rot_residual[i];z0        float res_norm = sqrt(simd_sum(res_sq));z:        if (lane == 0) out_res_norms[bh] = half(res_norm);zF        // Step 7: QJL projection (rotated_residual @ combined_proj_t)z>        //   combined_proj_t = (mse_rotation @ projection_t).Tz;        //   so row d gives the projection for output dim dz5            if (d < Dim) shared[d] = rot_residual[i];z+        threadgroup uint shared_signs[Dim];z            float proj = 0.0f;z5                auto row = combined_proj_t + d * Dim;z/                    proj += shared[j] * row[j];zE            shared_signs[d < Dim ? d : 0] = (proj >= 0.0f) ? 1u : 0u;z1        // Step 8: Pack sign bits (1 bit per dim)z:        for (int w = lane; w < SignPackedWidth; w += 32) {z*            for (int b = 0; b < 32; b++) {z%                int dim = w * 32 + b;z>                if (dim < Dim) word |= shared_signs[dim] << b;z7            out_signs[bh * SignPackedWidth + w] = word;rõ  Úmse_rotationÚturboquant_fused_prod_quantize_r  rw  r'   Úcombined_proj_tr?   r   )z5        auto lane = thread_position_in_threadgroup.x;rî  z*        auto vec_ptr = vectors + bh * Dim;r2   z&        // Step 1: Load & compute normz        float v[DimsPerLane];z         float partial_sq = 0.0f;rK   zH            float x = (d < Dim) ? static_cast<float>(vec_ptr[d]) : 0.0f;z            v[i] = x;z             partial_sq += x * x;r4   z0        float norm = sqrt(simd_sum(partial_sq));z@        float inv_norm = (norm > 1e-10f) ? (1.0f / norm) : 0.0f;z2        if (lane == 0) out_norms[bh] = half(norm);r2   )z,        threadgroup float shared[DimPadded];zF        for (int i = 0, d = lane; i < DimsPerLanePadded; d += 32, i++)zI            shared[d < Dim ? d : 0] = (d < Dim) ? v[i] * inv_norm : 0.0f;rø  z&            shared[Dim + lane] = 0.0f;r²   r2   )r2   ú#        float rotated[DimsPerLane];z@        for (int i = 0, d = lane; i < DimsPerLane; d += 32, i++)zB            rotated[i] = (d < Dim) ? shared[d] * rht_scale : 0.0f;)z&        threadgroup float shared[Dim];r3   z5            if (d < Dim) shared[d] = v[i] * inv_norm;r²   r2   rŠ  rK   z            float sum = 0.0f;r†  z2                auto row = mse_rotation + d * Dim;rô  z.                    sum += shared[j] * row[j];r8   z            rotated[i] = sum;r4   )r}  Úout_mse_packedÚout_res_normsÚ	out_signs)r   r]  r   r)   r*   rP   )r  rì  r€  rx  rº  rQ   rû  rü  s   &&      r   Ú_fused_prod_quantize_kernelrŽ  «  s×  € ô ×Ò ¨Q¤ÙØ�x•-€KØ !•O€MØ˜Q�€Hò€E÷& Øò 
õ 	
ˆð 	Ô-Ø�j #Ð':ó
õ 	
ˆð 	ò 
õ 	
‰ð 	ò 
õ 	
ˆð& 
ð >Ø
ð>àDð>ð 	3ð>ð 	8ð	>ð
 	Mð>ð 	$ð>ð &ð>ð /¨}¨o¸VÐDð>ð Lð>ð ð>ð 	6ð>ð 	?ð>ð 	<ð>ð 	ð>ð 	Cð>ð  	ð!>ð" 	.ð#>ð$ 	Dð%>ð& 	%ð'>ð( 4°H°:¸TÐBð)>ð* 4°H°:¸QÐ?ð+>ð, IÈÈ
ÐRZÐ[ð->ð. ð/>ð0 	Fð1>ð2 	ð3>ð4 	ð5>ð6 	+ð7>ð8 	'ð9>ð: 	8ð;>ð< 	Cð=>ð> 	;ð?>ð@ 	EðA>ðB 	ðC>ðD 	QðE>ðF 	IðG>ðH 	FðI>ðJ 	KðK>ðL 	@ðM>ðN 	CðO>ðP 	ðQ>ðR 	6ðS>ðT 	MðU>ðV 	)ðW>ðX 	%ðY>ðZ 	@ð[>ð\ 	=ð]>ð^ 	:ð_>ð` 	ða>ðb 	Pðc>ðd 	ðe>ðf 	Cðg>ðh 	ði>ðj 	<ðk>ðl 	Eðm>ðn 	%ðo>ðp 	5ðq>ðr 	0ðs>ðt 	Iðu>ðv 	ðw>ðx 	Bðy>ðz 	ð{>õ >€E÷@ $‘&¨€Kß#*‘Z°€NÜ�7‰7×ÑØ.¨x¨j¸¸ÐFàØØØØð
ò
ð �y‰y˜Óð  ó ð r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r  r0   Ú	high_bitsr/   r   )r   s   "r   r   r   D  s&   € ÷ Qñ Q¨ð Q¸ð QÈCñ Qr   c                óH  € \        4       '       d   V^8  d   R# \        V ^,
          ^ 4      p\        V^,
          ^ 4      p^V,          ^,
          p^V,          ^,
          pRp. RNRNRNRNRNRNRNR	NR
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNR NR!NR"NR#NR$NR%NR&NR'V R(2NRNp\        V4       F,  p	VR)V	 R*V	 R+2R,V	 R-V	 R+2R.V	 R/V	 R02R1V	 R2V	 R02.,          pK.  	  \        V4       F  p	VR3V	 R42R5V	 R62R7V	 R62.,          pK  	  VRR8.,          p\        V4       F  p	VR9V	 R62.,          pK  	  VR:R;R<R=R>R?R@V RA2RBRCV RDV REV RF2RGV RH2RIRJ.,          p\        V4       F  p	VRKV	 RLV	 RMV	 RNV	 RO2	.,          pK  	  VRPRQ.,          pVR:RRRSRTRURVR@V RA2RBRCV RDV REV RF2RGV RH2RWRJ.,          p\        V4       F  p	VRKV	 RXV	 RYV	 RZV	 RO2	.,          pK  	  VRPRQ.,          p\        V4       F  p	VR[V	 R\V	 R(2.,          pK  	  V. R|O,          p\        V4       FQ  p	VR]V	 R^V	 RA2R_V	 R`V	 RaV	 R(2RbV	 RcV	 RdV	 R(2ReV	 RfV	 RdV	 R(2RgV	 RhV	 RiV	 RjV	 RA2	RkV	 RlV	 RiV	 RjV	 Rm2	.,          pKS  	  VRnR.,          pVRoV R(2.,          p\        V4       F'  p	VRpRqV	 RrV	 RA2RnRsRtV	 RA2RuV	 RA2RvV	 RA2Rn.,          pK)  	  RwP                  V4      p
. R}Op\        P
                  P                  RxV  RyV RzV 2V. R~OV
R{7      # )z?Fused SplitCodec decode: score + online-softmax + weighted-sum.NzDimLow + DimHighr@   rh  rA   r2   ri  z2        auto token_count = key_low_norms_shape[2];z/        auto kv_heads = key_low_norms_shape[1];rD   rE   rF   rl  rm  rn  rG   rH   z;        auto kl_norms = key_low_norms + base * token_count;zJ        auto kl_mse = key_low_mse + base * token_count * KLMsePackedWidth;z=        auto kl_res = key_low_res_norms + base * token_count;zO        auto kl_signs = key_low_signs + base * token_count * KLSignPackedWidth;z<        auto kh_norms = key_high_norms + base * token_count;zK        auto kh_mse = key_high_mse + base * token_count * KHMsePackedWidth;z>        auto kh_res = key_high_res_norms + base * token_count;zP        auto kh_signs = key_high_signs + base * token_count * KHSignPackedWidth;z;        auto vl_norms = val_low_norms + base * token_count;zM        auto vl_packed = val_low_packed + base * token_count * VLPackedWidth;z<        auto vh_norms = val_high_norms + base * token_count;zN        auto vh_packed = val_high_packed + base * token_count * VHPackedWidth;z/        // Value bit offset for this lane's dimz+        bool is_low_val = val_dim < DimLow;zA        int vd_local = is_low_val ? val_dim : (val_dim - DimLow);z2        int v_bits = is_low_val ? VLBits : VHBits;z%        int v_bo = vd_local * v_bits;ru  rv  z*        uint v_mask = (1u << v_bits) - 1u;z.        bool v_spills = (v_off + v_bits > 32);z"        bool v_valid = val_dim < (r;   z        auto qrl_z% = q_rot_low + (base * RepeatCount + z) * DimLow;z        auto qpl_z& = q_proj_low + (base * RepeatCount + z        auto qrh_z& = q_rot_high + (base * RepeatCount + z) * DimHigh;z        auto qph_z' = q_proj_high + (base * RepeatCount + r|  r}  r~  r6   r  rL   r5   z            {z;                auto mse_t = kl_mse + t * KLMsePackedWidth;z?                auto sign_t = kl_signs + t * KLSignPackedWidth;z;                float kn = static_cast<float>(kl_norms[t]);zR                float ksr = kn * key_low_scale[0] * static_cast<float>(kl_res[t]);z9                for (int d = lane; d < DimLow; d += 32) {z!                    int bo = d * r=   z=                    uint idx = (mse_t[bo >> 5] >> (bo & 31));z%                    if (((bo & 31) + r„  r…  r†  z                    idx &= r˜   z7                    float code = key_low_codebook[idx];z@                    uint sb = (sign_t[d >> 5] >> (d & 31)) & 1u;z                    ps_z  += kn * static_cast<float>(qrl_z1[d]) * code + ksr * (sb ? static_cast<float>(qpl_z[d]) : -static_cast<float>(qpl_r�  rW  r8   z;                auto mse_t = kh_mse + t * KHMsePackedWidth;z?                auto sign_t = kh_signs + t * KHSignPackedWidth;z;                float kn = static_cast<float>(kh_norms[t]);zS                float ksr = kn * key_high_scale[0] * static_cast<float>(kh_res[t]);z:                for (int d = lane; d < DimHigh; d += 32) {z8                    float code = key_high_codebook[idx];z  += kn * static_cast<float>(qrh_z1[d]) * code + ksr * (sb ? static_cast<float>(qph_z[d]) : -static_cast<float>(qph_r9   r:   r�  r‘  r’  r“  r”  r•  r–  r—  r˜  r™  rš  r›  rœ  r�  rž  rŸ  r   r4   z        int out_stride = (r¡  r¢  r£  r¤  r¥  r¦  r§  r?   Úturboquant_fused_split_decode_r›   r©  r   )r2   rŽ  r�  z!                if (is_low_val) {z<                    auto vt = vl_packed + t * VLPackedWidth;ú4                    uint vv = (vt[v_word] >> v_off);ú[                    if (v_spills) vv |= vt[v_word + 1] << (v_bits - (v_off + v_bits - 32));z]                    v_code = val_low_codebook[vv & v_mask] * static_cast<float>(vl_norms[t]);z                } else {z<                    auto vt = vh_packed + t * VHPackedWidth;r“  r”  z^                    v_code = val_high_codebook[vv & v_mask] * static_cast<float>(vh_norms[t]);rW  r8   )Ú	q_rot_lowÚ
q_proj_lowÚ
q_rot_highÚq_proj_highÚkey_low_normsÚkey_low_mseÚkey_low_res_normsÚkey_low_signsÚkey_high_normsÚkey_high_mseÚkey_high_res_normsÚkey_high_signsÚval_low_normsÚval_low_packedÚval_high_normsÚval_high_packedÚkey_low_codebookÚkey_high_codebookÚkey_low_scaleÚkey_high_scaleÚval_low_codebookÚval_high_codebookrµ  )r   rF  rO   rP   r   r)   r*   )r  r�  r/   Úlow_mse_bitsÚhigh_mse_bitsÚlow_mse_maskÚhigh_mse_maskÚval_dim_totalrQ   rR   r"   r    s   &&&         r   Ú_fused_split_decode_kernelr°  C  sÓ  € ô ×Ò °Ô!1Ùä�x !•| QÓ'€LÜ˜	 A� qÓ)€MØ˜Õ%¨Õ*€LØ˜-Õ'¨1Õ,€Mà&€Mð,Ø8ð,à<ð,ð 	6ð,ð 	ð	,ð
 6ð,ð 	ð,ð 	=ð,ð 	:ð,ð 	Vð,ð 	/ð,ð 	5ð,ð 	*ð,ð 	*ð,ð 	2ð,ð 	ð,ð  	8ð!,ð" 	Lð#,ð$ 	ð%,ð& 	Fð',ð( 	Uð),ð* 	Hð+,ð, 	Zð-,ð. 	Gð/,ð0 	Vð1,ð2 	Ið3,ð4 	[ð5,ð6 	ð7,ð8 	Fð9,ð: 	Xð;,ð< 	Gð=,ð> 	Yð?,ð@ 	ðA,ðB 	:ðC,ðD 6ðE,ðF LðG,ðH =ðI,ðJ 0ðK,ðL *ðM,ðN )ðO,ðP 5ðQ,ðR 9ðS,ðT -¨]¨O¸2Ð>ðU,ðV 	ðW,€Eô\ �<Ö ˆØØ ˜sÐ"GÈÀsÈ+ÐVØ ˜sÐ"HÈÈÈ;ÐWØ ˜sÐ"HÈÈÈ<ÐXØ ˜sÐ"IÈ!ÈÈLÐYð	
õ 	
Šñ !ô �<Ö ˆØØ! !  MÐ2Ø! !  HÐ-Ø! !  HÐ-ð
õ 	
Šñ !ð 
Ø
Ø9ðõ €Eô
 �<Ö ˆØÐ)¨!¨¨HÐ5Ð6Õ6Šñ !ð 
ØØEØIØEØ\Ø
DØ
+¨L¨>¸Ð;Ø
GØ
/°¨~Ð=eÐfrÐesð  tDð  EQð  DRð  RZð  	[Ø
% l ^°2Ð6Ø
AØ
Jðõ €Eô �<Ö ˆØØ% a SÐ(HÈÈÐK|Ð}~Ð|ð  @_ð  `að  _bð  bhð  ið
õ 	
Šñ !ð 
ØØðõ €Eð
 
ØØEØIØEØ]Ø
EØ
+¨M¨?¸!Ð<Ø
GØ
/°¨Ð>fÐgtÐfuð  vFð  GTð  FUð  U]ð  	^Ø
% m _°BÐ7Ø
BØ
Jðõ €Eô �<Ö ˆØØ% a SÐ(HÈÈÐK|Ð}~Ð|ð  @_ð  `að  _bð  bhð  ið
õ 	
Šñ !ð 
ØØðõ €Eô
 �<Ö ˆØÐ(¨¨¨?¸1¸#¸RÐ@ÐAÕAŠñ !ð 
ò õ €Eô$ �<Ö ˆØØ# A 3 h¨q¨c°Ð3Ø ˜s ,¨q¨c°°a°S¸Ð;Ø# A 3 j°°°8¸A¸3¸bÐAØ" 1 # Y¨q¨c°¸!¸¸BÐ?Ø ˜s (¨1¨#¨V°A°3°e¸A¸3¸aÐ@Ø ˜s (¨1¨#¨V°A°3°e¸A¸3¸jÐIð
õ 	
Šñ !ð 
ˆk˜2ÐÕ€Eð 
Ð*¨=¨/¸Ð<Ð=Õ=€EÜ�<Ö ˆØØ%ØSÐTUÐSVÐVwÐxyÐwzÐz{Ð|ØØ*ØXÐYZÐX[Ð[\Ð]Ø2°1°#°QÐ7Ø2°1°#°QÐ7Øð	
õ 		
Šñ !ð �Y‰Y�uÓ€Fò€Kô2 �7‰7×ÑØ-¨h¨Z°q¸¸À2ÀlÀ^ÐTØÚ6Øð	  ó ð r   c               ó    € V ^8„  d   QhRRRR/# )r   r  r0   r�  r   )r   s   "r   r   r     s   € ÷ pñ p¨Cð p¸Cñ pr   c                ó˜   a aaa€ \        S ^,
          ^ 4      o\        S^,
          ^ 4      o\        P                  R VVV V3R ll4       pV# )z0Compiled SplitCodec decode handling both halves.c          6     ó„   € V ^8„  d   QhRRRRRRRRRRRRRRR	RR
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR/# )r   rP  rè   r™  Úkey_low_mse_indicesÚkey_low_residual_normsÚkey_low_qjl_signsr�  Úkey_high_mse_indicesÚkey_high_residual_normsÚkey_high_qjl_signsÚvalue_low_normsÚvalue_low_indicesÚvalue_high_normsÚvalue_high_indicesÚkey_low_transform_tÚkey_high_transform_tr¥  r¦  r§  r¨  Úvalue_low_codebookÚvalue_high_codebookÚvalue_low_rotationÚvalue_high_rotationÚlow_idxÚhigh_idxÚrestore_orderr   r   )r   s   "r   r   Ú3_compiled_split_decode_kernel.<locals>.__annotate__  s9  € ÷ h7ñ h7Ø!ðh7ð  ðh7ð &ð	h7ð
 !)ðh7ð $ðh7ð !ðh7ð 'ðh7ð "*ðh7ð %ðh7ð "ðh7ð $ðh7ð  #ð!h7ð" %ð#h7ð& &ð'h7ð( 'ð)h7ð* #ð+h7ð, $ð-h7ð.  ð/h7ð0 !ð1h7ð2 %ð3h7ð4 &ð5h7ð6 %ð7h7ð8 &ð9h7ð< ð=h7ð> ð?h7ð@  ðAh7ðB 
ñCh7r   c           
     óþ  <€ V P                   R,          p\        P                  ! V VRR7      p\        P                  ! V VRR7      p\        P                  ! VV4      pVP                   R,          p\	        VRRV13,          P                  VP                   ^ ,          VP                   ^,          VP                   ^,          V4      VRVR13,          P                  VP                   ^ ,          VP                   ^,          VP                   ^,          V4      \        VVVV4      S*VV4      p\        P                  ! VV4      p VP                   R,          p!\	        V RRV!13,          P                  V P                   ^ ,          V P                   ^,          V P                   ^,          V!4      V RV!R13,          P                  V P                   ^ ,          V P                   ^,          V P                   ^,          V!4      \        VVVV4      S(VV4      p"VV",           p#\        V#\        Wš4      S)VV4      p$\        V#\        W¼4      S'VV4      p%\        P                  ! V$V%.RR7      p&\        P                  ! V&VRR7      # )rn   rú   .Nrü   )
r   r   Útaker;  r  r@  r  rH  rê   Úconcatenate)+rP  r™  r´  rµ  r¶  r�  r·  r¸  r¹  rº  r»  r¼  r½  r¾  r¿  r¥  r¦  r§  r¨  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  r_  Úq_lowÚq_highÚqt_lowÚd_lowÚ
scores_lowÚqt_highÚd_highÚscores_highrà   Úout_lowÚout_highÚmergedr�  r¬  r  r«  s+   &&&&&&&&&&&&&&&&&&&&&&&&&&             €€€€r   r`  Ú._compiled_split_decode_kernel.<locals>._decode  s>  ø€ ðF ×#Ñ# BÕ'ˆä—’˜¨°rÔ:ˆÜ—’˜¨(¸Ô<ˆô —’˜5Ð"5Ó6ˆØ—‘˜B•ˆÜ&Ø�3˜˜˜�;Õ×'Ñ'Ø—‘˜Q• §¡¨a¥°&·,±,¸qµ/À5óð �3˜™�;Õ×'Ñ'Ø—‘˜Q• §¡¨a¥°&·,±,¸qµ/À5óô  ØØ#Ø&Ø!ó	ð ØØó
ˆ
ô& —)’)˜FÐ$8Ó9ˆØ—‘˜bÕ!ˆÜ'Ø�C˜˜&˜�LÕ!×)Ñ)Ø—‘˜aÕ  '§-¡-°Õ"2°G·M±MÀ!Õ4DÀfóð �C˜™�LÕ!×)Ñ)Ø—‘˜aÕ  '§-¡-°Õ"2°G·M±MÀ!Õ4DÀfóô  ØØ$Ø'Ø"ó	ð ØØó
ˆð& ˜kÕ)ˆô 6ØÜ˜ÓBØØØó
ˆô 7ØÜÐ/ÓDØØØó
ˆô —’ ¨(Ð 3¸"Ô=ˆÜ�wŠw�v˜}°2Ô6Ð6r   rb  )r  r�  r`  r¬  r«  s   ff @@r   Ú_compiled_split_decode_kernelr×    sK   û€ ô �x !•| QÓ'€LÜ˜	 A� qÓ)€Mä‡Z�Z÷h7ò h7ó ðh7ðT €Nr   c                  ó,   € ] tR tRt$ R]R&   R]R&   RtR# )rê   iŒ  rè   r%   r  r   N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   r   r   rê   rê   Œ  s   ‡ ØƒOØ×r   rê   c                  ó@   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   RtR# )	r  i‘  rè   r%   r  r^   r  r   NrÙ  r   r   r   r  r  ‘  s   ‡ ØƒOØÓØÓØ×r   r  c                  ó,   € ] tR tRt$ R]R&   R]R&   RtR# )ÚTurboQuantPolarStatei˜  rè   r¦   r  r*  r   NrÙ  r   r   r   râ  râ  ˜  s   ‡ ØƒOØ'×'r   râ  c                  ó@   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   RtR	# )
r  i�  rè   r%   râ  r)  r^   r  r   NrÙ  r   r   r   r  r  �  s   ‡ ØƒOØ%Ó%ØÓØ×r   r  c                  ó,   € ] tR tRt$ R]R&   R]R&   RtR# )ÚTurboQuantSplitStatei¤  ÚobjectÚlowÚhighr   NrÙ  r   r   r   rå  rå  ¤  s   ‡ Ø	ƒKØ
‡Lr   rå  c               ó    € V ^8„  d   QhRRRR/# )r   r¬   Úfloatr   r   )r   s   "r   r   r   ©  s   € ÷ 	ñ 	˜ð 	 5ñ 	r   c                óÌ   € \        V 4      p V ^8  d   \        R4      h\        V ^,          4      ^,          p\        P                  ! WRR7      '       g   \        RV  R24      hV# )rn   z!TurboQuant requires kv_bits >= 1.r
   ©Úabs_tolz=TurboQuant currently supports integer and .5 bit-widths, got Ú.)rê  Ú
ValueErrorÚroundÚmathÚisclose)r¬   Úroundeds   & r   Ú_validate_bitsrô  ©  sb   € Ü�‹;€DØˆa„xÜÐ<Ó=Ð=Ü�D˜1•H‹o Õ!€GÜ�<Š<˜¨t×4Ó4ÜØKÈDÈ6ÐQRÐSó
ð 	
ð €Nr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r¬   zOptional[float]ÚschemezOptional[str]r   r   r   )r   s   "r   r   r   µ  s!   € ÷ =ñ =˜_ð =°mð =Ètñ =r   c                ó„   € V f   R# VR8X  d   R# \        V 4      p \        P                  ! V \        V 4      RR7      '       * # )NFÚ
turboquantTr
   rì  )rê  rñ  rò  rð  )r¬   rö  s   &&r   Úturboquant_enabledrù  µ  s8   € Ø‚|ÙØ�ÔÙÜ�‹;€DÜ�|Š|˜D¤%¨£+°tÔ<Ô<Ð<r   c               ó    € V ^8„  d   QhRRRR/# )r   Úvaluer0   r   r   r   )r   s   "r   r   r   ¾  s   € ÷ 4ñ 4˜Cð 4 Dñ 4r   c                ó@   € V ^ 8„  ;'       d    W ^,
          ,          ^ 8H  # ©r   r   )rû  s   &r   Ú_is_power_of_tworþ  ¾  s    € Ø�1‰9×3Ð3˜%¨1¥9Õ-°!Ñ3Ð3r   c               ó    € V ^8„  d   QhRRRR/# ©r   r_  r0   r   r   )r   s   "r   r   r   Â  s   € ÷ 7ñ 7�sð 7˜sñ 7r   c                ón   € V ^8:  d   ^ # \        \        \        \        P                  ! V 4      4      4      # ©rn   )ÚminÚ_POLAR_MAX_LEVELSr0   rñ  Úlog2©r_  s   &r   Ú_polar_levelsr  Â  s'   € Ø
ˆa„xÙÜÔ ¤#¤d§i¢i°£nÓ"5Ó6Ð6r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r_  r0   r¬   r   r�   r   )r   s   "r   r   r   È  s!   € ÷ &ñ &˜3ð & cð &¨oñ &r   c                ó„   € V^8w  d   \        RV R24      h\        V 4      pV^ 8X  d   R# RRV^,
          ,          ,           # )r±   z3PolarQuant key codec currently expects 4 bits, got rî  r   )r±   ©r   )rï  r  )r_  r¬   r,  s   && r   Ú_polar_level_bitsr  È  sI   € Øˆq„yÜÐNÈtÈfÐTUÐVÓWÐWÜ˜3Ó€FØ�„{Øˆ	Ø�$˜& 1�*Õ%Õ%Ð%r   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   r_  r0   Úseedr   rè   r   )r   s   "r   r   r   Ò  s!   € ÷ 
*ñ 
*˜#ð 
* Sð 
*¨Xñ 
*r   c                ó\  € V ^ 8:  d'   \         P                  ! R\         P                  R7      # V ^8X  d'   \         P                  ! R\         P                  R7      # \        P
                  P                  WR,          ,           4      pVP                  W 3\        P                  R7      p\        P                  P                  V4      w  rEV\        P                  ! \        P                  ! V4      4      ,          p\         P                  ! VP                  \        P                  4      4      # )r   ©Údtypeéï  ©r   r   )rn   rn   )r   Úzerosr  ÚonesÚnpÚrandomÚdefault_rngÚstandard_normalÚlinalgÚqrÚsignÚdiagÚarrayÚastype)r_  r  ÚrngÚmatrixÚqrR   s   &&    r   Ú_rotation_matrixr#  Ñ  s»   € à
ˆa„xÜ�xŠx˜¤b§j¡jÔ1Ð1Ø
ˆa„xÜ�wŠw�v¤R§Z¡ZÔ0Ð0ä
�)‰)×
Ñ
 ¨T¥zÕ 1Ó
2€CØ× Ñ  # ´2·:±:Ð Ó>€FÜ�9‰9�<‰<˜Ó�D€AØŒ�Š”—’˜“Ó	Õ€AÜ�8Š8�A—H‘HœRŸZ™ZÓ(Ó)Ð)r   c               ó    € V ^8„  d   QhRRRR/# )r   Únr0   r   r   )r   s   "r   r   r   ß  s   € ÷ 5ñ 5˜#ð 5 #ñ 5r   c                óP   € V ^8”  d   ^V ^,
          P                  4       ,          # ^# r  )Ú
bit_length)r%  s   &r   Ú_next_power_of_twor(  ß  s%   € Ø()¨A¬ˆ1��Q•×"Ñ"Ó$Õ$Ð4°1Ð4r   c               ó    € V ^8„  d   QhRRRR/# r   r   )r   s   "r   r   r   ä  s   € ÷ #ñ #˜ð # ñ #r   c                ó   € \        V 4      # r�   )r(  r  s   &r   Ú_rht_padded_dimr+  ã  s   € ä˜cÓ"Ð"r   c               ó$   € V ^8„  d   QhRRRRRR/# r  r   )r   s   "r   r   r   é  s!   € ÷ ñ ˜#ð  Sð ¨Xñ r   c                óD  € V ^ 8:  d'   \         P                  ! R\         P                  R7      # \        P                  P                  WR,          ,           4      pVP                  RR.V R7      P                  \        P                  4      p\         P                  ! V4      # )zCDeterministic random sign vector for Randomized Hadamard Transform.r  r  ç      ð?)Úsizerý  ç      ð¿)	r   r  r  r  r  r  Úchoicer  r  )r_  r  r   r_   s   &&  r   Ú_rht_sign_vectorr2  è  sn   € ð ˆa„xÜ�xŠx˜¤B§J¡JÔ/Ð/Ü
�)‰)×
Ñ
 ¨T¥zÕ 1Ó
2€CØ�J‰J˜˜c�{¨ˆJÓ-×4Ñ4´R·Z±ZÓ@€EÜ�8Š8�E‹?Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   Úxrè   r_   r   r   )r   s   "r   r   r   ò  s!   € ÷ ñ �Hð  Xð °(ñ r   c                ól  € VP                   ^ ,          p\        V4      pW,          pW28”  dB   R.VP                  ^,
          ,          ^ W2,
          3.,           p\        P                  ! WE4      p\        P
                  ! VR\        P                  ! V4      ,          R7      pW28”  d   VRRV13,          pV# )z+RHT forward: hadamard(signs * x) / sqrt(D).r.  ©r`   .Nr  ©r   r+  rÿ   r   ÚpadÚhadamard_transformrñ  Úsqrt©r5  r_   r_  ÚD_paddedÚyÚ	pad_widths   &&    r   Ú_rht_forwardr@  ò  s‘   € à
�+‰+�a�.€CÜ˜sÓ#€HØ	�	€AØ„~Ø�H §¡¨¥
Õ+°°8µ>Ð/BÐ.CÕCˆ	Ü�FŠF�1Ó ˆÜ
×Ò˜a s¬T¯YªY°xÓ-@Õ'@ÔA€AØ„~Øˆc�4�C�4ˆi�LˆØ€Hr   c               ó$   € V ^8„  d   QhRRRRRR/# r4  r   )r   s   "r   r   r      s!   € ÷ ñ �Hð  Xð °(ñ r   c                ól  € VP                   ^ ,          p\        V4      pT pW28”  dB   R.VP                  ^,
          ,          ^ W2,
          3.,           p\        P                  ! WE4      p\        P
                  ! VR\        P                  ! V4      ,          R7      pW28”  d   VRRV13,          pWA,          # )z+RHT inverse: signs * hadamard(x) / sqrt(D).r.  r7  .Nr  r8  r<  s   &&    r   r:  r:     s’   € à
�+‰+�a�.€CÜ˜sÓ#€HØ	€AØ„~Ø�H §¡¨¥
Õ+°°8µ>Ð/BÐ.CÕCˆ	Ü�FŠF�1Ó ˆÜ
×Ò˜a s¬T¯YªY°xÓ-@Õ'@ÔA€AØ„~Øˆc�4�C�4ˆi�LˆØ�9Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# r  r   )r   s   "r   r   r     s!   € ÷ /ñ /˜Cð / sð /¨xñ /r   c                ól  € V ^ 8:  d'   \         P                  ! R\         P                  R7      # \        P                  P                  WR,          ,           ^,           4      pVP                  W 3\        P                  R7      p\         P                  ! VP                  \        P                  4      4      # )r   r  i›  r  )	r   r  r  r  r  r  r  r  r  )r_  r  r   r!  s   &&  r   Ú_projection_matrixrE    su   € à
ˆa„xÜ�xŠx˜¤b§j¡jÔ1Ð1Ü
�)‰)×
Ñ
 ¨T¥zÕ 1°BÕ 6Ó
7€CØ× Ñ  # ´2·:±:Ð Ó>€FÜ�8Š8�F—M‘M¤"§*¡*Ó-Ó.Ð.r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rö   ú
np.ndarrayr_  r0   r   r   )r   s   "r   r   r     s!   € ÷ ñ �Jð  Sð ¨Zñ r   c           	     óÂ  € V^8:  d   \         P                  ! V 4      pMü\        P                  ! V^,          4      R\        P                  ! \        P
                  4      ,          ,
          \        P                  ! V^,
          ^,          4      ,
          pW1^,
          ^,          \         P                  ! \         P                  ! RV ^,          ,
          RR4      4      ,          ,           p\         P                  ! V\         P                  ! V4      ,
          4      pVP                  4       pV^ 8X  d(   \         P                  ! V R\        V 4      ,          4      # W%,          # )rn   ç      à?r.  g ÂëþKH´9N)r  Ú	ones_likerñ  ÚlgammaÚlogÚpiÚclipÚexprF  ÚsumÚ	full_liker©   )rö   r_  ÚpdfÚ	log_coeffÚlog_pdfÚpdf_sums   &&    r   Ú	_beta_pdfrV    sé   € Ø
ˆa„xÜ�lŠl˜4Ó ‰ô �KŠK˜˜a�Ó  3¬¯ª´$·'±'Ó):Õ#:Õ:¼T¿[º[È#ÐPQÍ'ÐUVÍÓ=WÕWð 	ð  a¥¨1�}´·²Ü�GŠG�C˜$ �'•M 5¨$Ó/ó1
õ 
õ 
ˆô �fŠf�WœrŸvšv g›Õ.Ó/ˆØ�g‰g‹i€GØ�!„|Ü�|Š|˜D #¬¨D«	¥/Ó2Ð2Ø�=Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r_  r0   r¬   r   rè   r   )r   s   "r   r   r   *  s!   € ÷ $2ñ $2�3ð $2˜cð $2 hñ $2r   c                ó®  € V^ 8:  d'   \         P                  ! R\         P                  R7      # ^V,          pV ^8:  d?   \        P                  ! R	RV\        P                  R7      p\         P
                  ! V4      # \        P                  ! R
RR\        P                  R7      p\        W@4      p\        P                  ! V4      p\        P                  ! V\        P                  R7      R,           V,          p\        P                  ! WvV4      P                  \        P                  4      p\        ^d4       EFg  p\        P                  ! V^,           \        P                  R7      p	R	V	^ &   RV	R&   RVRR VR,          ,           ,          V	^R% VP                  4       p
\        V4       Fµ  pW²^,
          8X  d$   WIV,          8¬  WIV^,           ,          8*  ,          pM"WIV,          8¬  WIV^,           ,          8  ,          pW\,          pVP                  ^ 8X  d   Kp  VP                  4       pV^ 8”  g   K‰  \        P                  ! WÔV,          ,          4      V,          W«&   K·  	  \        P                   ! \        P"                  ! W£,
          4      4      R8  d   T
p MT
pEKj  	  \         P
                  ! VP                  \        P                  4      4      # )r   r  r.  r
   é €  rI  Nºrn   NNrý  r0  gé!çýÿï¿gé!çýÿï?rü   )r   r  r  r  Úlinspacer  rV  ÚcumsumÚarangeÚinterpr  rO   ÚemptyÚcopyr/  rP  rF  Úabs)r_  r¬   r,  Ú	centroidsrö   rj   ÚcdfÚ	quantilesr›   Ú
boundariesÚnew_centroidsr  r­   Úbucket_weightsÚtotal_weights   &&             r   Ú	_codebookri  )  s  € àˆq„yÜ�xŠx˜¤B§J¡JÔ/Ð/Ø�$�Y€FØ
ˆa„xÜ—K’K  c¨6¼¿¹ÔDˆ	Ü�xŠx˜	Ó"Ð"ä�;Š;�{ J°¼R¿Z¹ZÔH€DÜ˜Ó"€GÜ
�)Š)�GÓ
€CÜ—’˜6¬¯©Ô4°sÕ:¸fÕD€IÜ—	’	˜)¨$Ó/×6Ñ6´r·z±zÓB€Iä�3�ZˆÜ—X’X˜f q�j´·
±
Ô;ˆ
Øˆ
�1‰Øˆ
�2‰Ø )¨C¨R .°9¸Rµ=Õ"@ÕAˆ
�1�RÐØ!Ÿ™Ó(ˆÜ�v–ˆAØ˜Q•JŒØ¨1¥Ñ-°$ÀQÈÅUÕ:KÑ2KÕL‘à¨1¥Ñ-°$ÀAÈÅEÕ9JÑ2JÕK�Ø$�]ˆNØ×"Ñ" aÔ'ÙØ)×-Ñ-Ó/ˆLØ˜aÖÜ#%§6¢6¨.À½:Õ*EÓ#FÈÕ#U�Ó ñ ô �6Š6”"—&’&˜Õ2Ó3Ó4°tÔ;Ø%ˆIÙØ!‹	ñ) ô, �8Š8�I×$Ñ$¤R§Z¡ZÓ0Ó1Ð1r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rö   rG  r«   r0   r   r   )r   s   "r   r   r   Q  s!   € ÷ 	ñ 	˜:ð 	¨cð 	°jñ 	r   c                óˆ  € V^8:  d   \         P                  ! V 4      pM_^V^,
          ,          ^,
          p\         P                  ! \         P                  ! \         P                  ! RV ,          4      RR4      V4      pVP                  4       pV^ 8X  d(   \         P                  ! V R\        V 4      ,          4      # W$,          # )rn   ç       @ç        Nr.  )r  rJ  ÚpowerrN  ÚsinrP  rQ  r©   )rö   r«   rR  ÚexponentrU  s   &&   r   Ú_polar_angle_pdfrq  Q  s‡   € Ø�„zÜ�lŠl˜4Ó ‰à˜% !�)Õ$¨Õ)ˆÜ�hŠh”r—w’wœrŸvšv c¨D¥jÓ1°3¸Ó=¸xÓHˆØ�g‰g‹i€GØ�!„|Ü�|Š|˜D #¬¨D«	¥/Ó2Ð2Ø�=Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r«   r0   r¬   r   rè   r   )r   s   "r   r   r   ^  s!   € ÷ &2ñ &2 ð &2¨Cð &2°Hñ &2r   c                ó¬  € V^ 8:  d'   \         P                  ! R	\         P                  R7      # ^V,          pV ^8:  d�   R\        P                  ,          V,          p\
        P                  ! V\
        P                  R7      V,          VR,          ,           p\         P                  ! VP                  \
        P                  4      4      # \
        P                  ! R\        P                  ^,          R,
          R\
        P                  R7      p\        WP4      p\
        P                  ! V4      p\
        P                  ! V\
        P                  R7      R,           V,          p\
        P                  ! W‡V4      P                  \
        P                  4      p\        ^d4       EF|  p	\
        P                  ! V^,           \
        P                  R7      p
RV
^ &   \        P                  ^,          V
R
&   RVRR
 VR,          ,           ,          V
^R
% VP                  4       p\        V4       Fµ  pWÂ^,
          8X  d$   WZV,          8¬  WZV^,           ,          8*  ,          pM"WZV,          8¬  WZV^,           ,          8  ,          pWm,          pVP                   ^ 8X  d   Kp  VP#                  4       pV^ 8”  g   K‰  \
        P"                  ! WåV,          ,          4      V,          W¼&   K·  	  \
        P$                  ! \
        P&                  ! W´,
          4      4      R8  d   Tp MTpEK  	  \         P                  ! VP                  \
        P                  4      4      # )r   r  rl  r
   rY  rI  rm  NrZ  rý  rü   )r   r  r  rñ  rM  r  r]  r  r  r[  rq  r\  r^  rO   r_  r`  r/  rP  rF  ra  )r«   r¬   Úlevel_countÚsteprb  rö   rj   rc  rd  r›   re  rf  r  r­   rg  rh  s   &&              r   Ú_polar_angle_codebookrv  ]  sP  € àˆq„yÜ�xŠx˜¤B§J¡JÔ/Ð/à�t•)€KØ�„zØ”d—g‘g• Õ,ˆÜ—I’I˜k´·±Ô<¸tÕCÀdÈSÅjÕPˆ	Ü�xŠx˜	×(Ñ(¬¯©Ó4Ó5Ð5ä�;Š;�tœTŸW™W q�[¨4Õ/°¼b¿j¹jÔI€DÜ˜tÓ+€GÜ
�)Š)�GÓ
€CÜ—’˜;¬b¯j©jÔ9¸CÕ?À;ÕN€IÜ—	’	˜)¨$Ó/×6Ñ6´r·z±zÓB€Iä�3�ZˆÜ—X’X˜k¨A�o´R·Z±ZÔ@ˆ
Øˆ
�1‰ÜŸ™ 1�ˆ
�2‰Ø )¨C¨R .°9¸Rµ=Õ"@ÕAˆ
�1�RÐØ!Ÿ™Ó(ˆÜ�{Ö#ˆAØ !•OÔ#Ø¨1¥Ñ-°$ÀQÈÅUÕ:KÑ2KÕL‘à¨1¥Ñ-°$ÀAÈÅEÕ9JÑ2JÕK�Ø$�]ˆNØ×"Ñ" aÔ'ÙØ)×-Ñ-Ó/ˆLØ˜aÖÜ#%§6¢6¨.À½:Õ*EÓ#FÈÕ#U�Ó ñ $ô �6Š6”"—&’&˜Õ2Ó3Ó4°tÔ;Ø%ˆIÙØ!‹	ñ) ô, �8Š8�I×$Ñ$¤R§Z¡ZÓ0Ó1Ð1r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úlengthr0   r¬   r   r   )r   s   "r   r   r   ‡  s!   € ÷ &ñ &˜#ð & Sð &¨Sñ &r   c                óN   € V ^ 8X  g   V^ 8X  d   ^ # W,          ^,           ^ ,          # rý  r   )rx  r¬   s   &&r   Ú_packed_widthrz  ‡  s$   € Ø�„{�d˜a”iÙØ�M˜BÕ 2Õ%Ð%r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rV   rè   r¬   r0   r   r   )r   s   "r   r   r   �  s!   € ÷ $>ñ $>˜ð $>¨ð $>°ñ $>r   c           	     ó<  € V^ 8X  d9   \         P                  ! . V P                  RR O^ N5\         P                  R7      # V P	                  \         P                  4      p V P                  R,          p\        W!4      pV P                  RV34      p\        4       pVe†   V! V.RV3RV3RV3.W4P                  ^ ,          ^3\        ^ V4      ^^3VP                  ^ ,          V3.\         P                  .R7      ^ ,          pVP                  . V P                  RR OVN54      # \         P                  ! VP                  ^ ,          V3\         P                  R7      p\        V4       F�  pWq,          pV^ ,          p	V^ ,          p
VRV	3;;,          VRV3,          V
,          ,          uu&   W¡,           ^ ,
          pV^ 8”  g   K\  VRV	^,           3;;,          VRV3,          W,
          ,	          ,          uu&   K’  	  VP                  . V P                  RR OVN54      # )	r   Nr  rï   ÚLengthrð   ró   ºNNNrü   )
r   r  r   Úuint32r  rz  r@  rW   r  rO   )rV   r¬   rx  Úpacked_widthÚflatr  r&   Úidxr  Úword_idxÚoffsetÚspills   &&          r   Ú_pack_lowbitr†  �  sä  € Øˆq„yÜ�xŠxÐ/˜&Ÿ,™, s¨Ð+Ð/¨QÑ/´r·y±yÔAÐAà�]‰]œ2Ÿ9™9Ó%€FØ�\‰\˜"Õ€FÜ  Ó.€LØ�>‰>˜2˜v˜,Ó'€Dä Ó"€FØÒÙØ�6à˜�Ø˜6Ð"Ø Ð-ðð
 §
¡
¨1¥¨qÐ1Ü˜R Ó.°°1Ð5Ø ŸJ™J q�M¨<Ð8Ð9ÜŸ9™9˜+ô
ð õˆð �~‰~Ð@ §¡¨S¨bÐ 1Ð@°<Ñ@ÓAÐAä�XŠX�t—z‘z !•} lÐ3¼2¿9¹9ÔE€Fä�VŽ}ˆØ•Zˆ
Ø Õ#ˆØ˜b•ˆØˆq�(ˆ{×˜t A s F�|¨vÕ5Õ5ÓØ• Õ"ˆØ�1Ž9Ø�1�h •l�?×# t¨A¨s¨F¥|¸½Õ'EÕEÕ#ñ ð �>‰>Ð<˜FŸL™L¨¨"Ð-Ð<¨|Ñ<Ó=Ð=r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r&   rè   r¬   r0   rx  r   r   )r   s   "r   r   r   ´  s(   € ÷ $:ñ $:˜8ð $:¨3ð $:¸ð $:Àñ $:r   c           	     ó  € V^ 8X  d9   \         P                  ! . V P                  RR O^ N5\         P                  R7      # V P	                  \         P                  4      p V P                  RV P                  R,          34      p\        4       pVeŠ   V! V.RV3RV3RVP                  R,          3.W#P                  ^ ,          ^3R	VP                  ^ ,          V3.\         P                  .R7      ^ ,          pVP                  . V P                  RR OVN54      # \         P                  ! VP                  ^ ,          V3\         P                  R7      p^V,          ^,
          p\        V4       Fw  pWq,          pV^ ,          p	V^ ,          p
VRV	3,          V
,	          pW¡,           ^ ,
          pV^ 8”  d&   W³RV	^,           3,          W,
          ,          ,          pW¶,          VRV3&   Ky  	  VP                  . V P                  RR OVN54      # )
r   Nr  rï   r}  rð   ró   r~  rü   rý   )r   r  r   r  r  r@  rZ   rO   )r&   r¬   rx  r�  r  Úunpackedr­   r‚  r  rƒ  r„  rû  r…  s   &&&          r   Ú_unpack_lowbitrŠ  ´  sØ  € Øˆq„yÜ�xŠxÐ/˜&Ÿ,™, s¨Ð+Ð/¨QÑ/´r·y±yÔAÐAà�]‰]œ2Ÿ9™9Ó%€FØ�>‰>˜2˜vŸ|™|¨BÕ/Ð0Ó1€Dä"Ó$€FØÒÙØ�6à˜�Ø˜6Ð"Ø §
¡
¨2¥Ð/ðð
 Ÿ*™* Q�-¨Ð+Ø"Ø ŸJ™J q�M¨6Ð2Ð3ÜŸ9™9˜+ô
ð õˆð ×ÑÐ < &§,¡,¨s°Ð"3Ð <°VÑ <Ó=Ð=ä�xŠx˜Ÿ™ A�¨Ð/´r·y±yÔA€HØ��I˜�?€Dä�VŽ}ˆØ•Zˆ
Ø Õ#ˆØ˜b•ˆØ�Q˜�[Õ! VÕ+ˆØ• Õ"ˆØ�1Œ9Ø˜!˜X¨�\˜/Õ*¨t­|Õ<Õ<ˆEØ �<ˆ��C�Óñ ð ×ÑÐ8˜fŸl™l¨3¨BÐ/Ð8°Ñ8Ó9Ð9r   c           
     óž  € V f   V# Vf   V # \        V \        4      '       de   \        \        P                  ! V P                  VP                  .^R7      \        P                  ! V P
                  VP
                  .^R7      4      # \        V \        4      '       d¿   \        \        P                  ! V P                  VP                  .^R7      \        P                  ! V P                  VP                  .^R7      \        P                  ! V P                  VP                  .^R7      \        P                  ! V P                  VP                  .^R7      4      # \        V \        4      '       d£   \        \        P                  ! V P                  VP                  .^R7      \        ;QJ d6    . R \        V P                  VP                  4       4       F  NK  	  54      # ! R \        V P                  VP                  4       4       4      4      # \        V \        4      '       d±   \        \        P                  ! V P                  VP                  .^R7      \!        V P"                  VP"                  4      \        P                  ! V P                  VP                  .^R7      \        P                  ! V P                  VP                  .^R7      4      # \        V \$        4      '       dI   \%        \!        V P&                  VP&                  4      \!        V P(                  VP(                  4      4      # \+        R\-        V 4      : 24      h)Nrú   c              3  óX   "  € T F   w  r\         P                  ! W.^R7      x € K"  	  R# 5i)r   rú   N©r   rÊ  )r¡   Úlhs_idxÚrhs_idxs   &  r   r£   Ú _concat_state.<locals>.<genexpr>ï  s+   é € ð á(QÑ$�Gô —’ Ð1¸×:Ñ:Û(Qùs   ‚(*ú#Unsupported TurboQuant state type: )Ú
isinstancerê   r   rÊ  r%   r  r  r  r^   r  râ  r¦   Útupler+  r*  r  Ú_concat_stater)  rå  rç  rè  Ú	TypeErrorÚtype)ÚlhsÚrhss   &&r   r”  r”  Û  sc  € Ø
‚{Øˆ
Ø
‚{Øˆ
Ü�#Ô)×*Ò*Ü!Ü�NŠN˜CŸI™I s§y¡yÐ1¸Ô:Ü�NŠN˜CŸK™K¨¯©Ð5¸AÔ>ó
ð 	
ô �#Ô*×+Ò+Ü"Ü�NŠN˜CŸI™I s§y¡yÐ1¸Ô:Ü�NŠN˜CŸO™O¨S¯_©_Ð=ÀAÔFÜ�NŠN˜C×.Ñ.°×0BÑ0BÐCÈ!ÔLÜ�NŠN˜CŸM™M¨3¯=©=Ð9ÀÔBó	
ð 	
ô �#Ô+×,Ò,Ü#Ü�NŠN˜CŸI™I s§y¡yÐ1¸Ô:ßŒEñ ä(+¨C×,=Ñ,=¸s×?PÑ?PÔ(Qó�Eó
ð 	
àñ ä(+¨C×,=Ñ,=¸s×?PÑ?PÔ(Qóó ó
ð 	
ô �#Ô/×0Ò0Ü'Ü�NŠN˜CŸI™I s§y¡yÐ1¸Ô:Ü˜#Ÿ/™/¨3¯?©?Ó;Ü�NŠN˜C×.Ñ.°×0BÑ0BÐCÈ!ÔLÜ�NŠN˜CŸM™M¨3¯=©=Ð9ÀÔBó	
ð 	
ô �#Ô+×,Ò,Ü#Ü˜#Ÿ'™' 3§7¡7Ó+Ü˜#Ÿ(™( C§H¡HÓ-ó
ð 	
ô Ð9¼$¸s»)¹ÐGÓ
HÐHr   c               ó   € V ^8„  d   QhRR/# )r   Úendr0   r   )r   s   "r   r   r     s   € ÷ Kñ K˜Sñ Kr   c           	     óR  a€ V f   R # \        V \        4      '       d8   \        V P                  RR S13,          V P                  RR S1R3,          4      # \        V \        4      '       de   \	        V P                  RR S13,          V P
                  RR S1R3,          V P                  RR S13,          V P                  RR S1R3,          4      # \        V \        4      '       dk   \        V P                  RR S1R3,          \        ;QJ d%    . V3R lV P                   4       F  NK  	  54      # ! V3R lV P                   4       4      4      # \        V \        4      '       dc   \        V P                  RR S13,          \        V P                  S4      V P                  RR S13,          V P                  RR S1R3,          4      # \        V \        4      '       d5   \        \        V P                   S4      \        V P"                  S4      4      # \%        R\'        V 4      : 24      h)N.r~  c              3  ó>   <"  € T F  qR RS1R3,          x € K  	  R# 5i).Nr~  r   )r¡   r«   rš  s   & €r   r£   Ú_slice_state.<locals>.<genexpr>  s#   øé € ÐGÑ3F¨%˜˜T˜c˜T 1˜×%Ò%Ó3Fùó   ƒr‘  )r’  rê   r%   r  r  r  r^   r  râ  r¦   r“  r*  r  Ú_slice_stater)  rå  rç  rè  r•  r–  )ré   rš  s   &fr   rŸ  rŸ    sã  ø€ Ø‚}ÙÜ�%Ô+×,Ò,Ü! %§+¡+¨c°4°C°4¨iÕ"8¸%¿-¹-ÈÈTÈcÈTÐSTÈÕ:UÓVÐVÜ�%Ô,×-Ò-Ü"Ø�K‰K˜˜T˜c˜T˜	Õ"Ø×Ñ˜c 4 C 4¨˜lÕ+Ø× Ñ   d s d Õ+Ø�O‰O˜C  #  q˜LÕ)ó	
ð 	
ô �%Ô-×.Ò.Ü#Ø�K‰K˜˜T˜c˜T 1˜Õ%ßŒEÔG°5×3FÒ3FÓG�Eó
ð 	
àÔG°5×3FÒ3FÓGÓGó
ð 	
ô �%Ô1×2Ò2Ü'Ø�K‰K˜˜T˜c˜T˜	Õ"Ü˜×*Ñ*¨CÓ0Ø× Ñ   d s d Õ+Ø�O‰O˜C  #  q˜LÕ)ó	
ð 	
ô �%Ô-×.Ò.Ü#Ü˜Ÿ™ CÓ(Ü˜Ÿ™ SÓ)ó
ð 	
ô Ð9¼$¸u»+¹ÐIÓ
JÐJr   c               ó    € V ^8„  d   QhRRRR/# )r   r•   r0   rš  r   )r   s   "r   r   r   #  s   € ÷  Kñ  K Sð  K¨sñ  Kr   c           	     ó^  aa€ V f   R # \        V \        4      '       d8   \        V P                  RSS13,          V P                  RSS1R3,          4      # \        V \        4      '       de   \	        V P                  RSS13,          V P
                  RSS1R3,          V P                  RSS13,          V P                  RSS1R3,          4      # \        V \        4      '       dm   \        V P                  RSS1R3,          \        ;QJ d&    . VV3R lV P                   4       F  NK  	  54      # ! VV3R lV P                   4       4      4      # \        V \        4      '       dd   \        V P                  RSS13,          \        V P                  SS4      V P                  RSS13,          V P                  RSS1R3,          4      # \        V \        4      '       d7   \        \        V P                   SS4      \        V P"                  SS4      4      # \%        R\'        V 4      : 24      h)N.r~  c              3  ó>   <"  € T F  qR SS1R3,          x € K  	  R# 5i).r~  Nr   )r¡   r«   rš  r•   s   & €€r   r£   Ú%_slice_state_range.<locals>.<genexpr>5  s$   øé € ÐLÑ8K¨u˜˜U 3˜Y¨Ð)×*Ò*Ó8Kùrž  r‘  )r’  rê   r%   r  r  r  r^   r  râ  r¦   r“  r*  r  Ú_slice_state_ranger)  rå  rç  rè  r•  r–  )ré   r•   rš  s   &ffr   r¤  r¤  #  sõ  ù€ Ø‚}ÙÜ�%Ô+×,Ò,Ü!Ø�K‰K˜˜U 3˜Y˜Õ'Ø�M‰M˜#˜u S˜y¨!Ð+Õ,ó
ð 	
ô �%Ô,×-Ò-Ü"Ø�K‰K˜˜U 3˜Y˜Õ'Ø×Ñ˜c 5¨ 9¨aÐ/Õ0Ø× Ñ   e¨C i Õ0Ø�O‰O˜C  s ¨AÐ-Õ.ó	
ð 	
ô �%Ô-×.Ò.Ü#Ø�K‰K˜˜U 3˜Y¨Ð)Õ*ßŒEÕL¸×8KÒ8KÓL�Eó
ð 	
àÕL¸×8KÒ8KÓLÓLó
ð 	
ô �%Ô1×2Ò2Ü'Ø�K‰K˜˜U 3˜Y˜Õ'Ü˜u×0Ñ0°%¸Ó=Ø× Ñ   e¨C i Õ0Ø�O‰O˜C  s ¨AÐ-Õ.ó	
ð 	
ô �%Ô-×.Ò.Ü#Ü˜uŸy™y¨%°Ó5Ü˜uŸz™z¨5°#Ó6ó
ð 	
ô Ð9¼$¸u»+¹ÐIÓ
JÐJr   c               ó   € V ^8„  d   QhRR/# ©r   r   r0   r   )r   s   "r   r   r   F  s   € ÷ 	ñ 	˜Cñ 	r   c                óD  € V f   ^ # \        V \        4      '       d0   \        V P                  4      \        V P                  4      ,           # \        V \
        4      '       d   \        R V  4       4      # \        V \        P                  4      '       d   V P                  # ^ # )Nc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir�   )Ú_state_nbytes)r¡   Úparts   & r   r£   Ú _state_nbytes.<locals>.<genexpr>L  s   é € Ð9±5¨4”= ×&Ð&³5ùr¥   )
r’  rå  r©  rç  rè  r“  rP  r   r  Únbytes©ré   s   &r   r©  r©  F  sq   € Ø‚}ÙÜ�%Ô-×.Ò.Ü˜UŸY™YÓ'¬-¸¿
¹
Ó*CÕCÐCÜ�%œ×ÒÜÑ9±5Ó9Ó9Ð9Ü�%œŸ™×"Ò"Ø�|‰|ÐÙr   c               ó   € V ^8„  d   QhRR/# r¦  r   )r   s   "r   r   r   R  s   € ÷ Kñ K˜Cñ Kr   c                ó,  € V f   ^ # \        V \        4      '       d   \        V P                  4      # \        V \        4      '       d   V P
                  P                  ^,          # \        V \        4      '       d   V P
                  P                  ^,          # \        V \        4      '       d   V P                  P                  ^,          # \        V \        4      '       d   V P
                  P                  ^,          # \        R\        V 4      : 24      h)Nr‘  )r’  rå  Ú_state_lengthrç  rê   r%   r   r  râ  r¦   r  r•  r–  r­  s   &r   r°  r°  R  sÊ   € Ø‚}ÙÜ�%Ô-×.Ò.Ü˜UŸY™YÓ'Ð'Ü�%Ô+×,Ò,Ø�{‰{× Ñ  Õ#Ð#Ü�%Ô,×-Ò-Ø�{‰{× Ñ  Õ#Ð#Ü�%Ô-×.Ò.Ø�{‰{× Ñ  Õ#Ð#Ü�%Ô1×2Ò2Ø�{‰{× Ñ  Õ#Ð#Ü
Ð9¼$¸u»+¹ÐIÓ
JÐJr   c               ó   € V ^8„  d   QhRR/# )r   rx  r0   r   )r   s   "r   r   r   b  s   € ÷ 9Kñ 9K¨ñ 9Kr   c           
     ó†	  a€ \        V \        4      '       d¾   \        \        P                  ! . V P                  P
                  R ,          OSN5V P                  P                  R7      \        P                  ! . V P                  P
                  R ,          OSNV P                  P
                  R,          N5V P                  P                  R7      4      # \        V \        4      '       Edq   \        \        P                  ! . V P                  P
                  R ,          OSN5V P                  P                  R7      \        P                  ! . V P                  P
                  R ,          OSNV P                  P
                  R,          N5V P                  P                  R7      \        P                  ! . V P                  P
                  R ,          OSN5V P                  P                  R7      \        P                  ! . V P                  P
                  R ,          OSNV P                  P
                  R,          N5V P                  P                  R7      4      # \        V \        4      '       d¼   \        \        P                  ! . V P                  P
                  R ,          OSNV P                  P
                  R,          N5V P                  P                  R7      \        ;QJ d%    . V3R lV P                   4       F  NK  	  54      # ! V3R lV P                   4       4      4      # \        V \         4      '       Ed   \!        \        P                  ! . V P                  P
                  R ,          OSN5V P                  P                  R7      \#        V P$                  S4      \        P                  ! . V P                  P
                  R ,          OSN5V P                  P                  R7      \        P                  ! . V P                  P
                  R ,          OSNV P                  P
                  R,          N5V P                  P                  R7      4      # \        V \&        4      '       d5   \'        \#        V P(                  S4      \#        V P*                  S4      4      # \-        R\/        V 4      : 24      h)ºNr   Nr  c              3  óº   <"  € T FP  p\         P                  ! . VP                  R ,          OSNVP                  R,          N5VP                  R7      x € KR  	  R# 5i)r³  r  Nrü   )r   r  r   r  )r¡   r«   rx  s   & €r   r£   Ú'_allocate_state_like.<locals>.<genexpr>�  sS   øé € ð ñ
 1�Eô	 —’Ø?�e—k‘k "•oÐ? vÐ?¨u¯{©{¸2­Ñ?ØŸ+™+÷ñ ó 1ùs   ƒAAr‘  rü   )r’  rê   r   r  r%   r   r  r  r  r  r^   r  râ  r¦   r“  r*  r  Ú_allocate_state_liker)  rå  rç  rè  r•  r–  )ré   rx  s   &fr   r¶  r¶  b  sŸ  ø€ Ü�%Ô+×,Ò,Ü!Ü�HŠHÐ5�u—{‘{×(Ñ(¨Õ,Ð5¨fÑ5¸U¿[¹[×=NÑ=NÔOÜ�HŠHØK�%—-‘-×%Ñ% bÕ)ÐK¨6ÐK°5·=±=×3FÑ3FÀrÕ3JÑKØ—m‘m×)Ñ)ôó
ð 	
ô �%Ô,×-Ó-Ü"Ü�HŠHÐ5�u—{‘{×(Ñ(¨Õ,Ð5¨fÑ5¸U¿[¹[×=NÑ=NÔOÜ�HŠHØS�%×#Ñ#×)Ñ)¨"Õ-ÐS¨vÐS°u×7HÑ7H×7NÑ7NÈrÕ7RÑSØ×'Ñ'×-Ñ-ôô �HŠHØ9�%×&Ñ&×,Ñ,¨RÕ0Ð9°&Ñ9Ø×*Ñ*×0Ñ0ôô �HŠHØO�%—/‘/×'Ñ'¨Õ+ÐO¨VÐO°U·_±_×5JÑ5JÈ2Õ5NÑOØ—o‘o×+Ñ+ôó
ð 	
ô �%Ô-×.Ò.Ü#Ü�HŠHØG�%—+‘+×#Ñ# BÕ'ÐG¨ÐG°·±×1BÑ1BÀ2Õ1FÑGØ—k‘k×'Ñ'ô÷ ŒEô ð
 #×0Ò0ó�Eó
ð 	
ð
 ô ð
 #×0Ò0óó ó
ð 	
ô �%Ô1×2Ó2Ü'Ü�HŠHÐ5�u—{‘{×(Ñ(¨Õ,Ð5¨fÑ5¸U¿[¹[×=NÑ=NÔOÜ  ×!2Ñ!2°FÓ;Ü�HŠHØ9�%×&Ñ&×,Ñ,¨RÕ0Ð9°&Ñ9Ø×*Ñ*×0Ñ0ôô �HŠHØO�%—/‘/×'Ñ'¨Õ+ÐO¨VÐO°U·_±_×5JÑ5JÈ2Õ5NÑOØ—o‘o×+Ñ+ôó
ð 	
ô �%Ô-×.Ò.Ü#Ü  §¡¨FÓ3Ü  §¡¨VÓ4ó
ð 	
ô Ð9¼$¸u»+¹ÐIÓ
JÐJr   c               ó   € V ^8„  d   QhRR/# )r   r•   r0   r   )r   s   "r   r   r   ž  s   € ÷ Iñ I #ñ Ir   c                ó´  € Vf   R # V\        V4      ,           p\        V \        4      '       d<   VP                  V P                  RW#13&   VP                  V P                  RW#1R3&   R # \        V \
        4      '       du   VP                  V P                  RW#13&   VP                  V P                  RW#1R3&   VP                  V P                  RW#13&   VP                  V P                  RW#1R3&   R # \        V \        4      '       dQ   VP                  V P                  RW#1R3&   \        V P                  VP                  4       F  w  rEWTRW#1R3&   K  	  R # \        V \        4      '       dy   VP                  V P                  RW#13&   \        V P                  VP                  V4       VP                  V P                  RW#13&   VP                  V P                  RW#1R3&   R # \        V \         4      '       dE   \        V P"                  VP"                  V4       \        V P$                  VP$                  V4       R # \'        R\)        V 4      : 24      h)N.r~  r‘  )r°  r’  rê   r%   r  r  r  r^   r  râ  r¦   r+  r*  r  Ú_write_stater)  rå  rç  rè  r•  r–  )ÚdstÚsrcr•   rš  Ú	dst_levelÚ	src_levels   &&&   r   r¹  r¹  ž  sú  € Ø
‚{ÙØ
”- Ó$Õ
$€CÜ�#Ô)×*Ò*Ø$'§I¡Iˆ�	‰	�#�u�y�.Ñ!Ø),¯©ˆ�‰�C˜˜ AÐ%Ñ&ÙÜ�#Ô*×+Ò+Ø$'§I¡Iˆ�	‰	�#�u�y�.Ñ!Ø-0¯_©_ˆ�‰˜˜U˜Y¨Ð)Ñ*Ø-0×-?Ñ-?ˆ×Ñ˜3  	˜>Ñ*Ø+.¯=©=ˆ�‰�c˜5˜9 aÐ'Ñ(ÙÜ�#Ô+×,Ò,Ø'*§y¡yˆ�	‰	�#�u�y !Ð#Ñ$Ü$'¨×(9Ñ(9¸3×;LÑ;LÖ$MÑ ˆIØ+4�c˜5˜9 aÐ'Ó(ñ %NáÜ�#Ô/×0Ò0Ø$'§I¡Iˆ�	‰	�#�u�y�.Ñ!Ü�S—_‘_ c§o¡o°uÔ=Ø-0×-?Ñ-?ˆ×Ñ˜3  	˜>Ñ*Ø+.¯=©=ˆ�‰�c˜5˜9 aÐ'Ñ(ÙÜ�#Ô+×,Ò,Ü�S—W‘W˜cŸg™g uÔ-Ü�S—X‘X˜sŸx™x¨Ô/ÙÜ
Ð9¼$¸s»)¹ÐGÓ
HÐHr   c           	     óø  a€ V f   R# \        V \        4      '       d/   \        S! V P                  ^4      S! V P                  ^4      4      # \        V \        4      '       dS   \	        S! V P                  ^4      S! V P
                  ^4      S! V P                  ^4      S! V P                  ^4      4      # \        V \        4      '       df   \        S! V P                  ^4      \        ;QJ d%    . V3R lV P                   4       F  NK  	  54      # ! V3R lV P                   4       4      4      # \        V \        4      '       dV   \        S! V P                  ^4      \        V P                  S4      S! V P                  ^4      S! V P                  ^4      4      # \        V \        4      '       d5   \        \        V P                   S4      \        V P"                  S4      4      # \%        R\'        V 4      : 24      h)a-  Apply *fn* to every ``mx.array`` leaf in a TurboQuant state NamedTuple.

*fn* receives ``(array, ndim)`` where *ndim* is the number of dimensions
the array has (3 for norm-like ``(B,H,T)``, 4 for index-like
``(B,H,T,P)``).  The function must return an ``mx.array`` with the same
number of dimensions.
Nc              3  ó6   <"  € T F  pS! V^4      x € K  	  R# 5i©r±   Nr   )r¡   r«   Úfns   & €r   r£   Ú_map_state.<locals>.<genexpr>Ô  s   øé € Ð@Ñ,? 5‘"�U˜A—,�,Ó,?ùs   ƒr‘  )r’  rê   r%   r  r  r  r^   r  râ  r¦   r“  r*  r  Ú
_map_stater)  rå  rç  rè  r•  r–  )ré   rÁ  s   &fr   rÃ  rÃ  ¾  sž  ø€ ð ‚}ÙÜ�%Ô+×,Ò,Ü!¡" U§[¡[°!Ó"4±b¸¿¹ÈÓ6JÓKÐKÜ�%Ô,×-Ò-Ü"Ùˆu�{‰{˜AÓÙˆu× Ñ  !Ó$Ùˆu×#Ñ# QÓ'Ùˆu�‰ Ó"ó	
ð 	
ô �%Ô-×.Ò.Ü#Ùˆu�{‰{˜AÓßŒEÔ@¨E×,?Ò,?Ó@�Eó
ð 	
àÔ@¨E×,?Ò,?Ó@Ó@ó
ð 	
ô �%Ô1×2Ò2Ü'Ùˆu�{‰{˜AÓÜ�u×(Ñ(¨"Ó-Ùˆu×#Ñ# QÓ'Ùˆu�‰ Ó"ó	
ð 	
ô �%Ô-×.Ò.Ü#Ü�u—y‘y "Ó%Ü�u—z‘z 2Ó&ó
ð 	
ô Ð9¼$¸u»+¹ÐIÓ
JÐJr   c           
     ón  a€ V f   Vf   R# \        V \        4      '       dE   \        S! V P                  VP                  ^4      S! V P                  VP                  ^4      4      # \        V \        4      '       d   \	        S! V P                  VP                  ^4      S! V P
                  VP
                  ^4      S! V P                  VP                  ^4      S! V P                  VP                  ^4      4      # \        V \        4      '       d™   \        S! V P                  VP                  ^4      \        ;QJ d9    . V3R l\        V P                  VP                  4       4       F  NK  	  54      # ! V3R l\        V P                  VP                  4       4       4      4      # \        V \        4      '       d‚   \        S! V P                  VP                  ^4      \        V P                  VP                  S4      S! V P                  VP                  ^4      S! V P                  VP                  ^4      4      # \        V \         4      '       dK   \!        \        V P"                  VP"                  S4      \        V P$                  VP$                  S4      4      # \'        R\)        V 4      : 24      h)zAApply *fn(a1, a2, ndim)* element-wise across two matching states.Nc              3  ó:   <"  € T F  w  rS! W^4      x € K  	  R# 5irÀ  r   )r¡   Úl1Úl2rÁ  s   &  €r   r£   Ú"_map_state_pair.<locals>.<genexpr>÷  s   øé € ÐVÑ.U¡F B‘"�R˜Q—-�-Ó.Uùs   ƒr‘  )r’  rê   r%   r  r  r  r^   r  râ  r¦   r“  r+  r*  r  Ú_map_state_pairr)  rå  rç  rè  r•  r–  )Ús1Ús2rÁ  s   &&fr   rÉ  rÉ  å  s  ø€ à	‚z�b’jÙÜ�"Ô(×)Ò)Ü!Ùˆr�x‰x˜Ÿ™ 1Ó%¡r¨"¯*©*°b·j±jÀ!Ó'Dó
ð 	
ô �"Ô)×*Ò*Ü"Ùˆr�x‰x˜Ÿ™ 1Ó%Ùˆr�~‰~˜rŸ~™~¨qÓ1Ùˆr× Ñ  "×"3Ñ"3°QÓ7Ùˆr�|‰|˜RŸ\™\¨1Ó-ó	
ð 	
ô �"Ô*×+Ò+Ü#Ùˆr�x‰x˜Ÿ™ 1Ó%ßŒEÔV¬c°"×2BÑ2BÀB×DTÑDTÔ.UÓV�Eó
ð 	
àÔV¬c°"×2BÑ2BÀB×DTÑDTÔ.UÓVÓVó
ð 	
ô �"Ô.×/Ò/Ü'Ùˆr�x‰x˜Ÿ™ 1Ó%Ü˜BŸN™N¨B¯N©N¸BÓ?Ùˆr× Ñ  "×"3Ñ"3°QÓ7Ùˆr�|‰|˜RŸ\™\¨1Ó-ó	
ð 	
ô �"Ô*×+Ò+Ü#Ü˜BŸF™F B§F¡F¨BÓ/Ü˜BŸG™G R§W¡W¨bÓ1ó
ð 	
ô Ð9¼$¸r»(¹ÐFÓ
GÐGr   c               ó   € V ^8„  d   QhRR/# ©r   Úbatch_indicesrè   r   )r   s   "r   r   r     s   € ÷ ?ñ ?¨ñ ?r   c                ó$   a€ \        V V3R l4      # )z.Select batch elements from a TurboQuant state.c                ó   <€ V S,          # r�   r   )Úarÿ   rÎ  s   &&€r   Ú<lambda>Ú_filter_state.<locals>.<lambda>
  s
   ø€ ¨Q¨}Ö-=r   ©rÃ  )ré   rÎ  s   &fr   Ú_filter_staterÕ    s   ø€ ä�eÔ=Ó>Ð>r   c               ó    € V ^8„  d   QhRRRR/# )r   Úleftr0   Úrightr   )r   s   "r   r   r     s   € ÷ #ñ # 3ð #¨sñ #r   c                óJ   aa€ S^ 8X  d
   S^ 8X  d   V # VV3R lp\        W4      # )z(Pad along the token dimension (index 2).c                ó„   <€ V^8X  d   \         P                  ! V RRSS3.4      # \         P                  ! V RRSS3R.4      # )é   r  )r   r9  )rÑ  rÿ   r×  rØ  s   &&€€r   Ú_padÚ_pad_state_tokens.<locals>._pad  sD   ø€ Ø�1Œ9Ü—6’6˜!˜f f¨t°U¨mÐ<Ó=Ð=ä—6’6˜!˜f f¨t°U¨m¸VÐDÓEÐEr   rÔ  )ré   r×  rØ  rÜ  s   &ff r   Ú_pad_state_tokensrÞ    s(   ù€ àˆq„y�U˜a”ZØˆöFô �eÓ"Ð"r   c                ó   € \        WR 4      # )z;Concatenate two states along the batch dimension (index 0).c                ó0   € \         P                  ! W.4      # r�   r�  )Úa1Úa2rÿ   s   &&&r   rÒ  Ú%_concat_state_batch.<locals>.<lambda>  s   € ¼¿ºÈÀxÔ8Pr   )rÉ  )rÊ  rË  s   &&r   Ú_concat_state_batchrä    s   € ä˜2Ñ#PÓQÐQr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úusedr0   Úneededru  r   )r   s   "r   r   r      s!   € ÷ ñ ¨ð °cð Àñ r   c                óÂ   € V f   R # \        V 4      pWB8¼  d   V # W#,           ^,
          V,          V,          p\        W4      pV^ 8”  d   \        V\        W4      ^ 4       V# r�   )r°  r¶  r¹  rŸ  )ré   ræ  rç  ru  ÚcapacityÚnew_capacityÚgrowns   &&&&   r   Ú_reserve_state_capacityrì     s\   € Ø‚}ÙÜ˜UÓ#€HØÔØˆà•] QÕ&¨4Õ/°4Õ7€LÜ  Ó5€EØˆa„xÜ�UœL¨Ó5°qÔ9Ø€Lr   c                  ó¾   € ] tR tR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 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tR# ) Ú_TurboQuantMSECodeci.  c               ó$   € V ^8„  d   QhRRRRRR/# ©r   r_  r0   r¬   r  r   )r   s   "r   r   Ú _TurboQuantMSECodec.__annotate__/  s!   € ÷ ?ñ ?˜Cð ? sð ?°#ñ ?r   c                	óp  € Wn         W n        V^ 8„  ;'       d    W^,
          ,          ^ 8H  V n        V P                  '       d   \        W4      V n        MRV n        \        W4      V n        V^ 8”  d   V P                  P                  4       MV P                  V n        \        W4      V n
        V^ 8”  dX   V P                  P                  ^ ,          ^8”  d6   V P                  RR V P                  R,          ,           ^,          V n        R# \        P                  ! R\        P                  R7      V n        R# )r   NrZ  r  rü   rý  )r_  r¬   rì  r2  r_   r#  r8  Ú	transposerö  ri  r'   r   Ú
_midpointsr   r  r  ©Úselfr_  r¬   r  s   &&&&r   Ú__init__Ú_TurboQuantMSECodec.__init__/  sÖ   € ØŒØŒ	à˜Q‘w×9Ð9 C°­7¥O¸Ñ#9ˆŒØ�<�<ˆ<Ü)¨#Ó4ˆD�JàˆDŒJä(¨Ó3ˆŒØ7:¸Q´w˜$Ÿ-™-×1Ñ1Ô3ÀDÇMÁMˆŒÜ! #Ó,ˆŒØ�!Œ8˜Ÿ™×+Ñ+¨AÕ.°Ô2Ø#Ÿ}™}¨S¨bÐ1°D·M±MÀ"Õ4EÕEÈÕJˆDŽOä Ÿhšh t´2·:±:Ô>ˆDŽOr   c               ó    € V ^8„  d   QhRRRR/# ©r   r5  rè   r   r   )r   s   "r   r   rñ  A  s   € ÷ -ñ - ð -¨hñ -r   c                	ó�   € V P                   '       d   \        WP                  4      # \        P                  ! WP
                  4      # r�   )rì  r@  r_   r   r;  rö  ©rö  r5  s   &&r   Ú_rotate_forwardÚ#_TurboQuantMSECodec._rotate_forwardA  s-   € Ø�<�<ˆ<Ü §:¡:Ó.Ð.Ü�yŠy˜ŸO™OÓ,Ð,r   c               ó    € V ^8„  d   QhRRRR/# rú  r   )r   s   "r   r   rñ  F  s   € ÷ +ñ + ð +¨hñ +r   c                	ó�   € V P                   '       d   \        WP                  4      # \        P                  ! WP
                  4      # r�   )rì  r:  r_   r   r;  r8  rü  s   &&r   Ú_rotate_inverseÚ#_TurboQuantMSECodec._rotate_inverseF  s-   € Ø�<�<ˆ<Ü §:¡:Ó.Ð.Ü�yŠy˜ŸM™MÓ*Ð*r   c               ó    € V ^8„  d   QhRRRR/# )r   Úunit_vectorsrè   r   útuple[mx.array, mx.array]r   )r   s   "r   r   rñ  K  s   € ÷ ?ñ ?Ø$ð?à	"ñ?r   c                	ó  € V P                   ^ 8X  di   \        P                  ! . VP                  RR O^ N5\        P                  R7      \        P                  ! VP                  \        P
                  R7      3# V P                  V4      p\        P                  ! VP                  \        P                  R7      p\        V P                  P                  ^ ,          4       F<  pW2V P                  V,          8„  P                  \        P                  4      ,           pK>  	  \        W0P                   4      p\        P                  ! V P                  VP                  \        P                  4      ^ R7      pWPP                  V4      3# ©r   Nr  rú   rü   )r¬   r   r  r   r  r  rý  rO   rô  r  r†  rÉ  r'   Úint32r  )rö  r  rv  r  Úmr&   Úestimated_rotateds   &&     r   Ú_quantize_unit_with_estimateÚ0_TurboQuantMSECodec._quantize_unit_with_estimateK  s  € ð �9‰9˜Œ>ä—’Ð6˜<×-Ñ-¨c¨rÐ2Ð6°AÑ6¼b¿i¹iÔHÜ—’˜×+Ñ+´2·:±:Ô>ðð ð
 ×&Ñ& |Ó4ˆÜ—(’(˜7Ÿ=™=´·	±	Ô:ˆÜ�t—‘×,Ñ,¨QÕ/Ö0ˆAØ¨4¯?©?¸1Õ+=Ñ!=× EÑ EÄbÇiÁiÓ PÕPŠGñ 1ä˜g§y¡yÓ1ˆÜŸGšG D§M¡M°7·>±>Ä"Ç(Á(Ó3KÐRSÔTÐØ×+Ñ+Ð,=Ó>Ð>Ð>r   c               ó    € V ^8„  d   QhRRRR/# )r   r  rè   r   r   )r   s   "r   r   rñ  \  s   € ÷ 0ñ 0¨8ð 0¸ñ 0r   c                ó  € V P                   ^ 8X  d9   \        P                  ! . VP                  RR O^ N5\        P                  R7      # V P                  V4      p\        P                  ! VP                  \        P                  R7      p\        V P                  P                  ^ ,          4       F<  pW2V P                  V,          8„  P                  \        P                  4      ,           pK>  	  \        W0P                   4      # )uB   Quantize without computing the estimate (no wasted DÃ—D rotation).Nr  rü   )
r¬   r   r  r   r  rý  rO   rô  r  r†  )rö  r  rv  r  r	  s   &&   r   Ú_quantize_unitÚ"_TurboQuantMSECodec._quantize_unit\  s´   € à�9‰9˜Œ>Ü—8’8Ð9˜l×0Ñ0°°"Ð5Ð9°qÑ9ÄÇÁÔKÐKØ×&Ñ& |Ó4ˆÜ—(’(˜7Ÿ=™=´·	±	Ô:ˆÜ�t—‘×,Ñ,¨QÕ/Ö0ˆAØ¨4¯?©?¸1Õ+=Ñ!=× EÑ EÄbÇiÁiÓ PÕPŠGñ 1ä˜G§Y¡YÓ/Ð/r   c               ó    € V ^8„  d   QhRRRR/# )r   Úpacked_indicesrè   r   r   )r   s   "r   r   rñ  f  s   € ÷ -ñ -¨xð -¸Hñ -r   c                	óŠ  € V P                   ^ 8X  dC   \        P                  ! . VP                  RR OV P                  N5\        P
                  R7      # \        WP                   V P                  4      P                  \        P                  4      p\        P                  ! V P                  V^ R7      pV P                  V4      # r  )r¬   r   r  r   r_  r  rŠ  r  r  rÉ  r'   r  )rö  r  r  rv  s   &&  r   Ú_dequantize_unitÚ$_TurboQuantMSECodec._dequantize_unitf  sˆ   € Ø�9‰9˜Œ>Ü—8’8ÐB˜n×2Ñ2°3°BÐ7ÐB¸¿¹ÑBÌ"Ï*É*ÔUÐUä  ·±¸D¿H¹HÓE×LÑLÌRÏXÉXÓVˆÜ—'’'˜$Ÿ-™-¨°qÔ9ˆØ×#Ñ# GÓ,Ð,r   c               ó    € V ^8„  d   QhRRRR/# )r   r  rè   r   rê   r   )r   s   "r   r   rñ  n  s   € ÷ D
ñ D
 ð D
Ð-?ñ D
r   c           	     	óH  € VP                   R,          ^8X  Ed¥   V P                  ^ 8”  Ed“   V P                  '       Ed€   V P                  pVP	                  RV4      P                  \        P                  4      pVP                   ^ ,          p\        P                  P                  VRR7      pV\        P                  ! VR,          \        4      ,          pV P                  V4      pW P                  ,          ^,           ^ ,          p\        V P                  4      p	V	ež   V	! WpP                  .RV3RV3.W$,          ^^3V^^3WH3.\        P                  .R7      ^ ,          p
VP                   RR p\!        VP                  \        P"                  4      P	                  V4      V
P                  ! . VOVN5!  4      # VP                   R,          ^8X  Ed­   V P                  ^ 8”  Ed›   V P                  '       Egˆ   \%        V P                  RR7      p	V	Eel   V P                  pV P                  '       d   \'        V4      MTpVP	                  RV4      pVP                   ^ ,          pV^,           ^ ,          pW P                  ,          ^,           ^ ,          pV P                  '       d   V P(                  MV P*                  pRV3RV3RV3.pV P                  '       d   VR	V3R
V^,           ^ ,          3.,          pV	! W>V P                  .VW$,          ^^3V^^3V3WH3.\        P"                  \        P                  .R7      w  rZVP                   RR p\!        VP	                  V4      V
P                  ! . VOVN5!  4      # VP                  \        P                  4      p\        P                  P                  VRR7      pV\        P                  ! VR,          \        4      ,          p\!        VP                  \        P"                  4      V P-                  V4      4      # )r   rú   Nrí   rð   ró   F©rì  rî   Ú	DimPaddedró  r?  rü   ©.N)r   r¬   rì  r_  r@  r  r   r  r  ÚnormÚmaximumÚ_EPSrý  ry  rô  r  rê   Úfloat16r�  r+  r_   r8  r  )rö  r  r  r�  ÚBHr%   Úunitrv  r€  r  r&   Úorigr=  r	  Ú	rot_inputrõ   Ú
orig_shapeÚvectors_f32r  s   &&                 r   ÚquantizeÚ_TurboQuantMSECodec.quantizen  sa  € à�=‰=˜Õ Õ! d§i¡i°!¥m¸¿¿¹Ø—‘ˆAØ—?‘? 2 qÓ)×0Ñ0´·±Ó<ˆDØ—‘˜A•ˆBÜ—I‘I—N‘N 4¨b�NÓ1ˆEØœ"Ÿ*š* U¨9Õ%5´tÓ<Õ<ˆDØ×*Ñ*¨4Ó0ˆGà§	¡	�M¨BÕ.°2Õ5ˆLÜ1°$·)±)Ó<ˆFØÒ!ÙØ#§_¡_Ð5Ø$ a˜j¨=¸,Ð*GÐHØ�& ! Q˜Ø!" A q 	Ø$&Ð#5Ð"6Ü#%§9¡9 +ôð õ�ð —}‘} S bÐ)�Ü)Ø—L‘L¤§¡Ó,×4Ñ4°TÓ:Ø—N’NÐ7 DÐ7¨,Ó7óð ð �=‰=˜Õ Õ! d§i¡i°!¥m¸D¿L¿L¹LÜ/°·	±	À5ÔIˆFØÓ!Ø—H‘H�Ø15··°œ?¨1Ô-À1�Ø—‘ r¨1Ó-�Ø—Z‘Z •]�Ø!" R¥¨B¥�Ø !§I¡I¥°Õ 2°rÕ9�Ø*.¯,¯,¨,˜DŸJšJ¸D¿M¹M�	à˜A�JØ" MÐ2Ø" LÐ1ð�ð
 —<—<�<ØØ$ hÐ/Ø,¨x¸"­}ÀÕ.CÐDð!õ �Hñ !'Ø ¨T¯_©_Ð=Ø%Ø�& ! Q˜Ø!" A q 	Ø$& 5¨2Ð*<Ð"=Ü#%§:¡:¬r¯y©yÐ"9ô!‘�ð %Ÿ]™]¨3¨BÐ/�
Ü)Ø—M‘M *Ó-Ø—N’NÐ= JÐ=°Ó=óð ð
 —n‘n¤R§Z¡ZÓ0ˆÜ—	‘	—‘˜{°�Ó4ˆØ"¤R§Z¢Z°°iÕ0@Ä$Ó%GÕGˆÜ!Ø�L‰LœŸ™Ó$Ø×Ñ Ó-ó
ð 	
r   c               ó    € V ^8„  d   QhRRRR/# )r   ré   rê   r   rè   r   )r   s   "r   r   rñ  ´  s   € ÷ Pñ PÐ 2ð P°xñ Pr   c                	óž   € V P                  VP                  4      pVP                  R,          P                  VP                  4      V,          # ).r  )r  r  r%   r  r  )rö  ré   r  s   && r   Ú
dequantizeÚ_TurboQuantMSECodec.dequantize´  s;   € Ø×,Ñ,¨U¯]©]Ó;ˆØ�{‰{˜9Õ%×,Ñ,¨\×-?Ñ-?Ó@À<ÕOÐOr   c               ó    € V ^8„  d   QhRRRR/# )r   r-  rè   r   r   )r   s   "r   r   rñ  ¸  s   € ÷ -ñ - xð -°Hñ -r   c                	ó$   € V P                  V4      # r�   )rý  )rö  r-  s   &&r   Úprepare_queriesÚ#_TurboQuantMSECodec.prepare_queries¸  s   € Ø×#Ñ# GÓ,Ð,r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úprepared_queriesrè   ré   rê   r   r   )r   s   "r   r   rñ  »  s)   € ÷ Jñ JØ (ðJØ1CðJà	ñJr   c           	     	óž  € VP                   R,          ^8X  d   \        VP                  VP                   ^ ,          VP                   ^,          VP                   ^,          VP                   R,          4      VV P                  V P                  4      pVe   V# \        VP                  V P                  V P                  4      P                  \        P                  4      p\        P                  ! V P                  V^ R7      p\        P                  ! RW4      pWbP                  P                  \        P                  4      R,          ,          # )r   rú   úbhmld,bhtd->bhmltr?  rü   ©r~  r~  NNr~  )r   r  r@  r¬   r'   rŠ  r  r_  r  r   r  rÉ  Úeinsumr%   r  )rö  r0  ré   Úfast_scoresr  rv  Údotss   &&&    r   Úscore_preparedÚ"_TurboQuantMSECodec.score_prepared»  sû   € ð ×!Ñ! "Õ%¨Ô*Ü*Ø ×(Ñ(Ø$×*Ñ*¨1Õ-Ø$×*Ñ*¨1Õ-Ø$×*Ñ*¨1Õ-Ø$×*Ñ*¨2Õ.ó	ð Ø—	‘	Ø—‘ó
ˆKð Ò&Ø"Ð"ä  §¡°·	±	¸4¿8¹8ÓD×KÑKÌBÏHÉHÓUˆÜ—'’'˜$Ÿ-™-¨°qÔ9ˆÜ�yŠyÐ,Ð.>ÓHˆØ—k‘k×(Ñ(¬¯©Ó4Ð5HÕIÕIÐIr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r-  rè   ré   rê   r   r   )r   s   "r   r   rñ  Ò  s'   € ÷ Iñ I˜Xð IÐ.@ð IÀXñ Ir   c                	óD   € V P                  V P                  V4      V4      # r�   ©r7  r-  ©rö  r-  ré   s   &&&r   ÚscoreÚ_TurboQuantMSECodec.scoreÒ  ó    € Ø×"Ñ" 4×#7Ñ#7¸Ó#@À%ÓHÐHr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rj   rè   ré   rê   r   r   )r   s   "r   r   rñ  Õ  s"   € ÷ 2ñ 2 Hð 2Ð5Gð 2ÈHñ 2r   c                	ó&  € VP                   R,          ^8X  d?   \        VVV P                  V P                  V P                  V P
                  4      pVe   V# \        VP                  V P                  V P                  4      P                  \        P                  4      p\        P                  ! V P                  V^ R7      p\        P                  ! RVVP                  P                  \        P                  4      V4      pV P!                  V4      # )r   rú   zbhmlt,bht,bhtd->bhmldr?  )r   rC  r¬   r'   r8  r_   rŠ  r  r_  r  r   r  rÉ  r4  r%   r  r  )rö  rj   ré   Úfast_outputr  rv  r7  s   &&&    r   Úweighted_sumÚ _TurboQuantMSECodec.weighted_sumÕ  sÌ   € Ø�=‰=˜Õ Ô!Ü1ØØØ—	‘	Ø—‘Ø—‘Ø—
‘
óˆKð Ò&Ø"Ð"ä  §¡°·	±	¸4¿8¹8ÓD×KÑKÌBÏHÉHÓUˆÜ—'’'˜$Ÿ-™-¨°qÔ9ˆÜ—y’yØ#ØØ�K‰K×ÑœrŸz™zÓ*Øó	
ˆð ×#Ñ# LÓ1Ð1r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rà   rè   ré   rê   r   r   )r   s   "r   r   rñ  ì  s)   € ÷ Eñ EØðEØ'9ðEà	ñEr   c                	óÎ   € \        VVV P                  V P                  V P                  V P                  4      pVe   V# V P                  \        P                  ! VRR7      V4      # )Nrú   rü   )rH  r¬   r'   r8  r_   rC  r   Úsoftmax)rö  rà   ré   rB  s   &&& r   Úweighted_sum_from_scoresÚ,_TurboQuantMSECodec.weighted_sum_from_scoresì  s\   € ô :ØØØ�I‰IØ�M‰MØ�M‰MØ�J‰Jó
ˆð Ò"ØÐØ× Ñ ¤§¢¨F¸Ô!<¸eÓDÐDr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rà   rè   ré   rê   r   ú#tuple[mx.array, mx.array, mx.array]r   )r   s   "r   r   rñ  û  s$   € ÷ )ñ )Øð)Ø'9ð)à	,ñ)r   c           	     	ó¤  € \         P                  ! VRR7      pVP                  ^8X  dÙ   VP                  R,          ^8X  dÁ   VP	                  VP                  ^ ,          VP                  ^,          VP                  ^,          4      p\        VVV P                  V P                  V P                  VV P                  4      pVe>   \         P                  ! \         P                  ! WR,          ,
          4      RR7      pWVV3# \         P                  ! WR,          ,
          4      pV P                  Wr4      p\         P                  ! VRR7      pW†V3# )rn   rú   rü   r?  r  )r   rF  rÿ   r   r@  rK  r¬   r'   r8  r_   rP  rO  rC  )	rö  rà   ré   rá   Úmax_scores_2drB  Údenomrj   rB  s	   &&&      r   Úweighted_sum_stats_from_scoresÚ2_TurboQuantMSECodec.weighted_sum_stats_from_scoresû  s  € ô —V’V˜F¨Ô,ˆ
ð
 �;‰;˜!Ô §¡¨RÕ 0°AÔ 5Ø&×.Ñ.Ø× Ñ  Õ#Ø× Ñ  Õ#Ø× Ñ  Õ#óˆMô
 BØØØ—	‘	Ø—‘Ø—‘ØØ—
‘
óˆKð Ò&ÜŸšœrŸvšv f¸)Õ/DÕ&DÓEÈBÔO�Ø"¨:Ð5Ð5ä—&’&˜¨YÕ"7Õ7Ó8ˆØ×"Ñ" 7Ó2ˆÜ—’�w RÔ(ˆØ˜jÐ(Ð(r   )rô  r¬   r'   r_  r8  rö  r_   rì  N)rÚ  rÛ  rÜ  rÝ  r÷  rý  r  r  r  r  r%  r)  r-  r7  r=  rC  rH  rO  rß  r   r   r   rî  rî  .  sS   † õ?õ$-õ
+õ
?õ"0õ-õD
õLPõ-õJõ.Iõ2õ.E÷)ñ )r   rî  c                  ó^   € ] tR tR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t
R# )Ú_PolarQuantUnitCodeci  c               ó$   € V ^8„  d   QhRRRRRR/# rð  r   )r   s   "r   r   Ú!_PolarQuantUnitCodec.__annotate__  s&   € ÷ Wñ W˜Cð W sð W°#ñ Wr   c                	ó  € \        V4      '       g   \        R V R24      hWn        W n        \	        W4      V n        \        V P
                  4      V n        \        W4      V n	        V^ 8”  d   V P                  P                  4       MV P                  V n        \        ;QJ d)    . R \        V P
                  ^R7       4       F  NK  	  5M"! R \        V P
                  ^R7       4       4      V n        \        ;QJ d    . R V P                   4       F  NK  	  5M! R V P                   4       4      V n        \        ;QJ d%    . R V P                   4       F  NK  	  5V n        R# ! R V P                   4       4      V n        R# )z2PolarQuant requires a power-of-two dimension, got rî  c              3  ó<   "  € T F  w  r\        W4      x € K  	  R # 5ir�   )rv  )r¡   r«   rŽ   s   &  r   r£   Ú0_PolarQuantUnitCodec.__init__.<locals>.<genexpr>(  s"   é € ð %
á%HÑ!�ô " %×4Ð4Û%Hùs   ‚r”   c              3  óN   "  € T F  p\         P                  ! V4      x € K  	  R # 5ir�   )r   Úcos©r¡   r'   s   & r   r£   rW  ,  ó   é € ÐVÑAU°X¤§¢ x× 0Ð 0ÓAUùó   ‚#%c              3  óN   "  € T F  p\         P                  ! V4      x € K  	  R # 5ir�   )r   ro  rZ  s   & r   r£   rW  -  r[  r\  N)rþ  rï  r_  r¬   r  rŽ   r©   r,  r#  r8  ró  rö  r“  rª   Úangle_codebooksr  r   rõ  s   &&&&r   r÷  Ú_PolarQuantUnitCodec.__init__  s  € Ü ×$Ò$ÜØDÀSÀEÈÐKóð ð ŒØŒ	Ü+¨CÓ6ˆŒÜ˜$Ÿ/™/Ó*ˆŒÜ(¨Ó3ˆŒØ7:¸Q´w˜$Ÿ-™-×1Ñ1Ô3ÀDÇMÁMˆŒß$œuñ %
ä%.¨t¯©ÀaÕ%Hó%
Ÿu™uñ %
ä%.¨t¯©ÀaÕ%Hó%
ó  
ˆÔ÷  œ%ÑVÀ×AUÒAUÓVŸ%™%ÑVÀ×AUÒAUÓVÓVˆŒßœ%ÑVÀ×AUÒAUÓVŸ%ˆŽ˜%ÑVÀ×AUÒAUÓVÓVˆŽr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úanglesrè   r«   r0   r   r   )r   s   "r   r   rT  /  s!   € ÷ ;ñ ; hð ;°sð ;¸xñ ;r   c                	ó\  € V P                   V^,
          ,          p\        P                  ! VR,          V,
          4      pV^8X  d4   \        P                  ! VR\        P
                  ,          V,
          4      p\        P                  ! VRR7      P                  \        P                  4      # )rn   rl  rú   r  rü   )	r^  r   ra  Úminimumrñ  rM  Úargminr  r  )rö  ra  r«   r'   Údiffss   &&&  r   Ú_quantize_levelÚ$_PolarQuantUnitCodec._quantize_level/  sr   € Ø×'Ñ'¨°­	Õ2ˆÜ—’�v˜iÕ(¨8Õ3Ó4ˆØ�AŒ:Ü—J’J˜u s¬T¯W©W¥}¸Õ&=Ó>ˆEÜ�yŠy˜ RÔ(×/Ñ/´·	±	Ó:Ð:r   c               ó    € V ^8„  d   QhRRRR/# ©r   ré   râ  r   rè   r   )r   s   "r   r   rT  6  s   € ÷ ñ Ð0Dð Èñ r   c                	ó¶  € VP                   P                  \        P                  4      p\	        \        V P                  4      \        VP                  4      \        V P                  4      \        V P                  4      4       FÑ  w  r4rVVP                  R,          p\        WCV4      P                  \        P                  4      p\        P                  ! WX^ R7      p	\        P                  ! Wh^ R7      p
\        P                  ! W),          W*,          .RR7      P                  . VP                  RR OVP                  R,          ^,          N54      pKÓ  	  V# )rn   rú   Nrü   )r¦   r  r   r  r+  ÚreversedrŽ   r*  r  r   r   rŠ  r  rÉ  Ústackr@  )rö  ré   r¦   r¬   Úindices_packedr-  r.  Úangle_countr  ÚcosinesÚsiness   &&         r   Ú_dequantize_preconditionedÚ/_PolarQuantUnitCodec._dequantize_preconditioned6  sú   € Ø—‘×"Ñ"¤2§:¡:Ó.ˆÜ:=Ü�T—_‘_Ó%Ü�U×(Ñ(Ó)Ü�T—_‘_Ó%Ü�T—_‘_Ó%ö	;
Ñ6ˆD )ð  Ÿ+™+ b�/ˆKÜ$ ^¸;ÓG×NÑNÌrÏxÉxÓXˆGÜ—g’g˜i°qÔ9ˆGÜ—G’G˜I°QÔ7ˆEÜ—H’H˜e�o¨u­}Ð=ÀBÔG×OÑOØ8�%—+‘+˜c˜rÐ"Ð8 E§K¡K°¥O°aÕ$7Ñ8óŠEñ;
ð ˆr   c               ó    € V ^8„  d   QhRRRR/# )r   r  rè   r   z%tuple[TurboQuantPolarState, mx.array]r   )r   s   "r   r   rT  G  s   € ÷ "ñ "Ø$ð"à	.ñ"r   c                	ó  € \         P                  ! WP                  4      pTp. p\        V P                  ^R7       Fñ  w  rgVP                  . VP                  RR OVP                  R,          ^,          N^N54      p\         P                  ! VR,          VR,          4      p	V^8X  d8   \         P                  ! V	^ 8  V	R\        P                  ,          ,           V	4      p	V P                  W–4      p
VP                  \        W§4      4       \         P                  P                  VRR7      pKó  	  \!        VP#                  V4      \%        V4      4      pV P'                  V4      p\         P                  ! WÀP(                  4      pW½3# )rn   r”   Nrl  rú   rü   ).rn   ).r   )r   r;  rö  rª   rŽ   r@  r   Úarctan2Úwhererñ  rM  rf  rŠ   r†  r  r  râ  r  r“  rq  r8  )rö  r  Ústorage_dtypeÚpreconditionedr¦   Úpacked_levelsr«   r¬   Úpairsra  r  ré   Úapprox_preconditionedÚapprox_units   &&&           r   Úquantize_unit_with_estimateÚ0_PolarQuantUnitCodec.quantize_unit_with_estimateG  s7  € ô Ÿš <·±ÓAˆØˆØˆÜ$ T§_¡_¸A×>‰KˆEØ—M‘MÐ"N E§K¡K°°Ð$4Ð"N°e·k±kÀ"µoÈÕ6JÐ"NÈAÑ"NÓOˆEÜ—Z’Z  f¥¨u°V­}Ó=ˆFØ˜ŒzÜŸš &¨1¡*¨f°s¼T¿W¹Wµ}Õ.DÀfÓM�Ø×*Ñ*¨6Ó9ˆGØ× Ñ ¤¨gÓ!<Ô=Ü—I‘I—N‘N 5¨r�NÓ2ŠEñ ?ô %Ø�L‰L˜Ó'Ü�-Ó ó
ˆð !%× ?Ñ ?ÀÓ FÐÜ—i’iÐ 5·}±}ÓEˆØÐ!Ð!r   c               ó    € V ^8„  d   QhRRRR/# ri  r   )r   s   "r   r   rT  ^  s   € ÷ Pñ PÐ%9ð P¸hñ Pr   c                	ób   € \         P                  ! V P                  V4      V P                  4      # r�   )r   r;  rq  r8  )rö  ré   s   &&r   Údequantize_unitÚ$_PolarQuantUnitCodec.dequantize_unit^  s"   € Ü�yŠy˜×8Ñ8¸Ó?ÀÇÁÓOÐOr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r0  rè   ré   râ  r%   r   r   )r   s   "r   r   rT  a  s2   € ÷ Dñ DØ (ðDØ1EðDØNVðDà	ñDr   c                	ó’  € VP                   R,          ^8X  dÝ   \        VP                  VP                   ^ ,          VP                   ^,          VP                   ^,          VP                   R,          4      \        VV\        P
                  ! V4      \        P                  ! . VP                   O^ N5\        P                  R7      4      V P                  V P                  V P                  4      pVe   V# V P                  V4      p\        P                  ! RW4      pWcP                  \        P                  4      R,          ,          # )r   r  r2  r?  rü   r3  )r   r0  r@  r  r   Ú
zeros_liker  r  rŽ   r  r   rq  r4  r  r  )rö  r0  ré   r%   r5  r{  r6  s   &&&&   r   r7  Ú#_PolarQuantUnitCodec.score_prepareda  s  € ð ×!Ñ! "Õ%¨Ô*Ü1Ø ×(Ñ(Ø$×*Ñ*¨1Õ-Ø$×*Ñ*¨1Õ-Ø$×*Ñ*¨1Õ-Ø$×*Ñ*¨2Õ.ó	ô )ØØÜ—M’M %Ó(Ü—H’HÐ.˜uŸ{™{Ð.¨AÑ.´b·i±iÔ@ó	ð —‘Ø—‘Ø—‘óˆKð" Ò&Ø"Ð"à $× ?Ñ ?ÀÓ FÐÜ�yŠyÐ,Ð.>ÓVˆØ—l‘l¤2§:¡:Ó.Ð/BÕCÕCÐCr   )	r^  r¬   r  r_  rŽ   r,  r8  rö  r   N)rÚ  rÛ  rÜ  rÝ  r÷  rf  rq  r}  r�  r7  rß  r   r   r   rR  rR    s)   † õWõ$;õõ""õ.P÷Dñ Dr   rR  c                  ó^   € ] tR tR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t
R# )Ú_TurboQuantPolarProdCodeci~  c               ó$   € V ^8„  d   QhRRRRRR/# rð  r   )r   s   "r   r   Ú&_TurboQuantPolarProdCodec.__annotate__  s&   € ÷ Dñ D˜Cð D sð D°#ñ Dr   c                	ó’  € Wn         W n        \        WV4      V n        \	        W^,           4      V n        V^ 8”  d   V P
                  P                  4       MV P
                  V n        V^ 8”  d9   \        P                  ! V P                  P                  V P                  .RR7      M%\        P                  ! R\        P                  R7      V n        V^ 8”  d3   \        P                  ! \        P                   ^,          4      V,          MRV n        \        P$                  ! V P"                  .\        P                  R7      V n        R# ©rn   rú   r  rm  Nrü   r  )r_  r¬   rR  Úpolar_codecrE  Ú
projectionró  Úprojection_tr   rÊ  rö  r  r  Úquery_transform_trñ  r;  rM  r`   r  Úscale_arrayrõ  s   &&&&r   r÷  Ú"_TurboQuantPolarProdCodec.__init__  sÛ   € ØŒØŒ	Ü/°¸4Ó@ˆÔÜ,¨S¸µ(Ó;ˆŒØ;>À¼7˜DŸO™O×5Ñ5Ô7ÈÏÉˆÔð �QŒwô �NŠN˜D×,Ñ,×7Ñ7¸×9JÑ9JÐKÐRTÕUä—’˜&¬¯
©
Ô3ð 	Ôð
 69¸1´W”T—Y’YœtŸw™w¨�{Ó+¨cÖ1À#ˆŒ
ÜŸ8š8 T§Z¡Z L¼¿
¹
ÔCˆÖr   c               ó    € V ^8„  d   QhRRRR/# )r   r  rè   r   r  r   )r   s   "r   r   rŠ  �  s   € ÷ 
ñ 
 ð 
Ð-Eñ 
r   c           	     	óÌ  € VP                  \        P                  4      p\        P                  P	                  VRR7      pV\        P
                  ! VR,          \        4      ,          pV P                  P                  VVP                  R7      w  rVWF,
          p\        P                  P	                  VRR7      p\        P                  ! WpP                  4      p	\        P                  ! V	^ 8¬  ^^ 4      P                  \        P                  4      p
\        VP                  \        P                  4      VVP                  \        P                  4      \!        V
^4      4      # )rn   rú   )rw  rü   r  )r  r   r  r  r  r  r  r�  r}  r  r;  r�  rv  r  r  r  r†  )rö  r  r$  r%   r  r)  r|  Úresidualr^   Ú	projectedr_   s   &&         r   r%  Ú"_TurboQuantPolarProdCodec.quantize�  s  € Ø—n‘n¤R§Z¡ZÓ0ˆÜ—	‘	—‘˜{°�Ó4ˆØ"¤R§Z¢Z°°iÕ0@Ä$Ó%GÕGˆà#'×#3Ñ#3×#OÑ#OØØ!Ÿ-™-ð $Pó $
Ñ ˆð  Õ-ˆÜŸ™Ÿ™¨°r˜Ó:ˆÜ—I’I˜h×(9Ñ(9Ó:ˆ	Ü—’˜ a™¨¨AÓ.×5Ñ5´b·i±iÓ@ˆä'Ø�L‰LœŸ™Ó$ØØ×!Ñ!¤"§*¡*Ó-Ü˜ Ó"ó	
ð 	
r   c               ó    € V ^8„  d   QhRRRR/# )r   ré   r  r   rè   r   )r   s   "r   r   rŠ  ¢  s   € ÷ 	Sñ 	SÐ 8ð 	S¸Xñ 	Sr   c                	ó.  € V P                   P                  VP                  4      p\        VP                  ^V P
                  4      P                  \        P                  4      pVR,          R,
          pV P                  VP                  R,          P                  \        P                  4      ,          \        P                  ! W@P                  4      ,          pVP                  R,          P                  \        P                  4      W%,           ,          # ©rn   rl  r.  r  )r�  r�  r)  rŠ  r  r_  r  r   r  r`   r^   r;  rŽ  r%   )rö  ré   Ú
polar_unitÚ	sign_bitsr_   Úqjl_units   &&    r   r)  Ú$_TurboQuantPolarProdCodec.dequantize¢  s½   € Ø×%Ñ%×5Ñ5°e×6GÑ6GÓHˆ
Ü" 5§?¡?°A°t·x±xÓ@×GÑGÌÏ
É
ÓSˆ	Ø˜C• #Õ%ˆà�J‰JØ×"Ñ" 9Õ-×4Ñ4´R·Z±ZÓ@õAä�iŠi˜Ÿ™Ó/õ0ð 	ð
 �{‰{˜9Õ%×,Ñ,¬R¯Z©ZÓ8¸JÕ<QÕRÐRr   c               ó    € V ^8„  d   QhRRRR/# ©r   r-  rè   r   r  r   )r   s   "r   r   rŠ  ­  s   € ÷ Jñ J xð JÐ4Mñ Jr   c                	óž   € \         P                  ! WP                  4      pVR RV P                  13,          VR V P                  R13,          3# r  )r   r;  r�  r_  )rö  r-  Útransformeds   && r   r-  Ú)_TurboQuantPolarProdCodec.prepare_queries­  sA   € Ü—i’i ×)?Ñ)?Ó@ˆØ˜3 
 $§(¡( 
˜?Õ+¨[¸¸d¿h¹h¹j¸Õ-IÐIÐIr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r0  r  ré   r  r   rè   r   )r   s   "r   r   rŠ  ±  s(   € ÷ >/ñ >/à3ð>/ð (ð>/ð 
ñ	>/r   c           
     	ó¨  € Vw  r4VP                   R,          ^8X  Ed
   \        VP                  VP                   ^ ,          VP                   ^,          VP                   ^,          VP                   R,          4      VP                  VP                   ^ ,          VP                   ^,          VP                   ^,          VP                   R,          4      VV P                  P                  V P                  P
                  V P                  P                  V P                  4      pVe   V# V P                  P                  VVP                  VP                  4      pVP                   R,          ^8X  dz   \        VP                  VP                   ^ ,          VP                   ^,          VP                   ^,          VP                   R,          4      VV P                  4      pVe	   Wg,           # \        VP                  ^V P                  4      P                  \         P"                  4      pVR,          R,
          p	V P$                  VP&                  P                  \         P"                  4      R,          ,          \         P(                  ! RVV	4      ,          p
VP                  P                  \         P"                  4      R,          pWkV
,          ,           # )r   rl  r.  r2  r?  rü   r3  )r   r5  r@  r�  rŽ   r  r   r‘  r7  r)  r%   r  rŠ  r  r_  r  r   r  r`   r^   r4  )rö  r0  ré   Úpolar_queriesÚproj_queriesr5  Úpolar_scoreÚfast_qjlrœ  r_   Ú	qjl_scorer%   s   &&&         r   r7  Ú(_TurboQuantPolarProdCodec.score_prepared±  sX  € ð
 '7Ñ#ˆØ×Ñ˜bÕ! QÕ&Ü2Ø×%Ñ%Ø!×'Ñ'¨Õ*Ø!×'Ñ'¨Õ*Ø!×'Ñ'¨Õ*Ø!×'Ñ'¨Õ+ó	ð ×$Ñ$Ø ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø ×&Ñ& rÕ*ó	ð Ø× Ñ ×+Ñ+Ø× Ñ ×+Ñ+Ø× Ñ ×+Ñ+Ø× Ñ ó#ˆKð& Ò&Ø"Ð"à×&Ñ&×5Ñ5ØØ×ÑØ�K‰Kó
ˆð ×Ñ˜bÕ! QÔ&Ü'Ø×$Ñ$Ø ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø ×&Ñ& rÕ*ó	ð Ø× Ñ ó	ˆHð Ò#Ø"Õ-Ð-ä" 5§?¡?°A°t·x±xÓ@×GÑGÌÏ
É
ÓSˆ	Ø˜C• #Õ%ˆà�J‰JØ×"Ñ"×)Ñ)¬"¯*©*Ó5Ð6IÕJõKä�iŠiØ#ØØóõð 	ð —‘×"Ñ"¤2§:¡:Ó.Ð/BÕCˆØ YÕ.Õ.Ð.r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r-  rè   ré   r  r   r   )r   s   "r   r   rŠ  ñ  s'   € ÷ Iñ I˜Xð IÐ.Fð IÈ8ñ Ir   c                	óD   € V P                  V P                  V4      V4      # r�   r;  r<  s   &&&r   r=  Ú_TurboQuantPolarProdCodec.scoreñ  r?  r   )r¬   r_  r�  rŽ  r�  r�  r`   r‘  N©rÚ  rÛ  rÜ  rÝ  r÷  r%  r)  r-  r7  r=  rß  r   r   r   rˆ  rˆ  ~  s+   † õDõ
õ*	SõJõ>/÷@Iñ Ir   rˆ  c                  ó^   € ] tR tR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t
R# )Ú_TurboQuantProdCodeciõ  c               ó$   € V ^8„  d   QhRRRRRR/# rð  r   )r   s   "r   r   Ú!_TurboQuantProdCodec.__annotate__ö  s&   € ÷ Gñ G˜Cð G sð G°#ñ Gr   c                	ó’  € Wn         W n        \        V\        V^,
          ^ 4      V4      V n        \        W^,           4      V n        V^ 8”  d   V P                  P                  4       MV P                  V n        V^ 8”  d9   \        P                  ! V P                  P                  V P                  .RR7      M%\        P                  ! R\        P                  R7      V n        V^ 8”  d3   \        P                   ! \        P"                  ^,          4      V,          MRV n        \        P&                  ! V P$                  .\        P                  R7      V n        V^ 8”  d=   \        P*                  ! V P                  V P                  P                  4      V n        R# \        P                  ! R\        P                  R7      V n        R# rŒ  )r_  r¬   rî  rF  Ú	mse_codecrE  rŽ  ró  r�  r   rÊ  rö  r  r  r�  rñ  r;  rM  r`   r  r‘  r;  Ú_combined_proj_trõ  s   &&&&r   r÷  Ú_TurboQuantProdCodec.__init__ö  s+  € ØŒØŒ	Ü,¨S´#°d¸QµhÀÓ2BÀDÓIˆŒÜ,¨S¸µ(Ó;ˆŒØ;>À¼7˜DŸO™O×5Ñ5Ô7ÈÏÉˆÔð �QŒwô �NŠN˜DŸN™N×5Ñ5°t×7HÑ7HÐIÐPRÕSä—’˜&¬¯
©
Ô3ð 	Ôð
 69¸1´W”T—Y’YœtŸw™w¨�{Ó+¨cÖ1À#ˆŒ
ÜŸ8š8 T§Z¡Z L¼¿
¹
ÔCˆÔð �Œ7Ü$&§I¢IØ—‘ §¡×!:Ñ!:ó%ˆDÖ!ô %'§H¢H¨V¼2¿:¹:Ô$FˆDÖ!r   c               ó    € V ^8„  d   QhRRRR/# )r   r  rè   r   r  r   )r   s   "r   r   r³    s   € ÷ K
ñ K
 ð K
Ð-@ñ K
r   c                	ó<  € V P                   P                  pV P                   P                  pVP                  R,          ^8X  Edý   V^ 8”  Edõ   ^ V,          ^ 8X  Edæ   \	        W#R7      pVEeÕ   V P
                  pV'       d   \        V4      MTpVP                  RV4      pVP                  ^ ,          pV^,           ^ ,          p	WR,          ^,           ^ ,          p
V^,           ^ ,          pV'       d   V P                   P                  MV P                   P                  pRV3RV	3RV
3RV3.pV'       d   VRV3RV^,           ^ ,          3.,          pV! VVV P                   P                  V P                   P                  V P                  .V^ ^V3RV3WŠ3V3W‹3.\        P                  \        P                  \        P                  \        P                  .R	7      w  rïppVP                  RR p\!        VP                  V4      VP                  ! . VOV
N5!  VP                  V4      VP                  ! . VOVN5!  4      # VP#                  \        P$                  4      p\        P&                  P)                  VRR
7      pV\        P*                  ! VR,          \,        4      ,          pV P                   P/                  V4      w  ppVV,
          p\        P&                  P)                  VRR
7      p\        P0                  ! VV P2                  4      p\        P4                  ! V^ 8¬  ^^ 4      P#                  \        P                  4      p\!        VP#                  \        P                  4      VVP#                  \        P                  4      \7        V^4      4      # )r   r  Nrí   rî   r  r  r  ró  ró   rú   r?  rü   rý   r  )rµ  r¬   rì  r   rŽ  r_  r+  r@  r_   r8  rô  r'   r¶  r   r  r  r  r  r  r  r  r  r  r  r;  r�  rv  r†  )rö  r  r  rì  r  r  r=  r�  r  r	  Úmse_packed_widthÚsign_packed_widthr"  rõ   r%   re   Ú	res_normsr_   r#  r$  r  r  Úmse_unitr•  r^   r–  s   &&                        r   r%  Ú_TurboQuantProdCodec.quantize  s  € Ø—>‘>×&Ñ&ˆØ—.‘.×(Ñ(ˆà�=‰=˜Õ Õ! h°¥l°r¸Hµ}ÈÕ7IÜ0°ÔKˆFØÓ!Ø—H‘H�ß18œ?¨1Ô-¸a�Ø—‘ r¨1Ó-�Ø—Z‘Z •]�Ø!" R¥¨B¥�Ø$%¥L°2Õ$5¸"Õ#<Ð Ø%&¨¥V°¥NÐ!ß4;˜DŸN™N×0Ò0ÀÇÁ×AXÑAX�	à˜A�JØ" MÐ2Ø%Ð'7Ð8Ø&Ð(9Ð:ð	�÷ ØØ$ hÐ/Ø,¨x¸"­}ÀÕ.CÐDð!õ �Hñ 7=àØ!ØŸ™×1Ñ1ØŸ™×/Ñ/Ø×-Ñ-ðð &Ø˜a ˜Ø *à˜ØÐ.Ø˜ØÐ/ð	#ô Ÿ
™
ÜŸ	™	ÜŸ
™
ÜŸ	™	ð	#ô#7Ñ3� 9¨eð0 %Ÿ]™]¨3¨BÐ/�
Ü*Ø—M‘M *Ó-Ø×&Ò&ÐE¨
ÐEÐ4DÓEØ×%Ñ% jÓ1Ø—M’MÐA :ÐAÐ/@ÓAó	ð ð —n‘n¤R§Z¡ZÓ0ˆÜ—	‘	—‘˜{°�Ó4ˆØ"¤R§Z¢Z°°iÕ0@Ä$Ó%GÕGˆà $§¡× KÑ KØó!
Ñˆ�Xð   (Õ*ˆÜŸ™Ÿ™¨°r˜Ó:ˆÜ—I’I˜h¨×(9Ñ(9Ó:ˆ	Ü—’˜ a™¨¨AÓ.×5Ñ5´b·i±iÓ@ˆä"Ø�L‰LœŸ™Ó$ØØ×!Ñ!¤"§*¡*Ó-Ü˜ Ó"ó	
ð 	
r   c               ó    € V ^8„  d   QhRRRR/# )r   ré   r  r   rè   r   )r   s   "r   r   r³  Y  s   € ÷ 	Qñ 	QÐ 3ð 	Q¸ñ 	Qr   c                	ó.  € V P                   P                  VP                  4      p\        VP                  ^V P
                  4      P                  \        P                  4      pVR,          R,
          pV P                  VP                  R,          P                  \        P                  4      ,          \        P                  ! W@P                  4      ,          pVP                  R,          P                  \        P                  4      W%,           ,          # rš  )rµ  r  r  rŠ  r  r_  r  r   r  r`   r^   r;  rŽ  r%   )rö  ré   r½  rœ  r_   r�  s   &&    r   r)  Ú_TurboQuantProdCodec.dequantizeY  s»   € Ø—>‘>×2Ñ2°5×3DÑ3DÓEˆÜ" 5§?¡?°A°t·x±xÓ@×GÑGÌÏ
É
ÓSˆ	Ø˜C• #Õ%ˆà�J‰JØ×"Ñ" 9Õ-×4Ñ4´R·Z±ZÓ@õAä�iŠi˜Ÿ™Ó/õ0ð 	ð
 �{‰{˜9Õ%×,Ñ,¬R¯Z©ZÓ8¸HÕ<OÕPÐPr   c               ó    € V ^8„  d   QhRRRR/# r   r   )r   s   "r   r   r³  d  s   € ÷ Jñ J xð JÐ4Mñ Jr   c                	óR  € V P                   P                  '       d?   V P                   P                  V4      p\        P                  ! WP
                  4      pW#3# \        P                  ! WP                  4      pVR RV P                  13,          VR V P                  R13,          3# r  )rµ  rì  rý  r   r;  r�  r�  r_  )rö  r-  r$   r]   r¢  s   &&   r   r-  Ú$_TurboQuantProdCodec.prepare_queriesd  s�   € Ø�>‰>×!×!Ð!Ø—N‘N×2Ñ2°7Ó;ˆEÜ—Y’Y˜w×(9Ñ(9Ó:ˆFØ�=Ð Ü—i’i ×)?Ñ)?Ó@ˆØ˜3 
 $§(¡( 
˜?Õ+¨[¸¸d¿h¹h¹j¸Õ-IÐIÐIr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r0  r  ré   r  r   rè   r   )r   s   "r   r   r³  l  s-   € ÷ H-ñ H-à3ðH-ð #ðH-ð 
ñ	H-r   c           
     	óÚ  € Vw  r4VP                   R,          ^8X  dõ   \        VP                  VP                   ^ ,          VP                   ^,          VP                   ^,          VP                   R,          4      VP                  VP                   ^ ,          VP                   ^,          VP                   ^,          VP                   R,          4      VV P                  P                  V P                  P
                  V P                  4      pVe   V# V P                  P                  ^ 8”  d<   V P                  P                  V\        VP                  VP                  4      4      pMŠ\        P                  ! VP                   ^ ,          VP                   ^,          VP                   ^,          VP                   ^,          VP                  P                   ^,          3\        P                  R7      pVP                   R,          ^8X  dz   \        VP                  VP                   ^ ,          VP                   ^,          VP                   ^,          VP                   R,          4      VV P                  4      pVe	   Wg,           # \        VP                   ^V P"                  4      P%                  \        P                  4      pVR,          R,
          p	V P&                  VP(                  P%                  \        P                  4      R,          ,          \        P*                  ! RVV	4      ,          p
VP                  P%                  \        P                  4      R,          pWkV
,          ,           # )r   r  rl  r.  r2  r?  rü   r3  )r   r  r@  rµ  r¬   r'   r‘  r7  rê   r%   r  r   r  r  r  rŠ  r  r_  r  r`   r^   r4  )rö  r0  ré   Úmse_queriesr§  r5  Ú	mse_scorer©  rœ  r_   rª  r%   s   &&&         r   r7  Ú#_TurboQuantProdCodec.score_preparedl  sÁ  € ð
 %5Ñ!ˆØ×Ñ˜bÕ! QÔ&Ü+Ø×#Ñ#Ø×%Ñ% aÕ(Ø×%Ñ% aÕ(Ø×%Ñ% aÕ(Ø×%Ñ% bÕ)ó	ð ×$Ñ$Ø ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø ×&Ñ& rÕ*ó	ð Ø—‘×#Ñ#Ø—‘×'Ñ'Ø× Ñ ó!ˆKð$ Ò&Ø"Ð"à�>‰>×Ñ Ô"ØŸ™×5Ñ5ØÜ" 5§;¡;°×0AÑ0AÓBó‰Iô
 Ÿšà ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø—K‘K×%Ñ% aÕ(ðô —j‘jô	ˆIð ×Ñ˜bÕ! QÔ&Ü'Ø×$Ñ$Ø ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø ×&Ñ& qÕ)Ø ×&Ñ& rÕ*ó	ð Ø× Ñ ó	ˆHð Ò#Ø Õ+Ð+ä" 5§?¡?°A°t·x±xÓ@×GÑGÌÏ
É
ÓSˆ	Ø˜C• #Õ%ˆà�J‰JØ×"Ñ"×)Ñ)¬"¯*©*Ó5Ð6IÕJõKä�iŠiØ#ØØóõð 	ð —‘×"Ñ"¤2§:¡:Ó.Ð/BÕCˆØ 9Õ,Õ,Ð,r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r-  rè   ré   r  r   r   )r   s   "r   r   r³  ¶  s'   € ÷ Iñ I˜Xð IÐ.Að IÀhñ Ir   c                	óD   € V P                  V P                  V4      V4      # r�   r;  r<  s   &&&r   r=  Ú_TurboQuantProdCodec.score¶  r?  r   )	r¶  r¬   r_  rµ  rŽ  r�  r�  r`   r‘  Nr¯  r   r   r   r±  r±  õ  s.   † õGõ,K
õZ	QõJõH-÷TIñ Ir   r±  c               ó$   € V ^8„  d   QhRRRRRR/# )r   Útensorrè   Úavg_bitsrê  r   ztuple[np.ndarray, np.ndarray]r   )r   s   "r   r   r   º  s$   € ÷ ñ ØðØ %ðà"ñr   c                óD  € \         P                  ! V4      p\         P                  ! V4      pW#8X  d   \        R 4      hV P                  R,          p\        \        W,
          V,          W2,
          ,          4      4      p\        ^\        V^,
          V4      4      p\        P                  ! \        P                  ! V P                  \        P                  4      4      RR7      p\        P                  ! \        P                   ! V4      4      p\        P"                  ! Wu) R P                  \        P$                  4      4      p\        P&                  ! V\(        R7      p	RW˜&   \        P*                  ! V	4      ^ ,          P                  \        P$                  4      p
W¨3# )z:Mixed-precision selection requires a fractional bit-width.rú   Nr  Frü   )r   rn   r   )rñ  ÚfloorÚceilrï  r   r0   rð  rF  r  r   Úmeanra  r  r  r  ÚargsortÚasarrayÚsortr  r  r   Únonzero)rÎ  rÏ  Ú
lower_bitsÚ
upper_bitsr_  Ú
high_countrà   ÚorderrÅ  Úlow_maskrÄ  s   &&         r   Ú_select_outlier_indicesrÝ  º  s  € ô —’˜HÓ%€JÜ—’˜8Ó$€JØÔÜÐUÓVÐVà
�,‰,�rÕ
€CÜ”U˜HÕ1°SÕ8¸JÕ<SÕTÓUÓV€JÜ�Qœ˜C !�G ZÓ0Ó1€Jä�WŠW”R—V’V˜FŸM™M¬"¯*©*Ó5Ó6¸YÔG€FÜ�JŠJ”r—z’z &Ó)Ó*€EÜ�wŠw�u˜[˜\Ð*×1Ñ1´"·(±(Ó;Ó<€HÜ�wŠw�s¤$Ô'€HØ€HÑÜ�jŠj˜Ó" 1Õ%×,Ñ,¬R¯X©XÓ6€GØÐÐr   c                  ó‚   € ] tR tR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 R ltR R ltRtR# )Ú_SplitCodeciÏ  c               ó(   € V ^8„  d   QhRRRRRRRR/# ©	r   rÎ  rè   r¬   rê  ÚmoderŸ   r  r0   r   )r   s   "r   r   Ú_SplitCodec.__annotate__Ð  s(   € ÷ $3ñ $3˜xð $3¨uð $3¸Cð $3Àsñ $3r   c                	ó   € W n         W0n        VP                  R,          V n        \        P
                  ! V4      V n        \        P                  ! V4      V n        \        W4      w  rV\        P                  ! V\        P                  R7      V n        \        P                  ! V\        P                  R7      V n        \        P                   ! WV.4      p\        P                  ! \        P"                  ! V4      \        P                  R7      V n        VR8X  d   \&        M\(        pV! \+        V4      V P                  V4      V n        V! \+        V4      V P                  V^a,           4      V n        VR8X  Ed~   \1        V P,                  \&        4      '       Ed]   VP                  R,          p	\+        V4      p
\+        V4      p\        P2                  ! V	^V
,          ^V,          ,           3\        P4                  R7      pV P,                  P6                  RRV
13,          WÀP                  RV
13&   V P,                  P6                  RV
R13,          WÀP                  V
^V
,          13&   V P.                  P6                  RRV13,          WÀP                  ^V
,          ^V
,          V,           13&   V P.                  P6                  RVR13,          WÀP                  ^V
,          V,           R13&   WÀn        R# RV n        R# )rn   r  Úprodr~  Nrü   )r¬   râ  r   r_  rñ  rÑ  rØ  rÒ  rÙ  rÝ  r   r  r  rÄ  rÅ  r  rÊ  rÔ  rÆ  r±  rî  r©   Ú	low_codecÚ
high_codecr’  r  r  r�  Úcombined_query_transform_t)rö  rÎ  r¬   râ  r  rÄ  rÅ  Úconcat_orderÚ	codec_clsr_  ÚdlÚdhÚcombineds   &&&&&        r   r÷  Ú_SplitCodec.__init__Ð  s'  € ØŒ	ØŒ	Ø—<‘< Õ#ˆŒÜŸ*š* TÓ*ˆŒÜŸ)š) D›/ˆŒÜ3°FÓAÑˆÜ—x’x ¬r¯x©xÔ8ˆŒÜŸš ´·±Ô:ˆŒä—~’~ wÐ&9Ó:ˆÜŸXšX¤b§j¢j°Ó&>ÄbÇhÁhÔOˆÔà,0°F¬NÕ(Ô@Sˆ	Ù"¤3 w£<°·±À$ÓGˆŒÙ#¤C¨£M°4·?±?ÀDÈ2ÅIÓNˆŒð �6�>œj¨¯©Ô9M×NÓNØ—,‘,˜rÕ"ˆCÜ�W“ˆBÜ�X“ˆBÜ—x’x  a¨"¥f¨q°2­v¥oÐ 6¼b¿j¹jÔIˆHØ*.¯.©.×*JÑ*JÈ1ÈcÈrÈcÈ6Õ*RˆH—\‘\ 3 B 3Ð&Ñ'Ø26·.±.×2RÑ2RØ�2‘3�õ3ˆH—\‘\ 2¨¨B­ ;Ð.Ñ/ð —‘×1Ñ1°!°S°b°S°&Õ9ð —]‘] A¨¥F¨Q°­V°b­[Ð$8Ð8Ñ9ð 6:·_±_×5VÑ5VØ�2‘3�õ6ˆH—]‘] A¨¥F¨R¥K¡MÐ1Ñ2ð /7Ö+à.2ˆDÖ+r   c               ó    € V ^8„  d   QhRRRR/# )r   rÎ  rè   r   rå  r   )r   s   "r   r   rã  ö  s   € ÷ 
ñ 
˜xð 
Ð,@ñ 
r   c                	ó  € \         P                  ! WP                  RR7      p\         P                  ! WP                  RR7      p\	        V P
                  P                  V4      V P                  P                  V4      4      # ©rn   rú   rü   )r   rÉ  rÄ  rÅ  rå  ræ  r%  rç  )rö  rÎ  Ú
low_tensorÚhigh_tensors   &&  r   r%  Ú_SplitCodec.quantizeö  s[   € Ü—W’W˜V§\¡\¸Ô;ˆ
Ü—g’g˜f§m¡m¸"Ô=ˆÜ#Ø�N‰N×#Ñ# JÓ/Ø�O‰O×$Ñ$ [Ó1ó
ð 	
r   c               ó    € V ^8„  d   QhRRRR/# ©r   ré   rå  r   rè   r   )r   s   "r   r   rã  þ  s   € ÷ <ñ <Ð 4ð <¸ñ <r   c                	ó  € V P                   P                  VP                  4      pV P                  P                  VP                  4      p\
        P                  ! W#.RR7      p\
        P                  ! W@P                  RR7      # rñ  )	ræ  r)  rç  rç  rè  r   rÊ  rÉ  rÆ  )rö  ré   rò  ró  rÕ  s   &&   r   r)  Ú_SplitCodec.dequantizeþ  s\   € Ø—^‘^×.Ñ.¨u¯y©yÓ9ˆ
Ø—o‘o×0Ñ0°·±Ó<ˆÜ—’ Ð 9ÀÔCˆÜ�wŠw�v×1Ñ1¸Ô;Ð;r   c               ó   € V ^8„  d   QhRR/# )r   r-  rè   r   )r   s   "r   r   rã    s   € ÷ 
ñ 
 xñ 
r   c                	óö   € \         P                  ! WP                  RR7      p\         P                  ! WP                  RR7      pV P                  P                  V4      V P                  P                  V4      3# rñ  )r   rÉ  rÄ  rÅ  ræ  r-  rç  )rö  r-  rò  ró  s   &&  r   r-  Ú_SplitCodec.prepare_queries  sX   € Ü—W’W˜W§l¡l¸Ô<ˆ
Ü—g’g˜g§}¡}¸2Ô>ˆà�N‰N×*Ñ*¨:Ó6Ø�O‰O×+Ñ+¨KÓ8ð
ð 	
r   c               ó    € V ^8„  d   QhRRRR/# rö  r   )r   s   "r   r   rã    s   € ÷ (ñ (Ð6Jð (Èxñ (r   c                	ó®   € Vw  r4V P                   P                  W2P                  4      pV P                  P                  WBP                  4      pWV,           # r�   )ræ  r7  rç  rç  rè  )rö  r0  ré   Úlow_queriesÚhigh_queriesÚ
low_scoresÚhigh_scoress   &&&    r   r7  Ú_SplitCodec.score_prepared  sC   € Ø$4Ñ!ˆà—^‘^×2Ñ2°;Ç	Á	ÓJˆ
Ø—o‘o×4Ñ4°\Ç:Á:ÓNˆØÕ'Ð'r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r-  rè   ré   rå  r   r   )r   s   "r   r   rã    s'   € ÷ Iñ I˜Xð IÐ.Bð IÀxñ Ir   c                	óD   € V P                  V P                  V4      V4      # r�   r;  r<  s   &&&r   r=  Ú_SplitCodec.score  r?  r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rj   rè   ré   rå  r   r   )r   s   "r   r   rã    s"   € ÷ <ñ < Hð <Ð5Ið <Èhñ <r   c                	ó  € V P                   P                  WP                  4      pV P                  P                  WP                  4      p\
        P                  ! W4.RR7      p\
        P                  ! WPP                  RR7      # rñ  )	ræ  rC  rç  rç  rè  r   rÊ  rÉ  rÆ  )rö  rj   ré   rò  ró  rÕ  s   &&&   r   rC  Ú_SplitCodec.weighted_sum  s\   € Ø—^‘^×0Ñ0°¿)¹)ÓDˆ
Ø—o‘o×2Ñ2°7¿J¹JÓGˆÜ—’ Ð 9ÀÔCˆÜ�wŠw�v×1Ñ1¸Ô;Ð;r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rà   rè   ré   rå  r   r   )r   s   "r   r   rã    s$   € ÷ <ñ <Øð<Ø';ð<à	ñ<r   c                	ó  € V P                   P                  WP                  4      pV P                  P                  WP                  4      p\
        P                  ! W4.RR7      p\
        P                  ! WPP                  RR7      # rñ  )	ræ  rH  rç  rç  rè  r   rÊ  rÉ  rÆ  )rö  rà   ré   rò  ró  rÕ  s   &&&   r   rH  Ú$_SplitCodec.weighted_sum_from_scores  s^   € ð —^‘^×<Ñ<¸VÇYÁYÓOˆ
Ø—o‘o×>Ñ>¸vÇzÁzÓRˆÜ—’ Ð 9ÀÔCˆÜ�wŠw�v×1Ñ1¸Ô;Ð;r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rà   rè   ré   rå  r   rK  r   )r   s   "r   r   rã  %  s)   € ÷ Oñ OØðOØ';ðOà	,ñOr   c                	ó  € V P                   P                  WP                  4      w  r4pV P                  P                  WP                  4      w  p p\
        P                  ! W6.RR7      p\
        P                  ! W€P                  RR7      WE3# rñ  )	ræ  rO  rç  rç  rè  r   rÊ  rÉ  rÆ  )	rö  rà   ré   rò  rN  rá   ró  r›   rÕ  s	   &&&      r   rO  Ú*_SplitCodec.weighted_sum_stats_from_scores%  sy   € ð )-¯©×(UÑ(UØ—I‘Ió)
Ñ%ˆ
˜:ð !ŸO™O×JÑJØ—J‘Jó
Ñˆ�Q˜ô —’ Ð 9ÀÔCˆÜ�wŠw�v×1Ñ1¸Ô;¸UÐNÐNr   )r¬   rè  r_  rç  rÅ  ræ  rÄ  rØ  râ  rÆ  rÙ  N)rÚ  rÛ  rÜ  rÝ  r÷  r%  r)  r-  r7  r=  rC  rH  rO  rß  r   r   r   rß  rß  Ï  s8   † õ$3õL
õ<õ
õ(õIõ<õ<÷Oñ Or   rß  c               ó(   € V ^8„  d   QhRRRRRRRR/# rá  r   )r   s   "r   r   r   3  s(   € ÷ 1ñ 1˜ð 1¨ð 1°cð 1Àñ 1r   c                ó   € \        V4      p\        P                  ! V\        V4      R R7      '       dA   VR8X  d   \        M\
        pV! V P                  R,          \        \        V4      4      V4      # \        WW#4      # )r
   rì  rå  rü   )	rô  rñ  rò  rð  r±  rî  r   r0   rß  )rÎ  r¬   râ  r  rê  s   &&&& r   Ú_build_codecr  3  s`   € Ü˜$Ó€DÜ‡|‚|�Dœ% ›+¨t×4Ó4Ø,0°F¬NÕ(Ô@Sˆ	Ù˜Ÿ™ bÕ)¬3¬u°T«{Ó+;¸TÓBÐBÜ�v TÓ0Ð0r   c                  ó6   € ] tR tRtRtRtR R ltR tR tRt	R# )	Ú_QuantizedStateProxyi;  zÎWraps a quantized state tuple, providing .shape for model compatibility.

Some models access keys.shape[-2] after cache.update_and_fetch() to slice
masks. This proxy makes that work without dequantization.
c               ó    € V ^8„  d   QhRRRR/# )r   Ún_tokensr0   Ún_headsr   )r   s   "r   r   Ú!_QuantizedStateProxy.__annotate__D  s   € ÷ /ñ /¨ð /°cñ /r   c                	ó&   € Wn         ^W2^ 3V n        R# )rn   N©Ú_stater   )rö  ré   r  r  s   &&&&r   r÷  Ú_QuantizedStateProxy.__init__D  s   € ØŒà˜¨AÐ.ˆŽ
r   c                	ó.   € \        V P                  V4      # r�   )Úgetattrr  )rö  r   s   &&r   Ú__getattr__Ú _QuantizedStateProxy.__getattr__I  s   € Ü�t—{‘{ DÓ)Ð)r   c                	ó,   € \        V P                  4      # r�   )Úiterr  ©rö  s   &r   Ú__iter__Ú_QuantizedStateProxy.__iter__L  s   € Ü�D—K‘KÓ Ð r   r  N)
rÚ  rÛ  rÜ  rÝ  Ú__doc__Ú	__slots__r÷  r  r#  rß  r   r   r   r  r  ;  s   † ñð $€Iõ/ò
*ö!r   r  c                  ó‚  € ] tR tRtR)tRt^tRt]3R R llt	]
]3R R ll4       tR R	 ltR
 tR R lt]R 4       tR*R ltR R ltR+R R lltR+R R lltR R ltR R ltR R ltR+R R lltR t]R 4       t]P8                  R  4       t]R! 4       t]P8                  R" 4       tR# tR$ tR% t R& t!]R' 4       t"R(t#R# ),ÚTurboQuantKVCacheiP  é   é   c               ó    € V ^8„  d   QhRRRR/# )r   r¬   rê  r  r0   r   )r   s   "r   r   ÚTurboQuantKVCache.__annotate__V  s   € ÷ #ñ #˜Uð #¨#ñ #r   c                	ó°   € \        V4      V n        W n        ^ V n        RV n        RV n        RV n        RV n        RV n        RV n	        RV n
        RV n        R# )r   Nrü   )rô  r¬   r  r„  ÚkeysrV   Ú	key_codecÚvalue_codecÚ_cached_stateÚ_cached_state_offsetÚ_shadow_keysÚ_shadow_values)rö  r¬   r  s   &&&r   r÷  ÚTurboQuantKVCache.__init__V  sW   € Ü" 4Ó(ˆŒ	ØŒ	ØˆŒØˆŒ	ØˆŒØˆŒØˆÔØ!ˆÔØ$&ˆÔ!Ø ˆÔØ"ˆÖr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r¬   rê  r  r0   r   z'TurboQuantKVCache'r   )r   s   "r   r   r,  d  s$   € ÷ ñ ØðØ'*ðà	ñr   c                	ó^   € V ! W#R 7      pVP                   w  rVVe   VP                  WV4       V# )©r¬   r  )ré   Úupdate_and_fetch)ÚclsÚcacher¬   r  Úturbo_cacher.  rV   s   &&&&   r   Ú
from_cacheÚTurboQuantKVCache.from_cachec  s3   € ñ ˜tÔ/ˆØ—{‘{‰ˆØÒØ×(Ñ(¨Ô6ØÐr   c               ó    € V ^8„  d   QhRRRR/# ©r   r.  rè   rV   r   )r   s   "r   r   r,  m  s   € ÷ ñ  8ð °Xñ r   c                	ód  € V P                   f†   \        P                  ! V P                  \	        V P                  4      RR7      '       g!   \        P
                  ! V P                  4      MV P                  p\        WRV P                  R7      V n         V P                  f�   \        P                  ! V P                  \	        V P                  4      RR7      '       g!   \        P                  ! V P                  4      MV P                  p\        W$RV P                  ^,           R7      V n        R # R # )Nr
   rì  Úmse)râ  r  )
r/  rñ  rò  r¬   rð  rÑ  r  r  r0  rÒ  )rö  r.  rV   r  r  s   &&&  r   Ú_ensure_codecsÚ TurboQuantKVCache._ensure_codecsm  sÑ   € Ø�>‰>Ò!ô —|’| D§I¡I¬u°T·Y±YÓ/?È×NÓNô —
’
˜4Ÿ9™9Ô%à—Y‘Yð ô
 *¨$¸uÈ4Ï9É9ÔUˆDŒNØ×ÑÒ#ô —|’| D§I¡I¬u°T·Y±YÓ/?È×NÓNô —	’	˜$Ÿ)™)Ô$à—Y‘Yð ô
  ,Ø u°4·9±9¸qµ=ô ˆDÖñ $r   c                ó
  € VP                   R,          ^8w  gA   \        V P                  \        4      '       d!   \        V P                  \        4      '       g   R# V P                  P
                  '       g   V P                  P
                  '       d   R# \        V P                  P                  4      p\        V P                  P                  4      p\        W44      pVf   R# VP                   R,          pVP                  RV4      pVP                  RV4      pVP                   ^ ,          p	Wc,          ^,           ^ ,          p
Wd,          ^,           ^ ,          pV! VVV P                  P                  V P                  P                  V P                  P                  V P                  P                  .RV3RV
3RV3.Wi,          ^^3V^^3V	3Wš3V	3W›3.\        P                  \        P                  \        P                  \        P                  .R7      w  rÍrïVP                   RR p\        VP                  V4      VP                  ! . VOV
N5!  4      \        VP                  V4      VP                  ! . VOVN5!  4      3# )	zWFused key+value quantize in 1 dispatch. Returns (key_state, val_state) or (None, None).Nrí   ÚKPackedWidthÚVPackedWidthró   r?  ©NNrü   )r   r’  r/  rî  r0  rì  r0   r¬   ro  r@  r8  rô  r   r  r  rê   )rö  r.  rV   r  r  r  r  Úk_flatÚv_flatr  Úk_pwÚv_pwÚk_normsÚk_packedÚv_normsÚv_packedr!  s   &&&              r   Ú_try_fused_kv_quantizeÚ(TurboQuantKVCache._try_fused_kv_quantize‚  s(  € ð �J‰J�r�N˜aÔÜ˜dŸn™nÔ.A×BÒBÜ˜d×.Ñ.Ô0C×DÒDàÐð �>‰>×!×!Ð! T×%5Ñ%5×%=×%=Ð%=ØÐä�t—~‘~×*Ñ*Ó+ˆÜ�t×'Ñ'×,Ñ,Ó-ˆÜ*¨8Ó>ˆØŠ>ØÐà�J‰J�r�NˆØ—‘˜b !Ó$ˆØ—‘  AÓ&ˆØ�\‰\˜!�_ˆØ•˜rÕ! bÕ(ˆØ•˜rÕ! bÕ(ˆá/5àØØ—‘×'Ñ'Ø× Ñ ×)Ñ)Ø—‘×)Ñ)Ø× Ñ ×+Ñ+ðð ˜�
Ø Ð&Ø Ð&ðð
 •&˜!˜Q�Ø˜A˜q˜	à�Ø�
Ø�Ø�
ð	ô Ÿ:™:¤r§y¡y´"·*±*¼b¿i¹iÐHô-0
Ñ,ˆ˜7ð2 �z‰z˜#˜2ˆˆä˜wŸ™¨tÓ4°h×6FÒ6FÐ6SÈÐ6SÈdÓ6SÓTÜ˜wŸ™¨tÓ4°h×6FÒ6FÐ6SÈÐ6SÈdÓ6SÓTð
ð 	
r   c               ó    € V ^8„  d   QhRRRR/# r@  r   )r   s   "r   r   r,  »  s   € ÷ %
ñ %
 Xð %
°xñ %
r   c                	ój  € V P                  W4       V P                  W4      w  r4Vf7   V P                  P                  V4      pV P                  P                  V4      pV P
                  VP                  ^,          ,           pV P                  f"   \        W54      V n        \        WE4      V n	        M`\        V P                  V P
                  WPP                  4      V n        \        V P                  V P
                  WPP                  4      V n	        \        V P                  W0P
                  4       \        V P                  W@P
                  4       VP                  ^ ,          VP                  ^,          rvVP                  R,          pVP                  ^,          p	WPn        R V n        RV n        V	^8”  g   V P
                  ^2,          ^ 8X  d,   \        P                   ! V P                  V P                  4       V P"                  w  r«\%        W P
                  V4      \%        W°P
                  V4      3# ©Nrü   )rC  rQ  r/  r%  r0  r„  r   r.  r¶  rV   rì  Ú
cache_stepr¹  r1  r2  r   Úevalré   r  )rö  r.  rV   Únew_keysÚ
new_valuesÚnew_endr  r  r  Ún_newÚksÚvss   &&&         r   r9  Ú"TurboQuantKVCache.update_and_fetch»  s—  € Ø×Ñ˜DÔ)ð  $×:Ñ:¸4ÓHÑˆØÒØ—~‘~×.Ñ.¨tÓ4ˆHØ×)Ñ)×2Ñ2°6Ó:ˆJà—+‘+ §
¡
¨1¥Õ-ˆØ�9‰9ÒÜ,¨XÓ?ˆDŒIÜ.¨zÓCˆD�Kä/Ø—	‘	˜4Ÿ;™;¨·±óˆDŒIô 2Ø—‘˜TŸ[™[¨'·?±?óˆDŒKô 	�T—Y‘Y ¯+©+Ô6Ü�T—[‘[ *¯k©kÔ:à—Z‘Z •] D§J¡J¨q¥Mˆ7Ø�J‰J�r�NˆØ—
‘
˜1•ˆàŒØ!ˆÔØ$&ˆÔ!Ø�1Œ9˜Ÿ™ rÕ)¨QÔ.Ü�GŠG�D—I‘I˜tŸ{™{Ô+Ø—‘‰ˆä  §[¡[°'Ó:Ü  §[¡[°'Ó:ð
ð 	
r   c                	óJ   € \        V \        4      '       d   V P                  # T # r�   )r’  r  r  r­  s   &r   Ú_unwrapÚTurboQuantKVCache._unwrapâ  s   € ä)¨%Ô1E×FÒFˆu�|‰|ÐQÈEÐQr   Nc                	óX  € Ve   Vf   V P                   w  rV P                  V4      pV P                  V4      pV P                  P                  V4      P	                  \
        P                  4      pV P                  P                  V4      P	                  \
        P                  4      pW43# r�   )ré   r`  r/  r)  r  r   r  r0  )rö  Ú
keys_stateÚvalues_stater.  rV   s   &&&  r   r)  ÚTurboQuantKVCache.dequantizeæ  s…   € ØÒ Ò!5Ø'+§z¡zÑ$ˆJØ—\‘\ *Ó-ˆ
Ø—|‘| LÓ1ˆØ�~‰~×(Ñ(¨Ó4×;Ñ;¼B¿J¹JÓGˆØ×!Ñ!×,Ñ,¨\Ó:×AÑAÄ"Ç*Á*ÓMˆØˆ|Ðr   c               ó<   € V ^8„  d   QhRRRRRRRRRRR	RR
RRRRR/	# )r   rà   rè   r­   rë   Úq_startr0   Úq_endÚk_startÚk_endÚtotal_queriesÚtotal_tokensr   r   )r   s   "r   r   r,  ï  sd   € ÷ #ñ #àð#ð !ð#ð ð	#ð
 ð#ð ð#ð ð#ð ð#ð ð#ð 
ñ#r   c	                	óø  € Vf   V# \        V\        4      '       d²   VR8X  d�   W‡,
          p	\        P                  ! W“,           W”,           4      p
\        P                  ! WV4      pV
R,          VR,          8¬  pVR,          p\        P                  ! WÁ\        P
                  ! VP                  4      P                  4      # \        RV 24      hVRW41WV13,          pVP                  VP                  ^,
          8X  d   \        P                  ! V^R7      pVP                  \        P                  8X  d@   \        P                  ! WÑ\        P
                  ! VP                  4      P                  4      # W,           # )NÚcausalz'Unsupported TurboQuant attention mask: .rú   )r~  N)Nr~  )NNNr~  r~  )r’  rŸ   r   r]  rv  Úfinfor  r  rï  rÿ   r  Úbool_)rö  rà   r­   rg  rh  ri  rj  rk  rl  Úpast_tokensÚq_idxÚk_idxÚcausal_maskÚ
mask_chunks   &&&&&&&&&     r   Ú_apply_attention_maskÚ'TurboQuantKVCache._apply_attention_maskï  s  € ð Š<ØˆMÜ�dœC× Ò Ø�xÔØ*Õ:�ÜŸ	š	 +Õ"7¸Õ9LÓM�ÜŸ	š	 'Ó1�Ø# G�n°°gµÑ>�Ø)Ð*@ÕA�Ü—x’x ´R·X²X¸f¿l¹lÓ5K×5OÑ5OÓPÐPÜÐFÀtÀfÐMÓNÐNà˜#˜w˜}¨g¨mÐ;Õ<ˆ
Ø�?‰?˜fŸk™k¨A�oÔ-ÜŸš¨
¸Ô;ˆJà×ÑœrŸx™xÔ'Ü—8’8˜J´·²¸¿¹Ó0F×0JÑ0JÓKÐKØÕ"Ð"r   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   r-  rè   r`   rê  r­   rë   r   r   )r   s   "r   r   r,    s8   € ÷ ],ñ ],àð],ð
 ð],ð !ð],ð 
ñ],r   c                	óÂ  € Ve   Vf   V P                   w  r#V P                  V4      pV P                  V4      pVP                  w  rgr‰\        V\        4      '       d(   VP
                  P                  P                  ^,          MVP                  P                  ^,          p
Wz,          pW,          P                  VV
VVV	4      pV P                  P                  p\        V4      pV^8X  d   V P                  MV P                  pV^8X  d   ^MV P                  p. p\        ^ VV4       EFn  p\        VVV,           4      pVRVV1R3,          pV P                   P#                  V4      p\$        P&                  ! WjVVV,
          V3\$        P(                  R7      p\$        P&                  ! WjVVV,
          3\$        P(                  R7      p\$        P*                  ! WjVVV,
          3\-        R4      ) \$        P(                  R7      p\        ^ Wï4       EF,  p\        VVV,           4      p\/        VVV4      p\/        VVV4      pV P                   P1                  VV4      pV P3                  VVVVVVVV4      pV P                  P5                  VV4      w  ppp \$        P6                  ! VV 4      p!\$        P8                  ! VV!,
          4      p"\$        P8                  ! V V!,
          4      p#VV"R,          ,          VV#R,          ,          ,           pVV",          VV#,          ,           pT!p\$        P:                  ! VVV4       EK/  	  VP=                  V\$        P6                  ! VR,          \>        4      ,          4       \$        P:                  ! VR,          4       EKq  	  \$        P@                  ! V^R7      pVP                  WgW�4      pVPC                  VPD                  4      # )N.r~  r  Úinfrú   r  rü   )#ré   r`  r   r’  rå  rç  r%   r@  r0  r_  r°  Údecode_key_chunk_sizeÚprefill_key_chunk_sizeÚprefill_query_block_sizerO   r  r/  r-  r   r  r  Úfullrê  r¤  r7  rv  rO  r  rO  rW  rŠ   r  rÊ  r  r  )$rö  r-  rc  rd  r`   r­   r  Ú	n_q_headsÚLr  Ú
n_kv_headsÚ	n_repeatsrP  Ú	value_dimrl  Úkey_chunk_sizeÚquery_block_sizeÚoutputsrg  rh  Úq_blockr0  rB  Ú
normalizerÚ	max_scoreri  rj  Ú	key_chunkÚvalue_chunkrà   Úchunk_outputÚchunk_denomÚ	chunk_maxÚnew_maxÚ
prev_scaleÚchunk_scales$   &&&&&&                              r   Úquantized_attentionÚ%TurboQuantKVCache.quantized_attention  sf  € ð Ò Ò!5Ø'+§z¡zÑ$ˆJØ—\‘\ *Ó-ˆ
Ø—|‘| LÓ1ˆà$Ÿ]™]Ñˆ�aô ˜*Ô&:×;Ò;ð �N‰N× Ñ ×&Ñ& qÖ)à×!Ñ!×'Ñ'¨Õ*ð 	ð
 Õ+ˆ	à"�?×3Ñ3ØØØØØó
ˆð ×$Ñ$×(Ñ(ˆ	Ü$ ZÓ0ˆà*+¨q¬&ˆD×&Ò&°d×6QÑ6Qð 	ð !" Q¤™1¨D×,IÑ,IÐàˆÜ˜Q Ð#3×4ˆGÜ˜˜7Ð%5Õ5Ó6ˆEØ% c¨7°5¨=¸!Ð&;Õ<ˆGØ#Ÿ~™~×=Ñ=¸gÓFÐä—X’XØ 	¨5°7­?¸IÐFÜ—j‘jôˆFô ŸšØ 	¨5°7­?Ð;Ü—j‘jôˆJô ŸšØ 	¨5°7­?Ð;Ü�u“�Ü—j‘jôˆIô !  L×A�Ü˜L¨'°NÕ*BÓC�Ü.¨z¸7ÀEÓJ�	Ü0°¸wÈÓN�àŸ™×6Ñ6Ð7GÈÓS�Ø×3Ñ3ØØØØØØØØ ó	�ð ×$Ñ$×CÑCÀFÈKÓXñ 5�˜k¨9ô Ÿ*š* Y°	Ó:�ÜŸVšV I°Õ$7Ó8�
Ü Ÿfšf Y°Õ%8Ó9�ð ˜Z¨	Õ2Õ2Ø" [°Õ%;Õ;õ<ð ð (¨*Õ4°{À[Õ7PÕP�
Ø#�	Ü—’˜ 
¨I×6ñ= Bð@ �N‰N˜6¤B§J¢J¨z¸)Õ/DÄdÓ$KÕKÔLÜ�GŠG�G˜B•K× ñi 5ôl —’ ¨aÔ0ˆØ—‘ ¨aÓ;ˆØ�}‰}˜WŸ]™]Ó+Ð+r   c               ó(   € V ^8„  d   QhRRRRRRRR/# ry  r   )r   s   "r   r   r,  m  s>   € ÷ DHñ DHàðDHð
 ðDHð !ðDHð 
ñDHr   c           
     óV  € Ve   Vf   V P                   w  r#V P                  V4      pV P                  V4      p\        V P                  \        4      '       dM   \        V P
                  \        4      '       d-   \        V\        4      '       d   \        V\        4      '       g   R# VP                  w  rgr‰VP                  P                  ^,          p
Wz,          pVP                  P                  ^,          pV^ 8X  d   R# \        V P
                  P                  4      pWÐP
                  P                  8w  d   R# V	^,           ^ ,          p\        WÛV,          V4      pVf   R# \        V P                  P                  P                  VVV4      pVf   R# W,          P!                  WjW¸V	4      p\"        P$                  ! VV P                  P&                  4      pVRRV	13,          P!                  Wj,          V,          W‰4      pVRV	R13,          P!                  Wj,          V,          W‰4      pV! VVVP                  VP(                  VP*                  VP,                  V P                  P                  P.                  V P                  P0                  .RV	3RVP(                  P                  R,          3RVP,                  P                  R,          3.^ W¶V
,          V,          3RWj,          V,          WŒ3.\"        P2                  .R7      ^ ,          pVP!                  WjW¸V4      pVeÝ   \        V\"        P4                  4      '       d¥   VP6                  VP6                  ^,
          8X  d   \"        P8                  ! V^R7      pVP:                  \"        P<                  8X  dB   \"        P>                  ! VV\"        P@                  ! VP:                  4      PB                  4      pM"VV,           pM\        V\D        4      '       d   R# \"        PF                  ! VRR7      P!                  Wj,          W¸,          V4      pRpVV,           ^,
          V,          pWj,          V,          W¸,          V	3pV! VVP                  VPH                  V P
                  P.                  .RV	3R	W¸,          3R
V3RV3RVPH                  P                  R,          3.V	^Wj,          V,          3V	^^3V.\"        P2                  .R7      ^ ,          pVP!                  Wj,          VW¸,          V	4      pV^8”  d   \"        PJ                  ! V^R7      pMVPM                  ^4      pVP!                  WjW¸V	4      pV P
                  PO                  V4      pVP!                  WgW‰4      PQ                  VP:                  4      # )u   Fast prefill: fold L queries into R dimension, reuse decode kernels.
Avoids the expensive O(TÃ—DÂ²) dequantize rotation matmul.N.rí   ÚKMsePackedWidthÚKSignPackedWidthró   rú   é   rñ   rò   rî   rð   rü   rý   ))ré   r`  r’  r/  r±  r0  rî  r  rê   r   r%   r0   r¬   rÈ  rÂ  rµ  r@  r   r;  r�  r  r^   r  r'   r‘  r  r  rÿ   r  r  rp  rv  ro  r  rŸ   rG  r  rP  Úsqueezer  r  )rö  r-  rc  rd  r`   r­   r  r€  r�  r  r‚  rƒ  r  r  r	  Ú
val_kernelÚmq_scoreÚgroupedÚqtr$   r]   rà   rj   r  r  Ú	out_shapeÚ	out_tiledÚout_rotatedrB  s   &&&&&&                       r   Úprefill_attentionÚ#TurboQuantKVCache.prefill_attentionm  sÍ  € ð Ò Ò!5Ø'+§z¡zÑ$ˆJØ—\‘\ *Ó-ˆ
Ø—|‘| LÓ1ˆô �t—~‘~Ô';×<Ò<Ü˜4×+Ñ+Ô-@×AÒAÜ˜:Ô':×;Ò;Ü˜<Ô);×<Ò<áà$Ÿ]™]Ñˆ�aØ×%Ñ%×+Ñ+¨AÕ.ˆ
ØÕ+ˆ	Ø×Ñ×"Ñ" 1Õ%ˆà�Œ6Ùä�t×'Ñ'×,Ñ,Ó-ˆØ×'Ñ'×,Ñ,Ô,ÙØ˜R� B�ˆä;Ø !•m ]ó
ˆ
ð ÒÙô 2Ø�N‰N×$Ñ$×)Ñ)ØØØó	
ˆð ÒÙà•?×+Ñ+¨A¸9ÈÓKˆÜ�YŠY�w §¡× @Ñ @ÓAˆØ�3˜˜˜�7•×#Ñ# A¥N°YÕ$>ÀÓEˆØ�C˜™�G•×$Ñ$ Q¥^°iÕ%?ÀÓFˆáàØØ× Ñ Ø×&Ñ&Ø×)Ñ)Ø×$Ñ$Ø—‘×(Ñ(×1Ñ1Ø—‘×*Ñ*ð	ð ˜�
Ø" J×$:Ñ$:×$@Ñ$@ÀÕ$DÐEØ# Z×%9Ñ%9×%?Ñ%?ÀÕ%CÐDðð
 �i Z¥°!Õ!3Ð4Ø"Ø�N¨YÕ6¸Ð=Ð>ÜŸ:™:˜,ô'
ð( õ)ˆð, —‘ ¨y¸QÓ?ˆð ÒÜ˜$¤§¡×)Ò)Ø—9‘9 §¡¨a¥Ô/ÜŸ>š>¨$°QÔ7�DØ—:‘:¤§¡Ô)ÜŸXšX d¨F´B·H²H¸V¿\¹\Ó4J×4NÑ4NÓO‘Fà# d�]‘Fä˜D¤#×&Ò&Ùô —*’*˜V¨"Ô-×5Ñ5°aµnÀiÅmÐUVÓWˆð ˆØ˜]Õ*¨QÕ.°=Õ@ˆØ•^ mÕ3°Yµ]ÀAÐFˆ	áàØ×"Ñ"Ø×$Ñ$Ø× Ñ ×)Ñ)ð	ð ˜�
Ø 	¥Ð.Ø Ð.Ø Ð.Ø × 4Ñ 4× :Ñ :¸2Õ >Ð?ðð �Q˜�¨Õ6Ð7Ø˜A˜q˜	Ø$˜+ÜŸ:™:˜,ô#
ð$ õ%ˆ	ð* ×%Ñ% a¥n°mÀYÅ]ÐTUÓVˆ	Ø˜1ÔÜŸ&š& °Ô3‰Kà#×+Ñ+¨AÓ.ˆKØ!×)Ñ)¨!¸ÀqÓIˆð ×!Ñ!×1Ñ1°+Ó>ˆØ�~‰~˜a¨AÓ1×8Ñ8¸¿¹ÓGÐGr   c               ó    € V ^8„  d   QhRRRR/# ©r   rP  rè   r   rë   r   )r   s   "r   r   r,  ó  s"   € ÷ S.ñ S.à!ðS.ð
 
ñS.r   c           
     ój  € \        V P                  \        4      p\        V P                  \        4      p\	        4       '       d|   V'       g	   V'       dl   \        V P
                  \        4      '       dL   V'       d   \        V\        4      '       d.   M\        V\        4      '       d   \        V\        4      '       g   R# VP                  ^ ,          pVP                  ^,          pVP                  ^,          pVP                  R
,          p	VP                  P                  ^,          p
\        V P
                  P                  4      pW°P
                  P                  8w  d   R# V	^,           ^ ,          p\        W¸V4      pVf   R# V P                  P                  V4      pV P                  P                  Wâ4      pVP                  Wg,          WŠ4      p\         P"                  ! VR
R7      pRpV
V,           ^,
          V,          pWg,          V,          W‰3pV! VVP                  VP$                  V P
                  P&                  .RV	3RV3RV3RV3RVP$                  P                  R
,          3.V	^Wg,          V,          3V	^^3V.\         P(                  .R	7      ^ ,          pVP                  Wg,          VW‰4      pV^8”  d   \         P*                  ! V^R7      pMVP-                  ^4      pVP                  WgW‰4      pV P
                  P/                  V4      p\         P0                  ! V^R7      # )z²Separate-kernel decode: fast key scoring + single-tile value weighted sum.
2-3x faster than the fused kernel at large D because each kernel only
iterates its own dimensions once.Nrú   r™  rí   rñ   rò   rî   rð   ró   rü   )r’  r/  r±  rî  r   r0  r  rê   r   r%   r0   r¬   rÈ  r-  r7  r@  r   rG  r  r'   r  rP  rš  r  r  )rö  rP  rc  rd  Úkey_is_prodÚ
key_is_mser  r  r  r  r  r  r	  r›  r0  rà   rG  rj   r  r  rŸ  r   r¡  rB  s   &&&&                    r   Ú_separate_score_value_decodeÚ.TurboQuantKVCache._separate_score_value_decodeó  s¼  € ô ! §¡Ô1EÓFˆÜ §¡Ô0CÓDˆ
ä×Òß§
Ü˜4×+Ñ+Ô-@×AÒA÷ ô ˜:Ô':×;Ó;ä 
Ô,>×?Ò?ä˜<Ô);×<Ò<áà×!Ñ! !Õ$ˆØ×!Ñ! !Õ$ˆØ×!Ñ! !Õ$ˆØ×!Ñ! "Õ%ˆØ×Ñ×"Ñ" 1Õ%ˆä�t×'Ñ'×,Ñ,Ó-ˆØ×'Ñ'×,Ñ,Ô,ÙØ˜R� B�ˆä;¸HÈÓWˆ
ØÒÙð  Ÿ>™>×9Ñ9¸/ÓJÐØ—‘×.Ñ.Ð/?ÓLˆà—N‘N 1¥5¨!Ó/ˆ	ô —*’*˜Y¨RÔ0ˆð ˆØ˜]Õ*¨QÕ.°=Õ@ˆØ•U˜]Õ*¨AÐ1ˆ	áàØ×"Ñ"Ø×$Ñ$Ø× Ñ ×)Ñ)ð	ð ˜�
Ø Ð"Ø Ð.Ø Ð.Ø × 4Ñ 4× :Ñ :¸2Õ >Ð?ðð �Q˜� Õ-Ð.Ø˜A˜q˜	Ø$˜+ÜŸ:™:˜,ô#
ð$ õ%ˆ	ð* ×%Ñ% a¥e¨]¸AÓAˆ	Ø˜1ÔÜŸ&š& °Ô3‰Kà#×+Ñ+¨AÓ.ˆKØ!×)Ñ)¨!°Ó5ˆð ×!Ñ!×1Ñ1°+Ó>ˆÜ�~Š~˜f¨1Ô-Ð-r   c               ó    € V ^8„  d   QhRRRR/# r¥  r   )r   s   "r   r   r,  H  s"   € ÷ .ñ .à!ð.ð
 
ñ.r   c                ó  € \        4       '       dÁ   \        V P                  \        4      '       d¡   \        V P                  \        4      '       d�   \        V\
        4      '       dk   \        V\
        4      '       dU   \        V P                  P                  \        4      '       d+   \        V P                  P                  \        4      '       g   R# V P                  pV P                  pVP                  pVP                  pVP                  P                  P                  ^ 8:  g&   VP                  P                  P                  ^ 8:  d   R# VP                  ^ ,          pVP                  ^,          p	VP                  ^,          p
VP                  P                  pVP                  P                  pVP                   P"                  P                  ^,          p\%        WgV
4      pVf   R# VP&                  e®   \(        P*                  ! WP&                  4      pV^,          pVRRV13,          P-                  W‰W«4      pVRVV13,          P-                  W‰W«4      pVRVVV,           13,          P-                  W‰W¬4      pVRVV,           R13,          P-                  W‰W¬4      pEM\(        P.                  ! WP0                  RR7      p\(        P.                  ! WP2                  RR7      p\(        P*                  ! VVP                  P4                  4      p\(        P*                  ! VVP                  P4                  4      pVRRV13,          P-                  W‰W«4      pVRVR13,          P-                  W‰W«4      pVRRV13,          P-                  W‰W¬4      pVRVR13,          P-                  W‰W¬4      p\7        V^,
          ^ 4      p\7        V^,
          ^ 4      pW¼,           pRpV^,           ^ ,          pVV,           ^,
          V,          pW‰,          V,          V
V3pW‰,          V,          V
,          3p V! VVVVVP                   P"                  VP                   P8                  VP                   P:                  VP                   P<                  VP>                  P"                  VP>                  P8                  VP>                  P:                  VP>                  P<                  VP                   P"                  VP                   P@                  VP>                  P"                  VP>                  P@                  VP                  P                  PB                  VP                  P                  PB                  VP                  PD                  VP                  PD                  VP                  PB                  VP                  PB                  .RV3RV3RV
3RV3R	VP                   P8                  P                  R,          3R
VP                   P<                  P                  R,          3RVP>                  P8                  P                  R,          3RVP>                  P<                  P                  R,          3RVP                   P@                  P                  R,          3RVP>                  P@                  P                  R,          3RVP                  P                  3RVP                  P                  3.^ VW‰,          V,          3RVV V .\(        PF                  \(        PF                  \(        PF                  .R7      w  p!p"p#V!P-                  W‰,          VV
V4      p!V"P-                  W‰,          VV
4      p"V#P-                  W‰,          VV
4      p#\(        P6                  ! V#^RR7      p$\(        PH                  ! V#V$,
          4      p%\(        PJ                  ! V!V%R,          ,          ^R7      p&\(        PJ                  ! V"V%,          ^R7      p'V&\(        PL                  ! V'R,          \N        4      ,          P-                  W‰V
V4      p(\(        P*                  ! V(RRV13,          VP                  PP                  4      p)\(        P*                  ! V(RVR13,          VP                  PP                  4      p*\(        PR                  ! V)V*.RR7      p+\(        P.                  ! V+VPT                  RR7      p,\(        PV                  ! V,^R7      # )us   Fused decode for SplitCodec â€” single Metal kernel for score + softmax
+ weighted_sum across both low/high halves.N.rú   r™  ÚDimLowÚDimHighrñ   rò   ÚKLMsePackedWidthÚKLSignPackedWidthÚKHMsePackedWidthÚKHSignPackedWidthÚVLPackedWidthÚVHPackedWidthÚVLBitsÚVHBitsró   T©rû   Úkeepdimsrü   rý   r  ),r   r’  r/  rß  r0  rå  ræ  r±  rî  rØ  rÙ  rµ  r¬   rç  r   r_  rç  r%   r°  rè  r   r;  r@  rÉ  rÄ  rÅ  r�  rF  r  r^   r  rè  r  r'   r‘  r  rO  rP  r  r  r8  rÊ  rÆ  r  )-rö  rP  rc  rd  ÚkcÚvcr  r�  r  r  r  Údim_lowÚdim_highr  r  rž  Údl2r•  r–  r—  r˜  rË  rÌ  rÍ  rÐ  r«  r¬  Úval_dimr  Únum_val_tilesr  Ú	acc_shapeÚsm_shaper¶  r·  r¸  Ú
global_maxÚscale_factorsÚ
scaled_accrN  r¡  rÓ  rÔ  rÕ  rB  s-   &&&&                                         r   Ú _compiled_split_decode_attentionÚ2TurboQuantKVCache._compiled_split_decode_attentionH  só  € ô ×ÒÜ˜4Ÿ>™>¬;×7Ò7Ü˜4×+Ñ+¬[×9Ò9Ü˜:Ô';×<Ò<Ü˜<Ô)=×>Ò>Ü˜4Ÿ>™>×3Ñ3Ô5I×JÒJÜ˜4×+Ñ+×5Ñ5Ô7J×KÒKáà�^‰^ˆØ×ÑˆØ—=‘=ˆØ—M‘Mˆ	à�<‰<×!Ñ!×&Ñ&¨!Ô+¨r¯}©}×/FÑ/F×/KÑ/KÈqÔ/PÙà×!Ñ! !Õ$ˆØ×!Ñ! !Õ$ˆØ×!Ñ! !Õ$ˆØ—,‘,×"Ñ"ˆØ—=‘=×$Ñ$ˆØ�N‰N× Ñ ×&Ñ& qÕ)ˆä+¨HÀÓCˆØŠ>Ùð ×(Ñ(Ò4Ü—’˜?×,IÑ,IÓJˆBØ˜A•+ˆCØ˜3   ˜=Õ)×1Ñ1°!¸ÓCˆIØ˜C ¨ Ð,Õ-×5Ñ5°a¸AÓGˆJØ˜C  s¨X¥~Ð!5Ð5Õ6×>Ñ>¸qÀQÓQˆJØ˜S #¨¥.Ñ"2Ð2Õ3×;Ñ;¸AÀ!ÓNŠKä—G’G˜O¯Z©Z¸bÔAˆEÜ—W’W˜_¯k©kÀÔCˆFÜ—Y’Y˜u b§l¡l×&DÑ&DÓEˆFÜ—i’i ¨¯©×(GÑ(GÓHˆGØ˜s H W H˜}Õ-×5Ñ5°a¸AÓGˆIØ  W¡X Õ.×6Ñ6°q¸QÓHˆJØ   i x i Õ0×8Ñ8¸¸qÓKˆJØ! # x¡y .Õ1×9Ñ9¸!ÀÓLˆKä˜8 a�<¨Ó+ˆÜ˜I¨�M¨1Ó-ˆØÕ$ˆàˆØ  2�¨"Õ,ˆØ˜]Õ*¨QÕ.°=Õ@ˆà•U˜]Õ*¨A¨wÐ7ˆ	Ø•E˜MÕ)¨AÕ-Ð/ˆÙ$*àØØØØ—‘×$Ñ$Ø—‘×*Ñ*Ø—‘×-Ñ-Ø—‘×(Ñ(Ø—‘×%Ñ%Ø—‘×+Ñ+Ø—‘×.Ñ.Ø—‘×)Ñ)Ø× Ñ ×&Ñ&Ø× Ñ ×(Ñ(Ø×!Ñ!×'Ñ'Ø×!Ñ!×)Ñ)Ø—‘×&Ñ&×/Ñ/Ø—‘×'Ñ'×0Ñ0Ø—‘×(Ñ(Ø—‘×)Ñ)Ø—‘×%Ñ%Ø—‘×&Ñ&ð-ð2 ˜7Ð#Ø˜HÐ%Ø Ð"Ø Ð.Ø# Z§^¡^×%?Ñ%?×%EÑ%EÀbÕ%IÐJØ$ j§n¡n×&>Ñ&>×&DÑ&DÀRÕ&HÐIØ# Z§_¡_×%@Ñ%@×%FÑ%FÀrÕ%JÐKØ$ j§o¡o×&?Ñ&?×&EÑ&EÀbÕ&IÐJØ  ,×"2Ñ"2×":Ñ":×"@Ñ"@ÀÕ"DÐEØ  ,×"3Ñ"3×";Ñ";×"AÑ"AÀ"Õ"EÐFØ˜2Ÿ<™<×,Ñ,Ð-Ø˜2Ÿ=™=×-Ñ-Ð.ðð �m Q¥U¨]Õ%:Ð;Ø"Ø$ h°Ð9ÜŸ:™:¤r§z¡z´2·:±:Ð>ôU+%
Ñ!ˆ�˜'ð\ —/‘/ !¥%¨¸¸7ÓCˆØ—/‘/ !¥%¨¸Ó:ˆØ—/‘/ !¥%¨¸Ó:ˆÜ—V’V˜G¨!°dÔ;ˆ
ÜŸš˜w¨Õ3Ó4ˆÜ—V’V˜G m°IÕ&>Õ>ÀQÔGˆ
Ü—’�w Õ.°QÔ7ˆØ!¤B§J¢J¨u°YÕ/?ÄÓ$FÕF×OÑOØ�!�Wó
ˆô —)’)˜K¨¨X¨g¨X¨Õ6¸¿¹×8MÑ8MÓNˆÜ—9’9˜[¨¨g©h¨Õ7¸¿¹×9OÑ9OÓPˆÜ—’ ¨(Ð 3¸"Ô=ˆÜ—’˜ ×!1Ñ!1¸Ô;ˆÜ�~Š~˜f¨1Ô-Ð-r   c               ó    € V ^8„  d   QhRRRR/# r¥  r   )r   s   "r   r   r,  É  s"   € ÷ ]
ñ ]
à!ð]
ð
 
ñ]
r   c                	ó°  € \        4       '       d’   \        V P                  \        4      '       dr   \        V P                  \
        4      '       dR   V P                  P                  P                  ^ 8”  d-   \        V\        4      '       d   \        V\        4      '       g   R# \        V P                  P                  4      pW@P                  P                  8w  d   R# VP                  ^ ,          VP                  ^,          VP                  ^,          rvpVP                  R,          pVP                  P                  ^,          p	V^,           ^ ,          p
V P                  P                  P                  pV P                  P                  pV	R8:  EdÀ   \        VVV
VRR7      pVEe«   V P                  P                  V4      w  rïVP!                  WVWx4      pVP!                  WVWx4      pV P                  P"                  pRV3RV3RV
3RVP$                  P                  R,          3R	VP&                  P                  R,          3R
VP(                  P                  R,          3.pV! VVVP                  VP$                  VP*                  VP&                  VP                  VP(                  V P                  P                  P,                  V P                  P.                  V P                  P,                  V.V^ ^WV,          3RWV,          Wx3.\0        P2                  .R7      ^ ,          pVP!                  WVWx4      p\0        P4                  ! V^R7      # \0        P6                  ! WP                  P8                  4      pVRRV13,          P!                  WVWx4      pVRVR13,          P!                  WVWx4      pRpV	V,           ^,
          V,          p\;        WGW«4      p\=        WGV4      pV^,           ^ ,          p^@pVRJ;'       d.    VV,          V,          V8¬  ;'       d    V^8¬  ;'       g    V	R8¬  pV'       Ed    WV,          V,          Wx3pWV,          V,          V,          3pV! VVVP                  VP$                  VP*                  VP&                  VP                  VP(                  V P                  P                  P,                  V P                  P.                  V P                  P,                  .RV3RV3RV3RV
3RVP$                  P                  R,          3R	VP&                  P                  R,          3R
VP(                  P                  R,          3.^ ^WV,          V,          3RVVV.\0        P2                  \0        P2                  \0        P2                  .R7      w  ppp VP!                  WV,          VWx4      pVP!                  WV,          VV4      pV P!                  WV,          VV4      p \0        P>                  ! V ^RR7      p!\0        P@                  ! V V!,
          4      p"\0        PB                  ! VV"R,          ,          ^R7      p#\0        PB                  ! VV",          ^R7      p$V#\0        PD                  ! V$R,          \F        4      ,          P!                  WVWx4      p%V P                  PI                  V%4      p\0        P4                  ! V^R7      # VEe°   V^,           ^ ,          pWV,          V,          Wx3pWV,          V,          V,          3pV! VVVP                  VP$                  VP*                  VP&                  VP                  VP(                  V P                  P                  P,                  V P                  P.                  V P                  P,                  .RV3RV3RV3RVP$                  P                  R,          3R	VP&                  P                  R,          3R
VP(                  P                  R,          3RV3.^ VWV,          V,          3RVVV.\0        P2                  \0        P2                  \0        P2                  .R7      w  ppp VP!                  WV,          VWx4      pVP!                  WV,          VV4      pV P!                  WV,          VV4      p \0        P>                  ! V ^RR7      p!\0        P@                  ! V V!,
          4      p"\0        PB                  ! VV"R,          ,          ^R7      p#\0        PB                  ! VV",          ^R7      p$V#\0        PD                  ! V$R,          \F        4      ,          P!                  WVWx4      p%V P                  PI                  V%4      p\0        P4                  ! V^R7      # \K        V4      p&V&! VVP                  VP$                  VP*                  VP&                  VP                  VP(                  V P                  P8                  V P                  P                  P,                  V P                  P.                  V P                  P,                  V P                  PL                  4      # )r   NrY  Fr  rí   rñ   rî   r—  r˜  rG  ró   rú   .r™  i   rò   Tr·  ÚValBitsrü   rý   r  )'r   r’  r/  r±  r0  rî  rµ  r¬   r  rê   r0   r   r%   rì  rý  r-  r@  rö  r  r  r  r^   r'   r‘  r   r  r  r;  r�  rê  r¼  rF  rO  rP  r  r  r  rd  r8  )'rö  rP  rc  rd  r¬   r  r  r  r  r  r	  rf  rì  Ú	ff_kernelr$   r]   r"  rõ   r   rB  rž  r  r  Úsingle_kernelÚmulti_kernelr¿  Úmin_threadgroupsÚ
use_singlerÀ  rÁ  r¶  r·  r¸  rÂ  rÃ  rÄ  rN  r¡  Údecodes'   &&&&                                   r   Ú"_compiled_integer_decode_attentionÚ4TurboQuantKVCache._compiled_integer_decode_attentionÉ  s×  € ô ×ÒÜ˜4Ÿ>™>Ô+?×@Ò@Ü˜4×+Ñ+Ô-@×AÒAØ—‘×(Ñ(×-Ñ-°Ô1Ü˜:Ô':×;Ò;Ü˜<Ô);×<Ò<áä�4×#Ñ#×(Ñ(Ó)ˆØ×#Ñ#×(Ñ(Ô(Ùð ×!Ñ! !Õ$Ø×!Ñ! !Õ$Ø×!Ñ! !Õ$ð ˆð
 ×!Ñ! "Õ%ˆØ×Ñ×"Ñ" 1Õ%ˆà˜R� B�ˆØ—~‘~×/Ñ/×4Ñ4ˆØ×"Ñ"×*Ñ*ˆð ��:Ü2ð ØØØØôˆIð Ó$Ø $§¡× >Ñ >¸Ó O‘�ØŸ™ a¨AÓ1�ØŸ™¨¨aÓ3�à ×,Ñ,×7Ñ7�	à˜A�JØ" AÐ&Ø" MÐ2Ø&¨
×(>Ñ(>×(DÑ(DÀRÕ(HÐIØ'¨×)=Ñ)=×)CÑ)CÀBÕ)GÐHØ# \×%9Ñ%9×%?Ñ%?ÀÕ%CÐDð�ñ  àØØ"×(Ñ(Ø"×.Ñ.Ø"×1Ñ1Ø"×,Ñ,Ø$×*Ñ*Ø$×,Ñ,ØŸ™×0Ñ0×9Ñ9ØŸ™×2Ñ2Ø×(Ñ(×1Ñ1Ø!ðð &Ø˜a ¥˜Ø *Ø$%¥E¨1 = /Ü#%§:¡: ,ô'ð( õ)�ð* Ÿ™ Q¨1Ó0�Ü—~’~ f°1Ô5Ð5ô �YŠY�¯©×(HÑ(HÓIˆØ�3˜˜˜�7•×#Ñ# A¨!Ó/ˆØ�C˜™�G•×$Ñ$ Q¨1Ó0ˆØˆØ˜]Õ*¨QÕ.°=Õ@ˆô AØ�]ó
ˆô
 4°D¸\ÓJˆð
 ˜R� B�ˆØÐà Ð%÷ 4ð 4Ø Õ! AÕ%Ð)9Ñ9÷4ð 4à !Ñ#×2Ð2 q¨F¡{ð 	÷ ˆ:Ø� Õ.°Ð5ˆIØ� Õ-°Õ1Ð3ˆHá(5àØØ×$Ñ$Ø×*Ñ*Ø×-Ñ-Ø×(Ñ(Ø ×&Ñ&Ø ×(Ñ(Ø—N‘N×,Ñ,×5Ñ5Ø—N‘N×.Ñ.Ø×$Ñ$×-Ñ-ðð ˜A�JØ" AÐ&Ø" MÐ2Ø" MÐ2Ø&¨
×(>Ñ(>×(DÑ(DÀRÕ(HÐIØ'¨×)=Ñ)=×)CÑ)CÀBÕ)GÐHØ# \×%9Ñ%9×%?Ñ%?ÀÕ%CÐDðð ˜!˜Q�U ]Õ2Ð3Ø&Ø(¨(°HÐ=Ü!Ÿz™z¬2¯:©:´r·z±zÐBô5)Ñ%ˆG�W˜gð< —o‘o a¥e¨]¸AÓAˆGØ—o‘o a¥e¨]¸AÓ>ˆGØ—o‘o a¥e¨]¸AÓ>ˆGÜŸš ¨a¸$Ô?ˆJÜŸFšF 7¨ZÕ#7Ó8ˆMÜŸš ¨-¸	Õ*BÕ BÈÔKˆJÜ—F’F˜7 ]Õ2¸Ô;ˆEØ%¬¯
ª
°5¸Õ3CÄTÓ(JÕJ×SÑSØ�aóˆKð ×%Ñ%×5Ñ5°kÓBˆFÜ—>’> &¨qÔ1Ð1àÓ%Ø �V¨�NˆMØ� Õ.°Ð5ˆIØ� Õ-°Õ1Ð3ˆHá(4àØØ×$Ñ$Ø×*Ñ*Ø×-Ñ-Ø×(Ñ(Ø ×&Ñ&Ø ×(Ñ(Ø—N‘N×,Ñ,×5Ñ5Ø—N‘N×.Ñ.Ø×$Ñ$×-Ñ-ðð ˜A�JØ" AÐ&Ø" MÐ2Ø&¨
×(>Ñ(>×(DÑ(DÀRÕ(HÐIØ'¨×)=Ñ)=×)CÑ)CÀBÕ)GÐHØ# \×%9Ñ%9×%?Ñ%?ÀÕ%CÐDØ Ð%ðð ˜-¨­°Õ)>Ð?Ø&Ø(¨(°HÐ=Ü!Ÿz™z¬2¯:©:´r·z±zÐBô5)Ñ%ˆG�W˜gð< —o‘o a¥e¨]¸AÓAˆGØ—o‘o a¥e¨]¸AÓ>ˆGØ—o‘o a¥e¨]¸AÓ>ˆGÜŸš ¨a¸$Ô?ˆJÜŸFšF 7¨ZÕ#7Ó8ˆMÜŸš ¨-¸	Õ*BÕ BÈÔKˆJÜ—F’F˜7 ]Õ2¸Ô;ˆEØ%¬¯
ª
°5¸Õ3CÄTÓ(JÕJ×SÑSØ�aóˆKð ×%Ñ%×5Ñ5°kÓBˆFÜ—>’> &¨qÔ1Ð1ô 1°Ó6ˆÙØØ×ÑØ×"Ñ"Ø×%Ñ%Ø× Ñ Ø×ÑØ× Ñ Ø�N‰N×,Ñ,Ø�N‰N×$Ñ$×-Ñ-Ø�N‰N×&Ñ&Ø×Ñ×%Ñ%Ø×Ñ×%Ñ%ó
ð 	
r   c               ó(   € V ^8„  d   QhRRRRRRRR/# ry  r   )r   s   "r   r   r,  ¨  s8   € ÷ X,ñ X,àðX,ð
 ðX,ð !ðX,ð 
ñX,r   c                	ó˜  € Ve   Vf   V P                   w  r#V P                  V4      pV P                  V4      pVP                  R,          ^8w  d   \        R4      hVP                  w  rgr‰\	        V\
        4      '       d(   VP                  P                  P                  ^,          MVP                  P                  ^,          p
Wz,          pW,          P                  VV
VVV	4      pV P                  P                  p\        V4      pWàP                  8:  Edm   Ve    \	        V\        4      '       EdR   VR8X  EdJ   \	        V P                  \        4      '       EdÝ   \	        V P                  \        4      '       Ed¼   \	        V\         4      '       Ed¥   \	        V\         4      '       EdŽ   \#        V P                  P$                  4      p\#        V P                  P$                  4      pVP&                  pV P                  P)                  V4      pVP                  Wj,          V,          V	4      pWg,          pVR8:  Ed+   \+        VVV	4      pVEe   V! VVP                  VP,                  V P                  P.                  VP                  VP,                  V P                  P.                  .RV	3RV3RVP,                  P                  R,          3RVP,                  P                  R,          3.VR,          ^^3RVV	3.\0        P2                  .R	7      ^ ,          pVP                  WjW¹4      pV P                  P5                  V4      pVP                  WgW�4      P7                  V4      # \9        VVV	4      p\;        4       pVEe´   VEe¯   VR
8:  d   ^@pMVR8:  d   ^€pMVR8:  d   RpMRpVV,          V	3pVV,          3pV! VVP                  VP,                  V P                  P.                  VP                  VP,                  V P                  P.                  .RV	3RV3RV3RVP,                  P                  R,          3RVP,                  P                  R,          3.V
^ ,          Wk,          V3^ V^3VVV.\0        P2                  \0        P2                  \0        P2                  .R	7      w  ppp V! VVV .RV	3RV3.VR,          ^^3RVV	3.\0        P2                  .R	7      ^ ,          pVP                  WjW¹4      pV P                  P5                  V4      pVP                  WgW�4      P7                  V4      # V P=                  VVV4      p!V!e.   V!P                  WgW�4      pVP7                  VP&                  4      # V P?                  VVV4      p"V"e.   V"P                  WgW�4      pVP7                  VP&                  4      # V PA                  VVV4      p"V"e.   V"P                  WgW�4      pVP7                  VP&                  4      # V P                  P)                  V4      p#V P                  PC                  V#V4      p$V P                  PE                  V$V4      pVP                  WgW�4      pVP7                  VP&                  4      # V P                  P)                  V4      p#\0        PF                  ! WjW¸V3\0        P2                  R7      p\0        PF                  ! WjW¸3\0        P2                  R7      p%\0        PH                  ! WjW¸3\K        R4      ) \0        P2                  R7      p&\M        ^ WàP                  4       EF6  p'\O        VV'V P                  ,           4      p(\Q        VV'V(4      p)\Q        VV'V(4      p*V P                  PC                  V#V)4      p$V PS                  V$V^ VV'V(VV4      p$V P                  PU                  V$V*4      w  p+p,p-\0        PV                  ! V&V-4      p.\0        PX                  ! V&V.,
          4      p/\0        PX                  ! V-V.,
          4      p0VV/R,          ,          V+V0R,          ,          ,           pV%V/,          V,V0,          ,           p%T.p&\0        PZ                  ! VV%V&4       EK9  	  V\0        PV                  ! V%R,          \\        4      ,          pVP                  WgW�4      pVP7                  VP&                  4      # )Nz9TurboQuant decode attention expects a single query token.rn  r)  rí   rñ   rF  rG  r™  ró   i    rY  i   r*  i   ÚBlocksr  r{  r?  rü   )r™  rn   rn   r  )/ré   r`  r   rï  r’  rå  rç  r%   r@  r0  r_  r°  r|  rŸ   r/  rî  rê   r0   r¬   r  r-  r4  r  r'   r   r  r  r  r:  r@  r©  rÐ  rÅ  r7  rH  r  r  rê  rO   r  r¤  rv  rO  r  rO  rW  r  )1rö  r-  rc  rd  r`   r­   r  r€  r�  r  r‚  rƒ  rP  r„  rl  r  r  r  r$   Ú
q_rot_flatÚBQHÚfused_kernelr   r¡  rB  Úpass1Úpass2Ú
num_blocksrÀ  rÁ  r¶  r8  r9  Ú
sep_outputrB  r0  rà   r‰  rŠ  ri  rj  r‹  rŒ  r�  rŽ  r�  r�  r‘  r’  s1   &&&&&&                                           r   Údecode_attentionÚ"TurboQuantKVCache.decode_attention¨  sù  € ð Ò Ò!5Ø'+§z¡zÑ$ˆJØ—\‘\ *Ó-ˆ
Ø—|‘| LÓ1ˆà�=‰=˜Õ Ô!ÜØKóð ð %Ÿ]™]Ñˆ�aô ˜*Ô&:×;Ò;ð �N‰N× Ñ ×&Ñ& qÖ)à×!Ñ!×'Ñ'¨Õ*ð 	ð
 Õ+ˆ	à"�?×3Ñ3ØØØØØó
ˆð ×$Ñ$×(Ñ(ˆ	Ü$ ZÓ0ˆà×5Ñ5Õ5ØŠLœZ¨¬c×2Ó2°t¸xÕ7Gô ˜4Ÿ>™>Ô+>×?Ó?Ü˜t×/Ñ/Ô1D×EÓEÜ˜zÔ+=×>Ó>Ü˜|Ô-?×@Ó@ä˜tŸ~™~×2Ñ2Ó3�Ü˜t×/Ñ/×4Ñ4Ó5�ØŸ™�ØŸ™×6Ñ6°ÓG�Ø"Ÿ]™]¨1­>¸IÕ+EÀqÓI�
Ø•m�à 4Õ'ä#;¸HÀhÐPQÓ#R�LØ#Ó/Ù*à *Ø *× 0Ñ 0Ø *× 2Ñ 2Ø $§¡× 7Ñ 7Ø ,× 2Ñ 2Ø ,× 4Ñ 4Ø $× 0Ñ 0× 9Ñ 9ð$ð "'¨ 
Ø!.°	Ð :Ø!/°×1CÑ1C×1IÑ1IÈ"Õ1MÐ NØ!/°×1EÑ1E×1KÑ1KÈBÕ1OÐ Pð	&ð #&¨¥*¨a°Ð!3Ø(4Ø,/°¨8¨*Ü+-¯:©:¨,ô'ð( õ)˜ð* '*§k¡k°!ÀÓ&N˜Ø!%×!1Ñ!1×!AÑ!AÀ+Ó!N˜Ø%Ÿ~™~¨a¸AÓI×PÑPÐQVÓWÐWô 9¸À8ÈQÓO�Ü8Ó:�ØÓ$¨Ó):Ø# tÔ+Ø%'™
Ø%¨Ô.Ø%(™
Ø%¨Ô.Ø%(™
à%(˜
à!$ zÕ!1°1Ð 5�IØ # jÕ 0Ð2�HÙ27à&Ø&×,Ñ,Ø&×.Ñ.Ø ŸN™N×3Ñ3Ø(×.Ñ.Ø(×0Ñ0Ø ×,Ñ,×5Ñ5ð ð # A˜JØ*¨IÐ6Ø% zÐ2Ø+¨Z×-?Ñ-?×-EÑ-EÀbÕ-IÐJØ+¨\×-AÑ-A×-GÑ-GÈÕ-KÐLð"ð '¨�OØ�MØ&ðð
 &(¨°AÐ$6Ø'0°(¸HÐ&EÜ')§z¡z´2·:±:¼r¿z¹zÐ&Jô13Ñ/�G˜X xñ6  Ø '¨°8Ð<Ø#(¨! *¨x¸Ð.DÐ!EØ! D�j¨!¨QÐ/Ø$0Ø(+¨Q x jÜ')§z¡z lôð õ�Cð #&§+¡+¨a¸YÓ"J�KØ!×-Ñ-×=Ñ=¸kÓJ�FØ!Ÿ>™>¨!¸ÓE×LÑLÈUÓSÐSð ×:Ñ:ØØØóˆJð
 Ò%Ø#×+Ñ+¨A¸!ÓG�Ø—}‘} W§]¡]Ó3Ð3ð ×AÑAØØØóˆKð
 Ò&Ø$×,Ñ,¨Q¸1ÓH�Ø—}‘} W§]¡]Ó3Ð3à×?Ñ?ØØØóˆKð
 Ò&Ø$×,Ñ,¨Q¸1ÓH�Ø—}‘} W§]¡]Ó3Ð3à#Ÿ~™~×=Ñ=¸oÓNÐØ—^‘^×2Ñ2Ð3CÀZÓPˆFØ×%Ñ%×>Ñ>¸vÀ|ÓTˆFØ—^‘^ A°!Ó?ˆFØ—=‘= §¡Ó/Ð/àŸ>™>×9Ñ9¸/ÓJÐä—’˜1¨)¸	ÐBÌ"Ï*É*ÔUˆÜ—X’X˜q¨iÐ;Ä2Ç:Á:ÔNˆ
Ü—G’GØ˜IÐ)Ü�5‹\ˆMÜ—*‘*ô
ˆ	ô ˜Q ×.HÑ.H×IˆGÜ˜ g°×0JÑ0JÕ&JÓKˆEÜ*¨:°wÀÓFˆIÜ,¨\¸7ÀEÓJˆKà—^‘^×2Ñ2Ð3CÀYÓOˆFØ×/Ñ/ØØØØØØØØó	ˆFð × Ñ ×?Ñ?ÀÈÓTñ 1ˆL˜+ yô —j’j ¨IÓ6ˆGÜŸš 	¨GÕ 3Ó4ˆJÜŸ&š& ¨WÕ!4Ó5ˆKð ˜ IÕ.Õ.°ÀÈIÕ@VÕ1VÕVð ð $ jÕ0°;ÀÕ3LÕLˆJØˆIÜ�GŠG�F˜J¨	×2ñ; Jð> œ"Ÿ*š* Z°	Õ%:¼DÓAÕAˆØ—‘ ¨aÓ;ˆØ�}‰}˜WŸ]™]Ó+Ð+r   c                	ó   € V P                   # r�   ©r„  r"  s   &r   r/  ÚTurboQuantKVCache.size‚  s   € Ø�{‰{Ðr   c                	ó"  € V P                   f   R# V P                  V P                  8X  d   V P                  # \	        V P                   V P                  4      \	        V P
                  V P                  4      3pWn        V P                  V n        V# )NrH  )r.  r2  r„  r1  rŸ  rV   )rö  Úsliceds   & r   ré   ÚTurboQuantKVCache.state…  sv   € à�9‰9ÒØÐØ×$Ñ$¨¯©Ô3Ø×%Ñ%Ð%Ü˜dŸi™i¨¯©Ó5´|Ø�K‰K˜Ÿ™ó8
ð 
ˆð $ÔØ$(§K¡KˆÔ!Øˆr   c                	ó¬   € R V n         RV n        Vf   R R uV n        V n        ^ V n        R # Vw  V n        V n        \        V P                  4      V n        R # rU  )r1  r2  r.  rV   r„  r°  ©rö  rû  s   &&r   ré   rã  ’  sO   € à!ˆÔØ$&ˆÔ!ØŠ=Ø%)¨4Ð"ˆDŒI�t”{ØˆDŒKÙØ!&ÑˆŒ	�4”;Ü# D§I¡IÓ.ˆŽr   c                	óv   € \        \        \        V P                  V P                  V P
                  34      4      # r�   )r“  ÚmaprŸ   r„  r¬   r  r"  s   &r   Ú
meta_stateÚTurboQuantKVCache.meta_state�  s'   € ä”Sœ˜tŸ{™{¨D¯I©I°t·y±yÐAÓBÓCÐCr   c                	ó�   € \        V^ ,          4      V n        \        V^,          4      V n        \        V^,          4      V n        R# ©r   N)r0   r„  rê  r¬   r  rå  s   &&r   rè  ré  ¡  s/   € ä˜% �(“mˆŒÜ˜% �(“OˆŒ	Ü˜˜a�“MˆŽ	r   c                	ó   € R # )Tr   r"  s   &r   Úis_trimmableÚTurboQuantKVCache.is_trimmable§  s   € Ùr   c                	ó€   € \        V P                  V4      pV ;P                  V,          un        R V n        RV n        V# rU  )r  r„  r1  r2  ©rö  r%  s   &&r   ÚtrimÚTurboQuantKVCache.trimª  s5   € Ü�—‘˜QÓˆØ�Š�qÕ�Ø!ˆÔØ$&ˆÔ!Øˆr   c                	ó0   € \        VR V P                  /VB # rß  )r   r„  )rö  ÚargsÚkwargss   &*,r   Ú	make_maskÚTurboQuantKVCache.make_mask±  s   € Ü$ dÐI°4·;±;ÐIÀ&ÑIÐIr   c                	ó   € V P                   R J # r�   ©r.  r"  s   &r   r_  ÚTurboQuantKVCache.empty´  ó   € Ø�y‰y˜DÐ Ð r   c                	ó,   € \        V P                  4      # r�   )r©  ré   r"  s   &r   r¬  ÚTurboQuantKVCache.nbytes·  s   € ä˜TŸZ™ZÓ(Ð(r   )r1  r2  r3  r4  r¬   r/  r.  r„  r  r0  rV   i   @rH  )NNr.  N)$rÚ  rÛ  rÜ  rÝ  r|  r}  r~  rV  ÚDEFAULT_TURBOQUANT_SEEDr÷  Úclassmethodr=  rC  rQ  r9  Ústaticmethodr`  r)  rv  r“  r¢  r©  rÅ  rÐ  rÜ  r/  Úpropertyré   Úsetterrè  rí  rñ  rö  r_  r¬  rß  r   r   r   r(  r(  P  s  † Ø#ÐØ!ÐØ!ÐØ€Jà0G÷ #ð à-Döó ðõò*7
õr%
ðN ñRó ðRôõ#÷>],÷~DHõLS.õj.õB]
÷~X,òtð ñ
ó ð
ð ‡\�\ñ/ó ð/ð ñDó ðDð ×Ññ"ó ð"ò
òòJò!ð ñ)ó ô)r   r(  c                  ó  € ] tR tRtRtRt]3R R lltR R ltR R	 lt	R
 R lt
R R ltRR lt]R 4       t]P                  R 4       t]R 4       t]P                  R 4       tR tR tR tRR R llt]R 4       t]R 4       tRtR# )ÚBatchTurboQuantKVCachei¿  af  Batch-aware TurboQuant KV cache for continuous batching.

Wraps TurboQuant's quantization codecs with per-sequence offsets and
left-padding so that ``Batch.extend`` / ``Batch.filter`` work during
continuous batching.

Unlike ``BatchQuantizedKVCache`` (uniform ``mx.quantize``), this uses
TurboQuant's MSE/Prod codecs for higher quality at the same bit-rate.
r*  c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úleft_paddingr  r¬   rê  r  r0   r   )r   s   "r   r   Ú#BatchTurboQuantKVCache.__annotate__Ì  s(   € ÷ ñ àðð ðð ñ	r   c                	ó  € \        V4      V n        W0n        R V n        R V n        R V n        R V n        \        P                  ! V4      V n	        \        P                  ! V Uu. uF  qD) NK  	  up4      V n
        ^ V n        R # u upi r�   )rô  r¬   r  r.  rV   r/  r0  r   r  r  r„  Ú_idx)rö  r  r¬   r  Úlps   &&&& r   r÷  ÚBatchTurboQuantKVCache.__init__Ì  sn   € ô # 4Ó(ˆŒ	ØŒ	ØˆŒ	ØˆŒØˆŒØˆÔÜŸHšH \Ó2ˆÔÜ—h’h©lÓ;©l¨£©lÑ;Ó<ˆŒØˆŽ	ùò  <s   Á"Bc               ó   € V ^8„  d   QhRR/# )r   r.  rè   r   )r   s   "r   r   r  à  s   € ÷ +ñ + 8ñ +r   c                	óô   € V P                   e   R # VP                  R,          p\        V P                  V P                  R7      pVP                  W4       VP                   V n         VP                  V n        R # )Nr8  rü   )r/  r   r(  r¬   r  rC  r0  )rö  r.  r  Útmps   &&  r   rC  Ú%BatchTurboQuantKVCache._ensure_codecsà  sU   € Ø�>‰>Ò%ÙØ�J‰J�r�Nˆä T§Y¡Y°T·Y±YÔ?ˆØ×Ñ˜4Ô&ØŸ™ˆŒØŸ?™?ˆÖr   c               ó    € V ^8„  d   QhRRRR/# r@  r   )r   s   "r   r   r  î  s   € ÷ "
ñ "
 Xð "
°xñ "
r   c                	ó<  € V P                  V4       V P                  pV P                  P                  V4      pV P                  P                  V4      pW1P
                  ^,          ,           pV P                  f"   \        WF4      V n        \        WV4      V n        ML\        V P                  W6V P                  4      V n        \        V P                  W6V P                  4      V n        \        V P                  WC4       \        V P                  WS4       V ;P                  VP
                  ^,          ,          un        W`n        VP
                  ^,          ^8”  g   V P                  ^2,          ^ 8X  d,   \        P                  ! V P                  V P                  4       \        V P                  V P                  4      p\        V P                  V P                  4      pVP
                  ^,          p	\!        WpP                  V	4      \!        W€P                  V	4      3# r
  )rC  r	  r/  r%  r0  r   r.  r¶  rV   rì  rV  r¹  r„  r   rW  rŸ  r  )
rö  r.  rV   ÚprevrX  rY  rZ  r\  r]  r  s
   &&&       r   r9  Ú'BatchTurboQuantKVCache.update_and_fetchî  sv  € Ø×Ñ˜DÔ!Ø�y‰yˆà—>‘>×*Ñ*¨4Ó0ˆØ×%Ñ%×.Ñ.¨vÓ6ˆ
àŸ™ A�Õ&ˆØ�9‰9ÒÜ,¨XÓ?ˆDŒIÜ.¨zÓCˆD�Kä/Ø—	‘	˜4¨$¯/©/óˆDŒIô 2Ø—‘˜T¨D¯O©OóˆDŒKô 	�T—Y‘Y Ô/Ü�T—[‘[ *Ô3à�Š�t—z‘z !•}Õ$�ØŒ	à�:‰:�a�=˜1Ô §¡¨R¥°1Ô!4Ü�GŠG�D—I‘I˜tŸ{™{Ô+ä˜$Ÿ)™) T§Y¡YÓ/ˆÜ˜$Ÿ+™+ t§y¡yÓ1ˆØ—*‘*˜Q•-ˆä  §Y¡Y°Ó8Ü  §Y¡Y°Ó8ð
ð 	
r   c               ó   € V ^8„  d   QhRR/# rÍ  r   )r   s   "r   r   r    s   € ÷ (ñ ( Hñ (r   c                	óJ  a€ V P                   e7   \        V P                   V4      V n         \        V P                  V4      V n        V P                  V,          V n        V P                  V,          V n        V P                  P                  4       P                  4       oS^ 8”  d   V P                   e=   V3R lp\        V P                   V4      V n         \        V P                  V4      V n        V ;P                  S,          un        V ;P                  S,          un        R # R # )Nc                óH   <€ V^8X  d   V RSR13,          # V RSR1R3,          # )rÛ  .Nr~  r   )rÑ  rÿ   Úmin_lps   &&€r   Ú_trimÚ,BatchTurboQuantKVCache.filter.<locals>._trim!  s-   ø€ Ø˜q”yØ   f¡g �Ð.Ø˜S &¡'¨1˜_Õ-Ð-r   )	r.  rÕ  rV   r„  r  r  ÚitemrÃ  r	  )rö  rÎ  r  r  s   && @r   ÚfilterÚBatchTurboQuantKVCache.filter  sÑ   ø€ Ø�9‰9Ò Ü% d§i¡i°Ó?ˆDŒIÜ'¨¯©°]ÓCˆDŒKØ—k‘k -Õ0ˆŒØ ×-Ñ-¨mÕ<ˆÔà×"Ñ"×&Ñ&Ó(×-Ñ-Ó/ˆØ�AŒ:Ø�y‰yÒ$õ.ô
 ' t§y¡y°%Ó8�”	Ü(¨¯©°eÓ<�”Ø�IŠI˜Õ�IØ×Ò Õ'×ñ r   c               ó   € V ^8„  d   QhRR/# )r   Úotherz'BatchTurboQuantKVCache'r   )r   s   "r   r   r  +  s   € ÷ 1ñ 1Ð4ñ 1r   c                	óâ  a€ V P                   fs   VP                   fe   \        P                  ! V P                  VP                  .4      V n        \        P                  ! V P                  VP                  .4      V n        R # \        V P                  VP                  4      oV3R lpV! V 4      pV! V4      pVfi   Vfe   \        P                  ! V P                  VP                  .4      V n        \        P                  ! V P                  VP                  .4      V n        R # Vfo   Vw  V n         V n        rV\        P                  ! V P                  V.4      V n        \        P                  ! V P                  S,           V.4      V n        SV n        R # Vfm   Vw  V n         V n        rV\        P                  ! WQP                  .4      V n        \        P                  ! WaP                  S,           .4      V n        SV n        R # Vw  rxrVVw  ršr¼\        Wy4      V n         \        WŠ4      V n        \        P                  ! W[.4      V n        \        P                  ! Wl.4      V n        SV n        R # )Nc                ó:  <€ V P                   f   R # SV P                  ,
          p^ p\        \        V P                   V P                  4      W4      p\        \        V P                  V P                  4      W4      pV P
                  V,           pW4V P                  V3# r�   )r.  r	  rÞ  rŸ  rV   r  r„  )Ú	cache_objr×  rØ  Úkr…  r
  Úmax_idxs   &     €r   Ú	_pad_sideÚ0BatchTurboQuantKVCache.extend.<locals>._pad_side3  sˆ   ø€ Ø�~‰~Ò%ÙØ˜YŸ^™^Õ+ˆDØˆEÜ!Ü˜YŸ^™^¨Y¯^©^Ó<¸dóˆAô "Ü˜Y×-Ñ-¨y¯~©~Ó>ÀóˆAð ×'Ñ'¨$Õ.ˆBØ˜×)Ñ)¨2Ð-Ð-r   )	r.  r   rÊ  r  r„  rF  r	  rV   rä  )rö  r  r$  Úr_selfÚr_otherÚsoÚslpÚskÚsvÚokÚovÚooÚolpr#  s   &&           @r   r·   ÚBatchTurboQuantKVCache.extend+  sÕ  ø€ Ø�9‰9Ò §¡Ò!3Ü "§¢°×0AÑ0AÀ5×CUÑCUÐ/VÓ WˆDÔÜŸ.š.¨$¯+©+°u·|±|Ð)DÓEˆDŒKÙä�d—i‘i §¡Ó,ˆõ	.ñ ˜4“ˆÙ˜EÓ"ˆàŠ>˜gšoÜ "§¢°×0AÑ0AÀ5×CUÑCUÐ/VÓ WˆDÔÜŸ.š.¨$¯+©+°u·|±|Ð)DÓEˆDŒKÙØŠ>Ø.5Ñ+ˆDŒI�t”{ BÜŸ.š.¨$¯+©+°rÐ):Ó;ˆDŒKÜ "§¢°×0AÑ0AÀGÕ0KÈSÐ/QÓ RˆDÔØˆDŒIÙØŠ?Ø.4Ñ+ˆDŒI�t”{ BÜŸ.š.¨"¯l©lÐ);Ó<ˆDŒKÜ "§¢°×5GÑ5GÈ'Õ5QÐ/RÓ SˆDÔØˆDŒIÙà ‰ˆ�Ø!‰ˆ�ä'¨Ó/ˆŒ	Ü)¨"Ó1ˆŒÜ—n’n b XÓ.ˆŒÜŸNšN¨C¨:Ó6ˆÔØˆŽ	r   Nc                	ó   € Ve   VfA   \        V P                  V P                  4      p\        V P                  V P                  4      p\	        V\
        4      '       d   VP                  p\	        V\
        4      '       d   VP                  pV P                  P                  V4      P                  \        P                  4      pV P                  P                  V4      P                  \        P                  4      pW43# r�   )rŸ  r.  r	  rV   r’  r  r  r/  r)  r  r   r  r0  )rö  rc  rd  r"  r…  s   &&&  r   r)  Ú!BatchTurboQuantKVCache.dequantizeb  s¶   € ØÒ Ò!5Ü% d§i¡i°·±Ó;ˆJÜ'¨¯©°T·Y±YÓ?ˆLÜ�jÔ"6×7Ò7Ø#×*Ñ*ˆJÜ�lÔ$8×9Ò9Ø'×.Ñ.ˆLØ�N‰N×%Ñ% jÓ1×8Ñ8¼¿¹ÓDˆØ×Ñ×'Ñ'¨Ó5×<Ñ<¼R¿Z¹ZÓHˆØˆtˆr   c                	ó  € V P                   f   R R V P                  V P                  3# \        V P                   V P                  4      p\        V P
                  V P                  4      pWV P                  V P                  3# r�   )r.  r„  r  rŸ  r	  rV   )rö  r"  r…  s   &  r   ré   ÚBatchTurboQuantKVCache.stater  sd   € à�9‰9ÒØ˜˜tŸ{™{¨D×,=Ñ,=Ð=Ð=Ü˜Ÿ™ D§I¡IÓ.ˆÜ˜Ÿ™ d§i¡iÓ0ˆØ�T—[‘[ $×"3Ñ"3Ð3Ð3r   c                	ó�   € Vw  V n         V n        V n        V n        V P                   e   \	        V P                   4      V n        R # R # r�   )r.  rV   r„  r  r°  r	  )rö  Úvals   &&r   ré   r4  z  s8   € àADÑ>ˆŒ	�4”; ¤¨TÔ->Ø�9‰9Ò Ü% d§i¡iÓ0ˆDŽIñ !r   c                	óv   € \        \        \        V P                  V P                  V P
                  34      4      # r�   )r“  rç  rŸ   r	  r¬   r  r"  s   &r   rè  Ú!BatchTurboQuantKVCache.meta_state€  s'   € ä”Sœ˜tŸy™y¨$¯)©)°T·Y±YÐ?Ó@ÓAÐAr   c                	ó�   € \        V^ ,          4      V n        \        V^,          4      V n        \        V^,          4      V n        R# rë  )r0   r	  rê  r¬   r  )rö  r…  s   &&r   rè  r8  „  s/   € ä˜˜!�“IˆŒ	Ü˜!˜A�$“KˆŒ	Ü˜˜!�“IˆŽ	r   c                	ó   € R # ©Fr   r"  s   &r   rí  Ú#BatchTurboQuantKVCache.is_trimmableŠ  s   € Ùr   c                	ó   € ^ # rý  r   rð  s   &&r   rñ  ÚBatchTurboQuantKVCache.trim�  s   € Ùr   c                	ó   € V P                   R J # r�   rù  r"  s   &r   r_  ÚBatchTurboQuantKVCache.empty�  rû  r   c               ó    € V ^8„  d   QhRRRR/# )r   ÚNr0   Úreturn_arrayr   r   )r   s   "r   r   r  “  s   € ÷ 
ñ 
˜3ð 
¨dñ 
r   c                	óJ   € \        V3R V P                  RV P                  /VB # )r„  r  )r	   r	  r  )rö  rB  rC  rõ  s   &&&,r   rö  Ú BatchTurboQuantKVCache.make_mask“  s4   € Ü!Øñ
Ø—i‘ið
Ø.2×.?Ñ.?ð
ØCIñ
ð 	
r   c                	ó   € ^@# )é@   r   r"  s   &r   Ú
group_sizeÚ!BatchTurboQuantKVCache.group_size˜  s   € ñ r   c                	óØ   € V P                   f   ^ # \        V P                   V P                  4      p\        V P                  V P                  4      p\	        V4      \	        V4      ,           # r�   )r.  rŸ  r	  rV   r©  )rö  Úsr…  s   &  r   r¬  ÚBatchTurboQuantKVCache.nbytesž  sL   € à�9‰9ÒÙÜ˜Ÿ™ D§I¡IÓ.ˆÜ˜Ÿ™ d§i¡iÓ0ˆÜ˜QÓ¤-°Ó"2Õ2Ð2r   )	r	  r¬   r/  r.  r  r„  r  r0  rV   rH  r;  )rÚ  rÛ  rÜ  rÝ  r%  rV  rþ  r÷  rC  r9  r  r·   r)  r  ré   r  rè  rí  rñ  r_  rö  rH  r¬  rß  r   r   r   r  r  ¿  sË   † ñð €Jð ,÷	õ(+õ"
õP(õ*1ôn
ð  ñ4ó ð4ð ‡\�\ñ1ó ð1ð
 ñBó ðBð ×Ññó ðò
òò!÷
ð
 ñó ðð
 ñ3ó ô3r   r  r�   )rü   )rü   F)r2   )r*  )ró  r;  )nÚ
__future__r   rñ  Ú	functoolsr   Útypingr   r   Úmlx.coreÚcorer   Únumpyr  Úmlx_lm.models.cacher   r   r	   rþ  r  r  r   r,   rS   rW   rZ   ra   rf   rk   rŒ   r®   rÀ   rÓ   râ   ræ   r  r  r  r0  r5  r<  rC  rH  rK  rd  r¼  rÂ  rÈ  rê  rý  r  r  r  r4  r:  r@  r]  rù  ro  ry  r�  rŽ  r°  r×  rê   r  râ  r  rå  rô  rù  rþ  r  r  r#  r(  r+  r2  r@  r:  rE  rV  ri  rq  rv  rz  r†  rŠ  r”  rŸ  r¤  r©  r°  r¶  r¹  rÃ  rÉ  rÕ  rÞ  rä  rì  rî  rR  rˆ  r±  rÝ  rß  r  r  r(  r  r   r   r   Ú<module>rT     sT  ðÝ "ã Ý ß 'å Û ß UÑ UàÐ Ø€ØÐ õ<ñ �4Ôñ1ó ð1ñh �4Ôô[ó ð[ñ| �4Ôñ(ó ð(ñV �4Ôñó ðñ> �4Ôñ0ó ð0ñf �4ÔñHó ðHñV �4Ôñ4ó ð4ñn �4Ôôkó ðkñ\ �4ÔôJó ðJñZ �4Ôô~ó ð~ñB �4ÔôGó ðGñT �4ÔôTó ðTñn �4ÔôPó ðPõf8*õv*õDI*õX+*õ\8*õv-÷"G*÷T6*÷r5*ñp �4Ôô/ó ð/ñd �4ÔöMó ðMñ` �4ÔôAó ðAñH �4Ôô=ó ð=ñ@ �4ÔöUó ðUñp �4ÔöNó ðN÷b4÷n.÷ñ �4ÔöCó ðCñL �4Ôödó ðdñN �4ÔñPó ðP÷f!÷HñD �4Ôôyó ðyñx �4ÔôIó ðI÷XXñv �4ÔöTó ðTñn �4ÔôQó ðQñh �4Ôôpó ðpôf˜ô ô
˜*ô ô(˜:ô (ô
˜zô ô˜:ô õ
	÷=õ4õ7õ&ñ �4Ôô
*ó ð
*õ5ñ �4Ôô#ó ð#ñ �4Ôôó ðõõñ �4Ôô/ó ð/õñ$ �4Ôô$2ó ð$2õN	ñ �4Ôô&2ó ð&2õR&õ$>õN$:òN%IõPKõ@ KõF	õKõ 9KõxIò@$KòN HõF?õ
#òRõ
÷k)ñ k)÷\_Dñ _D÷DtIñ tI÷nBIñ BIõJ÷*aOñ aOõH1÷!ñ !ô*i)˜
ô i)ô^#e3˜Zö e3r   