+
    "Ý³j7  ã                   óŠ   € ^ RI t ^ RIHtHtHtHt R R lt ! R R]4      t ! R R]4      t ! R	 R
]4      t	 ! R R]4      t
R# )é    N)ÚChunkÚConcatenateÚConversionOpsÚMergeModulelistc                óX   € V ^8„  d   QhR\         P                  R\         P                  /# )é   ÚtensorÚreturn)ÚtorchÚTensor)Úformats   "ÚW/home/luca/screen-checking/.venv/lib/python3.14/site-packages/defuser/checkpoint_ops.pyÚ__annotate__r   	   s"   € ÷ ?ñ ?¤E§L¡Lð ?´U·\±\ñ ?ó    c                óB   € V P                  \        P                  R7      # )zEReturn a contiguous tensor with its own storage using a single clone.)Úmemory_format)Úcloner   Úcontiguous_format)r	   s   &r   Ú_owned_contiguous_cloner   	   s   € à�<‰<¤e×&=Ñ&=ˆ<Ó>Ð>r   c                   ó`   a a€ ] tR t^t oRt]P                  V3R lV 3R ll4       tRtVt	V ;t
# )Ú
OwnedChunkzLSplit fused tensors into independent chunks so save/load keeps both weights.c          
      ó¦   <€ V ^8„  d   QhRS[ S[S[P                  3,          RS[S[,          RS[S[,          RS[ S[S[P                  3,          /# ©r   Ú
input_dictÚsource_patternsÚtarget_patternsr
   ©ÚdictÚstrr   r   Úlist)r   Ú__classdict__s   "€r   r   ÚOwnedChunk.__annotate__   sY   ø€ ÷ Yñ YÙ™s¡E§L¡LÐ0Õ1ðYÙDHÉÅIðYÙ`dÑehÕ`iðYá	‰c‘5—<‘<ÐÕ	 ñYr   c                ó�   <€ \         SV `  ! WV3/ VB pVP                  4        UUu/ uF  w  rgV\        V4      bK  	  upp# u uppi ©N)ÚsuperÚconvertÚitemsr   )	Úselfr   r   r   ÚkwargsÚsplitÚnamer	   Ú	__class__s	   &&&&,   €r   r&   ÚOwnedChunk.convert   sJ   ø€ ô ‘’ 
¸_ÑWÐPVÑWˆð KPÏ+É+Ì-ÔXÉ-¹,¸$�Ô-¨fÓ5Ò5É-ÒXÐXùÓXs   §A© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Úno_gradr&   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r,   r!   s   @@r   r   r      s,   ù‡ € ÙVà
‡]�]÷Yò Yó ÷Yð Yr   r   c                   ó¢   a € ] tR t^t o RtRV 3R lR llt]V 3R lR l4       t]P                  V 3R lR l4       t
]V 3R lR	 l4       tR
tV tR# )ÚSplitFusedExpertGateUpProjzMSplit Mixtral-style fused expert weights into per-expert gate/up projections.c                ó&   <€ V ^8„  d   QhRS[ RS[ /# ©r   Ú
expert_dimÚproj_dim©Úint)r   r!   s   "€r   r   Ú'SplitFusedExpertGateUpProj.__annotate__   s   ø€ ÷ !ñ !¡3ð !±cñ !r   c                ó   € Wn         W n        R # r$   ©r<   r=   ©r(   r<   r=   s   &&&r   Ú__init__Ú#SplitFusedExpertGateUpProj.__init__   s   € Ø$ŒØ Žr   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[ /# ©r   ÚpatternÚ
expert_idxr
   ©r   r?   )r   r!   s   "€r   r   r@   #   ó"   ø€ ÷ <ñ <¡ð <±ð <¹ñ <r   c                ót   € RV 9   d   V P                  R\        V4      4      # V P                  RRV R2^4      # ©zEExpand one target pattern into the per-expert key for ``expert_idx``.Ú*z.0.Ú.©Úreplacer   ©rH   rI   s   &&r   Ú_expert_targetÚ)SplitFusedExpertGateUpProj._expert_target"   ó<   € ð �'Œ>Ø—?‘? 3¬¨J«Ó8Ð8Ø�‰˜u¨¨*¨°QÐ&7¸Ó;Ð;r   c          
      ó¦   <€ V ^8„  d   QhRS[ S[S[P                  3,          RS[S[,          RS[S[,          RS[ S[S[P                  3,          /# r   r   )r   r!   s   "€r   r   r@   *   sS   ø€ ÷ ñ Ù™s¡E§L¡LÐ0Õ1ðÙDHÉÅIðÙ`dÑehÕ`iðá	‰c‘5—<‘<ÐÕ	 ñr   c                ó2  € \        V4      ^8w  d   \        R4      h\        \        VP	                  4       4      4      p\        V\        4      '       d
   V^ ,          MTpVP                  V P                  4      p/ p\        V4       FŒ  p	VP                  V P                  V	4      p
\        P                  ! V
^V P                  R7      w  r¼\        V4      W€P                  V^ ,          V	4      &   \        V4      W€P                  V^,          V	4      &   KŽ  	  V# )zJSplit one fused gate/up tensor into cloned per-expert gate and up tensors.z?SplitFusedExpertGateUpProj expects exactly two target patterns.©Údim)ÚlenÚ
ValueErrorÚnextÚiterÚvaluesÚ
isinstancer    Úsizer<   ÚrangeÚselectr   Úchunkr=   r   rS   )r(   r   r   r   r)   Útensorsr	   Únum_expertsÚsplit_tensorsrI   Úexpert_tensorÚ	gate_projÚup_projs   &&&&,        r   r&   Ú"SplitFusedExpertGateUpProj.convert)   sç   € ô
 ˆÓ 1Ô$ÜÐ^Ó_Ð_ä”t˜J×-Ñ-Ó/Ó0Ó1ˆÜ)¨'´4×8Ò8�˜–¸gˆØ—k‘k $§/¡/Ó2ˆà13ˆÜ Ö,ˆJØ"ŸM™M¨$¯/©/¸:ÓFˆMÜ!&§¢¨]¸AÀ4Ç=Á=Ô!QÑˆIÜQhÐirÓQsˆM×-Ñ-¨o¸aÕ.@À*ÓMÑNÜQhÐipÓQqˆM×-Ñ-¨o¸aÕ.@À*ÓMÓNñ	 -ð Ðr   c                ó    <€ V ^8„  d   QhRS[ /# ©r   r
   ©r   )r   r!   s   "€r   r   r@   ?   s   ø€ ÷ ,ñ ,™Mñ ,r   c                ó   € \        4       # )ú@Return the inverse merge op used when writing fused checkpoints.)ÚMergeSplitExpertGateUpProj©r(   s   &r   Ú
reverse_opÚ%SplitFusedExpertGateUpProj.reverse_op>   s   € ô *Ó+Ð+r   rB   N©r   r   ©r/   r0   r1   r2   r3   rD   ÚstaticmethodrS   r   r4   r&   Úpropertyrr   r5   r6   ©r!   s   @r   r9   r9      sR   ø‡ € ÙW÷!ò !ð ÷<ó ð<ð ‡]�]÷ó ðð( ÷,ó ö,r   r9   c                   ój   a € ] tR t^Dt o RtRV 3R lR llt]P                  V 3R lR l4       tRt	V t
R# )	rp   zFMerge per-expert gate/up projections back into a fused Mixtral tensor.c                ó&   <€ V ^8„  d   QhRS[ RS[ /# r;   r>   )r   r!   s   "€r   r   Ú'MergeSplitExpertGateUpProj.__annotate__G   s   ø€ ÷ ;ñ ;¡3ð ;±cñ ;r   c                óŠ   € Wn         W n        \        V P                  R 7      V n        \	        V P                   R 7      V n        R# )rX   N)r<   r=   r   Ú_concatr   Ú_stackrC   s   &&&r   rD   Ú#MergeSplitExpertGateUpProj.__init__G   s,   € Ø$ŒØ ŒÜ" t§}¡}Ô5ˆŒÜ%¨$¯/©/Ô:ˆŽr   c          
      ó¶   <€ V ^8„  d   QhRS[ S[S[S[P                  ,          3,          RS[S[,          RS[S[,          RS[ S[S[P                  3,          /# r   )r   r   r    r   r   )r   r!   s   "€r   r   r{   N   s^   ø€ ÷ rñ rÙ™s¡D©¯©Õ$6Ð6Õ7ðrÙJNÉsÍ)ðrÙfjÑknÕfoðrá	‰c‘5—<‘<ÐÕ	 ñrr   c                ód  € \        V4      ^8w  d   \        R4      h\        V4      ^8w  d   \        R4      hW^ ,          ,          pW^,          ,          p\        V4      \        V4      8w  d%   \        R\        V4       R\        V4       R24      h. p\        WV4       Fa  w  r‰V P                  P	                  V^ ,          VV^,          V	/VV4      V^ ,          ,          p
VP                  V
P                  4       4       Kc  	  V P                  P	                  V^ ,          V/V^ ,          .V4      # )zCMerge per-expert gate/up tensors back into one fused expert tensor.z?MergeSplitExpertGateUpProj expects exactly two source patterns.z;MergeSplitExpertGateUpProj expects a single target pattern.zJMismatched per-expert gate/up weights while merging Mixtral gate_up_proj: z	 gate vs z up.)rZ   r[   Úzipr}   r&   ÚappendÚ
contiguousr~   )r(   r   r   r   r)   Úgate_weightsÚ
up_weightsÚfused_per_expertrh   ri   Úfuseds   &&&&,      r   r&   Ú"MergeSplitExpertGateUpProj.convertM   s7  € ô
 ˆÓ 1Ô$ÜÐ^Ó_Ð_ÜˆÓ 1Ô$ÜÐZÓ[Ð[à!°!Õ"4Õ5ˆØ°Õ 2Õ3ˆ
Üˆ|Ó¤ J£Ô/ÜØ\Ü�|Ó$Ð% Y¬s°:«Ð.?¸tðEóð ð
 ÐÜ"% lÖ"?ÑˆIØ—L‘L×(Ñ(à# AÕ&¨	Ø# AÕ&¨ðð  Øóð ˜aÕ õ"ˆEð ×#Ñ# E×$4Ñ$4Ó$6Ö7ñ #@ð �{‰{×"Ñ" O°AÕ$6Ð8HÐ#IÈOÐ\]ÕL^ÐK_ÐapÓqÐqr   )r}   r~   r<   r=   Nrt   )r/   r0   r1   r2   r3   rD   r   r4   r&   r5   r6   rx   s   @r   rp   rp   D   s,   ø‡ € ÙP÷;ò ;ð ‡]�]÷ró örr   rp   c                   ó¢   a € ] tR t^nt o RtRV 3R lR llt]V 3R lR l4       t]P                  V 3R lR l4       t
]V 3R lR	 l4       tR
tV tR# )ÚSplitFusedExpertDownProjzJSplit Mixtral-style fused expert down projections into per-expert linears.c                ó    <€ V ^8„  d   QhRS[ /# )r   r<   r>   )r   r!   s   "€r   r   Ú%SplitFusedExpertDownProj.__annotate__q   s   ø€ ÷ %ñ %¡3ñ %r   c                ó   € Wn         R # r$   ©r<   )r(   r<   s   &&r   rD   Ú!SplitFusedExpertDownProj.__init__q   s   € Ø$Žr   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[ /# rG   rJ   )r   r!   s   "€r   r   r�   u   rK   r   c                ót   € RV 9   d   V P                  R\        V4      4      # V P                  RRV R2^4      # rM   rP   rR   s   &&r   rS   Ú'SplitFusedExpertDownProj._expert_targett   rU   r   c          
      ó¦   <€ V ^8„  d   QhRS[ S[S[P                  3,          RS[S[,          RS[S[,          RS[ S[S[P                  3,          /# r   r   )r   r!   s   "€r   r   r�   |   sS   ø€ ÷ ñ Ù™s¡E§L¡LÐ0Õ1ðÙDHÉÅIðÙ`dÑehÕ`iðá	‰c‘5—<‘<ÐÕ	 ñr   c                ó   € \        V4      ^8w  d   \        R4      h\        \        VP	                  4       4      4      p\        V\        4      '       d
   V^ ,          MTpVP                  V P                  4      p/ p\        V4       FC  p	VP                  V P                  V	4      p
\        V
4      W€P                  V^ ,          V	4      &   KE  	  V# )zFSplit one fused expert down projection into cloned per-expert tensors.z9SplitFusedExpertDownProj expects a single target pattern.)rZ   r[   r\   r]   r^   r_   r    r`   r<   ra   rb   r   rS   )r(   r   r   r   r)   rd   r	   re   rf   rI   rg   s   &&&&,      r   r&   Ú SplitFusedExpertDownProj.convert{   s®   € ô
 ˆÓ 1Ô$ÜÐXÓYÐYä”t˜J×-Ñ-Ó/Ó0Ó1ˆÜ)¨'´4×8Ò8�˜–¸gˆØ—k‘k $§/¡/Ó2ˆà13ˆÜ Ö,ˆJØ"ŸM™M¨$¯/©/¸:ÓFˆMÜQhÐivÓQwˆM×-Ñ-¨o¸aÕ.@À*ÓMÓNñ -ð Ðr   c                ó    <€ V ^8„  d   QhRS[ /# rl   rm   )r   r!   s   "€r   r   r�   �   s   ø€ ÷ 4ñ 4™Mñ 4r   c                ó.   € \        V P                  R7      # )ro   rX   )r   r<   rq   s   &r   rr   Ú#SplitFusedExpertDownProj.reverse_opŽ   s   € ô  4§?¡?Ô3Ð3r   r�   N)r   ru   rx   s   @r   r‹   r‹   n   sR   ø‡ € ÙT÷%ò %ð ÷<ó ð<ð ‡]�]÷ó ðð$ ÷4ó ö4r   r‹   )r   Útransformers.core_model_loadingr   r   r   r   r   r   r9   rp   r‹   r.   r   r   Ú<module>r›      sK   ðó
 ß ^Ó ^õ?ô

Y�ô 
Yô&, ô &,ôR'r ô 'rôT#4˜}ö #4r   