
    Z j=                         S SK Jr  SSKJr  SSKJr  SSKJr  \(       a  SSKJ	r	  SSK
Jr  SS	KJrJrJrJrJr  SS
K
Jr  \" 5       (       a  S SKr\R(                  " \5      r " S S\5      rg)    )TYPE_CHECKING   )tqdm   )HfQuantizer)get_module_from_name)PreTrainedModel)HiggsConfig)is_accelerate_availableis_flute_availableis_hadamard_availableis_torch_availablelogging)QuantizationConfigMixinNc                      ^  \ rS rSr% SrSrS\S'   S\4U 4S jjrS r	SS	 jr
  SS jrSS jr\S\4S j5       rS rS
SS\S\4S jrS rSrU =r$ )HiggsHfQuantizer#   z
Quantizer of the HIGGS method. Enables the loading of prequantized models and in-flight quantization of full-precision models.
Fr
   quantization_configc                 (   > [         TU ]  " U40 UD6  g )N)super__init__)selfr   kwargs	__class__s      x/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/quantizers/quantizer_higgs.pyr   HiggsHfQuantizer.__init__+   s    ,77    c                    [         R                  R                  5       (       d  [        S5      e[	        5       (       d  [        S5      e[        5       (       d  [        S5      e[        5       (       d  [        S5      eUc  [        S5      e[        U[        5      (       a4  SUR                  5       ;   d  SUR                  5       ;   a  [        S5      eg g )	NzNHIGGS quantization is only supported on GPU. Please use a different quantizer.zHUsing `higgs` quantization requires Accelerate: `pip install accelerate`zLUsing `higgs` quantization requires FLUTE: `pip install flute-kernel>=0.3.0`zbUsing `higgs` quantization requires fast_hadamard_transform: `pip install fast_hadamard_transform`zwYou are attempting to load a HIGGS model without setting device_map. Please set device_map comprised of 'cuda' devices.cpudiskzYou are attempting to load a HIGGS model with a device_map that contains a CPU or disk device. This is not supported. Please remove the CPU or disk device from the device_map.)torchcudais_availableNotImplementedErrorr   ImportErrorr   r   
ValueError
isinstancedictvalues)r   
device_mapr   s      r   validate_environment%HiggsHfQuantizer.validate_environment.   s    zz&&((%&vww&((hii!##lmm$&&t  F  
D))
))++v9J9J9L/L h  0M *r   returnc                 t    U[         R                  :w  a#  U[         R                  :w  a  [        SU S35      eU$ )NzInvalid `dtype` zS. HIGGS quantization only supports `dtype=torch.float16` or `dtype=torch.bfloat16`.)r!   float16bfloat16r&   )r   dtypes     r   update_dtypeHiggsHfQuantizer.update_dtypeI   s:    EMM!eu~~&="5')|}  r   modelr	   c                     SSK Jn  U R                  XR                  R                  UR
                  5      U l        U" UU R                  U R                  S9  g )Nr   )replace_with_higgs_linear)r   modules_to_not_convert)integrationsr6   get_modules_to_not_convertr   r7   _keep_in_fp32_modules)r   r4   r   r6   s       r   $_process_model_before_weight_loading5HiggsHfQuantizer._process_model_before_weight_loadings   sP    
 	=&*&E&E++BBED_D_'
# 	" $ 8 8#'#>#>	
r   c                    SSK JnJn  SSKJn  SSKJn  0 nUR                  5        VV	s0 s H  u  p[        X5      (       d  M  X_M     n
nn	[        U
R                  5       SSS9 GH  u  pU	R                  R                  U;  a0  U" U	R                  R                  S	9XyR                  R                  '   XyR                  R                     U	l        UR                  U R                  R                   U   5      U	l        U" U	R                  R"                  U	R$                  R"                  U	R                   S
9u  U	R                  l        U	l        U	R                   R'                  5       U R                  R                   U'   GM     g s  sn	nf )Nr   )TuneMetaDatamaybe_tune_and_repack)make_workspace_streamkr   HiggsLinearzRepacking HIGGS modulesF)descleave)device)weightscalesmetadata)
flute.tuner>   r?   flute.utilsr@   r8   rB   named_modulesr'   r   itemsrF   rE   	workspace	from_dictr   tune_metadatadatarG   to_dict)r   r4   r   r>   r?   r@   rB   flute_workspacesnamemoduleflute_moduless              r   #_process_model_after_weight_loading4HiggsHfQuantizer._process_model_after_weight_loading   s@   B6.:?:M:M:Os:O,$S]^dSr:Os !4!4!6=V^cdLD }}##+;;9OW]WdWdWkWk9l !5!56/0D0DEF $0#9#9$:R:R:`:`ae:f#gF 7L}}))}}))--84FMM 4
 <B;O;O;W;W;YD$$2248 e ts   FFc                     g)NF r   s    r   is_trainableHiggsHfQuantizer.is_trainable   s    r   c                     g)NTrY   rZ   s    r   is_serializable HiggsHfQuantizer.is_serializable   s    r   
param_namec                 X    SSK Jn  [        X5      u  pV[        XT5      (       a  US:X  a  gg)Nr   rA   rF   TF)r8   rB   r   r'   )r   r4   r`   r   rB   rT   tensor_names          r   param_needs_quantization)HiggsHfQuantizer.param_needs_quantization   s*    .25Ef**{h/Fr   c                 "    SSK Jn  U" U5      nU$ )Nr   )dequantize_higgs)r8   rf   )r   r4   rf   s      r   _dequantizeHiggsHfQuantizer._dequantize   s    3 'r   )r7   )r1   torch.dtyper-   ri   )r4   r	   )__name__
__module____qualname____firstlineno____doc__requires_calibration__annotations__r   r   r+   r2   r;   rV   propertyboolr[   r^   strrc   rg   __static_attributes____classcell__)r   s   @r   r   r   #   s     !&&8,C 86T
 
"Z2 d  .? S _c  r   r   )typingr   utils.loggingr   baser   quantizers_utilsr   modeling_utilsr	   utils.quantization_configr
   utilsr   r   r   r   r   r   r!   
get_loggerrj   loggerr   rY   r   r   <module>r      sS    !    2 07 s s ? 			H	%O{ Or   