
    Pi                        d dl mZmZmZ d dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZm Z m!Z!m"Z" d dl#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE eeeefD ]	ZFdeF_G        
ee=e'f         ZHdeH_G        ee>eIe=         eIe'         f         ZJdeJ_G        g dZK G d de=          ZLdS )    )CallableOptionalUnionN)Tensor)GranularityPerAxisPerBlockPerGroupPerRow	PerTensorPerToken)
CUSTOM_KEYFROM_NODE_KEYNUMERIC_DEBUG_HANDLE_KEYcompare_resultsextract_results_from_loggersgenerate_numeric_debug_handle"prepare_for_propagation_comparison)WrapperModule) _allow_exported_model_train_eval)_move_exported_model_to_eval)_move_exported_model_to_train)bfs_trace_with_node_processfind_sequential_partitionsget_equivalent_typesupdate_equivalent_types_dict)get_block_size   )
FakeQuantizeFakeQuantizeBaseFixedQParamsFakeQuantizeFusedMovingAvgObsFakeQuantizedefault_dynamic_fake_quantdefault_fake_quantdisable_fake_quantdisable_observerenable_fake_quantenable_observer)LearnableFakeQuantizedisable_range_learningenable_range_learning)AffineQuantizedObserverBaseFixedQParamsObserverHistogramObserverMappingTypeMinMaxObserverMovingAverageMinMaxObserver%MovingAveragePerChannelMinMaxObserverNoopObserverObserverBasePartialWrapperPerChannelMinMaxObserverPlaceholderObserverRecordingObserverReuseInputObserverTorchAODTypeUniformQuantizationObserverBaseZeroPointDomainztorchao.quantization.pt2e)7r   r    r!   r-   r"   r.   r)   r0   r1   r2   r3   r4   ObserverOrFakeQuantizer6   r7   r8   r9   r;   !ObserverOrFakeQuantizeConstructorDerivedObserverOrFakeQuantizer'   r(   r%   r&   r+   r*   move_exported_model_to_evalmove_exported_model_to_trainallow_exported_model_train_evalr   r   r   r   r   r   r   r   r   r   r   r   r,   r   r/   r   r	   r
   r   r   r   r:   r<   r   r$   r#   c                        e Zd ZdZ	 	 	 	 ddej        dee         deee         ge	e
e
f         f         dee         dee         deej                 d	ee         f fd
Zde
de
fdZd Z xZS )r?   zuThis observer is used to describe an observer whose quantization parameters
    are derived from other observers
    Ndtype
obs_or_fqsderive_qparams_fn	quant_min	quant_maxqschemech_axisc                     t                                          |           || _        || _        || _        || _        || _        || _        ddlm	}  || j                  r| j        J d            d S d S )Nr   )is_per_channelz6Must provide a valid ch_axis if qscheme is per channel)
super__init__rE   rF   rG   rH   rI   rJ   utilsrL   )
selfrD   rE   rF   rG   rH   rI   rJ   rL   	__class__s
            v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchao/quantization/pt2e/__init__.pyrN   z&DerivedObserverOrFakeQuantize.__init__   s     	$!2""))))))>$,'' 	<++H ,++	 	++    xreturnc                     |S N )rP   rT   s     rR   forwardz%DerivedObserverOrFakeQuantize.forward   s    rS   c                 6    |                      | j                  S rW   )rF   rE   )rP   s    rR   calculate_qparamsz/DerivedObserverOrFakeQuantize.calculate_qparams   s    %%do666rS   )NNNN)__name__
__module____qualname____doc__torchrD   listr=   r   tupler   r   intrI   rN   rY   r[   __classcell__)rQ   s   @rR   r?   r?      s	         $(#'+/!% { /0 $()*E&&.,AA
	 C= C= %-( #     6 F    7 7 7 7 7 7 7rS   r?   )Mtypingr   r   r   r`   r   torchao.quantizationr   r   r	   r
   r   r   r   +torchao.quantization.pt2e._numeric_debuggerr   r   r   r   r   r   r   &torchao.quantization.pt2e.export_utilsr   r   rB   r   r@   r   rA   %torchao.quantization.pt2e.graph_utilsr   r   r   r   torchao.quantization.utilsr   fake_quantizer   r    r!   r"   r#   r$   r%   r&   r'   r(   learnable_fake_quantizer)   r*   r+   observerr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   _fr]   r=   typer>   __all__r?   rX   rS   rR   <module>rq      s   - , , , , , , , , ,                                                                         6 5 5 5 5 5                                
                                     *  !&	 0 0B 0BMM |-==> $?  !$)D&-=(>>% ! 0K ! ,? ? ?D$7 $7 $7 $7 $7L $7 $7 $7 $7 $7rS   