+
    UV-jcb  ã                   ó<  € ^ RI Ht ^ RIHtHt ^ RIHt ^ RIH	t	 ]P                  P                  4       tRtRtRtRtR R	 ltR
 R ltR R lt]P(                  R 4       tR R ltR R ltR R ltR R ltR R ltR R ltR R lt]! RR7      R R l4       tR  t]! RR7      R! R" l4       tRPR# lt ]! RR7      R$ R% l4       t!]! RR7      R& R' l4       t"R(RR)RR*RQ/R+ R, llt#R- R. lt$]P(                  R/ 4       t%R0RR/R1 R2 llt&]P(                  R3 4       t'R4R5/R6 R7 llt(R4R5R8R/R9 R: llt) ! R; R<]	PT                  4      t+R= t,R> t-R?R@RAR/RB RC llt.]P(                  RD 4       t/RE t0RF t1RG]RHRRI^R?R@/RJ RK llt2RG]/RL RM llt3RHRRI^R4R5R?R@/RN RO llt4R# )Sé    )Ú	lru_cache)ÚOptionalÚSequenceNÚ
half_splitÚeven_oddÚhalfÚfullc                ó:   € V ^8„  d   QhR\         \        ,          /# )é   Úlengths©r   Úint)Úformats   "Új/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/rope_utils.pyÚ__annotate__r      s   € ÷ =ñ =¤¬¥ñ =ó    c                 ó|   € \         P                  ! \         P                  ! V \         P                  R 7      4      RR # )©ÚdtypeNéÿÿÿÿ)ÚmxÚcumsumÚarrayÚint32)r   s   &r   Ú_cumulative_splitsr      s'   € Ü�9Š9”R—X’X˜g¬R¯X©XÔ6Ó7¸¸Ð<Ð<r   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# ©r   Úmrope_sectionÚfreq_dimr   )r   s   "r   r   r      s   € ÷ .ñ .´(¼3µ-ð .Ì3ñ .r   c                 óì   € ^ .V,          p\        R^R7       F4  w  r4\        V\        W,          ^,          V4      ^4       F  pW2V&   K	  	  K6  	  \        P                  ! V\        P
                  R7      # )r   ©Ústartr   )é   r   ©Ú	enumerateÚrangeÚminr   r   r   )r   r   ÚselectorÚdimÚoffsetÚidxs   &&    r   Ú_interleaved_position_selectorr,      sa   € Øˆs�X�~€HÜ  ¨q×1‰ˆÜ˜¤ ]Õ%7¸!Õ%;¸XÓ!FÈÖJˆCØ�S‹Mó Kñ 2ô �8Š8�H¤B§H¡HÔ-Ð-r   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# r   r   )r   s   "r   r   r      s   € ÷ .ñ .¬h´s­mð .Äsñ .r   c                 ó  € ^ .V,          pV ^ ,          p\        V R,          ^R7       F4  w  rE\        V\        W5,           V4      4       F  pWBV&   K	  	  W5,          pK6  	  \        P                  ! V\        P
                  R7      # )r   :r#   NNr!   r   r$   )r   r   r(   r*   r)   Úlengthr+   s   &&     r   Ú_chunked_position_selectorr0      sp   € Øˆs�X�~€HØ˜1Õ€FÜ  ¨rÕ!2¸!×<‰ˆÜ˜¤ V¥_°hÓ!?Ö@ˆCØ�S‹Mñ AàÕŠñ =ô �8Š8�H¤B§H¡HÔ-Ð-r   c                 ó    € \         P                  ! W^ R7      P                  ^^^ 4      pVP                  \         P                  4      V,          # )r   ©Úaxis)r   ÚtakeÚ	transposeÚastypeÚfloat32)Úposition_idsÚinv_freqÚposition_selectorÚ	positionss   &&& r   Ú_selected_mrope_freqsr<   $   s<   € ä—’˜¸aÔ@×JÑJÈ1ÈaÐQRÓS€IØ×ÑœBŸJ™JÓ'¨(Õ2Ð2r   c                óR   € V ^8„  d   QhR\         R\        \        ,          R\        /# )r   Ústyler   r   )Ústrr   r   )r   s   "r   r   r   *   s&   € ÷ ?ñ ?¤3ð ?´xÄµ}ð ?ÔPSñ ?r   c                 ó<   € V R 8X  d   \        W4      # \        W4      # )Úinterleaved)r,   r0   )r>   r   r   s   &&&r   Úmrope_position_selectorrB   *   s    € Ø�ÔÜ-¨mÓFÐFÜ% mÓ>Ð>r   c                ó$   € V ^8„  d   QhR\         /# ©r   r>   ©r?   )r   s   "r   r   r   0   s   € ÷ ?ñ ?¬#ñ ?r   c                 ó   € V R9   # )Úchunked>   rG   rA   Úsplit_select© ©r>   s   &r   Ú_selects_frequency_by_positionrK   0   s   € ØÐ>Ñ>Ð>r   c                ó$   € V ^8„  d   QhR\         /# rD   rE   )r   s   "r   r   r   4   s   € ÷ Cñ Cœsñ Cr   c                 ó   € V R9   # )Úsectioned_half_split>   Úsectioned_even_oddrN   rI   rJ   s   &r   Ú_is_sectioned_stylerP   4   s   € ØÐBÑBÐBr   c                ó$   € V ^8„  d   QhR\         /# rD   rE   )r   s   "r   r   r   8   s   € ÷ Oñ O¤Sñ Or   c                 ó>   € \        V 4      ;'       g    \        V 4      # ©N)rK   rP   rJ   s   &r   Ú_has_mrope_apply_selectorrT   8   s   € Ü)¨%Ó0×NÐNÔ4GÈÓ4NÐNr   c                ó$   € V ^8„  d   QhR\         /# rD   rE   )r   s   "r   r   r   <   s   € ÷ Gñ G¤#ñ Gr   c                 ó   € V R9   # )rO   >   Úernie_3drH   rO   rI   rJ   s   &r   Ú_uses_even_odd_pairingrX   <   s   € ØÐFÑFÐFr   c                ó$   € V ^8„  d   QhR\         /# rD   rE   )r   s   "r   r   r   @   s   € ÷ ;ñ ;¤#ñ ;r   c                 ó   € V R9   # )rO   >   rH   rO   rI   rJ   s   &r   Ú_needs_even_odd_layoutr[   @   s   € ØÐ:Ñ:Ð:r   c                ó$   € V ^8„  d   QhR\         /# rD   rE   )r   s   "r   r   r   D   s   € ÷ ñ œcñ r   c                 ó<   € \        V 4      '       d   \        # \        # rS   )rX   Ú	_EVEN_ODDÚ_HALF_SPLITrJ   s   &r   Ú_pairing_for_styler`   D   s   € Ü˜e×$Ò$ÜÐÜÐr   )Úmaxsizec                ó<   € V ^8„  d   QhR\         R\         R\        /# ©r   Ú
