o
    #Õjo  ã                   @   s¨  d dl Z G dd„ dƒZee jjdgdgdgƒee jjdgdgd	gƒee jjdgg dgƒee jjdgg d	gƒee jjdgg d	gƒee jjdgg d	gƒee jj	dgg d	gƒee jj
dgg d	gƒee jjdgg d	gƒee jjdgg d	gƒee jjdgg d	gƒee jjdgg d	gƒee jjdgg d	gƒee jjdgg d	gƒee jjjddgg d	gƒgZee jjjjdgdgdgƒee jjjjdgdgd	gƒgZe jje jjgZG d
d„ dƒZdS )é    Nc                       s    e Zd ZdZ‡ fdd„Z‡  ZS )Ú	LayerInfoz7
    Store the argnames of the inputs and outputs.
    c                    s&   t ƒ  ¡  || _|| _|| _|| _d S ©N)ÚsuperÚ__init__ÚlayerÚinput_namesÚweight_namesÚoutput_names)Úselfr   r   r   r	   ©Ú	__class__© úl/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/quantization/imperative/ptq_registry.pyr      s
   

zLayerInfo.__init__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__r   r   r   r   r      s    r   ZInputÚFilterÚOutputÚXÚYZOutc                       sh   e Zd ZdZi Zi ZdZ‡ fdd„Zedd„ ƒZ	edd„ ƒZ
ed	d
„ ƒZedd„ ƒZedd„ ƒZ‡  ZS )ÚPTQRegistryzH
    Register the supported layers for PTQ and provide layers info.
    Fc                    s   t ƒ  ¡  d S r   )r   r   )r
   r   r   r   r   I   s   zPTQRegistry.__init__c                 C   sD   | j stD ]}|| j|j< qtt }|D ]}|| j|j< qd| _ d S )NT)Ú	is_initedÚPTQ_LAYERS_INFOÚsupported_layers_mapr   ÚQUANT_LAYERS_INFOÚregistered_layers_map)ÚclsÚ
layer_infoZall_layers_infor   r   r   Ú_initL   s   
zPTQRegistry._initc                 C   ó&   |   ¡  || jv pt|t| j ¡ ƒƒS )zè
        Analyze whether the layer supports quantization.
        Args:
            layer(Layer): The input layer can be a python class or an instance.
        Returns:
            flag(bool): Whther the layer is supported.
        )r    r   Ú
isinstanceÚtupleÚkeys©r   r   r   r   r   Úis_supported_layerW   ó   	ÿzPTQRegistry.is_supported_layerc                 C   r!   )zó
        Analyze whether the layer is register layer_info.
        Args:
            layer(Layer): The input layer can be a python class or an instance.
        Returns:
            flag(bool): Wether the layer is register layer_info.
        )r    r   r"   r#   r$   r%   r   r   r   Úis_registered_layere   r'   zPTQRegistry.is_registered_layerc                 C   s   |t v p
t|tt ƒƒS )zë
        Analyze whether the layer is simulated quant layer.
        Args:
            layer(Layer): The input layer can be a python class or an instance.
        Returns:
            flag(bool): Whther the layer is supported.
        )ÚSIMULATED_LAYERSr"   r#   r%   r   r   r   Úis_simulated_quant_layers   s   
	ÿz$PTQRegistry.is_simulated_quant_layerc                 C   sD   |   |¡s	J dƒ‚| j ¡ D ]\}}||kst||ƒr|  S qdS )zè
        Get the infomation for the layer.
        Args:
            layer(Layer): The input layer can be a python class or an instance.
        Returns:
            layer_info(LayerInfo): The layer info of the input layer.
        z The input layer is not register.N)r(   r   Úitemsr"   )r   r   Z	layer_keyr   r   r   r   r   €   s   	ÿþÿÿzPTQRegistry.layer_info)r   r   r   r   r   r   r   r   Úclassmethodr    r&   r(   r*   r   r   r   r   r   r   r   @   s     




r   )Zpaddler   ÚnnZConv2DZLinearZBatchNorm2DZAdaptiveMaxPool2DZAdaptiveAvgPool2DZ	AvgPool2DZ	MaxPool2DZReLUZReLU6Z	HardswishZSwishZSigmoidZSoftmaxZTanhZquantÚaddr   Zquant_layersZQuantizedConv2DZQuantizedLinearr   r)   r   r   r   r   r   Ú<module>   s<   ñ
üÿù