+
    QV-j:*  ã                   óþ   € ^ RI t ^ RIt^ RIt^ RIHt ^ RIHtHtHt ]! 4       '       d   ^RI	H
t
 ^RIHt ]! 4       '       d   ^ RIHt ^ RIHt ]P"                  ! ]4      tR tR	 t ! R
 R]
4      t ! R R]
4      tR# )é    N)Úlogging)Úis_torch_accelerator_availableÚis_torch_availableÚis_torchao_available)ÚConversionOps)Úget_module_from_name)Úunflatten_tensor_state_dict)Úis_metadata_torchaoc                 ó.  € ^ RI Hp ^ RIHp \	        W4      '       d+   V P
                  P                   RV P                  4        R2# \	        W4      '       d=   V P
                  P                   RV P                   R\        V P                  4       R2# R# )r   )ÚAffineQuantizedTensor)ÚLinearActivationQuantizedTensorÚ(Ú)z(activation=ú	, weight=N)
Útorchao.dtypesr   Ú7torchao.quantization.linear_activation_quantized_tensorr   Ú
isinstanceÚ	__class__Ú__name__Ú_quantization_typeÚinput_quant_funcÚoriginal_weight_tensor)Úweightr   r   s   &  Úr/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/transformers/integrations/torchao.pyr   r   &   s¤   € Ý4Ýgä�&×0Ò0Ø×"Ñ"×+Ñ+Ð,¨A¨f×.GÑ.GÓ.IÐ-JÈ!ÐLÐLä�&×:Ò:Ø×"Ñ"×+Ñ+Ð,¨L¸×9PÑ9PÐ8QÐQZÔ[mÐnt÷  oLñ  oLó  \Mð  [Nð  NOð  Pð  	Pñ ;ó    c                 ó4  € \        V P                  4      pVf@   RV P                  P                  ^,           RV P                  P                  ^ ,           R2# RV P                  P                  ^,           RV P                  P                  ^ ,           RV 2# )Nzin_features=z, out_features=z, weight=Noner   )r   r   Úshape)Úselfr   s   & r   Ú_linear_extra_reprr   1   s‰   € Ü §¡Ó,€FØ‚~Ø˜dŸk™k×/Ñ/°Õ2Ð3°?À4Ç;Á;×CTÑCTÐUVÕCWÐBXÐXeÐfÐfà˜dŸk™k×/Ñ/°Õ2Ð3°?À4Ç;Á;×CTÑCTÐUVÕCWÐBXÐXaÐbhÐaiÐjÐjr   c                   óB   a € ] tR t^9t o R tR tRV 3R lR lltRtV tR# )ÚTorchAoQuantizec                ó   € Wn         R # ©N©Úhf_quantizer©r   r%   s   &&r   Ú__init__ÚTorchAoQuantize.__init__:   ó   € Ø(Ör   c                óŠ  € ^ RI Hp \        VP                  4       4      P                  pV P
                  P                  '       dr   VP                  R8X  da   \        4       '       d   \        P                  P                  4       MRpVP                  V4       V! W.VO5/ VB  VP                  R4       R# V! W.VO5/ VB  R# )a  Run quantize_, moving to CUDA first if CPU offloading is active.

Some torchao quantization ops (e.g. int4 packing) only have CUDA kernels.
When a layer is destined for CPU (e.g. CPU offloading), we temporarily move
it to CUDA for quantization, then move the result back to CPU.
)Ú	quantize_ÚcpuÚcudaN)Útorchao.quantizationr+   ÚnextÚ
parametersÚdevicer%   Úoffload_to_cpuÚtyper   ÚtorchÚacceleratorÚcurrent_acceleratorÚto)r   ÚmoduleÚconfigÚargsÚkwargsr+   Útarget_devicer1   s   &&&*,   r   Ú	_quantizeÚTorchAoQuantize._quantize=   sš   € õ 	3ä˜V×.Ñ.Ó0Ó1×8Ñ8ˆØ×Ñ×+×+Ð+°×0BÑ0BÀeÔ0KÜ@^×@`Ò@`”U×&Ñ&×:Ñ:Ô<ÐflˆFØ�I‰I�fÔÙ�fÐ6 tÒ6¨vÒ6Ø�I‰I�eÖá�fÐ6 tÒ6¨vÔ6r   Nc          
      óÊ   <€ V ^8„  d   QhRS[ S[S[P                  3,          RS[P                  P
                  R,          RS[R,          RS[ S[S[P                  3,          /# )é   Ú
input_dictÚmodelNÚfull_layer_nameÚreturn)ÚdictÚstrr4   ÚTensorÚnnÚModule)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚTorchAoQuantize.__annotate__O   sl   ø€ ÷ \eñ \eá™™eŸl™lÐ*Õ+ð\eñ �x‰x�‰ Õ%ð\eñ ˜t�ð	\eñ 
‰c‘5—<‘<ÐÕ	 ñ\er   c                óh  € \        VP                  4       4      ^ ,          w  rg\        V\        4      '       d
   V^ ,          MTp\	        W#4      w  r‰\
        P                  P                  WwP                  R7      VP                  V	&   VP                  4       p
\        V4      \        V
4      8H  pV P                  P                  P                  pV'       d0   V'       d(   \        VP                   P#                  RR7      RR4       ^ RIHp V P                  P                  P)                  4       p\        Wí4      '       EdH   VP+                  R^4      w  ppRpW>P,                  9   d3   VP/                  R	4      '       d   Q R
4       hVP0                  V,          pMüWþP,                  9   d3   VP/                  R	4      '       d   Q R4       hVP0                  V,          pMºVP,                   FŽ  pVP/                  R	4      '       g   K  \2        P4                  ! VR,          V4      '       d   VP0                  V,          p MY\2        P4                  ! VR,          V4      '       g   K{  VP0                  V,          p M	  VP0                  P7                  RR4      pVeì   VR8X  d�   V'       d#   V'       d   VP8                  P;                  4       pV P=                  VVR 4       VP?                  V4       RVn         VPC                  RR7       F
  pRVn         K  	  V'       d   V'       d   RX/# / # V! VV/4      pV P=                  VVRR7       VP?                  V4       RVn         VPC                  RR7       F
  pRVn         K  	  / # W7/# V'       d#   V'       d   VP8                  P;                  4       pV P=                  W€P                  P                  P)                  4       4       VP?                  V4       RVn         VPC                  RR7       F
  pRVn         K  	  V'       d   V'       d   RX/# / # )r   )Úrequires_gradT)ÚdecoderÚtie_word_embeddingsF)ÚFqnToConfigÚ.Nzre:zHparam fqn should not start with`re:`, which is used for specifying regexzImodule fqn should not start with`re:`, which is used for specifying regex:é   NNÚ_defaultr   c                 ó   € R # )T© )ÚxÚfqns   &&r   Ú<lambda>Ú)TorchAoQuantize.convert.<locals>.<lambda>�   s   € ¹dr   ©Úrecursezlm_head.weight)Ú	filter_fn)"ÚtupleÚitemsr   Úlistr   r4   rH   Ú	ParameterrO   Ú_parametersÚget_input_embeddingsÚidr%   Úquantization_configÚuntie_embedding_weightsÚsetattrr9   Úget_text_configr.   rR   Úget_apply_tensor_subclassÚrsplitÚfqn_to_configÚ
startswithÚmodule_fqn_to_configÚreÚ	fullmatchÚgetr   Úcloner=   ÚdiscardÚ_is_hf_initializedr0   )r   rA   rB   rC   Úmissing_keysr;   Ú_Úvaluer8   Útensor_nameÚinput_embedÚis_embedding_paramrg   rR   r9   Ú
module_fqnÚtop_level_param_nameÚcÚmaybe_module_fqn_patternÚlm_headÚparamÚcustom_param_fqn_configs   &&&&&,                r   ÚconvertÚTorchAoQuantize.convertO   sž  € ô ˜×)Ñ)Ó+Ó,¨QÕ/‰ˆÜ& u¬d×3Ò3��a–¸ˆä2°5ÓJÑˆä*/¯(©(×*<Ñ*<¸U×ReÑReÐ*<Ó*fˆ×Ñ˜;Ñ'ð ×0Ñ0Ó2ˆÜ ›Z¬2¨k«?Ñ:ÐØ"&×"3Ñ"3×"GÑ"G×"_Ñ"_Ðç"×'9Ü�E—L‘L×0Ñ0¸Ð0Ó>Ð@UÐW\Ô]å4à×"Ñ"×6Ñ6×PÑPÓRˆÜ�f×*Ó*Ø/>×/EÑ/EÀcÈ1Ó/MÑ,ˆJÐ,ØˆAØ×"6Ñ"6Ô6Ø%×0Ñ0°×7Ò7ð Ø^óÐ7ð ×/Ñ/°Õ@‘Ø×3Ñ3Ô3Ø%×0Ñ0°×7Ò7ð Ø_óÐ7ð ×/Ñ/°
Õ;‘ð 17×0DÔ0DÐ,à3×>Ñ>¸u×EÒEÙ äŸšÐ&>¸rÕ&BÀO×TÒTØ"×7Ñ7Ð8PÕQ˜ÙÜŸšÐ&>¸rÕ&BÀJ×OÔOà"×7Ñ7Ð8PÕQ˜Ùñ 1Eð ×3Ñ3×7Ñ7¸
ÀDÓI�AàŠ}Ø'¨8Ô3ß)×.EØ"(§-¡-×"5Ñ"5Ó"7˜à—N‘N 6¨1Ñ/BÔDØ ×(Ñ(¨Ô9Ø04�FÔ-ð
 "(×!2Ñ!2¸5Ð!2Ö!A˜Ø37˜Ö0ñ "Bç:L×QhÐ,¨gÐ6ÐpÐnpÐpñ /:Ð;OÐQRÐ:SÓ.TÐ+Ø—N‘N 6Ð+BÈd�NÔSØ ×(Ñ(¨Ô9Ø04�FÔ-Ø!'×!2Ñ!2¸5Ð!2Ö!A˜Ø37˜Ö0ñ "Bà�IØ#Ð+Ð+ç×"9Ø—m‘m×)Ñ)Ó+ˆGØ�‰�v×0Ñ0×DÑD×^Ñ^Ó`ÔaØ×Ñ˜_Ô-Ø$(ˆÔ!Ø×&Ñ&¨uÐ&Ö5ˆEØ'+ˆEÖ$ñ 6ç.@×E\Ð  'Ð*ÐdÐbdÐdr   r$   )NNN)	r   Ú
__module__Ú__qualname__Ú__firstlineno__r'   r=   r‚   Ú__static_attributes__Ú__classdictcell__©rK   s   @r   r!   r!   9   s$   ø‡ € ò)ò7÷$\e÷ \eð \er   r!   c                   ó<   a € ] tR t^®t o R tRV 3R lR lltRtV tR# )ÚTorchAoDeserializec                ó   € Wn         R # r#   r$   r&   s   &&r   r'   ÚTorchAoDeserialize.__init__¯   r)   r   Nc                óî   <€ V ^8„  d   QhRS[ S[S[P                  3,          RS[S[,          R,          RS[P
                  P                  R,          RS[R,          RS[ S[S[P                  3,          /# )r@   rA   Úsource_patternsNrB   rC   rD   )rE   rF   r4   rG   ra   rH   rI   )rJ   rK   s   "€r   rL   ÚTorchAoDeserialize.__annotate__²   ss   ø€ ÷ <,ñ <,á™™eŸl™lÐ*Õ+ð<,ñ ™c� TÕ)ð<,ñ �x‰x�‰ Õ%ð	<,ñ
 ˜t�ð<,ñ 
‰c‘5—<‘<ÐÕ	 ñ<,r   c           
     ó¼  € \        VP                  4       4      ^ ,          V9  p/ pRP                  VP                  R4      RR 4      p	V'       d9   \	        VR,          \         4      '       d   VR,          ^ ,          p
MnVR,          p
MdVP                  4        FP  p\        W,          4      ^8w  d"   \        RV R\        W,          4       R24      hW,          ^ ,          W‰ RV 2&   KR  	  V'       d   VX
/# \        V P                  P                  4      '       g   \        R4      h\        W€P                  P                  4      w  rÍV'       d   Q hWÄ,          p\        W44      w  pp\	        V\        P                  P                  4      '       d!   \        P                   ! \"        V4      Vn        RVn        VP)                  R	R
7       F
  pRVn        K  	  WN/# )aÎ  
Consolidates tensor subclass components before reconstructing the object

For example:
    input_dict: {
        "_weight_qdata": torch.Tensor,
        "_weight_scale": torch.Tensor,
    }
    full_layer_name: "model.layers.0.self_attn.k_proj.weight"

    Given this, we reconstruct a Float8Tensor instance using the qdata and scale
    and return it as a dictionary with the full_layer_name as the key and the recovered
    Float8Tensor instance as the value.
rS   Nr   zExpected a single tensor for z	 but got z tensors insteadz$Invalid torchao safetensors metadataTFr\   éÿÿÿÿ)ra   ÚkeysÚjoinÚsplitr   ÚlenÚ
ValueErrorr
   r%   Úmetadatar	   r   r4   rH   ÚLinearÚtypesÚ
MethodTyper   Ú
extra_reprrt   r0   )r   rA   r�   rB   rC   ru   r;   Úis_unsafe_serializationÚ
param_dataÚ
layer_namer   ÚsuffixÚunflattened_state_dictÚleftover_state_dictÚ	new_paramr8   rv   r€   s   &&&&&&,           r   r‚   ÚTorchAoDeserialize.convert²   sª  € ô. #' z§¡Ó'8Ó"9¸!Õ"<ÀOÑ"SÐàˆ
Ø—X‘X˜o×3Ñ3°CÓ8¸¸"Ð=Ó>ˆ
ß"Ü˜* XÕ.´×5Ò5Ø# HÕ-¨aÕ0‘à# HÕ-‘à$Ÿ/™/Ö+�Ü�zÕ)Ó*¨aÔ/Ü$Ø7¸°x¸yÌÈZÕM_ÓI`ÐHaÐaqÐróð ð 8BÕ7IÈ!Õ7L�
˜\¨¨6¨(Ð3Ó4ñ ,÷ #Ø# VÐ,Ð,Ü$ T×%6Ñ%6×%?Ñ%?×@Ò@ÜÐCÓDÐDä6QØ×)Ñ)×2Ñ2ó7
Ñ3Ð÷ 'Ð&Ð&Ø*Õ;ˆ	ä(¨Ó@‰	ˆ�ä�fœeŸh™hŸo™o×.Ò.Ü %× 0Ò 0Ô1CÀVÓ LˆFÔØ$(ˆÔ!Ø×&Ñ&¨uÐ&Ö5ˆEØ'+ˆEÖ$ñ 6ð  Ð+Ð+r   r$   )NNNN)r   r„   r…   r†   r'   r‚   r‡   rˆ   r‰   s   @r   r‹   r‹   ®   s   ø‡ € ò)÷<,÷ <,ð <,r   r‹   )ro   rš   r4   Útransformers.utilsr   Útransformers.utils.import_utilsr   r   r   Úcore_model_loadingr   Úquantizers.quantizers_utilsr   Ú1torchao.prototype.safetensors.safetensors_supportr	   Ú/torchao.prototype.safetensors.safetensors_utilsr
   Ú
get_loggerr   Úloggerr   r   r!   r‹   rW   r   r   Ú<module>r­      s{   ðó 
Û ã å &ß tÑ tñ ×ÒÝ2Ý >ñ ×Òõõ Tà	×	Ò	˜HÓ	%€òPòkôre�mô reôj@,˜ö @,r   