rotary_dimÚposition_ndimÚpairing©r   r?   )r   s   "r   r   r   K   s+   € ÷ Sñ SÜðSäðSô ñSr   c           	      ó  € \         '       g   R # V^8X  d   RpRpMRpRpV\        8X  d   RV RV R2pM	RV RV R2pR	V ^,           R
V  RV  RV R2	p\        P                  P	                  RV RV  RV R2. ROR.VR7      # )Nzposition_ids[b * q_len + t]Ú z,position_ids[(axis * q_bsz + b) * q_len + t]ú,int axis = int(position_selector[freq_idx]);ú`
        int freq_idx = slot;
        int d = freq_idx * 2;
        int pair_d = d + 1;
        z(
        float pos = static_cast<float>(z™);
        float angle = pos * static_cast<float>(inv_freq[freq_idx]);
        float c = metal::cos(angle);
        float s = metal::sin(angle);
        úc
        int freq_idx = slot;
        int d = freq_idx;
        int pair_d = d + half_dim;
        zN
        uint elem = thread_position_in_grid.x;

        const int half_dim = zÉ;
        const int q_bsz = x_shape[0];
        const int q_heads = x_shape[1];
        const int q_len = x_shape[2];
        const int q_dim = x_shape[3];
        const int slots = half_dim + q_dim - áÖ  ;
        const int work_size = q_bsz * q_heads * q_len * slots;

        if (elem >= uint(work_size)) {
            return;
        }

        int local = int(elem);
        int slot = local % slots;
        int tmp = local / slots;
        int t = tmp % q_len;
        tmp = tmp / q_len;
        int h = tmp % q_heads;
        int b = tmp / q_heads;
        int base = ((b * q_heads + h) * q_len + t) * q_dim;

        if (slot >= half_dim) {
            int pass_d = ú� + slot - half_dim;
            int pass_idx = base + pass_d;
            x_out[pass_idx] = x[pass_idx];
            return;
        }

        a   

        int idx = base + d;
        float xv = static_cast<float>(x[idx]);
        float xp = static_cast<float>(x[base + pair_d]);
        x_out[idx] = static_cast<T>(xv * c - xp * s);
        x_out[base + pair_d] = static_cast<T>(xp * c + xv * s);
    Úmrope_apply_Ú_ÚdÚx_out©ÚnameÚinput_namesÚoutput_namesÚsource)Úxr8   r9   r:   )Ú
_HAS_METALr^   r   ÚfastÚmetal_kernel)rd   re   rf   Úposition_exprÚselector_sourceÚpair_sourcerw   s   &&&    r   Ú_mrope_apply_kernelr   J   sù   € ÷ ‹:Ùà˜ÔØ5ˆØ‰àFˆØHˆà”)Ôð	ð 
Ðð (Ø(5 ð 7	ð	‰ð	ð 
Ðð (Ø(5 ð 7	ð	ˆðð )¨A�oÐ.ð /.ð
 /9¨\ð :ð" %˜ð &	ð 
ˆð ð?&€FôP �7‰7×ÑØ˜G˜9 A j \°°=°/ÀÐCÚJØ�YØð	  ó ð r   c                 ó<   a aaa€ VV VV3R  lpV! V4      V! V4      3# )c           	      ó„  <€ SP                   ^ ,          pWP                   R,          ,           V^,          ,
          pV P                   ^ ,          V P                   ^,          ,          V P                   ^,          ,          V,          pS! V SSS.RV P                  3.V^^3RV P                   .V P                  .R7      w  pV# )r   ÚT©ÚinputsÚtemplateÚgridÚthreadgroupÚoutput_shapesÚoutput_dtypesr   ©é   r#   r#   )Úshaper   )	rx   Úhalf_dimÚslotsÚ	work_sizeÚoutr9   Úkernelr8   r:   s	   &    €€€€r   Ú	apply_oneÚ$_fast_mrope_apply.<locals>.apply_one©   s£   ø€ Ø—>‘> !Õ$ˆØŸ7™7 2�;Õ&¨°A­Õ5ˆØ—G‘G˜A•J §¡¨¥Õ+¨a¯g©g°a­jÕ8¸5Õ@ˆ	ÙØ�| XÐ/@ÐAØ˜AŸG™G�nÐ%Ø˜Q Ð"Ø#ØŸ7™7˜)ØŸ7™7˜)ô
‰ˆð ˆ
r   rI   )r‘   ÚqÚkr8   r9   r:   r’   s   f&&fff r   Ú_fast_mrope_applyr–   ¡   s"   û€ ÷ð ñ �Q‹<™ 1›Ð%Ð%r   c          
      óT   € V ^8„  d   QhR\         R\        R\         R\        R\        /# ©r   rd   rf   Úcos_ndimÚ	sectionedÚ
cos_layout©r   r?   Úbool)r   s   "r   r   r   »   sA   € ÷ }ñ }Üð}äð}ô ð}ô ð	}ô
 ñ}r   c                 ón  € \         '       g   R # V\        8X  d   RpMRpV\        8X  d   RpRpMV\        8X  d   RpRpMRpRpV'       d,   RV  RV R2pR	V  RV R2p	RV  RV R2p
