
    ёi                    x    S SK Jr  S SKrS SKJr  S SKJr  SSKJr  \(       a  S SK	J
r
  SSKJr   " S	 S
\5      rg)    )annotationsN)TYPE_CHECKING)fleet   )Quantization)Layer)QuantConfigc                  D   ^  \ rS rSrSrSU 4S jjrS rSS	S jjrSrU =r	$ )
PTQ   z3
Applying post training quantization to the model.
c                $   > [         TU ]  U5        g )N)super__init__)selfconfig	__class__s     W/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/quantization/ptq.pyr   PTQ.__init__"   s         c                Z     [         R                  " 5       S:  a  gg! [         a     gf = f)N   TF)r   
worker_num	Exception)r   s    r   _is_parallel_trainingPTQ._is_parallel_training%   s0    	!A% 		s    
**c                n   UnU(       dB  U R                  5       (       a   S5       e[        R                  " U5      nUR                  5         UR                  (       a   S5       eU R
                  R                  U5        U R                  X0R
                  5        U R                  X0R
                  5        U$ )aA	  
Create a model for post-training quantization.

The quantization configuration will be propagated in the model.
And it will insert observers into the model to collect and compute
quantization parameters.

Args:
    model(Layer): The model to be quantized.
    inplace(bool): Whether to modify the model in-place.

Return: The prepared model for post-training quantization.

Examples:
    .. code-block:: python

        >>> from paddle.quantization import PTQ, QuantConfig
        >>> from paddle.quantization.observers import AbsmaxObserver
        >>> from paddle.vision.models import LeNet

        >>> observer = AbsmaxObserver()
        >>> q_config = QuantConfig(activation=observer, weight=observer)
        >>> ptq = PTQ(q_config)
        >>> model = LeNet()
        >>> model.eval()
        >>> quant_model = ptq.quantize(model)
        >>> print(quant_model)
        LeNet(
          (features): Sequential(
            (0): QuantedConv2D(
              (weight_quanter): AbsmaxObserverLayer()
              (activation_quanter): AbsmaxObserverLayer()
            )
            (1): ObserveWrapper(
              (_observer): AbsmaxObserverLayer()
              (_observed): ReLU()
            )
            (2): ObserveWrapper(
              (_observer): AbsmaxObserverLayer()
              (_observed): MaxPool2D(kernel_size=2, stride=2, padding=0)
            )
            (3): QuantedConv2D(
              (weight_quanter): AbsmaxObserverLayer()
              (activation_quanter): AbsmaxObserverLayer()
            )
            (4): ObserveWrapper(
              (_observer): AbsmaxObserverLayer()
              (_observed): ReLU()
            )
            (5): ObserveWrapper(
              (_observer): AbsmaxObserverLayer()
              (_observed): MaxPool2D(kernel_size=2, stride=2, padding=0)
            )
          )
          (fc): Sequential(
            (0): QuantedLinear(
              (weight_quanter): AbsmaxObserverLayer()
              (activation_quanter): AbsmaxObserverLayer()
            )
            (1): QuantedLinear(
              (weight_quanter): AbsmaxObserverLayer()
              (activation_quanter): AbsmaxObserverLayer()
            )
            (2): QuantedLinear(
              (weight_quanter): AbsmaxObserverLayer()
              (activation_quanter): AbsmaxObserverLayer()
            )
          )
        )
z3'inplace' is not compatible with parallel training.zjPost-Training Quantization should not work on training models. Please set evaluation mode by model.eval().)	r   copydeepcopyevaltraining_config_specify_convert_to_quant_layers_insert_activation_observers)r   modelinplace_models       r   quantizePTQ.quantize.   s    N 1133 E3 ]]5)FKKM>> 	
x	
! 	f%%%fll;))&,,?r    )r   r	   returnNone)F)r%   r   r&   boolr+   r   )
__name__
__module____qualname____firstlineno____doc__r   r   r(   __static_attributes____classcell__)r   s   @r   r   r      s    !T Tr   r   )
__future__r   r   typingr   paddle.distributedr   r(   r   	paddle.nnr   r   r	   r   r*   r   r   <module>r9      s-    #    $ "#e, er   