o
    + i­  ã                   @   s,   d dl mZ ddlmZ G dd„ deƒZdS )é    )ÚLayeré   )ÚBaseQuanterc                       s6   e Zd ZdZ	d	dedef‡ fdd„Zdd„ Z‡  ZS )
ÚObserveWrappera²  
    Put an observer layer and an observed layer into a wrapping layer.
    It is used to insert layers into the model for QAT or PTQ.
    Args:
        observer(BaseQuanter): Observer layer
        observed(Layer): Observed layer
        observe_input(bool): If it is true the observer layer will be called before observed layer.
            If it is false the observed layer will be called before observer layer. Default: True.
    TÚobserverÚobservedc                    s    t ƒ  ¡  || _|| _|| _d S ©N)ÚsuperÚ__init__Ú	_observerÚ	_observedÚ_observe_input)Úselfr   r   Zobserve_input©Ú	__class__© úg/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/quantization/wrapper.pyr
      s   

zObserveWrapper.__init__c                 O   sJ   | j r| j|i |¤Ž}| j|fi |¤ŽS | j|i |¤Ž}| j|fi |¤ŽS r   )r   r   r   )r   ZinputsÚkwargsÚoutr   r   r   Úforward*   s
   zObserveWrapper.forward)T)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r
   r   Ú__classcell__r   r   r   r   r      s    üþýr   N)Z	paddle.nnr   Zbase_quanterr   r   r   r   r   r   Ú<module>   s   