R	V  RV R2pR
p. R OpM\V^8X  d,   RV  RV R2pRV  RV R2p	RV  RV R2p
RV  RV R2pRp. R!OpM*RV  RV R2pRV  RV R2p	RV  RV R2p
RV  RV R2pRp. R!OpRV ^,           RV  RV  RV RV RV RV	 RV
 RV R2pV'       d   RMRp\        P
                  P                  RV RV RV RV  RV R2VR.VR7      # )"Nrk   rl   Úfreq_idxÚpair_drq   z'cos[((axis * q_bsz + b) * q_len + t) * z + Ú]z'sin[((axis * q_bsz + b) * q_len + t) * rj   z$cos[((0 * q_bsz + b) * q_len + t) * z$sin[((0 * q_bsz + b) * q_len + t) * ri   zcos[(b * q_len + t) * zsin[(b * q_len + t) * zè
        uint elem = thread_position_in_grid.x;

        const int q_bsz = x_shape[0];
        const int q_heads = x_shape[1];
        const int q_len = x_shape[2];
        const int q_dim = x_shape[3];
        const int half_dim = z/;
        const int slots = half_dim + q_dim - rm   rn   z	
        z&
        float c = static_cast<float>(z();
        float s = static_cast<float>(z));
        float cp = static_cast<float>(z));
        float sp = static_cast<float>(a  );

        int idx = base + d;
        float xv = static_cast<float>(x[idx]);
        float xp = static_cast<float>(x[base + pair_d]);
        x_out[idx] = static_cast<T>(xv * c - xp * s);
        x_out[base + pair_d] = static_cast<T>(xp * cp + xv * sp);
    rš   ÚpreselectedÚrotary_apply_rp   rr   rs   )rx   ÚcosÚsinr:   )rx   r¤   r¥   )ry   r^   r_   Ú	_FULL_COSr   rz   r{   )rd   rf   r™   rš   r›   r~   Úcos_freq_idxÚpair_cos_freq_idxÚcos_exprÚsin_exprÚpair_cos_exprÚpair_sin_exprr}   ru   rw   Úsection_suffixs   &&&&&           r   Ú_rotary_apply_kernelr®   º   sv  € ÷ ‹:Ùà”)Ôð‰ðˆð ”+ÔØ!ˆØ$ÑØ	”yÔ	 ØˆØ$Ñà!ˆØ&Ðçà5°j°\ÀÈÈÐVWÐXð 	ð 6°j°\ÀÈÈÐVWÐXð 	ð 6°j°\ÀØ Ð! ð$ð 	ð
 6°j°\ÀØ Ð! ð$ð 	ð IˆÚ>‰Ø	�QŒØ9¸*¸ÀSÈÈÐVWÐXˆØ9¸*¸ÀSÈÈÐVWÐXˆà2°:°,¸cØ Ð! ð$ð 	ð
 3°:°,¸cØ Ð! ð$ð 	ð ˆÚ)‰à+¨J¨<°s¸<¸.ÈÐJˆØ+¨J¨<°s¸<¸.ÈÐJˆØ0°°¸CÐ@QÐ?RÐRSÐTˆØ0°°¸CÐ@QÐ?RÐRSÐTˆØˆÚ)ˆðð )¨A�oÐ.ð /.Ø.8¨\ð :ð" %˜ð &	ð 
ˆð 	Ø	Ðð &Ø&. Zð 0&Ø&. Zð 0'Ø'4 oð 6'Ø'4 oð 6ðI+€F÷Z %.‘[°=€NÜ�7‰7×Ñà˜G˜9 A j \°°>Ð2BÀ!Øˆl˜!˜H˜: Qð(ð  Ø�YØð  ó ð r   c                 ó<   a aaa€ VV VV3R  lpV! V4      V! V4      3# )c           	      ó²  <€ SP                   R,          pV^,          V P                   R,          ,           V,
          pV P                   ^ ,          V P                   ^,          ,          V P                   ^,          ,          V,          pV SS	.pSe   VP                  S4       S! VRV P                  3.V^^3RV P                   .V P                  .R7      w  pV# )r#   r‚   rƒ   r   rŠ   )rŒ   Úappendr   )
rx   rd   rŽ   r�   r„   r�   r¤   r‘   r:   r¥   s
   &     €€€€r   r’   Ú%_fast_rotary_apply.<locals>.apply_one<  s¸   ø€ Ø—Y‘Y˜r•]ˆ
Ø˜a• !§'¡'¨"¥+Õ-°
Õ:ˆØ—G‘G˜A•J §¡¨¥Õ+¨a¯g©g°a­jÕ8¸5Õ@ˆ	Ø�S˜#�ˆØÒ(Ø�M‰MÐ+Ô,ÙØØ˜AŸG™G�nÐ%Ø˜Q Ð"Ø#ØŸ7™7˜)ØŸ7™7˜)ô
‰ˆð ˆ
r   rI   )r‘   r”   r•   r¤   r¥   r:   r’   s   f&&fff r   Ú_fast_rotary_applyr³   ;  s"   û€ ÷ð ñ" �Q‹<™ 1›Ð%Ð%r   c          
      óT   € V ^8„  d   QhR\         R\        R\         R\        R\        /# r˜   rœ   )r   s   "r   r   r   Q  s:   € ÷ ñ Üðäðô ðô ð	ô
 ñr   c                 ód   a€ \        V VVVV4      oSf   R # \        P                  V3R l4       pV# )Nc                 ó    <€ \        SWW#V4      # rS   )r³   )r”   r•   r¤   r¥   r:   r‘   s   &&&&&€r   ÚapplyÚ%_compiled_rotary_apply.<locals>.applyb  s   ø€ ä! &¨!°Ð:KÓLÐLr   )r®   r   Úcompile)rd   rf   r™   rš   r›   r·   r‘   s   &&&&& @r   Ú_compiled_rotary_applyrº   P  sG   ø€ ô "ØØØØØó€Fð ‚~Ùä‡Z�ZôMó ðMð €Lr   c                ó<   € V ^8„  d   QhR\         R\         R\        /# rc   rg   )r   s   "r   r   r   j  s!   € ÷ ñ ¤cð ¼#ð Ìñ r   c                 ó^   a€ \        WV4      oSf   R # \        P                  V3R l4       pV# )Nc                 ó$   <€ \        SV VVVV4      # rS   )r–   )r”   r•   r8   r9   r:   r‘   s   &&&&&€r   r·   Ú$_compiled_mrope_apply.<locals>.applyo  s"   ø€ ä ØØØØØØó
