ó
    qyüi   ã                   ó8  • S SK r S SKJr  SSKJr  SSKJrJr  \(       a  SSKJ	r	  SSK
Jr  S S	KJr  SS
KJrJrJr  Sr\" 5       (       a  SSKJr  \" 5       (       a  S SKr\" 5       (       a  S SKJr  \R0                  " \5      rS\S\S-  4S jr " S S\5      rg)é    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_dictÚconfig_nameÚreturnc                 ó€   • [         R                  " SU R                  5       5      nU(       a  UR                  S5      $ S$ )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)weightr   N)ÚreÚsearchÚlowerÚgroup)r   Úmatchs     Úf/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/quantizers/quantizer_torchao.pyÚ_fuzzy_match_sizer   1   s2   € ô
 �IŠI�m [×%6Ñ%6Ó%8Ó9€EÞ"ˆ5�;‰;�q‹>Ð,¨Ð,ó    c                   ó  ^ • \ rS rSr% SrSrS\S'   U 4S jrS rS r	S	S
S\
SSS\4U 4S jjrS\\
\\
-  4   S\\
\\
-  4   4S jrSSS jjrS	S
S\
S\4S jrS\4S jr\S\4S j5       r\S\4S j5       rS\\
   4S jrS rS rSrU =r$ )ÚTorchAoHfQuantizeré:   z7
Quantizer for torchao: https://github.com/pytorch/ao/
Fr
   Úquantization_configc                 ó¶   >• [         TU ]  " U40 UD6  [        [        U R                  R
                  5      R                  5      nUS:X  a  SU l        g SU l        g )NÚ4g      à?r   )ÚsuperÚ__init__r   Útyper   Ú
