+
    œ°³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	 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 \        V P                  V4      '       d!   V P                  P                  P
                  MRpVf@   RV P                  P                  ^,           RV P                  P                  ^ ,           R2# RV P                  P                  ^,           RV P                  P                  ^ ,           RV 2# )r   )ÚTorchAOBaseTensorNzin_features=z, out_features=z, weight=Nonez	, weight=)Útorchao.utilsr   Ú
isinstanceÚweightÚ	__class__Ú__name__Úshape)Úselfr   r   s   &  Úb/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/integrations/torchao.pyÚ_linear_extra_reprr   &   s§   € Ý/ä/9¸$¿+¹+ÐGX×/YÒ/YˆT�[‰[×"Ñ"×+Ò+Ð_c€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Ðjó    c                   óB   a € ] tR t^0t 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__1   ó   € Ø(Ör   c                ó–  € ^ RI Hp \        VP                  4       4      P                  pV P
                  P                  '       dq   VP                  R8X  d`   \        4       '       d   \        P                  P                  4       MRpVP                  V4       V! W.VO5/ VB  VP                  R4       MV! W.VO5/ VB  RVn        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ÚcudaTN)Útorchao.quantizationr"   ÚnextÚ
parametersÚdevicer   Úoffload_to_cpuÚtyper   ÚtorchÚacceleratorÚcurrent_acceleratorÚtoÚ_hf_quantized_needs_local_tp)r   ÚmoduleÚconfigÚargsÚkwargsr"   Útarget_devicer(   s   &&&*,   r   Ú	_quantizeÚTorchAoQuantize._quantize4   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Ò6à.2ˆÖ+r   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Ústrr+   ÚTensorÚnnÚModule)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚTorchAoQuantize.__annotate__H   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   r+   r@   Ú	ParameterrG   Ú_parametersÚget_input_embeddingsÚidr   Úquantization_configÚuntie_embedding_weightsÚsetattrr1   Úget_text_configr%   rJ   Úget_apply_tensor_subclassÚrsplitÚfqn_to_configÚ
startswithÚmodule_fqn_to_configÚreÚ	fullmatchÚgetr   Úcloner5   ÚdiscardÚ_is_hf_initializedr'   )r   r9   r:   r;   Úmissing_keysr3   Ú_Úvaluer0   Útensor_nameÚinput_embedÚis_embedding_paramr_   rJ   r1   Ú
module_fqnÚtop_level_param_nameÚcÚmaybe_module_fqn_patternÚlm_headÚparamÚcustom_param_fqn_configs   &&&&&,                r   ÚconvertÚTorchAoQuantize.convertH   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   r5   rz   Ú__static_attributes__Ú__classdictcell__©rC   s   @r   r   r   0   s$   ø‡ € ò)ò3÷(\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,          /# )r8   r9   Úsource_patternsNr:   r;   r<   )r=   r>   r+   r?   rY   r@   rA   )rB   rC   s   "€r   rD   ÚTorchAoDeserialize.__annotate__«   ss   ø€ ÷ >,ñ >,á™™eŸl™lÐ*Õ+ð>,ñ ™c� TÕ)ð>,ñ �x‰x�‰ Õ%ð	>,ñ
 ˜t�ð>,ñ 
‰c‘5—<‘<ÐÕ	 ñ>,r   c           
     óÊ  € \        VP                  4       4      ^ ,          V9  p\        W44      w  r‰RVn        / 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\        V\        P                  P                  4      '       d!   \         P"                  ! \$        V4      Vn        RVn        VP+                  R	R
7       F
  pRVn        K  	  VV/# )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.
TrK   Nr   zExpected a single tensor for z	 but got z tensors insteadz$Invalid torchao safetensors metadataFrT   éÿÿÿÿ)rY   Úkeysr   r/   ÚjoinÚsplitr   ÚlenÚ
ValueErrorr
   r   Úmetadatar	   r+   r@   ÚLinearÚtypesÚ
MethodTyper   Ú
extra_reprrl   r'   )r   r9   r‡   r:   r;   rm   r3   Úis_unsafe_serializationr0   rn   Ú
param_dataÚ
layer_namer   ÚsuffixÚunflattened_state_dictÚleftover_state_dictÚ	new_paramrx   s   &&&&&&,           r   rz   ÚTorchAoDeserialize.convert«   s´  € ô. #' z§¡Ó'8Ó"9¸!Õ"<ÀOÑ"SÐÜ(¨Ó@‰	ˆà.2ˆÔ+àˆ
Ø—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   rz   r   r€   r�   s   @r   rƒ   rƒ   §   s   ø‡ € ò)÷>,÷ >,ð >,r   rƒ   )rg   r’   r+   Ú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ƒ   rO   r   r   Ú<module>r¥      su   ðó 
Û ã å &ß tÑ tñ ×ÒÝ2Ý >ñ ×Òõõ Tà	×	Ò	˜HÓ	%€òkôte�mô teônB,˜ö B,r   