
    rh                          d dl mZ ddlmZ erddlmZ ddlmZmZm	Z	 ddl
mZ  e       rd dlZ e	j                  e      Z G d	 d
e      Zy)    )TYPE_CHECKING   )HfQuantizer   )PreTrainedModel)is_auto_round_availableis_torch_availablelogging)QuantizationConfigMixinNc                   n     e Zd ZdZdZdgZdef fdZd ZddZ	dd	Z
dd
Zedefd       ZddZ xZS )AutoRoundQuantizerzW
    Quantizer of the AutoRound method. (https://huggingface.co/papers/2309.05516)
    T
auto_roundquantization_configc                 &    t        |   |fi | y N)super__init__)selfr   kwargs	__class__s      /var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/transformers/quantizers/quantizer_auto_round.pyr   zAutoRoundQuantizer.__init__)   s    ,77    c                 Z    |j                  d      | _        t               st        d      y )N
device_mapzbLoading an AutoRound quantized model requires auto-round library (`pip install 'auto-round>=0.5'`))getr   r   ImportError)r   argsr   s      r   validate_environmentz'AutoRoundQuantizer.validate_environment,   s-     **\2&(t  )r   returnc                 T    |%t         j                  }t        j                  d       |S )NzSLoading the model in `torch.bfloat16`. To overwrite it, set `torch_dtype` manually.)torchbfloat16loggerinfo)r   torch_dtypes     r   update_torch_dtypez%AutoRoundQuantizer.update_torch_dtype3   s$    ..KKKmnr   c                     |j                   j                  dk7  rt        j                  d       ddlm}m} | j                  r& || j                        } |||      \  }}|| _	        y y )N	input_idszRAutoRound offers only limited support for models that are not strictly text-based.r   )convert_hf_modelinfer_target_device)
r   main_input_namer#   warning"auto_round.inference.convert_modelr)   r*   pre_quantizedr   used_backends)r   modelr   r)   r*   target_devicer/   s          r   $_process_model_before_weight_loadingz7AutoRoundQuantizer._process_model_before_weight_loading9   sY    ??**k9NNop\/@M#3E=#I E=!.D r   c                 d    | j                   rddlm}  ||| j                         y t	        d      )Nr   )	post_initz+AutoRound only sports pre-quantized models.)r.   r-   r4   r/   
ValueError)r   r0   r   r4   s       r   #_process_model_after_weight_loadingz6AutoRoundQuantizer._process_model_after_weight_loadingC   s*    DeT//0JKKr   c                      y)NF )r   s    r   is_trainablezAutoRoundQuantizer.is_trainableK   s    r   c                      y)NTr8   )r   safe_serializations     r   is_serializablez"AutoRoundQuantizer.is_serializableO   s    r   )r%   torch.dtyper   r=   )r0   r   r   )__name__
__module____qualname____doc__requires_calibrationrequired_packagesr   r   r   r&   r2   r6   propertyboolr9   r<   __classcell__)r   s   @r   r   r       sZ    
  %8,C 8/L d  r   r   )typingr   baser   modeling_utilsr   utilsr   r	   r
   utils.quantization_configr   r!   
get_loggerr>   r#   r   r8   r   r   <module>rM      sG    !  0 H H ? 			H	%1 1r   