§
    ÎÐj�}  ã                   ó¼  — d Z ddlZddlZddlmZ ddlmZ ddlZddlm	Z	 ddl
ZddlmZ d„ Zi dd	g“d
dg“ddg“ddg“ddg“ddg“ddg“ddg“ddg“ddg“ddg“ddg“d d!g“d"d#g“d$d%g“d&d'g“d(d)g“i d*d+g“d,d-g“d.d/g“d0g d1¢d2gg“d3g d4¢d5gg“d6g d7¢d8gg“d9g d:¢d;gg“d<d=gd>gg“d?d@gdAgg“dBdCgdDgg“dEdFgdGgg“dHdIgdJgg“dKdLgdMgg“dNdOgdPgg“dQdRgdSgg“dTdUgdVgg“dWdXgdYgg“¥i dZd[gd\gg“d]d^gd_gg“d`dagdbgg“dcddgdegg“dfdggdhgg“didjgdkgg“dldmg“dndog“dpg dq¢d2dJgg“drg ds¢d5dMgg“dtd=gd>gg“dud@gdAgg“dvdwgdbdPgg“dxdygdedSgg“dzdwg“d{dyg“d|d}g“¥d~dgi¥Zi ZeD ]OZe                     d€d�¦  «        \  ZZe                     e e¦   «         ¦  «                             d€ez   ¦  «         ŒPd‚edƒefd„„Z G d…„ d†¦  «        Zd‡edƒefdˆ„Zd‰dŠœd‡ed‹edƒefdŒ„Zd�„ ZdŽej        dƒej        fd�„Zd�ej        dƒej        fd‘„Z d’„ Z!d“edƒefd”„Z"d•ej        d–ej        dƒej        fd—„Z#dµd˜„Z$d™„ Z%dšej        dz  dƒe&e'dz  e'dz  f         fd›„Z(d¶d�e'fdž„Z)d¶d�e'fdŸ„Z*d ej        dz  d¡e'e&e'e'f         z  fd¢„Z+d£ej        dz  d¤efd¥„Z,d¦„ Z-d£ej        dz  d¤efd§„Z.d¨„ Z/d©„ Z0dª„ Z1d«„ Z2d¬„ Z3d­„ Z4d®„ Z5d¯„ Z6d‰dŠœd‹edƒefd°„Z7 G d±„ d²¦  «        Z8d³„ Z9e:d´k    r e9¦   «          dS dS )·a®  
Convert a Flux model from Diffusers (folder or single-file) into the original
single-file Flux transformer checkpoint used by Black Forest Labs / ComfyUI.