quant_typeÚ__name__Úquantized_param_size)Úselfr   ÚkwargsÚ
size_digitÚ	__class__s       €r   r#   ÚTorchAoHfQuantizer.__init__B   sM   ø€ Ü‰ÒÐ,Ñ7°Ò7ä&¤t¨D×,DÑ,D×,OÑ,OÓ'P×'YÑ'YÓZˆ
Ø+5¸Ó+< CˆÕ!À!ˆÕ!r   c                 ó˜  • [        5       (       d  [        S5      eUR                  S5      nSU l        [	        U[
        5      (       aƒ  SUR                  5       ;   d  SUR                  5       ;   aZ  [        U5      S:”  aJ  SUR                  5       ;   U l        U R                  (       a   SUR                  5       ;   a  [        S5      eg g g g g )NzSLoading an torchao quantized model requires torchao library (`pip install torchao`)Ú
device_mapFÚdiskÚcpur   zœ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.)
r   ÚImportErrorÚgetÚoffload_to_cpuÚ
isinstanceÚdictÚvaluesÚlenÚpre_quantizedÚ
ValueError)r(   Úargsr)   r.   s       r   Úvalidate_environmentÚ'TorchAoHfQuantizer.validate_environmentH   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   • [        UR                  5       5      $ )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_metadataW   s   € ô )¨×)9Ñ)9Ó);Ó<Ð<r   r?   r	   Ú
param_nameÚparamztorch.Tensorr   c                 ó‚   >• U R                  X5      (       a  U R                  b  U R                  $ [        TU ]  XU5      $ )z4Return the element size (in bytes) for `param_name`.)Úparam_needs_quantizationr'   r"   Úparam_element_size)r(   r?   rB   rC   r+   s       €r   rF   Ú%TorchAoHfQuantizer.param_element_size]   s=   ø€ à×(Ñ(¨×;Ñ;À×@YÑ@YÑ@eØ×,Ñ,Ð,ä‰wÑ)¨%¸UÓCÐCr   Ú
max_memoryc                 ó`   • UR                  5        VVs0 s H
  u  p#X#S-  _M     nnnU$ s  snnf )NgÍÌÌÌÌÌì?)Úitems)r(   rH   ÚkeyÚvals       r   Úadjust_max_memoryÚ$TorchAoHfQuantizer.adjust_max_memoryd   s5   € à5?×5EÑ5EÔ5GÔHÒ5G©¨�c ™9’nÑ5Gˆ
ÑHØÐùó Is   ”*c                 ó~  • U R                  XR                  R                  UR                  5      U l        U R                  R                  (       aÇ  UR                  5       nUR                  5        VVs/ s H!  u  pV[        U5      [        U5      :X  d  M  UPM#     nnnUR                  5       nUR                  5        VVs/ s H!  u  pV[        U5      [        U5      :X  d  M  UPM#     n	nnU R                   V
s/ s H  oªXy-   ;  d  M  U
PM     sn
U l        Ub  U R                  U5        g g s  snnf s  snnf s  sn
f ©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(   r?   Ú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_loadingi   s  € Ø&*×&EÑ&EØ×+Ñ+×BÑBÀE×D_ÑD_ó'
ˆÔ#ð ×#Ñ#×C×CØ×2Ñ2Ó4ˆIØ8=×8KÑ8KÔ8MÔmÒ8M©¨ÔQSÐTZÓQ[Ô_aÐbkÓ_lÑQlŸ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$   Á4D.ÂD.ÃD4Ã$D4Ã;D:Ä
D:c                 óÖ  • [        X R                  5      (       d  g[        X5      u  pE[        R                  R
                  /nU R                  R                  (       a)  UR                  [        R                  R                  5        SSK
JnJn  [        U R                  R                  U5      (       a•  UR                  SS5      u  pšU" X�R                  R                  5      (       d_  U" X R                  R                  5      (       d>  SU R                  R                  R                   ;   a  [        U[#        U5      5      (       a  g[        U[#        U5      5      =(       a    US:H  $ )	NFr   )ÚFqnToConfigÚfqn_matches_fqn_configÚ.r   Ú_defaultTÚweight)r   rR   r   ÚtorchÚnnÚLinearr   rT   ÚappendÚ	EmbeddingÚtorchao.quantizationre   rf   r4   r%   ÚrsplitÚfqn_to_configÚtuple)r(   r?   rB   r)   r]   Útensor_nameÚ_QUANTIZABLEre   rf   Ú
module_fqnÚ_s              r   rE   Ú+TorchAoHfQuantizer.param_needs_quantizationy   s  € ä$ Z×1LÑ1L×MÑMØô 3°5ÓEÑˆÜŸ™Ÿ™Ð(ˆØ×#Ñ#×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ÐRr   c                 ó   • g©NT© ©r(   s    r   Úis_serializableÚ"TorchAoHfQuantizer.is_serializable”   s   € Ør   c                 ól   • [        [        U R                  R                  5      R                  5      S:H  $ )NÚ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                 ó   • gry   rz   r{   s    r   Úis_compileableÚ!TorchAoHfQuantizer.is_compileableœ   s   € àr   rZ   c                 óø   • US   R                  S5      (       aO  0 nU H@  n[        USS9 nUR                  5       =(       d    0 nUR                  U5        S S S 5        MB     X l        g g ! , (       d  f       M[  = f)Nr   z.safetensorsÚpt)Ú	framework)Úendswithr   ÚmetadataÚupdate)r(   rZ   r‰   Ú
checkpointÚfÚ	metadata_s         r   rY   ÚTorchAoHfQuantizer.set_metadata    sl   € Ø˜AÑ×'Ñ'¨×7Ñ7ØˆHÛ.�
Ü˜z°TÒ:¸aØ !§
¡
£× 2°�IØ—O‘O IÔ.÷ ;Ñ:ñ /ð
 %�Mð 8÷ ;Ö:ús   «+A*Á*
A9	c                 ó   • SSK Jn  U" U 5      $ )Nr   )ÚTorchAoQuantize)Úintegrations.torchaor�   )r(   r�   s     r   Úget_quantize_opsÚ#TorchAoHfQuantizer.get_quantize_opsª   s   € Ý:á˜tÓ$Ð$r   c                 ó^   • SSK Jn  U R                  (       a  [        / SQSU" U 5      /S9/$ / $ )Nr   )ÚTorchAoDeserialize)Ú_weight_qdataÚ_weight_scale_and_zeroÚ_weight_per_tensor_scaleÚ_weight_scaleÚ_weight_zero_pointÚ_weight_act_pre_scaleri   )Úsource_patternsÚtarget_patternsÚ
operations)r‘   r•   r8   r   )r(   r•   s     r   Úget_weight_conversionsÚ)TorchAoHfQuantizer.get_weight_conversions¯   s<   € Ý=à××äò%ð %-Ù 2°4Ó 8Ð9ñðð ð" ˆ	r   )r‰   rR   r3   r'   rP   )r?   r	   )r&   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úrequires_calibrationÚ__annotations__r#   r;   r@   ÚstrÚfloatrF   r5   ÚintrM   rb   ÚboolrE   r|   Úpropertyr€   rƒ   ÚlistrY   r’   rŸ   Ú__static_attributes__Ú__classcell__)r+   s   @r   r   r   :   s  ø‡ ñð !ÐØ(Ó(õDòò=ðDÐ(9ð DÀsð DÐSað DÐfk÷ Dð¨D°°c¸C±i°Ñ,@ð ÀTÈ#ÈsÐUXÉyÈ.ÑEYô ö
0ð SÐ.?ð SÈSð SÐ_cô Sð6 ô ð ð\˜dó \ó ð\ð ð ó ó ðð%¨T°#©Yô %ò%÷
ð r   r   )r   Útypingr   Úbaser   Úquantizers_utilsr   r   Úmodeling_utilsr	   Úutils.quantization_configr
   Úsafetensorsr   Úutilsr   r   r   ÚMIN_TORCH_VERSIONÚcore_model_loadingr   rj   Ú1torchao.prototype.safetensors.safetensors_supportr   Ú
get_loggerr&   Úloggerr§   r   r   rz   r   r   Ú<module>r»      s�   ðó 
Ý  å ß Iö Ý0Ý9å !ç EÑ Eð Ð ñ ×ÑÝ4ñ ×ÑÛá×Ñõð
 
×	Ò	˜HÓ	%€ð- 3ð -¨3°©:ô -ôJ˜õ Jr   