
    h                        S SK JrJrJr  S SKrS SKJr  S SKJrJrJ	r	J
r
JrJrJr  S SKJrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJrJ r J!r!J"r"  S SK#J$r$  SSK%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/  SSK0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArA  \\\\4 H
  rBS\BlC        M     \\9\'4   rDS\DlC        \\:\E\9   \E\'   4   rFS\FlC        / SQrG " S S\95      rHg)    )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)AffineQuantizedObserverBaseFixedQParamsObserverHistogramObserverMappingTypeMinMaxObserverMovingAverageMinMaxObserver%MovingAveragePerChannelMinMaxObserverNoopObserverObserverBasePartialWrapperPerChannelMinMaxObserverPlaceholderObserverRecordingObserverReuseInputObserverTorchAODTypeUniformQuantizationObserverBaseZeroPointDomainztorchao.quantization.pt2e)4r   r    r!   r*   r"   r+   r-   r.   r/   r0   r1   ObserverOrFakeQuantizer3   r4   r5   r6   r8   !ObserverOrFakeQuantizeConstructorDerivedObserverOrFakeQuantizer'   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   r7   r9   r   r$   r#   c                      ^  \ rS rSrSr    SS\R                  S\\   S\	\\   /\
\\4   4   S\\   S\\   S\\R                     S	\\   4U 4S
 jjjrS\S\4S jrS rSrU =r$ )r<      zmThis observer is used to describe an observer whose quantization parameters
are derived from other observers
dtype
obs_or_fqsderive_qparams_fn	quant_min	quant_maxqschemech_axisc                    > [         T	U ]  U5        X l        X0l        X@l        XPl        X`l        Xpl        SSKJ	n  U" U R                  5      (       a  U R                  c   S5       eg g )Nr   )is_per_channelz6Must provide a valid ch_axis if qscheme is per channel)
super__init__rC   rD   rE   rF   rG   rH   utilsrJ   )
selfrB   rC   rD   rE   rF   rG   rH   rJ   	__class__s
            \/home/james-whalen/.local/lib/python3.13/site-packages/torchao/quantization/pt2e/__init__.pyrL   &DerivedObserverOrFakeQuantize.__init__   sb     	$!2"")$,,''<<+ H+ (    xreturnc                     U$ N )rN   rS   s     rP   forward%DerivedObserverOrFakeQuantize.forward   s    rR   c                 8    U R                  U R                  5      $ rV   )rD   rC   )rN   s    rP   calculate_qparams/DerivedObserverOrFakeQuantize.calculate_qparams   s    %%doo66rR   )rH   rD   rC   rG   rF   rE   )NNNN)__name__
__module____qualname____firstlineno____doc__torchrB   listr:   r   tupler   r   intrG   rL   rX   r[   __static_attributes____classcell__)rO   s   @rP   r<   r<      s     $(#'+/!%{{ /0 $()*E&&.,AA
	 C= C= %--( # 6 F 7 7rR   r<   )Itypingr   r   r   rb   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   r?   r   r=   r   r>   %torchao.quantization.pt2e.graph_utilsr   r   r   r   torchao.quantization.utilsr   fake_quantizer   r    r!   r"   r#   r$   r%   r&   r'   r(   observerr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   _fr^   r:   typer;   __all__r<   rW   rR   rP   <module>rs      s    - ,        6      *  !&	B 0BM |-==> $?  !$)D&-=(>>% ! 0K ! ,<~$7L $7rR   