Input  : /path/to/diffusers   (root or .../transformer)  OR  /path/to/*.safetensors (single file)
Output : /path/to/flux1-your-model.safetensors  (transformer only)

Usage:
  python diffusers_to_flux_transformer.py /path/to/diffusers /out/flux1-dev.safetensors
  python diffusers_to_flux_transformer.py /path/to/diffusion_pytorch_model.safetensors /out/flux1-dev.safetensors
  # optional quantization:
  #   --fp8           (float8_e4m3fn, simple)
  #   --fp8-scaled    (scaled float8 for 2D weights; adds .scale_weight tensors)
é    N)ÚPath)ÚOrderedDict)Ú	safe_open)Útqdmc                  ó$  — t          j        ¦   «         } |                      dt          d¬¦  «         |                      dt          d¬¦  «         |                      ddd¬	¦  «         |                      d
dd¬	¦  «         |                      ¦   «         S )NÚdiffusers_pathzBPath to Diffusers checkpoint folder OR a single .safetensors file.)ÚtypeÚhelpÚoutput_pathz2Output .safetensors path for the Flux transformer.z--fp8Ú
store_truezXExperimental: write weights as float8_e4m3fn via stochastic rounding (transformer only).)Úactionr
   z--fp8-scaledzUExperimental: scaled float8_e4m3fn for 2D weight tensors; adds .scale_weight tensors.)ÚargparseÚArgumentParserÚadd_argumentÚstrÚ
parse_args)Úaps    úPC:\Users\johnn\OneDrive\Documents\AI\shared\convert\convert_diffusers_to_flux.pyr   r      s³   € Ý	Ô	 Ñ	"Ô	"€BØ‡O‚OÐ$­3Ø]ð ñ _ô _ð _à‡O‚O�M­ØMð ñ Oô Oð Oà‡O‚O�G LØsð ñ uô uð uà‡O‚O�N¨<Øpð ñ rô rð rà�=Š=‰?Œ?Ðó    ztime_in.in_layer.weightz1time_text_embed.timestep_embedder.linear_1.weightztime_in.in_layer.biasz/time_text_embed.timestep_embedder.linear_1.biasztime_in.out_layer.weightz1time_text_embed.timestep_embedder.linear_2.weightztime_in.out_layer.biasz/time_text_embed.timestep_embedder.linear_2.biaszvector_in.in_layer.weightz-time_text_embed.text_embedder.linear_1.weightzvector_in.in_layer.biasz+time_text_embed.text_embedder.linear_1.biaszvector_in.out_layer.weightz-time_text_embed.text_embedder.linear_2.weightzvector_in.out_layer.biasz+time_text_embed.text_embedder.linear_2.biaszguidance_in.in_layer.weightz1time_text_embed.guidance_embedder.linear_1.weightzguidance_in.in_layer.biasz/time_text_embed.guidance_embedder.linear_1.biaszguidance_in.out_layer.weightz1time_text_embed.guidance_embedder.linear_2.weightzguidance_in.out_layer.biasz/time_text_embed.guidance_embedder.linear_2.biasztxt_in.weightzcontext_embedder.weightztxt_in.biaszcontext_embedder.biaszimg_in.weightzx_embedder.weightzimg_in.biaszx_embedder.biasz#double_blocks.().img_mod.lin.weightznorm1.linear.weightz!double_blocks.().img_mod.lin.biasznorm1.linear.biasz#double_blocks.().txt_mod.lin.weightznorm1_context.linear.weightz!double_blocks.().txt_mod.lin.biasznorm1_context.linear.biasz$double_blocks.().img_attn.qkv.weight)úattn.to_q.weightúattn.to_k.weightúattn.to_v.weightzqkv_proj.weightz"double_blocks.().img_attn.qkv.bias)úattn.to_q.biasúattn.to_k.biasúattn.to_v.biaszqkv_proj.biasz$double_blocks.().txt_attn.qkv.weight)zattn.add_q_proj.weightzattn.add_k_proj.weightzattn.add_v_proj.weightzqkv_proj_context.weightz"double_blocks.().txt_attn.qkv.bias)zattn.add_q_proj.biaszattn.add_k_proj.biaszattn.add_v_proj.biaszqkv_proj_context.biasz/double_blocks.().img_attn.norm.query_norm.scalezattn.norm_q.weightznorm_q.weightz-double_blocks.().img_attn.norm.key_norm.scalezattn.norm_k.weightznorm_k.weightz/double_blocks.().txt_attn.norm.query_norm.scalezattn.norm_added_q.weightznorm_added_q.weightz-double_blocks.().txt_attn.norm.key_norm.scalezattn.norm_added_k.weightznorm_added_k.weightz!double_blocks.().img_mlp.0.weightzff.net.0.proj.weightzmlp_fc1.weightzdouble_blocks.().img_mlp.0.biaszff.net.0.proj.biaszmlp_fc1.biasz!double_blocks.().img_mlp.2.weightzff.net.2.weightzmlp_fc2.weightzdouble_blocks.().img_mlp.2.biaszff.net.2.biaszmlp_fc2.biasz!double_blocks.().txt_mlp.0.weightzff_context.net.0.proj.weightzmlp_context_fc1.weightzdouble_blocks.().txt_mlp.0.biaszff_context.net.0.proj.biaszmlp_context_fc1.biasz!double_blocks.().txt_mlp.2.weightzff_context.net.2.weightzmlp_context_fc2.weightzdouble_blocks.().txt_mlp.2.biaszff_context.net.2.biaszmlp_context_fc2.biasz%double_blocks.().img_attn.proj.weightzattn.to_out.0.weightzout_proj.weightz#double_blocks.().img_attn.proj.biaszattn.to_out.0.biaszout_proj.biasz%double_blocks.().txt_attn.proj.weightzattn.to_add_out.weightzout_proj_context.weightz#double_blocks.().txt_attn.proj.biaszattn.to_add_out.biaszout_proj_context.biasz&single_blocks.().modulation.lin.weightznorm.linear.weightz$single_blocks.().modulation.lin.biasznorm.linear.biaszsingle_blocks.().linear1.weight)r   r   r   zproj_mlp.weightzsingle_blocks.().linear1.bias)r   r   r   zproj_mlp.biasz&single_blocks.().norm.query_norm.scalez$single_blocks.().norm.key_norm.scalezsingle_blocks.().linear2.weightzproj_out.weightzsingle_blocks.().linear2.biaszproj_out.biaszfinal_layer.linear.weightzfinal_layer.linear.biasú%final_layer.adaLN_modulation.1.weightznorm_out.linear.weightú#final_layer.adaLN_modulation.1.biasznorm_out.linear.biasú.é   ÚkeyÚreturnc                 óD   — |                       d¦  «        r
| dd …         n| S ©Númodel.é   ©Ú
startswith)r    s    r   Ú_strip_prefixr(   Æ   s%   € Ø—n’n XÑ.Ô.Ð7ˆ3ˆqˆrˆrŒ7ˆ7°CÐ7r   c                   ór   — e Zd ZdZddgZdefd„Zdefd„Zdede	fd	„Z
dedej        fd
„Zed„ ¦   «         ZdS )ÚStateDictSourcezK
    Provide DiffusersSource-like access over an in-memory state dict.
    Ú r$   Ú
state_dictc                 ó`   — || _         t          |                     ¦   «         ¦  «        | _        d S ©N)Ú_state_dictÚlistÚkeysÚ	_all_keys)Úselfr,   s     r   Ú__init__zStateDictSource.__init__Ñ   s'   € Ø%ˆÔÝ˜jŸošoÑ/Ô/Ñ0Ô0ˆŒˆˆr   Úwantc                 ó>   — | j         D ]}||z   }|| j        v r|c S Œd S r.   )ÚPOSSIBLE_PREFIXESr/   )r3   r5   Úprefr    s       r   Ú_resolvezStateDictSource._resolveÕ   s>   € ØÔ*ð 	ð 	ˆDØ˜‘+ˆCØ�dÔ&Ð&Ð&Ø�
�
�
ð 'àˆtr   r!   c                 ó0   — |                       |¦  «        d uS r.   ©r9   ©r3   r5   s     r   ÚhaszStateDictSource.hasÜ   ó   € Ø�}Š}˜TÑ"Ô"¨$Ð.Ð.r   c                 ón   — |                       |¦  «        }|€t          d|› �¦  «        ‚| j        |         S )NúMissing key: )r9   ÚKeyErrorr/   ©r3   r5   Úreal_keys      r   ÚgetzStateDictSource.getß   s>   € Ø—=’= Ñ&Ô&ˆØÐÝÐ1¨4Ð1Ð1Ñ2Ô2Ð2ØÔ Ô)Ð)r   c                 ó$   — d„ | j         D ¦   «         S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS © ©r(   ©Ú.0Úks     r   ú
<listcomp>z-StateDictSource.base_keys.<locals>.<listcomp>ç   s    € Ð9Ð9Ð9 Q•˜aÑ Ô Ð9Ð9Ð9r   ©r2   ©r3   s    r   Ú	base_keyszStateDictSource.base_keyså   s   € à9Ð9¨$¬.Ð9Ñ9Ô9Ð9r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r7   Údictr4   r   r9   Úboolr=   ÚtorchÚTensorrD   ÚpropertyrO   rG   r   r   r*   r*   Ê   sÁ   € € € € € ðð ð ˜X˜Ðð1 4ð 1ð 1ð 1ð 1ð˜Sð ð ð ð ð/˜ð / ð /ð /ð /ð /ð*˜ð * ¤ð *ð *ð *ð *ð ð:ð :ñ „Xð:ð :ð :r   r*   r,   c                 ó¦   — d„ |                       ¦   «         D ¦   «         }t          d„ |D ¦   «         ¦  «        rdS t          d„ |D ¦   «         ¦  «        S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS rG   rH   rI   s     r   rL   z/detect_diffusers_state_dict.<locals>.<listcomp>ë   s    € Ð=Ð=Ð= a•˜qÑ!Ô!Ð=Ð=Ð=r   c              3   ó@   K  — | ]}|                      d ¦  «        V — ŒdS )©údouble_blocks.úsingle_blocks.Nr&   rI   s     r   ú	<genexpr>z.detect_diffusers_state_dict.<locals>.<genexpr>ì   s/   è è € Ð
QÐ
QÀ!ˆ1�<Š<Ð<Ñ=Ô=Ð
QÐ
QÐ
QÐ
QÐ
QÐ
Qr   Fc              3   ó@   K  — | ]}|                      d ¦  «        V — ŒdS ))útransformer_blocks.úsingle_transformer_blocks.Nr&   rI   s     r   r_   z.detect_diffusers_state_dict.<locals>.<genexpr>î   s0   è è € ÐfÐfÐWXˆq�|Š|ÐQÑRÔRÐfÐfÐfÐfÐfÐfr   )r1   Úany)r,   rO   s     r   Údetect_diffusers_state_dictrd   ê   sa   € Ø=Ð=¨:¯?ª?Ñ+<Ô+<Ð=Ñ=Ô=€IÝ
Ð
QÐ
QÀyÐ
QÑ
QÔ
QÑQÔQð ØˆuÝÐfÐfÐ\eÐfÑfÔfÑfÔfÐfr   F©Úverboserf   c                ól   — t          | ¦  «        s| S t          t          | ¦  «        |¬¦  «        }|r|n| S )Nre   )rd   Ú_convert_from_sourcer*   )r,   rf   Ú	converteds      r   Úconvert_state_dictrj   ñ   sA   € Ý& zÑ2Ô2ð ØÐÝ$¥_°ZÑ%@Ô%@È'ÐRÑRÔR€IØ!Ð1ˆ9ˆ9 zÐ1r   c                 ó¤  — d}d}| D ]Æ}|                      d¦  «        rM	 t          |                     d¦  «        d         ¦  «        }t          ||dz   ¦  «        }ŒT# t          $ r Y Œ`w xY w|                      d¦  «        rM	 t          |                     d¦  «        d         ¦  «        }t          ||dz   ¦  «        }Œ¶# t          $ r Y ŒÂw xY wŒÇ||fS )Nr   ra   r   r   rb   )r'   ÚintÚsplitÚmaxÚ	Exception)rO   Únum_dualÚ
num_singler    Úidxs        r   Ú_count_blocksrs   ø   s  € Ø€HØ€JØð ð ˆØ�>Š>Ð/Ñ0Ô0ð 	ðÝ˜#Ÿ)š) C™.œ.¨Ô+Ñ,Ô,�Ý˜x¨¨q©Ñ1Ô1��øÝð ð ð Ø�ðøøøà�^Š^Ð8Ñ9Ô9ð 	ðÝ˜#Ÿ)š) C™.œ.¨Ô+Ñ,Ô,�Ý  ¨S°1©WÑ5Ô5�
�
øÝð ð ð Ø�ðøøøð		ð �ZÐÐs#   Ÿ;AÁ
A(Á'A(Â;B=Â=
C
Ã	C
Úvecc                 óº   — | �&| j         dk    s|                      ¦   «         dz  dk    r| S |                      dd¬¦  «        \  }}t          j        ||gd¬¦  «        S )Nr   é   r   ©Údim)ÚndimÚnumelÚchunkrV   Úcat)rt   ÚshiftÚscales      r   Ú_swap_scale_shiftr     s^   € Ø
€{�c”h !’m�m s§y¢y¡{¤{°Q¡¸!Ò';Ð';Øˆ
Ø—9’9˜Q A�9Ñ&Ô&�L€Eˆ5ÝŒ9�e˜U�^¨Ð+Ñ+Ô+Ð+r   Úmatc                 ó¼   — | �'| j         dk    s|                      d¦  «        dz  dk    r| S |                      dd¬¦  «        \  }}t          j        ||gd¬¦  «        S )Nrv   r   rw   )ry   Úsizer{   rV   r|   )r€   r}   r~   s      r   Ú_swap_scale_shift_matrixrƒ     s`   € Ø
€{�c”h !’m�m s§x¢x°¡{¤{°Q¡¸!Ò';Ð';Øˆ
Ø—9’9˜Q A�9Ñ&Ô&�L€Eˆ5ÝŒ9�e˜U�^¨Ð+Ñ+Ô+Ð+r   c                 óº   — |dz   }t          ¦   «         }| D ]D}|                     |¦  «        r-|                     d|t          |¦  «        d …         z   ¦  «         ŒE|S )Nr   )Úsetr'   ÚaddÚlen)rO   ÚbaseÚprefixÚsuffixesr    s        r   Ú_collect_suffixesr‹     sc   € Ø�C‰Z€FÝ‰uŒu€HØð 2ð 2ˆØ�>Š>˜&Ñ!Ô!ð 	2Ø�LŠL˜˜s¥3 v¡;¤; < <Ô0Ñ0Ñ1Ô1Ð1øØ€Or   Úsuffixc                 óF   — | dk    rdS | dk    rdS | dk    rdS | dk    rdS | S )	Nú.smoothú.smooth_factorú.smooth_origú.smooth_factor_origú
.lora_downú
.proj_downú.lora_upú.proj_uprG   )rŒ   s    r   Ú_normalize_suffixr–   "  sI   € Ø�ÒÐØÐØ�ÒÐØ$Ð$Ø�ÒÐØˆ|Ø�ÒÐØˆzØ€Mr   ÚrefÚotherc                 óˆ   — | j         |j         k    s| j        |j        k    r!|                     | j        | j         ¬¦  «        S |S )N©ÚdeviceÚdtype)rœ   r›   Úto)r—   r˜   s     r   Ú_match_dtype_devicerž   .  s>   € Ø
„y�E”KÒÐ 3¤:°´Ò#=Ð#=Ø�xŠx˜sœz°´ˆxÑ;Ô;Ð;Ø€Lr   c                 óÄ   ‡— t          d„ | D ¦   «         ¦  «        rd S | d         Š‰j        dk    r‰S ‰gˆfd„| dd …         D ¦   «         z   }t          j        ||¬¦  «        S )Nc              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   ©rJ   Úvs     r   r_   z_concat.<locals>.<genexpr>5  ó&   è è € Ð
%Ð
%˜ˆ1�ˆ9Ð
%Ð
%Ð
%Ð
%Ð
%Ð
%r   r   c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS rG   ©rž   ©rJ   r¢   r—   s     €r   rL   z_concat.<locals>.<listcomp>:  s$   ø€ ÐFÐFÐF°aÕ)¨#¨qÑ1Ô1ÐFÐFÐFr   r   rw   )rc   ry   rV   r|   )Úvaluesrx   Úmergedr—   s      @r   Ú_concatr©   4  s~   ø€ Ý
Ð
%Ð
%˜fÐ
%Ñ
%Ô
%Ñ%Ô%ð ØˆtØ
�Œ)€CØ
„x�1‚}€}Øˆ
ØˆUÐFÐFÐFÐF¸6À!À"À"¼:ÐFÑFÔFÑF€FÝŒ9�V Ð%Ñ%Ô%Ð%r   c                  ó8   — 	 ddl m}  n# t          $ r Y d S w xY w| S )Nr   )Únunchaku_int4)Úshared.qtypesr«   ro   )Ú_nunchaku_int4s    r   Ú_maybe_load_nunchakur®   >  sD   € ðØAÐAÐAÐAÐAÐAÐAøÝð ð ð ØˆtˆtðøøøàÐs   ‚	 ‰
–Úqweightc                 óì   — t          j        | ¦  «        sdS | j        t           j        k    r|                      d¦  «        }n|                      d¦  «        dz  }|                      d¦  «        dz  }||fS )N)NNr   é   r   rv   )rV   Ú	is_tensorrœ   Úint8r‚   )r¯   Úout_featuresÚin_featuress      r   Ú_get_qweight_dimsr¶   F  sl   € ÝŒ?˜7Ñ#Ô#ð ØˆzØ„}�œ
Ò"Ð"Ø—|’| A‘”ˆˆà—|’| A‘”¨Ñ*ˆØ—,’,˜q‘/”/ AÑ%€KØ˜Ð$Ð$r   é@   Ú
group_sizec                 óÀ  ‡— t          d„ | D ¦   «         ¦  «        rd S t          ¦   «         }|�t          d„ |D ¦   «         ¦  «        rt          | d¬¦  «        S g Šd}d }t          | |¦  «        D ]¤\  }}t	          |¦  «        \  }}	|�|	€t          | d¬¦  «        c S |€|	}|	|k    rt          | d¬¦  «        c S |                     |||	|¦  «        }
t          j        |
¦  «        st          | d¬¦  «        c S ‰                     |
¦  «         ||z  }Œ¥‰d         gˆfd„‰dd …         D ¦   «         z   }t          j	        |d¬¦  «        }| 
                    ||||¦  «        S )Nc              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   r¡   s     r   r_   z+_merge_packed_scales_out.<locals>.<genexpr>R  r£   r   c              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   ©rJ   Úqs     r   r_   z+_merge_packed_scales_out.<locals>.<genexpr>U  ó&   è è € Ð;Ð;¨Q˜q D˜yÐ;Ð;Ð;Ð;Ð;Ð;r   r   rw   r   c                 ó<   •— g | ]}t          ‰d          |¦  «        ‘ŒS ©r   r¥   )rJ   ÚuÚunpackeds     €r   rL   z,_merge_packed_scales_out.<locals>.<listcomp>g  s(   ø€ ÐXÐXÐXÀaÕ1°(¸1´+¸qÑAÔAÐXÐXÐXr   )rc   r®   r©   Úzipr¶   Ú_unpack_nunchaku_wscalesrV   r²   Úappendr|   Ú_pack_nunchaku_wscales)r§   Úqweightsr¸   ÚnunchakuÚ	out_totalrµ   Úvaluer¯   Úout_iÚin_iÚ
unpacked_ir¨   rÂ   s               @r   Ú_merge_packed_scales_outrÎ   Q  sµ  ø€ Ý
Ð
%Ð
%˜fÐ
%Ñ
%Ô
%Ñ%Ô%ð ØˆtÝ#Ñ%Ô%€HØÐ�3Ð;Ð;°(Ð;Ñ;Ô;Ñ;Ô;ÐÝ�v 1Ð%Ñ%Ô%Ð%Ø€HØ€IØ€KÝ˜f hÑ/Ô/ð ð ‰ˆˆwÝ'¨Ñ0Ô0‰ˆˆtØˆ=˜D˜LÝ˜6 qÐ)Ñ)Ô)Ð)Ð)Ð)ØÐØˆKØ�;ÒÐÝ˜6 qÐ)Ñ)Ô)Ð)Ð)Ð)Ø×6Ò6°u¸eÀTÈ:ÑVÔVˆ
ÝŒ˜zÑ*Ô*ð 	*Ý˜6 qÐ)Ñ)Ô)Ð)Ð)Ð)Ø�Š˜
Ñ#Ô#Ð#Ø�UÑˆ	ˆ	Ø�qŒkˆ]ÐXÐXÐXÐXÈ8ÐTUÐTVÐTVÌ<ÐXÑXÔXÑX€FÝŒY�v 1Ð%Ñ%Ô%€FØ×*Ò*¨6°9¸kÈ:ÑVÔVÐVr   c                 ó>  — t          d„ | D ¦   «         ¦  «        rd S t          ¦   «         }|�t          d„ |D ¦   «         ¦  «        rt          | d¬¦  «        S t          |d         ¦  «        \  }}t          |d         ¦  «        \  }}|�|�|�|€t          | d¬¦  «        S ||k    rt          | d¬¦  «        S |                     | d         |||¦  «        }|                     | d         |||¦  «        }	t          j        |¦  «        rt          j        |	¦  «        st          | d¬¦  «        S |j        |	j        k    s|j        |	j        k    r!|	 	                    |j        |j        ¬¦  «        }	t          j
        ||	gd¬¦  «        }
|                     |
|||z   |¦  «        S )Nc              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   r¡   s     r   r_   z*_merge_packed_scales_in.<locals>.<genexpr>m  r£   r   c              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   r¼   s     r   r_   z*_merge_packed_scales_in.<locals>.<genexpr>p  r¾   r   r   rw   r   rš   )rc   r®   r©   r¶   rÄ   rV   r²   rœ   r›   r�   r|   rÆ   )r§   rÇ   r¸   rÈ   Úout_aÚin_aÚout_bÚin_bÚunpack_aÚunpack_br¨   s              r   Ú_merge_packed_scales_inrØ   l  s­  € Ý
Ð
%Ð
%˜fÐ
%Ñ
%Ô
%Ñ%Ô%ð ØˆtÝ#Ñ%Ô%€HØÐ�3Ð;Ð;°(Ð;Ñ;Ô;Ñ;Ô;ÐÝ�v 1Ð%Ñ%Ô%Ð%Ý# H¨Q¤KÑ0Ô0�K€Eˆ4Ý# H¨Q¤KÑ0Ô0�K€Eˆ4Ø€}˜˜¨¨¸¸Ý�v 1Ð%Ñ%Ô%Ð%Ø�‚~€~Ý�v 1Ð%Ñ%Ô%Ð%Ø×0Ò0°¸´¸EÀ4ÈÑTÔT€HØ×0Ò0°¸´¸EÀ4ÈÑTÔT€HÝŒ?˜8Ñ$Ô$ð &­E¬O¸HÑ,EÔ,Eð &Ý�v 1Ð%Ñ%Ô%Ð%Ø„~˜œÒ'Ð'¨8¬?¸h¼oÒ+MÐ+MØ—;’; h¤o¸X¼^�;ÑLÔLˆÝŒY˜ (Ð+°Ð3Ñ3Ô3€FØ×*Ò*¨6°5¸$À¹+ÀzÑRÔRÐRr   ÚtensorÚdivisorc                 ó  — | €d S t          |t          ¦  «        r|x}}n|\  }}| j        \  }}||z   dz
  |z  |z  }||z   dz
  |z  |z  }||k    r||k    r| S t          j        ||f| j        | j        ¬¦  «        }| |d |…d |…f<   |S )Nr   ©rœ   r›   )Ú
isinstancerl   ÚshaperV   Úzerosrœ   r›   )	rÙ   rÚ   Údiv0Údiv1ÚheightÚwidthÚnew_hÚnew_wÚpaddeds	            r   Ú_pad_to_multiplerç   ‚  s½   € Ø€~ØˆtÝ�'�3ÑÔð ØÐˆˆtˆtà‰
ˆˆdØ”L�M€FˆEØ�t‰m˜aÑ DÑ(¨DÑ0€EØ�d‰l˜QÑ 4Ñ'¨4Ñ/€EØ�‚€˜5 Eš>˜>ØˆÝŒ[˜% ˜¨v¬|ÀFÄMÐRÑRÔR€FØ$€Fˆ7ˆFˆ7�F�U�Fˆ?ÑØ€Mr   ÚweightÚdownc           	      óT  — | �| j         dk    r| S d\  }}d\  }}d\  }}||z  |z  }||z  |z  }	t          | ||	f¦  «        } | €d S |rC| j        \  }
}|
|z  ||	z  }}|                      ||||	¦  «                             dddd¦  «        } nB| j        \  }}
||z  |
|	z  }}|                      ||||	¦  «                             dddd¦  «        } |                      |||||||¦  «        } |                      dddddd	d
¦  «                             ¦   «         } |                      ||
¦  «        S )Nrv   )r   rv   )rv   rv   )é   r±   r   r   é   é   r±   r%   )ry   rç   rÞ   ÚviewÚpermuteÚreshapeÚ
contiguous)rè   ré   Úlane_nÚlane_kÚn_pack_sizeÚk_pack_sizeÚnum_n_lanesÚnum_k_lanesÚfrag_nÚfrag_kÚrowsÚcolsÚr_fragsÚc_fragss                 r   Ú_pack_lowrank_weightrþ   “  sh  € Ø€~˜œ¨Ò)Ð)ØˆØ�N€FˆFØ#Ñ€K�Ø#Ñ€K�Ø˜;Ñ&¨Ñ/€FØ˜;Ñ&¨Ñ/€FÝ˜f v¨vÐ&6Ñ7Ô7€FØ€~ØˆtØð SØ”\‰
ˆˆdØ 6™>¨4°6©>�ˆØ—’˜W f¨g°vÑ>Ô>×FÒFÀqÈ!ÈQÐPQÑRÔRˆˆà”\‰
ˆˆdØ 6™>¨4°6©>�ˆØ—’˜W f¨g°vÑ>Ô>×FÒFÀqÈ!ÈQÐPQÑRÔRˆØ�^Š^˜G W¨k¸;ÈÐU`ÐbhÑiÔi€FØ�^Š^˜A˜q ! Q¨¨1¨aÑ0Ô0×;Ò;Ñ=Ô=€FØ�;Š;�t˜TÑ"Ô"Ð"r   c                 ó´  — | �| j         dk    r| S | j        t          j        t          j        t          j        fvr|                      t          j        ¦  «        } | j        t          j        k    r|                      t          j        ¦  «        } | j        ||fk    rd S d}d}d}||z  dk    s|||z  z  dk    rd S d}d}d}d}	d}
d}|||z  |
z  z  }|||	z  |z  z  }||z  }||z  }|                      |||||
||||	|¦
  «
        }| 	                    ddd	dd
ddddd¦
  «
         
                    ¦   «         }|                     d¦  «        }t          j        dddt          j        |j        ¬¦  «        }|                     |¦  «        }|                     dt          j        ¬¦  «        }|                     t          j        ¬¦  «                             |d¦  «        S )Nrv   é€   r·   r   rë   r±   r   rí   r%   rì   é   é	   é   é    rÜ   éÿÿÿÿ)rx   rœ   ©rœ   )ry   rœ   rV   r³   Úint16Úint32r�   rÞ   rð   rï   rñ   Úbitwise_and_Úaranger›   Úbitwise_left_shift_Úsumrî   )Úqvalsr´   rµ   Úmem_nÚmem_kÚnum_k_unrollsrô   rõ   rö   r÷   Úreg_nÚreg_kÚnum_n_packsÚnum_k_packsÚn_tilesÚk_tilesrè   Úshiftss                     r   Ú_pack_nunchaku_w4a4_weightr  «  sñ  € Ø€}˜œ
 aš˜ØˆØ„{�5œ:¥u¤{µE´KÐ@Ð@Ð@Ø—’�œÑ%Ô%ˆØ„{•e”kÒ!Ð!Ø—’�œÑ%Ô%ˆØ„{�| [Ð1Ò1Ð1ØˆtØ€EØ€EØ€MØ�eÑ˜qÒ Ð  K°5¸=Ñ3HÑ$IÈQÒ$NÐ$NØˆtØ€KØ€KØ€KØ€KØ€EØ€EØ˜K¨+Ñ5¸Ñ=Ñ>€KØ˜K¨+Ñ5¸Ñ=Ñ>€KØ˜eÑ#€GØ˜UÑ"€GØ�]Š]ØØØØØØØØØØñô €Fð �^Š^˜A˜q ! Q¨¨1¨a°°A°qÑ9Ô9×DÒDÑFÔF€FØ× Ò  Ñ%Ô%€FÝŒ\˜!˜R ­%¬+¸f¼mÐLÑLÔL€FØ×'Ò'¨Ñ/Ô/€FØ�ZŠZ˜B¥e¤kˆZÑ2Ô2€FØ�;Š;�UœZˆ;Ñ(Ô(×-Ò-¨l¸BÑ?Ô?Ð?r   c                 óZ   — | €d S t          ¦   «         }|€| S |                     | |¦  «        S r.   )r®   Ú_unpack_lowrank_weight)rè   ré   rÈ   s      r   r  r  ×  s8   € Ø€~ØˆtÝ#Ñ%Ô%€HØÐØˆØ×*Ò*¨6°4Ñ8Ô8Ð8r   c           	      óÈ  — | sd S | d         }t          d„ | D ¦   «         ¦  «        }t          d„ | D ¦   «         ¦  «        }t          j        ||f|j        |j        ¬¦  «        }d}d}| D ]y}t          ||¦  «        }|||||                     d¦  «        z   …|||                     d¦  «        z   …f<   ||                     d¦  «        z  }||                     d¦  «        z  }Œz|S )Nr   c              3   ó@   K  — | ]}|                      d ¦  «        V — ŒdS )r   N©r‚   ©rJ   Úms     r   r_   z"_block_diag_out.<locals>.<genexpr>ä  ó,   è è € Ð-Ð- 1�Q—V’V˜A‘Y”YÐ-Ð-Ð-Ð-Ð-Ð-r   c              3   ó@   K  — | ]}|                      d ¦  «        V — ŒdS )r   Nr  r  s     r   r_   z"_block_diag_out.<locals>.<genexpr>å  r   r   rÜ   r   )r  rV   rß   rœ   r›   rž   r‚   )Úmatsr—   Ú
total_rowsÚ
total_colsÚoutÚrowÚcolr€   s           r   Ú_block_diag_outr(  à  sý   € Øð ØˆtØ
ˆqŒ'€CÝÐ-Ð-¨Ð-Ñ-Ô-Ñ-Ô-€JÝÐ-Ð-¨Ð-Ñ-Ô-Ñ-Ô-€JÝ
Œ+�z :Ð.°c´iÈÌ
Ð
SÑ
SÔ
S€CØ
€CØ
€CØð ð ˆÝ! # sÑ+Ô+ˆØ@CˆˆC�#˜Ÿš ™œÑ#Ð# S¨3°·²¸!±´Ñ+<Ð%<Ð<Ñ=Øˆs�xŠx˜‰{Œ{ÑˆØˆs�xŠx˜‰{Œ{ÑˆˆØ€Jr   c                 óä   ‡— t          d„ | D ¦   «         ¦  «        rd S d„ | D ¦   «         }|d         Š‰gˆfd„|dd …         D ¦   «         z   }t          j        |d¬¦  «        }t          |d¬¦  «        S )	Nc              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   r¡   s     r   r_   z&_merge_lowrank_down.<locals>.<genexpr>ò  r£   r   c                 ó0   — g | ]}t          |d ¬¦  «        ‘ŒS ©T©ré   ©r  r¡   s     r   rL   z'_merge_lowrank_down.<locals>.<listcomp>ô  ó&   € ÐEÐEÐE¸Õ& q¨tÐ4Ñ4Ô4ÐEÐEÐEr   r   c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS rG   r¥   r¦   s     €r   rL   z'_merge_lowrank_down.<locals>.<listcomp>ö  ó$   ø€ ÐHÐHÐH°aÕ)¨#¨qÑ1Ô1ÐHÐHÐHr   r   rw   Tr-  ©rc   rV   r|   rþ   ©r§   rÂ   r¨   r—   s      @r   Ú_merge_lowrank_downr4  ñ  s“   ø€ Ý
Ð
%Ð
%˜fÐ
%Ñ
%Ô
%Ñ%Ô%ð ØˆtØEÐE¸fÐEÑEÔE€HØ
�1Œ+€CØˆUÐHÐHÐHÐH¸8ÀAÀBÀB¼<ÐHÑHÔHÑH€FÝŒY�v 1Ð%Ñ%Ô%€FÝ ¨TÐ2Ñ2Ô2Ð2r   c                 ó�   — t          d„ | D ¦   «         ¦  «        rd S d„ | D ¦   «         }t          |¦  «        }t          |d¬¦  «        S )Nc              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   r¡   s     r   r_   z$_merge_lowrank_up.<locals>.<genexpr>ü  r£   r   c                 ó0   — g | ]}t          |d ¬¦  «        ‘ŒS ©Fr-  r.  r¡   s     r   rL   z%_merge_lowrank_up.<locals>.<listcomp>þ  ó&   € ÐFÐFÐF¸!Õ& q¨uÐ5Ñ5Ô5ÐFÐFÐFr   Fr-  ©rc   r(  rþ   ©r§   rÂ   r¨   s      r   Ú_merge_lowrank_upr<  û  sY   € Ý
Ð
%Ð
%˜fÐ
%Ñ
%Ô
%Ñ%Ô%ð ØˆtØFÐF¸vÐFÑFÔF€HÝ˜XÑ&Ô&€FÝ ¨UÐ3Ñ3Ô3Ð3r   c                 ó�   — t          d„ | D ¦   «         ¦  «        rd S d„ | D ¦   «         }t          |¦  «        }t          |d¬¦  «        S )Nc              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   r¡   s     r   r_   z1_merge_lowrank_down_block_diag.<locals>.<genexpr>  r£   r   c                 ó0   — g | ]}t          |d ¬¦  «        ‘ŒS r,  r.  r¡   s     r   rL   z2_merge_lowrank_down_block_diag.<locals>.<listcomp>  r/  r   Tr-  r:  r;  s      r   Ú_merge_lowrank_down_block_diagr@    sY   € Ý
Ð
%Ð
%˜fÐ
%Ñ
%Ô
%Ñ%Ô%ð ØˆtØEÐE¸fÐEÑEÔE€HÝ˜XÑ&Ô&€FÝ ¨TÐ2Ñ2Ô2Ð2r   c                 óä   ‡— t          d„ | D ¦   «         ¦  «        rd S d„ | D ¦   «         }|d         Š‰gˆfd„|dd …         D ¦   «         z   }t          j        |d¬¦  «        }t          |d¬¦  «        S )	Nc              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   r¡   s     r   r_   z+_merge_lowrank_up_concat.<locals>.<genexpr>  r£   r   c                 ó0   — g | ]}t          |d ¬¦  «        ‘ŒS r8  r.  r¡   s     r   rL   z,_merge_lowrank_up_concat.<locals>.<listcomp>  r9  r   r   c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS rG   r¥   r¦   s     €r   rL   z,_merge_lowrank_up_concat.<locals>.<listcomp>  r1  r   r   rw   Fr-  r2  r3  s      @r   Ú_merge_lowrank_up_concatrE    s“   ø€ Ý
Ð
%Ð
%˜fÐ
%Ñ
%Ô
%Ñ%Ô%ð ØˆtØFÐF¸vÐFÑFÔF€HØ
�1Œ+€CØˆUÐHÐHÐHÐH¸8ÀAÀBÀB¼<ÐHÑHÔHÑH€FÝŒY�v 1Ð%Ñ%Ô%€FÝ ¨UÐ3Ñ3Ô3Ð3r   c                 ó"  — t          d„ | D ¦   «         ¦  «        rd S | \  }}t          |¦  «        \  }}t          |¦  «        \  }}|�|�|�|€t          | d¬¦  «        S ||k    rt          | d¬¦  «        S t          ¦   «         }|�*|j        t
          j        k    s|j        t
          j        k    rt          | d¬¦  «        S |                     |||¦  «        }|                     |||¦  «        }	t          j        |¦  «        rt          j        |	¦  «        st          | d¬¦  «        S |j        t
          j	        k    r| 
                    t
          j	        ¦  «        }|	j        t
          j	        k    r|	 
                    t
          j	        ¦  «        }	|j        |	j        k    s|j        |	j        k    r!|	 
                    |j        |j        ¬¦  «        }	t          j        ||	gd¬¦  «        }
t          |
|||z   ¦  «        }|€t          | d¬¦  «        S |S )Nc              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   r¡   s     r   r_   z$_merge_qweight_in.<locals>.<genexpr>  r£   r   r   rw   rš   )rc   r¶   r©   r®   rœ   rV   r³   Ú_unpack_nunchaku_w4a4_weightr²   r  r�   r›   r|   r  )r§   ÚaÚbrÒ   rÓ   rÔ   rÕ   rÈ   rÖ   r×   r¨   Úpackeds               r   Ú_merge_qweight_inrL    sú  € Ý
Ð
%Ð
%˜fÐ
%Ñ
%Ô
%Ñ%Ô%ð ØˆtØ�D€A€qÝ# AÑ&Ô&�K€Eˆ4Ý# AÑ&Ô&�K€Eˆ4Ø€}˜˜¨¨¸¸Ý�v 1Ð%Ñ%Ô%Ð%Ø�‚~€~Ý�v 1Ð%Ñ%Ô%Ð%Ý#Ñ%Ô%€HØÐ˜1œ7¥e¤jÒ0Ð0°A´G½u¼zÒ4IÐ4IÝ�v 1Ð%Ñ%Ô%Ð%Ø×4Ò4°Q¸¸tÑDÔD€HØ×4Ò4°Q¸¸tÑDÔD€HÝŒ?˜8Ñ$Ô$ð &­E¬O¸HÑ,EÔ,Eð &Ý�v 1Ð%Ñ%Ô%Ð%Ø„~�œÒ$Ð$Ø—;’;�uœ{Ñ+Ô+ˆØ„~�œÒ$Ð$Ø—;’;�uœ{Ñ+Ô+ˆØ„~˜œÒ'Ð'¨8¬?¸h¼oÒ+MÐ+MØ—;’; h¤o¸X¼^�;ÑLÔLˆÝŒY˜ (Ð+°Ð3Ñ3Ô3€FÝ'¨°°t¸d±{ÑCÔC€FØ€~Ý�v 1Ð%Ñ%Ô%Ð%Ø€Mr   c                 óî   — t          d„ | D ¦   «         ¦  «        rd S |dv rt          | |¦  «        S |dk    rt          | ¦  «        S |dk    rt          | ¦  «        S |dv r| d         S t	          | d¬¦  «        S )Nc              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   r¡   s     r   r_   z_merge_multi.<locals>.<genexpr>4  r£   r   ©ú.wscalesú.wzerosr“   r•   )r�   r‘   ú.input_scaleú.output_scaleú.scale_weightr   rw   )rc   rÎ   r4  r<  r©   )r§   rŒ   rÇ   s      r   Ú_merge_multirU  3  s�   € Ý
Ð
%Ð
%˜fÐ
%Ñ
%Ô
%Ñ%Ô%ð ØˆtØÐ(Ð(Ð(Ý'¨°Ñ9Ô9Ð9Ø�ÒÐÝ" 6Ñ*Ô*Ð*Ø�ÒÐÝ  Ñ(Ô(Ð(ØÐlÐlÐlØ�aŒyÐÝ�6˜qÐ!Ñ!Ô!Ð!r   c                 ó¦  — t          d„ | D ¦   «         ¦  «        rd S |dk    rt          | ¦  «        S |dv rt          | |¦  «        S |dk    rt          | ¦  «        S |dk    rt	          | ¦  «        S |dv rt          | d¬¦  «        S |d	k    r,| d         }|}| d
d …         D ]}|t          ||¦  «        z   }Œ|S |dv r| d         S t          | d
¬¦  «        S )Nc              3   ó   K  — | ]}|d u V — Œ	d S r.   rG   r¡   s     r   r_   z"_merge_multi_in.<locals>.<genexpr>B  r£   r   ú.qweightrO  r“   r•   )r�   r‘   r   rw   ú.biasr   )rR  rS  rT  )rc   rL  rØ   r@  rE  r©   rž   )r§   rŒ   rÇ   r—   ÚtotalÚvals         r   Ú_merge_multi_inr\  A  s!  € Ý
Ð
%Ð
%˜fÐ
%Ñ
%Ô
%Ñ%Ô%ð ØˆtØ�ÒÐÝ  Ñ(Ô(Ð(ØÐ(Ð(Ð(Ý& v¨xÑ8Ô8Ð8Ø�ÒÐÝ-¨fÑ5Ô5Ð5Ø�ÒÐÝ'¨Ñ/Ô/Ð/ØÐ:Ð:Ð:Ý�v 1Ð%Ñ%Ô%Ð%Ø�ÒÐØ�QŒiˆØˆØ˜!˜"˜"”:ð 	:ð 	:ˆCØÕ/°°SÑ9Ô9Ñ9ˆEˆEØˆØÐCÐCÐCØ�aŒyÐÝ�6˜qÐ!Ñ!Ô!Ð!r   c                óð  ‡ ‡‡	‡
‡— ‰ j         Št          ‰¦  «        \  }}|rt          d|› d|› d�¦  «         i Š
h d£Šˆˆ	ˆ
ˆˆ fd„}t          |¦  «        D ]JŠ	d‰	› d�}t                               ¦   «         D ](\  }}|                     d¦  «        sŒ ||||¦  «         Œ)ŒKt          |¦  «        D ]JŠ	d	‰	› d�}t                               ¦   «         D ](\  }}|                     d
¦  «        sŒ ||||¦  «         Œ)ŒKd Š	t                               ¦   «         D ](\  }}|                     d¦  «        rŒ |d||¦  «         Œ)d‰
v rt          ‰
d         ¦  «        ‰
d<   d‰
v rt          ‰
d         ¦  «        ‰
d<   ‰
S )NzFound z dual-stream blocks, z single-stream blocks>   rY  rŽ   rQ  r”   rX  rP  r’   rR  r�   rS  rT  c                 ó  •‡ ‡‡— |                      dd¦  «        \  }}d|z   }t          |d         t          t          f¦  «        r|n|g}|D �]¿}d|d                               dd¦  «        d         z   Št	          ˆfd„|D ¦   «         ¦  «        rŒDd„ |D ¦   «         }ˆˆ fd„|D ¦   «         }t	          d„ |D ¦   «         ¦  «        rŒyt          j        |Ž }	|	sŒŠt                               |t          ¦   «         ¦  «        }
‰|k    }‰|	v r‰h}|r|dk    r||	|
z
  z  }n|	‰z  }|sŒ×d	|v r#| 	                    d	t          ‰¦  «        ¦  «        n|}|                     d
¦  «        ot          |¦  «        dk    }|D ]“Šˆˆ ˆfd„|D ¦   «         }t          |¦  «        dk    r	|d         }nCˆˆ fd„|D ¦   «         }t          ‰¦  «        }|rt          |||¦  «        }nt          |||¦  «        }|€Œt‰‰k    r|nt          ‰¦  «        }|‰||z   <   Œ” d S d S )Nr   r   r   c              3   ó~   •K  — | ]7}|                      d d¦  «        d         ‰                     d ¦  «        k    V — Œ8dS )r   r   N)ÚrsplitÚlstrip)rJ   ÚdÚ
src_suffixs     €r   r_   z;_convert_from_source.<locals>._map_entry.<locals>.<genexpr>u  sI   øè è € ÐTÐTÀQ�1—8’8˜C Ñ#Ô# AÔ&¨*×*;Ò*;¸CÑ*@Ô*@Ò@ÐTÐTÐTÐTÐTÐTr   c                 óF   — g | ]}|                      d d¦  «        d         ‘ŒS )r   r   r   )r`  )rJ   rb  s     r   rL   z<_convert_from_source.<locals>._map_entry.<locals>.<listcomp>w  s+   € Ð@Ð@Ð@°˜Ÿš # qÑ)Ô)¨!Ô,Ð@Ð@Ð@r   c                 ó6   •— g | ]}t          ‰‰|z   ¦  «        ‘ŒS rG   )r‹   )rJ   rˆ   rO   Ú
src_prefixs     €€r   rL   z<_convert_from_source.<locals>._map_entry.<locals>.<listcomp>x  s)   ø€ ÐaÐaÐaÈtÕ,¨Y¸
ÀTÑ8IÑJÔJÐaÐaÐar   c              3   ó   K  — | ]}| V — Œd S r.   rG   )rJ   Ú
suffix_sets     r   r_   z;_convert_from_source.<locals>._map_entry.<locals>.<genexpr>y  s$   è è € Ð@Ð@ j�z�>Ð@Ð@Ð@Ð@Ð@Ð@r   ú.weightz()z.linear2c                 óF   •— g | ]}‰                      ‰|z   ‰z   ¦  «        ‘ŒS rG   )rD   )rJ   rˆ   Úsrcrf  rŒ   s     €€€r   rL   z<_convert_from_source.<locals>._map_entry.<locals>.<listcomp>’  s/   ø€ ÐTÐTÐTÀ$˜#Ÿ'š' *¨tÑ"3°fÑ"<Ñ=Ô=ÐTÐTÐTr   c                 ó€   •— g | ]:}‰                      ‰|z   d z   ¦  «        r‰                     ‰|z   d z   ¦  «        nd‘Œ;S )rX  N)r=   rD   )rJ   rˆ   rk  rf  s     €€r   rL   z<_convert_from_source.<locals>._map_entry.<locals>.<listcomp>–  sd   ø€ ð  ð  ð  à ð DGÇ7Â7È:ÐX\ÑK\Ð_iÑKiÑCjÔCjÐt˜Ÿš 
¨TÑ 1°JÑ >Ñ?Ô?Ð?Ðptð ð  ð  r   )r`  rÝ   r0   Útuplerc   r…   ÚintersectionÚ_TARGET_SUFFIXESrD   Úreplacer   Úendswithr‡   r–   r\  rU  )rf  Útgt_templateÚdvalsÚtgt_base_templateÚ
tgt_suffixÚ
candidatesÚ	candidateÚ	src_basesÚsuffix_setsÚcommon_suffixesÚexplicit_suffixesÚallow_extrarŠ   Útgt_baseÚmerge_in_featuresr§   r¨   rÇ   Únorm_suffixÚ
out_suffixrc  rŒ   rO   Ú	block_idxr%  Úquant_suffixesrk  s   `                   @@€€€€€r   Ú
_map_entryz(_convert_from_source.<locals>._map_entryn  sØ  øøøø€ Ø(4×(;Ò(;¸CÀÑ(CÔ(CÑ%Ð˜:Ø˜:Ñ%ˆ
Ý(¨¨q¬µD½%°=ÑAÔAÐN�U�UÈÀwˆ
à#ð 0	ñ 0	ˆIØ˜y¨œ|×2Ò2°3¸Ñ:Ô:¸1Ô=Ñ=ˆJÝÐTÐTÐTÐTÈ)ÐTÑTÔTÑTÔTð ØØ@Ð@°iÐ@Ñ@Ô@ˆIØaÐaÐaÐaÐaÐW`ÐaÑaÔaˆKÝÐ@Ð@°KÐ@Ñ@Ô@Ñ@Ô@ð ØÝ!Ô.°Ð<ˆOØ"ð Øå 0× 4Ò 4Ð5FÍÉÌÑ NÔ NÐØ$¨
Ò2ˆKØ˜_Ð,Ð,Ø&˜<�Øð F :°Ò#:Ð#:Ø Ð3DÑ!DÑE�Høà*¨^Ñ;�Øð Øð Ð,Ð,Ð,ð "×)Ò)¨$µ°I±´Ñ?Ô?Ð?à&ð ð
 !2× :Ò :¸:Ñ FÔ FÐ ]Í3ÈyÉ>Ì>Ð\]ÒK]Ðà"ð 4ð 4�ØTÐTÐTÐTÐTÐTÈ)ÐTÑTÔT�Ý�v‘;”; !Ò#Ð#Ø# AœY�F�Fð ð  ð  ð  ð  à$-ð ñ  ô  �Hõ #4°FÑ";Ô";�KØ(ð MÝ!0°¸ÀhÑ!OÔ!O˜˜å!-¨f°kÀ8Ñ!LÔ!L˜Ø�>ØØ+1°ZÒ+?Ð+?˜Z˜ZÕEVÐW]ÑE^ÔE^�
Ø-3��H˜zÑ)Ñ*Ð*ØˆEˆEða0	ð 0	r   ra   r   r]   rb   r^   r\   r+   r   r   )	rO   rs   ÚprintÚrangeÚDIFFUSERS_MAPÚitemsr'   rƒ   r   )rk  rf   rp   rq   rƒ  r‰   Útgt_keyrs  rO   r�  r%  r‚  s   `       @@@@r   rh   rh   Y  s;  øøøøø€ Ø”€IÝ(¨Ñ3Ô3Ñ€HˆjØð YÝÐW�xÐWÐW°jÐWÐWÐWÑXÔXÐXà
€Cðð ð €Nð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5õn ˜8‘_”_ð /ð /ˆ	Ø3 yÐ3Ð3Ð3ˆÝ+×1Ò1Ñ3Ô3ð 	/ð 	/‰NˆG�UØ×%Ò%Ð&6Ñ7Ô7ð ØØˆJ�v˜w¨Ñ.Ô.Ð.Ð.ð	/õ
 ˜:Ñ&Ô&ð /ð /ˆ	Ø:¨iÐ:Ð:Ð:ˆÝ+×1Ò1Ñ3Ô3ð 	/ð 	/‰NˆG�UØ×%Ò%Ð&6Ñ7Ô7ð ØØˆJ�v˜w¨Ñ.Ô.Ð.Ð.ð	/ð
 €IÝ'×-Ò-Ñ/Ô/ð 'ð '‰ˆ�Ø×ÒÐBÑCÔCð 	ØØˆ
�2�w Ñ&Ô&Ð&Ð&à.°#Ð5Ð5Ý7OØÐ7Ô8ñ8
ô 8
ˆÐ3Ñ4ð -°Ð3Ð3Ý5FØÐ5Ô6ñ6
ô 6
ˆÐ1Ñ2ð €Jr   c                   óª   — e Zd ZdZddgZdefd„Zededefd„¦   «         Z	d	efd
„Z
d	edefd„Zd	edej        fd„Zed„ ¦   «         Zdefd„Zdefd„ZdS )ÚDiffusersSourcea  
    Uniform interface over:
      1) Folder with index JSON + shards
      2) Folder with exactly one .safetensors (no index)
      3) Single .safetensors file
    Provides .has(key), .get(key)->Tensor, .base_keys (keys with 'model.' stripped for scanning)
    r+   r$   Úpathc                 ó>  — t          |¦  «        }|                     ¦   «         r3|dz                       ¦   «         r|dz  }|                      |¦  «         d S |                     ¦   «         r"|j        dk    r|                      |¦  «         d S t          d|› �¦  «        ‚)NÚtransformerz.safetensorszInvalid path: )r   Úis_dirÚ_init_from_dirÚis_filerŒ   Ú_init_from_single_fileÚFileNotFoundError)r3   r‹  Úps      r   r4   zDiffusersSource.__init__Ð  s§   € Ý�‰JŒJˆØ�8Š8‰:Œ:ð 	:à�MÑ!×)Ò)Ñ+Ô+ð &Ø˜Ñ%�Ø×Ò Ñ"Ô"Ð"Ð"Ð"Ø�YŠY‰[Œ[ð 	:˜QœX¨Ò7Ð7Ø×'Ò'¨Ñ*Ô*Ð*Ð*Ð*å#Ð$8°QÐ$8Ð$8Ñ9Ô9Ð9r   rK   r!   c                 óD   — |                       d¦  «        r
| dd …         n| S r#   r&   )rK   s    r   r(   zDiffusersSource._strip_prefixÞ  s%   € àŸš XÑ.Ô.Ð5ˆq���Œuˆu°AÐ5r   r5   c                 ó>   — | j         D ]}||z   }|| j        v r|c S ŒdS )zX
        Return the actual stored key matching `want` by trying known prefixes.
        N)r7   r2   )r3   r5   r8   rK   s       r   r9   zDiffusersSource._resolveâ  s?   € ð Ô*ð 	ð 	ˆDØ�t‘ˆAØ�D”NÐ"Ð"Ø���ð #àˆtr   c                 ó0   — |                       |¦  «        d uS r.   r;   r<   s     r   r=   zDiffusersSource.hasì  r>   r   c                 ó¤   — |                       |¦  «        }|€t          d|› �¦  «        ‚|                      |¦  «                             d¦  «        S )Nr@   Úcpu)r9   rA   Ú_get_by_real_keyr�   rB   s      r   rD   zDiffusersSource.getï  sR   € Ø—=’= Ñ&Ô&ˆØÐÝÐ1¨4Ð1Ð1Ñ2Ô2Ð2Ø×$Ò$ XÑ.Ô.×1Ò1°%Ñ8Ô8Ð8r   c                 ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rG   rH   )rJ   rK   r3   s     €r   rL   z-DiffusersSource.base_keys.<locals>.<listcomp>ø  s'   ø€ Ð>Ð>Ð>¨!�×"Ò" 1Ñ%Ô%Ð>Ð>Ð>r   rM   rN   s   `r   rO   zDiffusersSource.base_keysõ  s!   ø€ ð ?Ð>Ð>Ð>¨t¬~Ð>Ñ>Ô>Ð>r   Ú	file_pathc                 óÐ   ‡ — d‰ _         |‰ _        t          |dd¬¦  «        ‰ _        t	          ‰ j                             ¦   «         ¦  «        ‰ _        dt          fˆ fd„}|‰ _        d S )NÚsingleÚptr˜  ©Ú	frameworkr›   rC   c                 ó8   •— ‰j                              | ¦  «        S r.   )Ú_handleÚ
get_tensor)rC   r3   s    €r   r™  z@DiffusersSource._init_from_single_file.<locals>._get_by_real_key  s   ø€ Ø”<×*Ò*¨8Ñ4Ô4Ð4r   )	Ú_modeÚ_filer   r£  r0   r1   r2   r   r™  )r3   rœ  r™  s   `  r   r‘  z&DiffusersSource._init_from_single_fileü  sy   ø€ ØˆŒ
ØˆŒ
Ý  °dÀ5ÐIÑIÔIˆŒÝ˜dœl×/Ò/Ñ1Ô1Ñ2Ô2ˆŒð	5¥sð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð !1ˆÔÐÐr   Údpathc                 ó„  ‡ ‡— ‰dz  }|                      ¦   «         rÁt          |dd¬¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   |d         }d‰ _        ‰‰ _        ˆfd„|                     ¦   «         D ¦   «         ‰ _        t          ‰ j         	                    ¦   «         ¦  «        ‰ _
        i ‰ _        dt          fˆ fd	„}|‰ _        d S t          ‰                     d
¦  «        ¦  «        }t!          |¦  «        dk    rt#          d‰› d�¦  «        ‚‰                      |d         ¦  «         d S )Nz.diffusion_pytorch_model.safetensors.index.jsonÚrzutf-8)ÚencodingÚ
weight_mapÚshardedc                 ó"   •— i | ]\  }}|‰|z  “ŒS rG   rG   )rJ   rK   r¢   r§  s      €r   ú
<dictcomp>z2DiffusersSource._init_from_dir.<locals>.<dictcomp>  s#   ø€ ÐLÐLÐL±°°A  5¨1¡9ÐLÐLÐLr   rC   c                 ó¸   •— ‰j         |          }‰j                             |¦  «        }|€t          |dd¬¦  «        }|‰j        |<   |                     | ¦  «        S )NrŸ  r˜  r   )Ú_weight_mapÚ_open_handlesrD   r   r¤  )rC   ÚfpathÚhr3   s      €r   r™  z8DiffusersSource._init_from_dir.<locals>._get_by_real_key  s^   ø€ ØÔ(¨Ô2�ØÔ&×*Ò*¨5Ñ1Ô1�Ø�9Ý! %°4ÀÐFÑFÔF�AØ01�DÔ& uÑ-Ø—|’| HÑ-Ô-Ð-r   z*.safetensorsr   zNo index found and z0 does not contain exactly one .safetensors file.r   )ÚexistsÚopenÚjsonÚloadr¥  Ú_dpathr‡  r°  r0   r1   r2   r±  r   r™  ÚsortedÚglobr‡   r’  r‘  )r3   r§  Ú
index_jsonÚfÚindexr«  r™  Úfiless   ``      r   r�  zDiffusersSource._init_from_dir  s›  øø€ ØÐMÑMˆ
Ø×ÒÑÔð 	Ý�j #°Ð8Ñ8Ô8ð %¸AÝœ	 !™œ�ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %à˜|Ô,ˆJØ"ˆDŒJØˆDŒKØLÐLÐLÐL¸×9IÒ9IÑ9KÔ9KÐLÑLÔLˆDÔÝ! $Ô"2×"7Ò"7Ñ"9Ô"9Ñ:Ô:ˆDŒNØ!#ˆDÔð.­3ð .ð .ð .ð .ð .ð .ð %5ˆDÔ!ØˆFõ �u—z’z /Ñ2Ô2Ñ3Ô3ˆÝˆu‰:Œ:˜Š?ˆ?Ý#Ø] eÐ]Ð]Ð]ñô ð ð 	×#Ò# E¨!¤HÑ-Ô-Ð-Ð-Ð-s   ®AÁAÁAN)rP   rQ   rR   rS   r7   r   r4   Ústaticmethodr   r(   r9   rU   r=   rV   rW   rD   rX   rO   r‘  r�  rG   r   r   rŠ  rŠ  Å  s%  € € € € € ðð ð ˜X˜Ðð
:˜Tð 
:ð 
:ð 
:ð 
:ð ð6˜ð 6 ð 6ð 6ð 6ñ „\ð6ð˜Sð ð ð ð ð/˜ð / ð /ð /ð /ð /ð9˜ð 9 ¤ð 9ð 9ð 9ð 9ð ð?ð ?ñ „Xð?ð	1°ð 	1ð 	1ð 	1ð 	1ð. Dð .ð .ð .ð .ð .ð .r   rŠ  c                  óÈ  ‡‡‡— t          ¦   «         } t          t          | j        ¦  «        ¦  «        }t	          |d¬¦  «        }| j        s| j        �rbt          j        Št          j	        ‰¦  «        j
        t          j	        ‰¦  «        j        cŠŠˆˆˆfd„}dˆˆˆfd„	}i }t          t          |                     ¦   «         ¦  «        d¬¦  «        D ]«}||         }| j        r ||¦  «        ||<   Œ |                     d¦  «        rJ|                     ¦   «         d	k    r2 ||¦  «        \  }}	|||<   |	||d t#          d¦  «         …         d
z   <   Œ|                     ‰‰¦  «                             ‰¦  «        ||<   Œ¬| j        r.|                     |¦  «         t          j        g ‰¬¦  «        |d<   n^t          |                     ¦   «         ¦  «        D ]<}||                              t          j        ¦  «                             ¦   «         ||<   Œ=t          | j        ¦  «        }
|
j                             dd¬¦  «         t7          ¦   «         }d|d<   t9          d¦  «        j                             ¦   «                              d¦  «        |d<   tA          d|
› �¦  «         tB          j         "                    |tG          |
¦  «        |¬¦  «         tA          d¦  «         d S )NTre   c                 ó¬  •— |                       ¦   «                              ‰‰¦  «        } t          j        | dz  ¦  «        dz  }t          j        | dz  ¦  «        dz  }t          j        ||k    | |z
  ||z
  z  t          j        | ¦  «        ¦  «        }t          j        | ¦  «        }t          j        ||k     ||¦  «        }|                     ‰¦  «        S )Né   )	ÚfloatÚclamprV   ÚfloorÚceilÚwhereÚ
zeros_likeÚ	rand_liker�   )	ÚtÚlowerÚupperÚprobÚrndr%  rœ   ÚmaxvÚminvs	         €€€r   Ústochastic_round_toz!main.<locals>.stochastic_round_to1  s´   ø€ Ø—’‘	”	—’  dÑ+Ô+ˆAÝ”K  C¡Ñ(Ô(¨3Ñ.ˆEÝ”J˜q 3™wÑ'Ô'¨#Ñ-ˆEÝ”;˜u¨š~°°E±	¸eÀe¹mÑ/LÍeÔN^Ð_`ÑNaÔNaÑbÔbˆDÝ”/ !Ñ$Ô$ˆCÝ”+˜c Dšj¨%°Ñ7Ô7ˆCØ—6’6˜%‘=”=Ð r   ç      z@c                 óî   •— |                       ¦   «                              ¦   «         }|dk    r||z  nt          j        d¦  «        }| |z                       ‰‰¦  «                             ‰¦  «        }||fS )Nr   g      ð?)Úabsrn   rV   rÙ   rÄ  r�   )rè   Ú
target_maxÚabsmaxr~   Úscaledrœ   rÏ  rÐ  s        €€€r   Úscale_to_8bitzmain.<locals>.scale_to_8bit:  sn   ø€ Ø—Z’Z‘\”\×%Ò%Ñ'Ô'ˆFØ+1°Aª:¨:�F˜ZÑ'Ð'½5¼<ÈÑ;LÔ;LˆEØ˜u‘n×+Ò+¨D°$Ñ7Ô7×:Ò:¸5ÑAÔAˆFØ˜5�=Ð r   zQuantizing to fp8)Údescri  rv   rT  r  Ú
scaled_fp8)ÚparentsÚexist_okrŸ  ÚformatÚdatetimez%Y-%m-%dzmodelspec.datezSaving transformer to: )ÚmetadatazDone.)rÒ  )$r   rŠ  r   r   rh   Úfp8Ú
fp8_scaledrV   Úfloat8_e4m3fnÚfinfoÚminrn   r   r0   r1   rq  rx   r‡   rÄ  r�   ÚupdaterÙ   Úbfloat16r˜  r   ÚparentÚmkdirr   Ú
__import__ÚdateÚtodayÚstrftimer„  ÚsafetensorsÚ	save_filer   )Úargsrk  ÚorigrÑ  rØ  ÚscalesrK   rÊ  ÚqtÚsÚout_pathÚmetarœ   rÏ  rÐ  s               @@@r   Úmainrö  '  så  øøø€ Ý‰<Œ<€DÝ
�$˜tÔ2Ñ3Ô3Ñ
4Ô
4€CÝ ¨TÐ2Ñ2Ô2€Dð „xð %7�4”?ñ %7ÝÔ#ˆÝ”[ Ñ'Ô'Ô+­U¬[¸Ñ-?Ô-?Ô-Cˆ
ˆˆdð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð ˆÝ•d˜4Ÿ9š9™;œ;Ñ'Ô'Ð.AÐBÑBÔBð 
	<ð 
	<ˆAØ�Q”ˆAØŒxð <Ø-Ð-¨aÑ0Ô0��Q‘�à—:’:˜iÑ(Ô(ð <¨Q¯UªU©W¬W¸ª\¨\Ø)˜M¨!Ñ,Ô,‘E�B˜Ø �D˜‘GØDE�F˜1Ð-�s 9™~œ~˜oÐ-Ô.°Ñ@ÑAÐAàŸgšg d¨DÑ1Ô1×4Ò4°UÑ;Ô;�D˜‘G�GØŒ?ð 	?Ø�KŠK˜ÑÔÐÝ!&¤¨b¸Ð!>Ñ!>Ô!>ˆD�Ñøõ �d—i’i‘k”kÑ"Ô"ð 	7ð 	7ˆAØ˜1”g—j’j¥¤Ñ0Ô0×4Ò4Ñ6Ô6ˆD�‰GˆGå�DÔ$Ñ%Ô%€HØ„O×Ò $°ÐÑ6Ô6Ð6Ý‰=Œ=€DØ€Dˆ�NÝ'¨
Ñ3Ô3Ô8×>Ò>Ñ@Ô@×IÒIÈ*ÑUÔU€DÐ	ÑÝ	Ð
. HÐ
.Ð
.Ñ/Ô/Ð/ÝÔ×Ò ¥c¨(¡m¤m¸dÐÑCÔCÐCÝ	ˆ'�N„N€N€N€Nr   Ú__main__rÀ   )r·   );rS   r   r¶  Úpathlibr   Úcollectionsr   rV   rí  r   Úsafetensors.torchr   r   r†  ro  Ú_tgt_keyr`  Ú_baseÚ_suffixÚ
setdefaultr…   r†   r   r(   r*   rT   rU   rd   rj   rs   rW   r   rƒ   r‹   r–   rž   r©   r®   rm  rl   r¶   rÎ   rØ   rç   rþ   r  r  r(  r4  r<  r@  rE  rL  rU  r\  rh   rŠ  rö  rP   rG   r   r   ú<module>rÿ     sÃ	  ððð ð €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #à €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð ð
ð 
ð 
ðSàÐ SÐTðSð Ð QÐRðSð Ð!TÐ Uð	Sð
 Ð!RÐ SðSð  Ð"QÐ!RðSð Ð"OÐ!PðSð !Ð#RÐ"SðSð Ð#PÐ"QðSð "Ð$WÐ#XðSð  Ð$UÐ#VðSð #Ð%XÐ$YðSð !Ð%VÐ$WðSð" Ð/Ð0ð#Sð$ Ð-Ð.ð%Sð& Ð)Ð*ð'Sð( Ð'Ð(ð)Sð. *Ð,AÐ+Bð/Sð Sð0 (Ð,?Ð+@ð1Sð2 *Ð,IÐ+Jð3Sð4 (Ð,GÐ+Hð5Sð8 +ØDÐDÐDØ	Ðð-ð9Sð@ )Ø>Ð>Ð>Ø	Ðð+ðASðH +ØVÐVÐVØ	"Ð#ð-ðISðP )ØPÐPÐPØ	 Ð!ð+ðQSðZ 6Ø	ÐØ	Ðð8ð[Sðb 4Ø	ÐØ	Ðð6ðcSðj 6Ø	#Ð$Ø	Ðð8ðkSðr 4Ø	#Ð$Ø	Ðð6ðsSð| (Ø	Ð Ø	Ðð*ð}SðD &Ø	ÐØ	Ðð(ðESðL (Ø	ÐØ	Ðð*ðMSðT &Ø	ÐØ	Ðð(ðUSð^ (Ø	'Ð(Ø	!Ð"ð*ð_Sðf &Ø	%Ð&Ø	Ð ð(ðgSð Sð Sðn (Ø	"Ð#Ø	!Ð"ð*ðoSðv &Ø	 Ð!Ø	Ð ð(ðwSð@ ,Ø	Ð Ø	Ðð.ðASðH *Ø	ÐØ	Ðð,ðISðP ,Ø	!Ð"Ø	"Ð#ð.ðQSðX *Ø	Ð Ø	 Ð!ð,ðYSðd -Ð/CÐ.DðeSðf +Ð/AÐ.BðgSðh &ØWÐWÐWØ	Ð,Ð-ð(ðiSðp $ØOÐOÐOØ	˜.Ð)ð&ðqSðx -Ø	ÐØ	Ðð/ðySð@ +Ø	ÐØ	Ðð-ðASðH &Ø	ÐØ	Ð,Ð-ð(ðISðP $Ø	ÐØ	˜.Ð)ð&ðQSð\  Ð/@Ð.Að]Sð^ ¨Ð.?ð_Sðb ,Ð/GÐ.HðcSð Sðd *Ð/EÐ.FðeSð S€ðj Ð Øð Að A€HØ—_’_ S¨!Ñ,Ô,�N€Eˆ7Ø×Ò  s s¡u¤uÑ-Ô-×1Ò1°#¸±-Ñ@Ô@Ð@Ð@ð8�sð 8˜sð 8ð 8ð 8ð 8ð:ð :ð :ð :ð :ñ :ô :ð :ð@g¨Dð g°Tð gð gð gð gð =Bð 2ð 2ð 2 4ð 2°Tð 2Àdð 2ð 2ð 2ð 2ð ð  ð  ð&,˜5œ<ð ,¨E¬Lð ,ð ,ð ,ð ,ð, %¤,ð ,°5´<ð ,ð ,ð ,ð ,ðð ð ð	˜cð 	 cð 	ð 	ð 	ð 	ð˜Uœ\ð °%´,ð À5Ä<ð ð ð ð ð&ð &ð &ð &ðð ð ð%˜uœ|¨dÑ2ð %°u¸SÀ4¹ZÈÈtÉÐ=SÔ7Tð %ð %ð %ð %ðWð W¸3ð Wð Wð Wð Wð6Sð S¸#ð Sð Sð Sð Sð,˜Uœ\¨DÑ0ð ¸3ÀÀsÈCÀxÄÑ;Pð ð ð ð ð"# ¤°Ñ!4ð #¸Dð #ð #ð #ð #ð0)@ð )@ð )@ðX9 5¤<°$Ñ#6ð 9¸dð 9ð 9ð 9ð 9ðð ð ð"3ð 3ð 3ð4ð 4ð 4ð3ð 3ð 3ð4ð 4ð 4ðð ð ð<"ð "ð "ð"ð "ð "ð0 27ð ið ið i¨$ð i¸4ð ið ið ið iðX_.ð _.ð _.ð _.ð _.ñ _.ô _.ð _.ðD4ð 4ð 4ðn ˆzÒÐØ€D�F„F€F€F€Fð Ðr   