ð 	
r   )r   r   r¹   )rd   re   rf   r·   r‘   s   &&& @r   Ú_compiled_mrope_applyr¿   i  s4   ø€ ä  ¸GÓD€FØ‚~Ùä‡Z�Zô
ó ð
ð €Lr   Úrope_scalingÚrope_parametersÚdefaultc                ó~   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        \        ,          /# )r   rÀ   rÁ   rÂ   )r   Údictr   r   )r   s   "r   r   r   }  s4   € ÷ ñ äœ4•.ðô œd•^ðô ”c�]ñ	r   c                 ó¬   € T ;'       g    / p T;'       g    / p\        VP                  R 4      ;'       g    V P                  R 4      ;'       g    T4      # )r   )ÚlistÚget)rÀ   rÁ   rÂ   s   $$$r   Úget_mrope_sectionrÈ   }  s^   € ð  ×%Ð% 2€LØ%×+Ð+¨€OÜØ×Ñ˜OÓ,÷ 	ð 	Ø×Ñ˜OÓ,÷	ð 	àóð r   c                ó0   € V ^8„  d   QhR\         R\        /# )r   r)   Úbase)r   Úfloat)r   s   "r   r   r   Œ  s   € ÷ Kñ Kœ#ð K¤Uñ Kr   c                 ó–   € R V\         P                  ! ^ V ^4      P                  \         P                  4      V ,          ,          ,          # )ç      ð?)r   Úaranger6   r7   )r)   rÊ   s   &&r   Úcompute_inv_freqrÏ   Œ  s3   € Ø�$œ2Ÿ9š9 Q¨¨QÓ/×6Ñ6´r·z±zÓBÀSÕHÕIÕJÐJr   c                 óê   € \         P                  ! VR,          ^V P                  ^,          V P                  ^,          V P                  ^,          34      p\         P                  ! W^ R7      ^ ,          # )Nr2   )NNNºNNN)r   Úbroadcast_torŒ   Útake_along_axis)Úfreqsr:   Úindicess   && r   Ú&_apply_selected_mrope_frequency_layoutrÖ   �  sW   € ä�oŠoØÐ-Õ.Ø	
ˆE�K‰K˜�N˜EŸK™K¨�N¨E¯K©K¸­NÐ;ó€Gô ×Ò˜e°1Ô5°aÕ8Ð8r   Úinterleave_sectionsc                ó~   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\         \        ,          /# )r   r   Úposition_axesr×   r   )r   s   "r   r   r   ™  s2   € ÷ (ñ (ÜœC•=ð(äœC•=ð(ô "¤#�ñ	(r   c                óÔ  a a€ \        S 4      o \        V4      p\        V4      p\        V4      \        S 4      8w  d   \        R 4      h^ .pS RR  F"  pVP                  VR,          V,           4       K$  	  . p. p\	        V4      pV'       d®   S V^ ,          ,          o\
        ;QJ d     VV 3R lV 4       F  '       g   K   RM	  RM! VV 3R lV 4       4      '       d   \        R4      h\        S4       FA  pV F8  p	VP                  W,          4       VP                  W9,          V,           4       K:  	  KC  	  \        S 4       FU  w  r”W—9   d   K  W9,          p
