+
    œ°³j¢$  ã                   ó>  € ^ RI t ^ RIt^ RIHt ^RIHt ^RIHtHt ]'       d   ^RI	H
t
 ^RIHt ^ RIHt ^RIHtHtHt R	t]! 4       '       d   ^R
IHt ]! 4       '       d   ^ RIt]! 4       '       d   ^ RIHt ]P2                  ! ]4      tR R lt ! R R]4      tR# )é    N)ÚTYPE_CHECKING)ÚHfQuantizer)Úget_module_from_nameÚshould_convert_module)ÚPreTrainedModel)ÚTorchAoConfig)Ú	safe_open)Úis_torch_availableÚis_torchao_availableÚloggingz2.5.0)ÚWeightConverter)Úflatten_tensor_state_dictc                ó>   € V ^8„  d   QhR\         R\         R,          /# )é   Úconfig_nameÚreturnN)Ústr)Úformats   "Új/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/quantizers/quantizer_torchao.pyÚ__annotate__r   2   s   € ÷ -ñ -¤3ð -¬3°­:ñ -ó    c                ó‚   € \         P                  ! RV P                  4       4      pV'       d   VP                  ^4      # R# )z¥
Extract the size digit from torchao config class names like "Int4WeightOnlyConfig", "Int8WeightOnlyConfig".
Returns the digit as a string if found, otherwise None.
z
(\d)weightN)ÚreÚsearchÚlowerÚgroup)r   Úmatchs   & r   Ú_fuzzy_match_sizer   2   s2   € ô
 �IŠI�m [×%6Ñ%6Ó%8Ó9€Eß"ˆ5�;‰;�q‹>Ð,¨Ð,r   c                   ó  a a€ ] tR t^;t oRtRtV 3R ltR tR tV3R lV 3R llt	V3R lR	 lt
RV3R
 lR lltV3R lR ltV3R lR lt]V3R lR l4       t]V3R lR l4       tV3R lR ltR tV3R lR ltR tV3R ltRtVtV ;t# )ÚTorchAoHfQuantizerz7
