o
    e                     @   sH   d dl mZ ddlT ddlZddlZdd Zdd ZG d	d
 d
eZdS )   )OpSet9    )*Nc                    s    fdd}|S )Nc               	      s@   | d }z
 | i |}W |S    t d|jdd  |j)Nr   z%convert failed node:{}, op_type is {}	   )	ExceptionformatnameZ
layer_type)argskwargsnoderesfunc VD:\Projects\ConvertPro\env\Lib\site-packages\x2paddle/op_mapper/onnx2paddle/opset10.pyrun_mapping   s   z'print_mapping_info.<locals>.run_mappingr   )r   r   r   r   r   print_mapping_info   s   
r   c                 C   sb   t t| d | }|d | | |  }t |d }|| }|dkr'||gS |dkr/||gS d S )Ng      ?r      
SAME_UPPER
SAME_LOWER)intmathceil)Zin_sizekernel_sizestrideZautopadnew_sizeZpad_sizeZpad0Zpad1r   r   r   _get_same_padding#   s   r   c                       s@   e Zd Z fddZedd Zedd Zedd Z  ZS )	OpSet10c                    s   t t| || d S )N)superr   __init__)selfdecoderpaddle_graph	__class__r   r   r   /   s   zOpSet10.__init__c                 C   s  | j j|ddd}|dd}|d}|dd}t|dd}d}|dkr*d	}t|}|d
}	|d}
|ddg|d  }|jd }t|d	 
d}|  }|dksc|dkr|d dkso|d dkrttd t|d |d |	d |}t|d |d |	d |}|| }td| j}|j}||g}d|}d|  krdksJ d J d||	|||d}| jj|fdt|tr|n|ji|d| d S )Nr   Tidxcopyauto_padNOTSETkernel_shapecount_include_pad	ceil_modeFstridespadsr   )r   Zint32r   r   r/      zgSAME_UPPER and SAME_LOWER does not yet support dynamic shapes, the conversion result may have a diff!!!r   poolzpaddle.nn.AvgPool{}Dz,only Pool1D, Pool2D and Pool3D are supported)r   r   r,   padding	exclusivexZinputsZoutputs)graphget_input_nodeget_attrboollenZ
out_shapesnparrayZreshapeZ	transposeZastypeflattentolistZ_loggerwarningr   Zname_generatorZ
nn_name2idr   r   r"   	add_layer
isinstancestr)r    r   val_xr(   r*   r+   r,   r3   Zpoolndr-   Zpad_moder.   Zinput_shapeZpaddingsZpad_hZpad_wZop_nameZoutput_nameZlayer_outputsZ	paddle_opZlayer_attrsr   r   r   AveragePool2   s\   




$
zOpSet10.AveragePoolc                 C   s  | j j|ddd}| j j|ddd}|dd}t|j}t|j}d|v r0d|v r0|dkr0d}|dkrF| jjd|j|jd|jgd	 d S | jjd
|j|jd|jd gd	 | jjdd|jd i|jd gd	 | jjdd|jd i|jd gd	 | jjdd|jd i|jd gd	 | jjd|jd |jd d|jd gd	 | jjd|jd |jd|jd gd	 | jjd|j|jd d|jgd	 d S )Nr   Tr%   r   fmodr   z
paddle.mod)r4   yr5   zpaddle.divideZ_dividezpaddle.signr4   Z_signz
paddle.abs_abszpaddle.floor_floorzpaddle.multiplyZ
_trunc_divzpaddle.subtract)r6   r7   r8   rB   Zdtyper"   r@   r   )r    r   rC   Zval_yrE   Zx_dtypeZy_dtyper   r   r   Mode   st   









zOpSet10.Modc                 C   sv   | j j|ddd}|dd ks|dd kr+|ddks%|ddkr)tdd S | jjdd	|ji|jgd
 d S )Nr   Tr%   Zdetect_negativeZdetect_positiver   zax2addle does not currently support IsINF with attributes 'detect_negative' and 'detect_positive'.zpaddle.isinfr4   r5   )r6   r7   r8   r   r"   r@   r   )r    r   rC   r   r   r   IsInf   s$   
zOpSet10.IsInf)	__name__
__module____qualname__r   r   rD   rI   rJ   __classcell__r   r   r#   r   r   .   s    
2
3r   )	Zopset9r   Zx2paddle.core.utilnumpyr;   r   r   r   r   r   r   r   r   <module>   s   