\        V4       F1  pVP                  W,          4       VP                  W¨,           4       K3  	  KW  	  \        P                  ! V\        P                  R7      \        P                  ! V\        P                  R7      3# )z-position_axes must match mrope_section lengthNc              3   ó<   <"  € T F  pSV,          S8g  x € K  	  R # 5irS   rI   )Ú.0r+   Úinterleave_lengthr   s   & €€r   Ú	<genexpr>Ú*mrope_section_selectors.<locals>.<genexpr>¯  s   øé € ÐVÑBU¸3ˆ}˜SÕ!Ð%6Ö6ÓBUùs   ƒTFz1interleaved MRoPE sections must have equal lengthr   r   )rÆ   ÚlenÚ
ValueErrorr±   ÚsetÚanyr&   r%   r   r   r   )r   rÙ   r×   Úoffsetsr/   r:   Úfrequency_selectorrA   Ú	local_idxÚsection_idxr*   rÝ   s   f&$        @r   Úmrope_section_selectorsrè   ™  s”  ù€ ô ˜Ó'€MÜ˜Ó'€MÜÐ2Ó3ÐÜ
ˆ=ÓœS Ó/Ô/ÜÐHÓIÐIàˆc€GØ  Ó$ˆØ�‰�w˜r•{ VÕ+Ö,ñ %ð ÐØÐäÐ)Ó*€KßØ)Ð*=¸aÕ*@ÕAÐß‹3ÕVÑBUÓV�3�3Š3ÕVÑBUÓV×VÒVÜÐPÓQÐQÜÐ0Ö1ˆIÛ2�Ø!×(Ñ(¨Õ)CÔDØ"×)Ñ)¨'Õ*>ÀÕ*JÖKó  3ñ 2ô
  )¨Ö7ÑˆØÔ%ÙØÕ%ˆÜ˜vžˆIØ×$Ñ$ ]Õ%?Ô@Ø×%Ñ% fÕ&8Ö9ó 'ñ	  8ô 	�ŠÐ"¬"¯(©(Ô3Ü
�ŠÐ#¬2¯8©8Ô4ðð r   c                 óR  € \         P                  ! W^ R7      P                  ^^^ 4      pVP                  \         P                  4      \         P                  ! W4      ,          p\         P
                  ! V^RR7      p\         P                  ! V4      \         P                  ! V4      3# )r   r2   ©Úrepeatsr3   r   )r   r4   r5   r6   r7   Úrepeatr¤   r¥   )r8   r9   r:   rå   r;   rÔ   Úembs   &&&&   r   Úcompute_selected_mrope_cos_sinrî   Ä  ss   € ô —’˜¸aÔ@×JÑJÈ1ÈaÐQRÓS€IØ×ÑœRŸZ™ZÓ(¬2¯7ª7°8Ó+PÕP€EÜ
�)Š)�E 1¨2Ô
.€CÜ�6Š6�#‹;œŸš˜s›Ð#Ð#r   r>   rA   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# ©r   r   r>   ©r   r   r?   )r   s   "r   r   r   Ñ  s"   € ÷ ñ äœC•=ðô ñ	r   c                ó�   € \        V4      p\        V4      '       d*   \        VVV P                  R,          4      p\	        W4      # V # )r#   r   )rÆ   rK   rB   rŒ   rÖ   )rÔ   r   r>   r:   s   &&$ r   Úapply_mrope_frequency_layoutró   Ñ  sG   € ô ˜Ó'€Mä% e×,Ò,Ü3ØØØ�K‰K˜�Oó
Ðô
 6°eÓOÐOØ€Lr   r:   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# rð   rñ   )r   s   "r   r   r   ã  s(   € ÷ Kñ Kô œC•=ðKô
 ñKr   c                óp  € V P                   ^8X  d.   V P                  \        P                  4      R,          V,          # \	        V4      '       d/   Vf   \        VVVP                  ^ ,          4      p\        WV4      # V P                  \        P                  4      R,          V,          p\        WRVR7      # )r   rJ   ).N)	Úndimr6   r   r7   rK   rB   rŒ   r<   ró   )r8   r9   r   r>   r:   rÔ   s   &&&$$ r   Úcompute_mrope_frequenciesr÷   ã  s    € ð ×Ñ˜AÔð ×"Ñ"¤2§:¡:Ó.¨yÕ9¸HÕDÐDô & e×,Ò,ØÒ$Ü 7ØØØ—‘˜qÕ!ó!Ðô
 % \Ð=NÓOÐOð ×Ñ¤§
¡
Ó+¨IÕ6¸ÕA€EÜ'¨ÀEÔJÐJr   c                   óÂ   a a€ ] tR tRt oRtRRRRRRRRRR	R
RR/V3R lV 3R llllt]R 4       t]R 4       t]R 4       t	R t
R tR tR^R	R
/V3R lR lltRtVtV ;t# )ÚMRoPERotaryEmbeddingiÿ  zãShared language-side rotary embedding for MRoPE models.

