o
    #j|	                     @   sD   d dl Z ddlmZ ddlmZ G dd deZG dd deZdS )	    N   )BaseObserver)ObserverFactoryc                       s*   e Zd ZdZd fdd	Zdd Z  ZS )AbsmaxObservera  
    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                    s   t  j|d d S )N)
quant_bits)super__init__)selfr   	__class__ f/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/quantization/observers/abs_max.pyr	   )   s   zAbsmaxObserver.__init__c                 C   s   t S N)AbsmaxObserverLayerr
   r   r   r   
_get_class,      zAbsmaxObserver._get_classr   )__name__
__module____qualname____doc__r	   r   __classcell__r   r   r   r   r      s    r   c                       sV   e Zd ZdZdZd fdd	Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Z  ZS )r   z'
    Per-tensor abs max quantizer.
    gHz>r   c                    s"   t    || _ttj| _d S r   )r   r	   _quant_bitspaddleZ	to_tensorr   INIT_ABS_MAXabs_max_val)r
   layerr   r   r   r   r	   7   s   
zAbsmaxObserverLayer.__init__c                 C   s$   t t |}t || j| _|S r   )r   maxabsmaximumr   )r
   inputr   r   r   r   forward<   s   zAbsmaxObserverLayer.forwardc                 C   s   | j | _d S r   )r   Z
thresholdsr   r   r   r   cal_thresholdsA   s   z"AbsmaxObserverLayer.cal_thresholdsc                 C      | j S r   )r   r   r   r   r   
bit_lengthD      zAbsmaxObserverLayer.bit_lengthc                 C   s   dS )Nr   r   r   r   r   
quant_axisG   r   zAbsmaxObserverLayer.quant_axisc                 C   r%   r   )r   r   r   r   r   scalesJ   r'   zAbsmaxObserverLayer.scalesc                 C   s   d S r   r   r   r   r   r   zero_pointsM   r   zAbsmaxObserverLayer.zero_pointsr   )r   r   r   r   r   r	   r#   r$   r&   r)   r*   r+   r   r   r   r   r   r   0   s    r   )r   Zbase_observerr   factoryr   r   r   r   r   r   r   <module>   s
   