Quantizer for torchao: https://github.com/pytorch/ao/
Fc                ó¼   <€ \         SV `  ! V3/ VB  \        \        V P                  P
                  4      P                  4      pVR 8X  d
   RV n        R# ^V n        R# )Ú4g      à?N)ÚsuperÚ__init__r   ÚtypeÚquantization_configÚ
quant_typeÚ__name__Úquantized_param_size)Úselfr&   ÚkwargsÚ
size_digitÚ	__class__s   &&, €r   r$   ÚTorchAoHfQuantizer.__init__C   sM   ø€ Ü‰ÒÐ,Ñ7°Ò7ä&¤t¨D×,DÑ,D×,OÑ,OÓ'P×'YÑ'YÓZˆ
Ø+5¸Ô+< CˆÖ!À!ˆÖ!r   c                ó°  € \        4       '       g   \        R 4      hVP                  R4      pRV n        \	        V\
        4      '       d�   RVP                  4       9   g   RVP                  4       9   da   \        V4      ^8”  dO   RVP                  4       9   V n        V P                  '       d#   RVP                  4       9   d   \        R4      hR# R# R# R# R# )zSLoading an torchao quantized model requires torchao library (`pip install torchao`)Ú
device_mapFÚdiskÚcpuzœYou are attempting to perform disk offload with a pre-quantized torchao model This is not supported yet . Please remove the disk device from the device_map.N)
r   ÚImportErrorÚgetÚoffload_to_cpuÚ
isinstanceÚdictÚvaluesÚlenÚpre_quantizedÚ
ValueError)r*   Úargsr+   r0   s   &*, r   Úvalidate_environmentÚ'TorchAoHfQuantizer.validate_environmentI   sÇ   € Ü#×%Ò%ÜÐsÓtÐtà—Z‘Z Ó-ˆ
Ø#ˆÔÜ�j¤$×'Ò'Ø˜*×+Ñ+Ó-Ô-°¸*×:KÑ:KÓ:MÔ1MÔSVÐWaÓSbÐefÔSfØ&+¨z×/@Ñ/@Ó/BÑ&B�Ô#Ø×%×%Ð%¨&°J×4EÑ4EÓ4GÔ*GÜ$ðióð ñ +HÑ%ñ TgÑ1Mñ (r   c                ó4   € \        VP                  4       4      # )zf
We flatten the state dict of tensor subclasses so that it is compatible with the safetensors format.
)r   Ú
state_dict)r*   Úmodels   &&r   Úget_state_dict_and_metadataÚ.TorchAoHfQuantizer.get_state_dict_and_metadataX   s   € ô )¨×)9Ñ)9Ó);Ó<Ð<r   c                ó.   <€ V ^8„  d   QhRRRS[ RRRS[/# )r   rA   r   Ú
param_nameÚparamztorch.Tensorr   )r   Úfloat)r   Ú__classdict__s   "€r   r   ÚTorchAoHfQuantizer.__annotate__^   s2   ø€ ÷ Dñ DÐ(9ð DÁsð DÐSað DÑfkñ Dr   c                ó†   <€ V P                  W4      '       d   V P                  e   V P                  # \        SV `  WV4      # )z4Return the element size (in bytes) for `param_name`.)Úparam_needs_quantizationr)   r#   Úparam_element_size)r*   rA   rE   rF   r-   s   &&&&€r   rL   Ú%TorchAoHfQuantizer.param_element_size^   s=   ø€ à×(Ñ(¨×;Ò;À×@YÑ@YÒ@eØ×,Ñ,Ð,ä‰wÑ)¨%¸UÓCÐCr   c                ór   <€ V ^8„  d   QhRS[ S[S[S[,          3,          RS[ S[S[S[,          3,          /# )r   Ú
max_memoryr   )r7   r   Úint)r   rH   s   "€r   r   rI   e   s6   ø€ ÷ ñ ©D±±c¹Cµi°Õ,@ð ÁTÉ#ÉsÑUXÍyÈ.ÕEYñ r   c                óf   € VP                  4        UUu/ uF  w  r#W#R ,          bK  	  pppV# u uppi )gÍÌÌÌÌÌì?)Úitems)r*   rO   ÚkeyÚvals   &&  r   Úadjust_max_memoryÚ$TorchAoHfQuantizer.adjust_max_memorye   s5   € à5?×5EÑ5EÔ5GÔHÑ5G©¨�c �9’nÑ5Gˆ
ÑHØÐùó Is   ”-c                ó   <€ V ^8„  d   QhRR/# )r   rA   r   © )r   rH   s   "€r   r   rI   j   s   ø€ ÷ 0ñ 0Ð:Kñ 0r   c                óŽ  € V P                  WP                  P                  VP                  4      V n        V P                  P                  '       dÌ   VP                  4       pVP                  4        UUu. uF"  w  rV\        V4      \        V4      8X  g   K   VNK$  	  pppVP                  4       pVP                  4        UUu. uF"  w  rV\        V4      \        V4      8X  g   K   VNK$  	  p	ppV P                   U
u. uF  qªWy,           9  g   K  V
NK  	  up
V n        Ve   V P                  V4       R # R # u uppi u uppi u up
i ©N)
Úget_modules_to_not_convertr&   Úmodules_to_not_convertÚ_keep_in_fp32_modulesÚinclude_input_output_embeddingsÚget_input_embeddingsÚnamed_modulesÚidÚget_output_embeddingsÚset_metadata)r*   rA   Úcheckpoint_filesr+   Ú	input_embÚnameÚmoduleÚinput_emb_namesÚ
output_embÚoutput_emb_namesÚxs   &&&,       r   Ú$_process_model_before_weight_loadingÚ7TorchAoHfQuantizer._process_model_before_weight_loadingj   s$  € Ø&*×&EÑ&EØ×+Ñ+×BÑBÀE×D_ÑD_ó'
ˆÔ#ð ×#Ñ#×C×CÐCØ×2Ñ2Ó4ˆIØ8=×8KÑ8KÔ8MÔmÑ8M©¨ÔQSÐTZÓQ[Ô_aÐbkÓ_lÑQlŸt˜tÑ8MˆOÑmØ×4Ñ4Ó6ˆJØ9>×9LÑ9LÔ9NÔoÑ9N©¨ÔRTÐU[ÓR\Ô`bÐcmÓ`nÑRn§ Ñ9NÐÑoà×6Ò6ó+Ù6�aÀ?ÕCeÑ:e—�Ñ6ñ+ˆDÔ'ð Ò'à×ÑÐ.Ö/ñ (ùó nùãoùò+s$   Á5D6ÂD6ÃD<Ã%D<Ã<EÄEc                ó*   <€ V ^8„  d   QhRRRS[ RS[/# )r   rA   r   rE   r   )r   Úbool)r   rH   s   "€r   r   rI   z   s)   ø€ ÷ Sñ SÐ.?ð SÉSð SÑ_cñ Sr   c                óê  € \        W P                  4      '       g   R # \        W4      w  rE\        P                  P
                  .pV P                  P                  '       d*   VP                  \        P                  P                  4       ^ RI
