o
    }oi                     @   sb   d dl mZmZ d dlZd dlmZ d dlmZmZ ej	dd Z
ej	dd ZG d	d
 d
ZdS )    )	MagicMockpatchN
DictConfig)QUANT_CFG_CHOICES	Quantizerc                   C   s   t ddddddS )Nint8llama   g      ?T)	algorithmdecoder_typeawq_block_sizesq_alphaenable_kv_cacher    r   r   O/home/ubuntu/.local/lib/python3.10/site-packages/tests/export/test_quantizer.pybasic_quantization_config   s   r   c                   C   s   t ddddddS )N16r	      z/tmp/model.qnemo)dtyper   inference_tensor_parallelinference_pipeline_parallel	save_pathr   r   r   r   r   basic_export_config   s   r   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zed	d
d Zed	dd Z	ed	eddd Z
dS )TestQuantizerc                 C   s<   t ||}|j|ksJ |j|ksJ |jtd ksJ d S )Nr   )r   quantization_configexport_config	quant_cfgr   selfr   r   	quantizerr   r   r   test_init_valid_configs-   s   
z%TestQuantizer.test_init_valid_configsc                 C   s@   d|_ tt t|| W d    d S 1 sw   Y  d S )Ninvalid_algo)r   pytestraisesAssertionErrorr   r   r   r   r   r   r   test_init_invalid_algorithm3      "z)TestQuantizer.test_init_invalid_algorithmc                 C   s@   d|_ tt t|| W d    d S 1 sw   Y  d S )N32)r   r#   r$   r%   r   r&   r   r   r   test_init_invalid_dtype8   r(   z%TestQuantizer.test_init_invalid_dtypec                 C   s"   d |_ t||}|jd u sJ d S )N)r   r   r   r   r   r   r   test_null_algorithm=   s   
z!TestQuantizer.test_null_algorithmz#nemo.export.quantize.quantizer.distc              	   C   s   d|j _t }t }t||}td4}td ||| ||td | W d    n1 s2w   Y  W d    d S W d    d S 1 sJw   Y  d S )Nr   z$modelopt.torch.quantization.quantizez/modelopt.torch.quantization.print_quant_summaryr   )get_rankreturn_valuer   r   r   quantizeassert_called_once_withr   )r   	mock_distr   r   
mock_modelmock_forward_loopr    mock_quantizer   r   r   test_quantize_methodB   s   


"z"TestQuantizer.test_quantize_methodc                 C   sD   t ddi}t|}|jdu sJ |jdksJ |jdu s J d S )Nsequence_parallelTFmodelopt)r   r   modify_model_configr5   nameapply_rope_fusion)r   r0   mock_configmodified_configr   r   r   test_modify_model_configS   s
   
z&TestQuantizer.test_modify_model_configz=nemo.export.quantize.quantizer.export_tensorrt_llm_checkpointc                 C   s   d|j _t }d|j_d|j_t||}td/ |	| |
  |jd }|d dks/J |d dks7J |d dks?J W d    d S 1 sJw   Y  d S )	Nr   Fr   z-nemo.export.quantize.quantizer.save_artifactsr   r	   r   r   )r,   r-   r   cfgmegatron_amp_O2trainer	num_nodesr   r   exportassert_called_once	call_args)r   mock_exportr0   r   r   r1   r    rC   r   r   r   test_export_method\   s   



"z TestQuantizer.test_export_methodN)__name__
__module____qualname__r!   r'   r*   r+   r   r4   r<   rE   r   r   r   r   r   ,   s    

r   )unittest.mockr   r   r#   	omegaconfr   nemo.export.quantize.quantizerr   r   fixturer   r   r   r   r   r   r   <module>   s   