``style`` selects whether frequency layout is applied in the embedding
itself (Qwen/GLM-OCR style) or deferred to Q/K application
(PaddleOCR/GLM4V-style sectioned RoPE).
rÀ   NrÁ   r   Úattention_scalingrÍ   Úcast_outputTr>   rA   c                ó�   <€ V ^8„  d   QhRS[ RS[ RS[RS[S[,          RS[S[,          RS[S[S[ ,          ,          RS[RS[R	S[/	# )
r   r)   Úmax_position_embeddingsrÊ   rÀ   rÁ   r   rú   rû   r>   )r   rË   r   rÄ   r   r�   r?   )r   Ú__classdict__s   "€r   r   Ú!MRoPERotaryEmbedding.__annotate__  sv   ø€ ÷ ("ñ ("áð("ñ "%ð("ñ ð	("ñ ™t•nð("ñ "¡$�ð("ñ  ¡©¥Õ.ð("ñ !ð("ñ ð("ñ ñ("r   c               ó&  <€ \         S
V `  4        Wn        W n        W0n        W�n        \        W4      V n        Wpn        W€n	        \        Ve   TM\        VVR7      4      V n        \        V	4      '       d9   \        V	V P                  V P                   P"                  ^ ,          4      V n        MR V n        \'        V	4      V n        V P*                  R J;'       d    \,        V n        V P.                  '       d   / MR V n        V P3                  4        R # )N)rÀ   rÁ   )ÚsuperÚ__init__r)   rý   rÊ   r>   rÏ   Ú	_inv_freqrú   rû   rÆ   rÈ   Ú_mrope_sectionrT   rB   r   r9   rŒ   Ú_position_selectorr`   rf   r:   ry   Úfused_applyÚ_compiled_applyÚeval_cached_arrays)Úselfr)   rý   rÊ   rÀ   rÁ   r   rú   rû   r>   Ú	__class__s   &&&&$$$$$$€r   r  ÚMRoPERotaryEmbedding.__init__  sí   ø€ ô 	‰ÑÔØŒØ'>Ô$ØŒ	ØŒ
Ü)¨#Ó4ˆŒØ!2ÔØ&ÔÜ"àÒ(ñ ä"Ø)Ø /ôó
ˆÔô % U×+Ò+Ü&=ØØ×"Ñ"Ø—‘×#Ñ# AÕ&ó'ˆDÕ#ð '+ˆDÔ#Ü)¨%Ó0ˆŒØ×1Ñ1¸Ð=×LÐLÄ*ˆÔØ%)×%5×%5Ð%5™r¸4ˆÔØ×ÑÖ!r   c                ó   € V P                   # rS   )r  ©r	  s   &r   r   Ú"MRoPERotaryEmbedding.mrope_section1  s   € à×"Ñ"Ð"r   c                ó   € V P                   # rS   )r  r  s   &r   r9   ÚMRoPERotaryEmbedding.inv_freq5  s   € à�~‰~Ðr   c                ó   € V P                   # rS   )r  r  s   &r   r:   Ú&MRoPERotaryEmbedding.position_selector9  s   € à×&Ñ&Ð&r   c                óh   € V P                   f   V P                  .# V P                  V P                   .# rS   )r  r  r  s   &r   Úeager_eval_arraysÚ&MRoPERotaryEmbedding.eager_eval_arrays=  s0   € Ø×"Ñ"Ò*Ø—N‘NÐ#Ð#Ø—‘ × 7Ñ 7Ð8Ð8r   c                óJ   € \         P                  ! V P                  4       !   R # rS   )r   Úevalr  r  s   &r   r  Ú'MRoPERotaryEmbedding.eval_cached_arraysB  s   € Ü
�Š�×'Ñ'Ó)Ô*r   c                óÖ  € \        VV P                  V P                  V P                  V P                  R 7      p\
        P                  ! W3.RR7      p\
        P                  ! V4      V P                  ,          p\
        P                  ! V4      V P                  ,          pV P                  '       d7   VP                  VP                  4      VP                  VP                  4      3# WV3# ))r>   r:   r2   r   )r÷   r9   r   r>   r:   r   Úconcatenater¤   rú   r¥   rû   r6   r   )r	  rx   r8   rÔ   rí   r¤   r¥   s   &&&    r   Ú__call__ÚMRoPERotaryEmbedding.__call__E  s«   € Ü)ØØ�M‰MØ×ÑØ—*‘*Ø"×4Ñ4ô
ˆô �nŠn˜e˜^°"Ô5ˆÜ�fŠf�S‹k˜D×2Ñ2Õ2ˆÜ�fŠf�S‹k˜D×2Ñ2Õ2ˆà××ÐØ—:‘:˜aŸg™gÓ&¨¯
©
°1·7±7Ó(;Ð;Ð;Øˆxˆr   Úunsqueeze_dimc                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   r  rû   )r   r�   )r   rþ   s   "€r   r   rÿ   U  s!   ø€ ÷ +
ñ +
ñ ð+
ñ ñ+
r   c               ó$  € V P                   '       dÏ   V^8X  dÈ   VP                  R9   d·   VP                  ^8X  d¦   VP                  ^8X  d•   V P                  P                  VP                  4      pVfH   \	        V P
                  VP                  V P                  4      pVe   W`P                  VP                  &   Ve!   V! VVVV P                  V P                  4      # V ! W#4      w  rx\        VVVVV P                  VV P                  VR7      # )r#   )r   r  r>   rû   )r   é   )r  rö   r  rÇ   r¿   r)   rf   r9   r:   Úapply_multimodal_rotary_pos_embr   r>   )	r	  r”   r•   r8   r  rû   Úcompiled_applyr¤   r¥   s	   &&&&$$   r   Úapply_rotaryÚ!MRoPERotaryEmbedding.apply_rotaryU  s  € ð ××ÐØ Ô"Ø×!Ñ! VÔ+Ø—‘˜!”Ø—‘˜!”à!×1Ñ1×5Ñ5°l×6GÑ6GÓHˆNØÒ%Ü!6Ø—H‘H˜l×/Ñ/°·±ó"�ð "Ò-Ø>L×(Ñ(¨×):Ñ):Ñ;àÒ)Ù%ØØØ Ø—M‘MØ×*Ñ*óð ñ ˜Ó(‰ˆÜ.ØØØØØ×,Ñ,Ø'Ø—*‘*Ø#ô	
ð 		
r   )r  r  r  r  rú   rÊ   rû   r)   r  rý   rf   r>   )i   i'  )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r  Úpropertyr   r9   r:   r  r  r  r#  Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r
  rþ   s   @@r   rù   rù   ÿ  s¿   ù‡ € ññ("ð (,ð("ð +/ð("ð 26ð("ð $'ð("ð !ð("ð #÷("ö ("ðT ñ#ó ð#ð ñó ðð ñ'ó ð'ò9ò
+òð +
ð ð+
ð !÷+
÷ +
ò +
r   rù   c                 óÌ   € V R RV P                   R,          ^,          13,          pV R V P                   R,          ^,          R13,          p\        P                  ! V) V.RR7      # ).Nr2   r   )rŒ   r   r  ©rx   Úx1Úx2s   &  r   Úrotate_halfr2  ƒ  sZ   € Ø	
ˆ3Ð"�!—'‘'˜"•+ Õ"Ð"Ð"Õ	#€BØ	
ˆ3�—‘˜•˜qÕ Ñ"Ð"Õ	#€BÜ�>Š>˜B˜3 ˜)¨"Ô-Ð-r   c                 óŠ   € V R,          pV R,          p\         P                  ! \         P                  ! V) V.RR7      RRR7      # ).r2   )Ú
start_axisÚend_axis).:r   Nr   ).:r#   Nr   r   éþÿÿÿ)r   ÚflattenÚstackr/  s   &  r   Úrotate_half_even_oddr9  ‰  s8   € Ø	
ˆ9�€BØ	
ˆ9�€BÜ�:Š:”b—h’h   R˜y¨rÔ2¸rÈBÔOÐOr   rû   TÚcompute_dtypec                ó$   € V ^8„  d   QhR\         /# )r   rû   )r�   )r   s   "r   r   r   �  s   € ÷ !ñ !ô ñ!r   c                ó’  € VP                   R,          pV RRV13,          pV RVR13,          p	VRRV13,          p
VRVR13,          pVe#   VP                  V4      pV
P                  V4      p
W‚,          V! V4      V,          ,           pW¢,          V! V
4      V,          ,           pV'       d7   VP                  V P                  4      pVP                  VP                  4      pV	P                   R,          ^ 8X  d   VP                   R,          ^ 8X  d   WÍ3# \        P                  ! WÉ.RR7      \        P                  ! WÛ.RR7      3# )r#   .Nr2   r   )rŒ   r6   r   r   r  )r”   r•   r¤   r¥   Ú	rotate_fnrû   r:  rd   Úq_rotÚq_passÚk_rotÚk_passÚq_embedÚk_embeds   &&&&&$$       r   Ú_apply_rotary_embeddingrD  �  s&  € ð —‘˜2•€JØˆc�;�J�;ÐÕ€EØˆs�J‘KÐÕ €FØˆc�;�J�;ÐÕ€EØˆs�J‘KÐÕ €FàÒ Ø—‘˜]Ó+ˆØ—‘˜]Ó+ˆà�{™y¨Ó/°#Õ5Õ6€GØ�{™y¨Ó/°#Õ5Õ6€GçØ—.‘. §¡Ó)ˆØ—.‘. §¡Ó)ˆà‡|�|�BÕ˜1Ô §¡¨bÕ!1°QÔ!6ØÐÐô 	�Š˜Ð(¨rÔ2Ü
�Š˜Ð(¨rÔ2ðð r   c                 ó<  € \         P                  ! V^R7      p\         P                  ! V^R7      pVP                  R,          pV RRV13,          pV RVR13,          pVRRV13,          pVRVR13,          pWR,          \        V4      V,          ,           p	Wr,          \        V4      V,          ,           p
V	P	                  V P
                  4      p	V
P	                  VP
                  4      p
\         P                  ! W–.RR7      \         P                  ! W¨.RR7      3# )r#   r2   .Nr   )r   Úexpand_dimsrŒ   r2  r6   r   r  )r”   r•   r¤   r¥   rd   r>  r?  r@  rA  rB  rC  s   &&&&       r   Ú'_apply_interleaved_rotary_pos_emb_axis1rG  ³  sõ   € ä
�.Š.˜ 1Ô
%€CÜ
�.Š.˜ 1Ô
%€Cà—‘˜2•€JØˆc�;�J�;ÐÕ€EØˆs�J‘KÐÕ €FØˆc�;�J�;ÐÕ€EØˆs�J‘KÐÕ €Fà�{œ{¨5Ó1°CÕ7Õ8€GØ�{œ{¨5Ó1°CÕ7Õ8€GØ�n‰n˜QŸW™WÓ%€GØ�n‰n˜QŸW™WÓ%€Gô 	�Š˜Ð(¨rÔ2Ü
�Š˜Ð(¨rÔ2ðð r   c           
      ó8  € \        V4      ^8w  d   \        R4      h\        \        V4      ^,          4      p\        P
                  ! \        \        P                  ! WRR7      4       UUu. uF  w  r4WC^,          ,          NK  	  uppRR7      R,          # u uppi )r   z*sectioned MRoPE expects exactly 3 sectionsr2   r   ©rÑ   NrÑ   rÑ   )rà   rá   r   rÆ   r   r  r%   Úsplit)Úvaluesr   Úsplit_indicesÚiÚms   &&   r   Ú_section_frequency_layoutrO  É  s~   € Ü
ˆ=Ó˜QÔÜÐEÓFÐFÜ&¤t¨MÓ':¸QÕ'>Ó?€MÜ�>Š>Ü'¬¯ª°ÈRÔ(PÔQÔRÑQ‘d�aˆˆq�5�ˆÑQÒRØôð õð ùÛRs   Á+B
c                 ó4   € \        W4      p \        W4      pW3# rS   )rO  )r¤   r¥   r   s   &&&r   Ú_section_cos_sinrQ  Ó  s   € Ü
# CÓ
7€CÜ
# CÓ
7€CØˆ8€Or   r›   r   r  c          
      ó€   € V ^8„  d   QhR\         R\         R\        \        \        ,          ,          R\        R\        /# )r   rf   r›   r   r  rû   )r?   r   r   r   r�   )r   s   "r   r   r   Ù  sG   € ÷ 0=ñ 0=ô ð0=ô ð0=ô œH¤S�MÕ*ð0=ô ð0=ô ñ0=r   c                ó  € \         '       d^   V^8w  gW   V'       dO   V P                  ^8w  g>   VP                  ^8w  g-   VP                  R9  g   VP                  VP                  8w  d   R# VP                  R,          p	W�P                  R,          8”  g   W‘P                  R,          8”  d   R# VRJp
RpV
'       d(   VP                  ^8w  d   R# \        RVV	^,          4      p\	        V	VVP                  V
V4      pVf   R# V! WW#V4      # )r#   NrG   )r   é   r   )ry   rö   rŒ   rB   rº   )r”   r•   r¤   r¥   rf   r›   r   r  rû   rd   rš   r:   r"  s   &&&&$$$$$    r   Ú_maybe_fast_precomputed_rotaryrU  Ù  sç   € ÷ ‹JØ˜AÔßØ�6‰6�QŒ;Ø�6‰6�QŒ;Ø�8‰8˜6Ô!Ø�8‰8�s—x‘xÔáà—‘˜2•€JØ—G‘G˜B•KÔ :·±¸µÔ#;Ùà TÐ)€IØÐßØ�8‰8�qŒ=ÙÜ3ØØØ˜!�Oó
Ðô ,ØØØ�‰ØØó€Nð ÒÙá˜! Ð*;Ó<Ð<r   c                ó$   € V ^8„  d   QhR\         /# )r   r›   rE   )r   s   "r   r   r     s   € ÷ ñ Äñ r   c          	     ó¨  € \        V VVV\        VR7      pVe   V# VR,          pVR,          pV\        8X  dy   \        P                  ! VRRVP
                  R,          ^,          13,          ^RR7      p\        P                  ! VRRVP
                  R,          ^,          13,          ^RR7      p\        V VVV\        \        P                  R7      # )zDApply even/odd RoPE from precomputed cos/sin with a Metal fast path.)rf   r›   N.rê   )r:  rI  r   )	rU  r^   Ú	_HALF_COSr   rì   rŒ   rD  r9  r7   )r”   r•   r¤   r¥   r›   rz   s   &&&&$ r   Úapply_rotary_pos_emb_even_oddrY    sÈ   € ä)Ø	Ø	ØØÜØô€Dð ÒØˆà
ˆmÕ
€CØ
ˆmÕ
€CØ”YÔÜ�iŠi˜˜CÐ!5 3§9¡9¨R¥=°AÕ#5Ð!5Ð5Õ6ÀÈÔKˆÜ�iŠi˜˜CÐ!5 3§9¡9¨R¥=°AÕ#5Ð!5Ð5Õ6ÀÈÔKˆä"Ø	Ø	ØØÜÜ—j‘jôð r   c                ót   € V ^8„  d   QhR\         \        \        ,          ,          R\        R\        R\        /# )r   r   r  r>   rû   )r   r   r   r?   r�   )r   s   "r   r   r   )  s=   € ÷ 0ñ 0ô œH¤S�MÕ*ð0ô ð0ô ð0ô ñ0r   c                ó’  € VR 8X  d   V^8X  d   V'       d   \        WW#4      # \        V4      '       dA   Vf   \        R4      h\        V VVV\	        V4      VVVR7      pVe   V# \        W#V4      w  r#M.\        P                  ! W%R7      p\        P                  ! W5R7      p\        V4      '       d€   \        P                  ! VRRVP                  R,          ^,          13,          ^RR7      p\        P                  ! VRRVP                  R,          ^,          13,          ^RR7      p\        p	M\        p	\        V VVVV	VR7      # )	rA   Nz-mrope_section is required for sectioned MRoPE)rf   r   r  rû   r2   .rê   )rû   r   )rG  rP   rá   rU  r`   rQ  r   rF  r[   rì   rŒ   r9  r2  rD  )
r”   r•   r¤   r¥   r   r  r>   rû   rz   r=  s
   &&&&$$$$  r   r!  r!  )  s1  € ð �Ô -°1Ô"4¿Ü6°q¸SÓFÐFä˜5×!Ò!ØÒ ÜÐLÓMÐMÜ-ØØØØÜ& uÓ-Ø'Ø'Ø#ô	
ˆð ÒØˆKÜ# C¨mÓ<‰ˆˆSä�nŠn˜SÔ5ˆÜ�nŠn˜SÔ5ˆä˜e×$Ò$Ü�iŠi˜˜CÐ!5 3§9¡9¨R¥=°AÕ#5Ð!5Ð5Õ6ÀÈÔKˆÜ�iŠi˜˜CÐ!5 3§9¡9¨R¥=°AÕ#5Ð!5Ð5Õ6ÀÈÔKˆÜ(‰	äˆ	ä"Ø	Ø	ØØØØôð r   rS   )é   é   r]  rI   )5Ú	functoolsr   Útypingr   r   Úmlx.coreÚcorer   Úmlx.nnÚnnÚmetalÚis_availablery   r_   r^   rX  r¦   r   r,   r0   r¹   r<   rB   rK   rP   rT   rX   r[   r`   r   r–   r®   r³   rº   r¿   rÈ   rÏ   rÖ   rè   rî   ró   r÷   ÚModulerù   r2  r9  rD  rG  rO  rQ  rU  rY  r!  rI   r   r   Ú<module>rg     sP  ðÝ ß %å Ý à�X‰X×"Ñ"Ó$€
Ø€Ø€	Ø€	Ø€	õ=õ.õ.ð ‡�ñ3ó ð3õ
?õ?õCõOõGõ;õñ �4ÔôSó ðSòl&ñ2 �4Ôô}ó ð}ô@&ñ* �4Ôôó ðñ0 �4Ôôó ðð&à#'ðð '+ðð *÷	õKð ‡�ñ9ó ð9ð(ð *,÷	(ðV ‡�ñ	$ó ð	$ðð ÷	ð$Kð
 ðKð ÷Kô8A
˜2Ÿ9™9ô A
òH.òPð!ð ð!ð ÷!ðH ‡�ñó ðò*òð0=ð  ð0=ð .2ð0=ð ð0=ð ÷0=ðfÀy÷ ð:0ð .2ð0ð ð0ð ð0ð ÷0ñ 0r   