HpHp \        V P                  P                  V4      '       d›   VP                  R^4      w  ršV! W�P                  P                  4      '       gc   V! W P                  P                  4      '       gA   RV P                  P                  P                   9   d   \        V\#        V4      4      '       d   R# \        V\#        V4      4      ;'       d    VR8H  # )F)ÚFqnToConfigÚfqn_matches_fqn_configÚ.Ú_defaultTÚweight)r   r\   r   ÚtorchÚnnÚLinearr&   r^   ÚappendÚ	EmbeddingÚtorchao.quantizationrq   rr   r6   r'   ÚrsplitÚfqn_to_configÚtuple)r*   rA   rE   r+   rg   Útensor_nameÚ_QUANTIZABLErq   rr   Ú
module_fqnÚ_s   &&&,       r   rK   Ú+TorchAoHfQuantizer.param_needs_quantizationz   s  € ä$ Z×1LÑ1L×MÒMÙô 3°5ÓEÑˆÜŸ™Ÿ™Ð(ˆØ×#Ñ#×C×CÐCØ×Ñ¤§¡× 2Ñ 2Ô3çLä�d×.Ñ.×9Ñ9¸;×GÒGØ&×-Ñ-¨c°1Ó5‰MˆJá& z×3KÑ3K×3VÑ3V×WÒWÙ)¨*×6NÑ6N×6YÑ6Y×ZÒZà $×":Ñ":×"EÑ"E×"SÑ"SÔSÜ" 6¬5°Ó+>×?Ò?ñ ä˜&¤%¨Ó"5Ó6×RÐR¸;È(Ñ;RÐRr   c                ó    <€ V ^8„  d   QhRS[ /# ©r   r   ©ro   )r   rH   s   "€r   r   rI   •   s   ø€ ÷ ñ ¡ñ r   c                ó   € R # ©TrX   ©r*   s   &r   Úis_serializableÚ"TorchAoHfQuantizer.is_serializable•   s   € Ùr   c                ó    <€ V ^8„  d   QhRS[ /# r…   r†   )r   rH   s   "€r   r   rI   ™   s   ø€ ÷ \ñ \™dñ \r   c                ól   € \        \        V P                  P                  4      P                  4      R 8H  # )Ú8)r   r%   r&   r'   r(   r‰   s   &r   Úis_trainableÚTorchAoHfQuantizer.is_trainable˜   s,   € ô !¤ d×&>Ñ&>×&IÑ&IÓ!J×!SÑ!SÓTÐX[Ñ[Ð[r   c                ó    <€ V ^8„  d   QhRS[ /# r…   r†   )r   rH   s   "€r   r   rI   ž   s   ø€ ÷ ñ ¡ñ r   c                ó   € R # rˆ   rX   r‰   s   &r   Úis_compileableÚ!TorchAoHfQuantizer.is_compileable�   s   € ár   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r   rd   )Úlistr   )r   rH   s   "€r   r   rI   ¡   s   ø€ ÷ %ñ %©T±#­Yñ %r   c                ó"  € V^ ,          P                  R4      '       d]   / pV FL  p\        VRR7      ;_uu_ 4       pVP                  4       ;'       g    / pVP                  V4       RRR4       KN  	  W n        R# R#   + '       g   i     Kk  ; i)r   z.safetensorsÚpt)Ú	frameworkN)Úendswithr	   ÚmetadataÚupdate)r*   rd   r›   Ú
checkpointÚfÚ	metadata_s   &&    r   rc   ÚTorchAoHfQuantizer.set_metadata¡   su   € Ø˜AÕ×'Ñ'¨×7Ò7ØˆHÛ.�
Ü˜z°T×:Õ:¸aØ !§
¡
£× 2Ð 2°�IØ—O‘O IÔ.÷ ;Ñ:ñ /ð
 %ŽMñ 8÷ ;×:Ð:ús   »,A=Á=Bc                ó   € ^RI Hp V! V 4      # )r   )ÚTorchAoQuantize)Úintegrations.torchaor¢   )r*   r¢   s   & r   Úget_quantize_opsÚ#TorchAoHfQuantizer.get_quantize_ops«   s   € Ý:á˜tÓ$Ð$r   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r…   )Úsetr   )r   rH   s   "€r   r   rI   °   s   ø€ ÷ )ñ )±±Sµñ )r   c                ó  € \        V R4      '       d   V P                  '       g   R0# ^ RIHp V! V P                  4      '       g   \	        R4      h\        4       pV P                  P                  4        Fe  w  r4RV9  d   K   \        P                  ! V4      pTP                  R4      R8X  d   K=  TP                  TP                  R^4      R,          4       Kg  	  T;'       g    R0#   \        P                  \        3 d     K”  i ; i)	aM  Extract unique parameter names of quantized params from torchao safetensors metadata.

The metadata keys are the original fully-qualified parameter names,
e.g. "model.layers.0.self_attn.q_proj.weight" or
    "model.decoder.layers.0.experts.gate_up_proj".
Only entries representing tensor subclasses (not plain Tensors) are included.
r›   ru   )Úis_metadata_torchaoz$Invalid torchao safetensors metadatars   Ú_typeÚTensoréÿÿÿÿ)Úhasattrr›   Ú/torchao.prototype.safetensors.safetensors_utilsr©   r;   r§   rR   ÚjsonÚloadsÚJSONDecodeErrorÚ	TypeErrorr4   Úaddr|   )r*   r©   Úparam_namesÚmeta_keyÚ
meta_valueÚmetas   &     r   Ú_discover_quantized_param_namesÚ2TorchAoHfQuantizer._discover_quantized_param_names°   sá   € ô �t˜Z×(Ò(°··°Ø�:ÐåWá" 4§=¡=×1Ò1ÜÐCÓDÐDä“eˆØ$(§M¡M×$7Ñ$7Ö$9Ñ ˆHØ˜(Ô"ÙðÜ—z’z *Ó-�ð �x‰x˜Ó  HÔ,ÙØ�O‰O˜HŸO™O¨C°Ó3°BÕ7Ö8ñ %:ð ×(Ð(˜x˜jÐ(øô ×(Ñ(¬)Ð4ô Úðús   ÂC+Ã+D
Ä	D
c                ó  € ^RI Hp V P                  '       di   V P                  4       p. p\	        V4       FE  pVP                  \        RV R2RV R2RV R2RV R2RV R2RV R2.VV! V 4      .R	7      4       KG  	  V# . # )
r   )ÚTorchAoDeserializer‚   Ú_qdataÚ_scale_and_zeroÚ_per_tensor_scaleÚ_scaleÚ_zero_pointÚ_act_pre_scale)Úsource_patternsÚtarget_patternsÚ
operations)r£   r»   r:   r¸   Úsortedry   r   )r*   r»   r´   Ú
convertersrE   s   &    r   Úget_weight_conversionsÚ)TorchAoHfQuantizer.get_weight_conversionsÎ   s´   € Ý=à××ÐØ×>Ñ>Ó@ˆKØˆJÜ$ [Ö1�
Ø×!Ñ!Ü#à 
˜|¨6Ð2Ø 
˜|¨?Ð;Ø 
˜|Ð+<Ð=Ø 
˜|¨6Ð2Ø 
˜|¨;Ð7Ø 
˜|¨>Ð:ð)ð )3Ù$6°tÓ$<Ð#=ôöñ 2ð ÐØˆ	r   c                ó$   <€ V ^8„  d   Qh/ R;R&   # )r   r   r&   rX   )r   rH   s   "€r   r   rI   ;   s   ø‡ ‚ ð )Ñ(ò r   )r›   r\   r5   r)   rZ   )r(   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úrequires_calibrationr$   r=   rB   rL   rU   rl   rK   rŠ   Úpropertyr�   r“   rc   r¤   r¸   rÇ   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r-   rH   s   @@r   r    r    ;   s¨   ù‡ € ñð !ÐõDòò=÷Dó D÷ð ÷
0ò 0÷ Sð S÷6ð ð ÷\ó ð\ð ÷ó ð÷%ð %ò%÷
)ð )ò<÷g … r   r    )r¯   r   Útypingr   Úbaser   Úquantizers_utilsr   r   Úmodeling_utilsr   Úutils.quantization_configr   Úsafetensorsr	   Úutilsr
   r   r   ÚMIN_TORCH_VERSIONÚcore_model_loadingr   rv   Ú1torchao.prototype.safetensors.safetensors_supportr   Ú
get_loggerr(   Úloggerr   r    rX   r   r   Ú<module>rà      s�   ðó Û 	Ý  å ß I÷ Ý0Ý9å !ç EÑ Eð Ð ñ ×ÒÝ4ñ ×ÒÛá×Òõð
 
×	Ò	˜HÓ	%€õ-ôi˜ö ir   