
    qi                     |    d dl mZ ddlmZ ddlmZ ddlmZ erddlm	Z	 ddl
mZ  e       rd d	lZ G d
 de      Zy	)    )TYPE_CHECKING   )is_fouroversix_available   )HfQuantizer)get_module_from_name)PreTrainedModel)is_torch_availableNc                        e Zd ZdZdZ fdZd Zdddedd	d
ef fdZ	ddded
e
fdZdeeeez  f   d
eeeez  f   fdZ	 	 ddZddZd Zed
e
fd       Zd Z xZS )FourOverSixHfQuantizerz,
    FP4 quantization with fouroversix.
    Fc                 &    t        |   |fi | y N)super__init__)selfquantization_configkwargs	__class__s      _/opt/pipecat/venv/lib/python3.12/site-packages/transformers/quantizers/quantizer_fouroversix.pyr   zFourOverSixHfQuantizer.__init__   s    ,77    c                 .    t               st        d      y )NzXUsing `fouroversix` requires fouroversix: `pip install fouroversix --no-build-isolation`)r   ImportError)r   argsr   s      r   validate_environmentz+FourOverSixHfQuantizer.validate_environment   s    ')j  *r   modelr	   
param_nameparamztorch.Tensorreturnc                 L    | j                  ||      ryt        | 	  |||      S )Ng      ?)param_needs_quantizationr   param_element_size)r   r   r   r   r   s       r   r!   z)FourOverSixHfQuantizer.param_element_size$   s,     ((
;w)%UCCr   c                     ddl m} t        ||      \  }}|j                  t	        |            xr t        |d      xr ||j                  v S )Nr   )QuantizedModuleparameters_to_quantize)fouroversixr#   r   is_quantized_module_typetypehasattrr$   )r   r   r   r   r#   moduletensor_names          r   r    z/FourOverSixHfQuantizer.param_needs_quantization0   sT     	025*E 44T&\B = 89=v<<<	
r   
max_memoryc                 ^    |j                         D ci c]  \  }}||dz   }}}|S c c}}w )Ng?)items)r   r+   keyvals       r   adjust_max_memoryz(FourOverSixHfQuantizer.adjust_max_memory@   s6    5?5E5E5GHcc39nH
H Is   )c                 :   ddl m}m} ddlm}  || || j
                               | j                  rh| j
                  j                  sQ|j                         D ]=  \  }}|j                  t        |            s!|j                  D ]  }	t        ||	        ? y y y )Nr   )r#   quantize_modelr   )adapt_fouroversix_config)r%   r#   r2   integrations.fouroversixr3   r   pre_quantizedkeep_master_weightsnamed_modulesr&   r'   r$   delattr)
r   r   
device_mapr   r#   r2   r3   _r)   parameter_names
             r   $_process_model_before_weight_loadingz;FourOverSixHfQuantizer._process_model_before_weight_loadingE   s     	@G$T%=%=>	
 d&>&>&R&R"002 8	6";;DLI*0*G*G 8788 'Sr   c                     |S r    )r   r   r   s      r   #_process_model_after_weight_loadingz:FourOverSixHfQuantizer._process_model_after_weight_loading\   s    r   c                      y)NTr>   r   s    r   is_serializablez&FourOverSixHfQuantizer.is_serializable_   s    r   c                 .    | j                   j                  S r   )r   r6   rA   s    r   is_trainablez#FourOverSixHfQuantizer.is_trainableb   s    '';;;r   c                     ddl m}  ||       S )Nr   )FourOverSixQuantize)r4   rF   )r   rF   s     r   get_quantize_opsz'FourOverSixHfQuantizer.get_quantize_opsf   s    B"4((r   )r   r	   )__name__
__module____qualname____doc__requires_calibrationr   r   strfloatr!   boolr    dictintr0   r<   r?   rB   propertyrD   rG   __classcell__)r   s   @r   r   r      s     !8
D 
D 
D 	
D
 

D
 
 

 

 DcCi,@ T#sUXy.EY 
8 8. <d < <)r   r   )typingr   utils.import_utilsr   baser   quantizers_utilsr   modeling_utilsr	   utilsr
   torchr   r>   r   r   <module>r[      s7      9  2 0
 U)[ U)r   