
    rh
              	           d dl 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   )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      z/var/www/html/ai-insurance-compliance-backend/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(   r0   r1   r2   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(   paramr1   param_devicer2   unexpected_keyspostfixs           r"   create_quantized_paramz'QuarkHfQuantizer.create_quantized_param_   sF     ""3'+o%#++G_W5MNJ#E:|5Qr#   c                     |S r   r5   )r   r(   r    s      r"   #_process_model_after_weight_loadingz4QuarkHfQuantizer._process_model_after_weight_loadingi   s    r#   c                      yNFr5   )r   safe_serializations     r"   is_serializablez QuarkHfQuantizer.is_serializablel   s    r#   c                      yrF   r5   )r   s    r"   is_trainablezQuarkHfQuantizer.is_trainableo   s    r#   )r(   r	   )r3   ztorch.nn.Parameterr   )__name__
__module____qualname____doc__requires_calibrationrequired_packages requires_parameters_quantizationr   r'   r/   strdictr   boolr6   rB   rD   rH   propertyrJ   __classcell__)r!   s   @r"   r   r   1   s       	
 (,$I

  $ 	
 cN 
R	R  r#   r   )typingr   r   
file_utilsr   baser   modeling_utilsr	   torchutilsr
   r   r   accelerate.utilsr   
get_loggerrK   loggerr<   r   r5   r#   r"   <module>r`      ss     & +  0 H H <			H	% -(*,6246	@{ @r#   