
    ##h              	           d dl mZmZmZ ddlmZ ddlmZ erddlm	Z	  e       rd dl
Z
ddlmZmZmZ  e       rd d	lmZ  ej"                  e      Zd
ddddddddZ G d de      Zy)    )TYPE_CHECKINGAnyDict   )is_torch_available   )HfQuantizer)PreTrainedModelN)is_accelerate_availableis_quark_availablelogging)set_module_tensor_to_devicezweight_quantizer.scalezbias_quantizer.scalezinput_quantizer.scalezoutput_quantizer.scalezweight_quantizer.zero_pointzbias_quantizer.zero_pointzinput_quantizer.zero_pointzoutput_quantizer.zero_point)weight_scale
bias_scaleinput_scaleoutput_scaleweight_zero_pointbias_zero_pointinput_zero_pointoutput_zero_pointc            
            e Zd ZdZdZdgZdZ fdZd ZddZ	ddd	d
de
dee
ef   def
dZ	 	 ddZddZddZed        Z xZS )QuarkHfQuantizerz?
    Quark quantizer (https://quark.docs.amd.com/latest/).
    Tquarkc                 H    t        |   |fi | |j                  | _        y N)super__init__json_export_config)selfquantization_configkwargs	__class__s      d/var/www/html/sandstorm/venv/lib/python3.12/site-packages/transformers/quantizers/quantizer_quark.pyr   zQuarkHfQuantizer.__init__>   s$    ,77"5"H"H    c                 .    t               st        d      y )NzLoading a Quark quantized model requires the `quark` library but it was not found in the environment. Please refer to https://quark.docs.amd.com/latest/install.html.)r   ImportError)r   argsr!   s      r#   validate_environmentz%QuarkHfQuantizer.validate_environmentC   s     !# x  $r$   modelr
   c                     ddl m}  ||| j                  j                  | j                  j
                  | j                  j                         |S )Nr   )_map_to_quark)pack_methodcustom_mode)quark.torch.export.apir+   r    quant_configr   r,   r-   )r   r)   r!   r+   s       r#   $_process_model_before_weight_loadingz5QuarkHfQuantizer._process_model_before_weight_loadingI   sD    8$$11//;;00<<		
 r$   param_valueztorch.Tensor
param_name
state_dictreturnc                      y)NT )r   r)   r1   r2   r3   r!   s         r#   check_quantized_paramz&QuarkHfQuantizer.check_quantized_paramU   s     r$   c                     |j                  d      d   }|t        v r|j                  |t        |         }t        ||||       y )N.)value)splitCHECKPOINT_KEYSreplacer   )r   r)   paramr2   param_devicer3   unexpected_keyspostfixs           r#   create_quantized_paramz'QuarkHfQuantizer.create_quantized_param_   sF     ""3'+o%#++G_W5MNJ#E:|5Qr$   c                     |S r   r6   )r   r)   r!   s      r#   #_process_model_after_weight_loadingz4QuarkHfQuantizer._process_model_after_weight_loadingi   s    r$   c                      yNFr6   )r   safe_serializations     r#   is_serializablez QuarkHfQuantizer.is_serializablel   s    r$   c                      yrG   r6   )r   s    r#   is_trainablezQuarkHfQuantizer.is_trainableo   s    r$   )r)   r
   )r4   ztorch.nn.Parameterr   )__name__
__module____qualname____doc__requires_calibrationrequired_packages requires_parameters_quantizationr   r(   r0   strr   r   boolr7   rC   rE   rI   propertyrK   __classcell__)r"   s   @r#   r   r   1   s       	
 (,$I

  $ 	
 cN 
R	R  r$   r   )typingr   r   r   
file_utilsr   baser	   modeling_utilsr
   torchutilsr   r   r   accelerate.utilsr   
get_loggerrL   loggerr=   r   r6   r$   r#   <module>r`      sv     , + +  0 H H <			H	% -(*,6246	@{ @r$   