
    ёi                     P    S SK r SSKJr  SSKJr   " S S\5      r " S S\5      rg)	    N   )BaseObserver)ObserverFactoryc                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )AbsmaxObserver   a  
It collects maximum absolute values of target tensor.

Args:
    bit_length(int, optional): Number of bits to represent an quantized integer in binary.
    dtype(str, optional): The data type of input tensor.
    name (str, optional): This parameter is used by developers to print debugging information. \
        For details, please refer to :ref:`api_guide_Name`. Default is None.

Examples:
    .. code-block:: python

        >>> from paddle.quantization import QuantConfig
        >>> from paddle.quantization.quanters import FakeQuanterWithAbsMaxObserver
        >>> quanter = FakeQuanterWithAbsMaxObserver(moving_rate=0.99)
        >>> q_config = QuantConfig(activation=quanter, weight=quanter)
c                     > [         TU ]  US9  g )N)
quant_bits)super__init__)selfr
   	__class__s     e/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/quantization/observers/abs_max.pyr   AbsmaxObserver.__init__)   s    J/    c                     [         $ N)AbsmaxObserverLayerr   s    r   
_get_classAbsmaxObserver._get_class,   s    ""r       )	__name__
__module____qualname____firstlineno____doc__r   r   __static_attributes____classcell__r   s   @r   r   r      s    $0# #r   r   c                   ^   ^  \ rS rSrSrSrSU 4S jjrS rS rS r	S r
S	 rS
 rS rSrU =r$ )r   0   z
Per-tensor abs max quantizer.
gHz>c                    > [         TU ]  5         X l        [        R                  " [
        R                  5      U l        S U l        S U l	        S U l
        g r   )r   r   _quant_bitspaddle	to_tensorr   INIT_ABS_MAXabs_max_val_max_scale_zero_point)r   layerr
   r   s      r   r   AbsmaxObserverLayer.__init__7   sD    %!++,?,L,LM	r   c                 B    U R                  U5      u  U l        U l        U$ r   )cal_min_max_minr+   )r   inputs     r   forwardAbsmaxObserverLayer.forward?   s     #//6	49r   c                     [         R                  " [         R                  " U5      5      nU R                  b9  [         R                  " X R                  R                  UR                  5      5      nSU4$ )Nr   )r'   maxabsr+   maximumcastdtype)r   inputsr*   s      r   r1   AbsmaxObserverLayer.cal_min_maxC   sQ    jjF!3499  ..YY^^FLL9K +~r   c                     U R                   $ r   )r&   r   s    r   
bit_lengthAbsmaxObserverLayer.bit_lengthK   s    r   c                     g)Nr   r   s    r   
quant_axisAbsmaxObserverLayer.quant_axisN   s    r   c                     U R                   c  U R                  U l         [        R                  " U R                   5      U l        g)z$Compute thresholds for MAX function.N)r,   r+   r'   
zeros_liker-   r   s    r   cal_thresholds"AbsmaxObserverLayer.cal_thresholdsQ   s.    ;;))DK!,,T[[9r   c                 T    U R                   c  U R                  5         U R                   $ )zReturn output scales.)r,   rG   r   s    r   scalesAbsmaxObserverLayer.scalesW   s"    ;;!{{r   c                     U R                   $ )zReturn output zero points.)r-   r   s    r   zero_pointsAbsmaxObserverLayer.zero_points]   s    r   )r+   r2   r&   r,   r-   r*   r   )r   r   r   r   r   r)   r   r4   r1   r?   rC   rG   rJ   rM   r    r!   r"   s   @r   r   r   0   s<     L  :   r   r   )r'   base_observerr   factoryr   r   r   r   r   r   <module>rQ      s(      ( %#_ #4/ , / r   