
    ёi                    l    S SK Jr  S SK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   )Quantization)Layer)QuantConfigc                  >   ^  \ rS rSrSrSU 4S jjrSSS jjrSrU =r$ )	QAT   a  
Tools used to prepare model for quantization-aware training.
Args:
    config(QuantConfig): Quantization configuration

Examples:
    .. code-block:: python

        >>> from paddle.quantization import QAT, QuantConfig
        >>> from paddle.quantization.quanters import FakeQuanterWithAbsMaxObserver
        >>> quanter = FakeQuanterWithAbsMaxObserver(moving_rate=0.9)
        >>> q_config = QuantConfig(activation=quanter, weight=quanter)
        >>> qat = QAT(q_config)
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/qat.pyr   QAT.__init__+   s         c                   UR                   (       d   S5       eU(       a  UO[        R                  " U5      nU R                  R	                  U5        U R                  X0R                  5        U R                  X0R                  5        U$ )a
  
Create a model for quantization-aware training.

The quantization configuration will be propagated in the model.
And it will insert fake quanters into the model to simulate the quantization.

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

Return: The prepared model for quantization-aware training.

Examples:
    .. code-block:: python

        >>> from paddle.quantization import QAT, QuantConfig
        >>> from paddle.quantization.quanters import FakeQuanterWithAbsMaxObserver
        >>> from paddle.vision.models import LeNet

        >>> quanter = FakeQuanterWithAbsMaxObserver(moving_rate=0.9)
        >>> q_config = QuantConfig(activation=quanter, weight=quanter)
        >>> qat = QAT(q_config)
        >>> model = LeNet()
        >>> quant_model = qat.quantize(model)
        >>> print(quant_model)
        LeNet(
          (features): Sequential(
            (0): QuantedConv2D(
              (weight_quanter): FakeQuanterWithAbsMaxObserverLayer()
              (activation_quanter): FakeQuanterWithAbsMaxObserverLayer()
            )
            (1): ObserveWrapper(
              (_observer): FakeQuanterWithAbsMaxObserverLayer()
              (_observed): ReLU()
            )
            (2): ObserveWrapper(
              (_observer): FakeQuanterWithAbsMaxObserverLayer()
              (_observed): MaxPool2D(kernel_size=2, stride=2, padding=0)
            )
            (3): QuantedConv2D(
              (weight_quanter): FakeQuanterWithAbsMaxObserverLayer()
              (activation_quanter): FakeQuanterWithAbsMaxObserverLayer()
            )
            (4): ObserveWrapper(
              (_observer): FakeQuanterWithAbsMaxObserverLayer()
              (_observed): ReLU()
            )
            (5): ObserveWrapper(
              (_observer): FakeQuanterWithAbsMaxObserverLayer()
              (_observed): MaxPool2D(kernel_size=2, stride=2, padding=0)
            )
          )
          (fc): Sequential(
            (0): QuantedLinear(
              (weight_quanter): FakeQuanterWithAbsMaxObserverLayer()
              (activation_quanter): FakeQuanterWithAbsMaxObserverLayer()
            )
            (1): QuantedLinear(
              (weight_quanter): FakeQuanterWithAbsMaxObserverLayer()
              (activation_quanter): FakeQuanterWithAbsMaxObserverLayer()
            )
            (2): QuantedLinear(
              (weight_quanter): FakeQuanterWithAbsMaxObserverLayer()
              (activation_quanter): FakeQuanterWithAbsMaxObserverLayer()
            )
          )
        )
zfQuantization-Aware Training should work on training models. Please set training mode by model.train().)trainingcopydeepcopy_config_specify_convert_to_quant_layers_insert_activation_observers)r   modelinplace_models       r   quantizeQAT.quantize.   sj    J ~~ 	
t	
~ "t}}U';f%%%fll;))&,,?r    )r   r   returnNone)F)r   r   r   boolr#   r   )	__name__
__module____qualname____firstlineno____doc__r   r    __static_attributes____classcell__)r   s   @r   r
   r
      s    !L Lr   r
   )
__future__r   r   typingr   r    r   	paddle.nnr   r   r   r
   r"   r   r   <module>r0      s*    #    "#_, _r   