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 )   )OpSet    )*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 UD:\Projects\ConvertPro\env\Lib\site-packages\x2paddle/op_mapper/onnx2paddle/opset7.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                       sd   e 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	edd Z
  ZS )OpSet7c                    s   t t| || d S )N)superr   __init__)selfdecoderpaddle_graph	__class__r   r   r   /   s   zOpSet7.__init__c                 C   s  | j j|ddd}|dd}|d}|dd}d}|dkr"d}t|}|d	}|d
}	|d
dg|d  }
|jd }t|
d 	d}|
  }|dks[|dkr|d dksg|d dkrlt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_padF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   padding	exclusivexinputsoutputs)graphget_input_nodeget_attrlen
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+   r2   Zpoolndr,   Zpad_moder-   Zinput_shapeZpaddingsZpad_hZpad_wZop_nameoutput_namelayer_outputsZ	paddle_oplayer_attrsr   r   r   AveragePool2   sX   




$
zOpSet7.AveragePoolc                 C   H   | j j|ddd}| j j|ddd}| jjd|j|jd|jgd d S )Nr   Tr%   r   zpaddle.logical_orr3   yr4   r7   r8   r"   rA   r   r    r   rD   Zval_yr   r   r   Orb      
z	OpSet7.Orc                 C   rI   )Nr   Tr%   r   zpaddle.logical_xorrJ   r4   rL   rM   r   r   r   Xorl   rO   z
OpSet7.Xorc                 C   s   | j j|ddd}|d}t|jd dkr5t|dkr5|d dkr5| jjdd|ji|jgdgd d S | jjd	d|ji||jgd
 d S )Nr   Tr%   axesr   zpaddle.reshaper3   )r5   r6   shapezpaddle.unsqueeze)r5   axisr6   )r7   r8   r9   r:   r;   r"   rA   r   )r    r   rD   rQ   r   r   r   	Unsqueezev   s   
*

zOpSet7.Unsqueezec           
      C      |j }|g}| jj|ddd}|d}|ddkrdnd}d||d}|jd	krl|jd
krl|j d }|j d }	| jjdd|j i|gtd	d | jj	dd|i|	gd| | jjdd|	i|j gt|jd d S | jj	dd|j i|d| d S )Nr   Tr%   rQ   keepdimsFr   prS   Zkeepdimfloat32float64_cast_normpaddle.castr3   r5   r6   dtypepaddle.normr4   r`   r   r7   r8   r9   r_   r"   rA   string
r    r   rE   rF   rD   rQ   rV   rG   Zindices_castZmid_normr   r   r   ReduceL1   J   




zOpSet7.ReduceL1c           
      C   rU   )Nr   Tr%   rQ   rV   Fr   rW   rY   rZ   r[   r\   r]   r3   r^   r`   r4   ra   rb   rd   r   r   r   ReduceL2   rf   zOpSet7.ReduceL2)__name__
__module____qualname__r   r   rH   rN   rP   rT   re   rg   __classcell__r   r   r#   r   r   .   s    
/
	
	

 r   )	Zopset_legacyr   Zx2paddle.core.utilnumpyr<   r   r   r   r   r   r   r   r   <module>   s   