o
    toi73                     @  s<   d dl mZ d dlZd dlmZ dd ZG dd deZdS )    )annotationsN)OpRunc	           X      C  s  |d u rdd | j dd  D }|d u r|j dd  }|d u r-dd | j dd  D d }|d u r=dd | j dd  D }| j d |j d | ksR|j d | dkrtd| j  d	|j  d
| d|j d | j d | t|j dd  | j d  | f d	|dkrg }	d}
|j d | }|j d }t| j d D ]}t|D ]|}| ||d || |d | f }||| |d |  }zt||d ||d|||	}W n: ttfy	 } z+td| j  d	|j  d
| d| d|j  d|j  d| d| d| d| d| d|d }~ww |dkr|
|j d 7 }
|	||f qq| j d gt|	d d j dd  }|
|d< tj	t
||	d d jd}d}|	D ]'\}}||||d |||j d  f< ||j d 7 }||j d krnd}qH|d urdd |j D }|j d |d< |t
|}||7 }|S |d dkst|t|kr+t|}g }t|j d |  }t|D ]2\}}t|j | | }||j | |j | d |d    ||| || d |d    qtj	t
||jd}td|j d td|j d g}t|D ]\}}t|j | | }|td|j | | q||t
|< |}|}|dv rg }g }tt| j d D ]@}| j | }|||  d ||  }|d ||  ||  | } |dkrj| d d }!n| d }!| |! }"||! ||" q=|| }t| j dkr| j \}#}$}%|\}&|\}'t|%|& |d  |d  |' d }(|d })d|&d  }*|) }+|(|' },t	| j d |j d |(f}	|d ur|	d d d d d d f  |d7  < t|#D ]}-t|j d D ]}.t|$D ]}/||.|.d |/|/d f }0t|+|,|'D ]}1|1|+ |' }2|2|(krq	|1|&d  }td||* t||* |& |%}3}4| |-|-d |/|/d |3|4f }5|5j |0j krt|* | dt|&|&|% ||* |&  }6}7|0d dd d|6|7f }8|5j |8j krtd|5j  d|8j  d|* d| d |& d!|% d"|' dt|5d#|8d$d% }9nt|5d#|0d$d% }9|	|-|.|2f  |97  < q	qqq|	S t| j d&kr| j \}#}$}%}:|\}&};|\}'}<t|%|& |d  |d  |' d }(t|:|; |d  |d  |< d }=|d |d })}>d|&d  d|;d  }*}?|) |> }+}@|(|' |=|< },}At	| j d |j d |(|=f}	|d urG|d'|	d d d d d d d d f< t|#D ]5}-t|j d D ])}.t|$D ] }/||.|.d |/|/d f }0t|+|,|'D ]}1|1|+ |' }2|2|(krqs|1|&d  }td||* t||* |& |%}3}4t|@|A|<D ]}B|B|@ |< }C|C|=krq|B|;d  }Dtd|D|? t|D|? |; |:}E}F| |-|-d |/|/d |3|4|E|Ff }5|5j |0j kr^t|* | dt|&|&|% ||* |&  }6}7t|? |D dt|;|;|: |D|? |;  }G}H|0d dd d|6|7|G|Hf }8|5j |8j krOtd|5j  d|8j  d|* d(|? d| d)|D d |& d*|; d!|% d+|: d"|' d,|< dt|5d#|8d$d% }9nt|5d#|0d$d% }9|	|-|.|2|Cf  |97  < qqsq\qUqK|	S t| j d-kr| j \}#}$}%}:}I|\}&};}J|\}'}<}Kt|%|& |d  |d  |' d }(t|:|; |d  |d&  |< d }=t|I|J |d  |d-  |K d }L|d |d |d })}>}Md|&d  d|;d  d|Jd  }*}?}N|) |> |M }+}@}O|(|' |=|< |L|K },}A}Pt	| j d |j d |(|=|Lf}	|d ur:|d.|	d d d d d d d d d d f< t|#D ]}-t|j d D ]}.t|$D ]}/||.|.d |/|/d f }0t|+|,|'D ]}1|1|+ |' }2|2|(krvqf|1|&d  }td||* t||* |& |%}3}4t|@|A|<D ]Z}B|B|@ |< }C|C|=krq|B|;d  }Dtd|D|? t|D|? |; |:}E}Ft|O|P|KD ]+}Q|Q|O |K }R|R|LkrАq|Q|Jd  }Std|S|N t|S|N |J |I}T}U| |-|-d |/|/d |3|4|E|F|T|Uf }5|5j |0j krt|* | dt|&|&|% ||* |&  }6}7t|? |D dt|;|;|: |D|? |;  }G}Ht|N |S dt|J|J|I |S|N |J  }V}W|0d dd d|6|7|G|H|V|Wf }8|5j |8j krtd/g d|5j  d|8j  d|* d(|? d0|N d| d)|D d1|S d |& d*|; d2|J d!|% d+|: d3|I d"|' d,|< d4|K dt|5d#|8d$d% }9nt|5d#|0d$d% }9|	|-|.|2|C|Rf  |97  < qqqfqOqHq>|	S td5| j  d	|j  d| d6)7Nc                 S     g | ]}d qS     .0sr   r   N/home/ubuntu/.local/lib/python3.10/site-packages/onnx/reference/ops/op_conv.py
<listcomp>       z(_conv_implementation.<locals>.<listcomp>   c                 S  r   )r   r   r   r   r   r   r      r   c                 S  r   r   r   r   r   r   r   r      r   r   r   zShape inconsistencies, X.shape=z
, W.shape=z, group=z, W should be ./z, gx.shape=z, gw.shape=z, auto_pad=z, dilations=z, kernel_shape=z, pads=z
, strides=)dtypec                 S  r   r   r   r   r   r   r   r   G   r   >   VALID
SAME_LOWER
SAME_UPPERr      )r   r   r   zUnexpected shape z != z, oh=z, i=z, kh=z, sH=z, sth=)r   r   )r   r   )r   r      )r   r   r   r   z, ow=z, j=z, kw=z, sW=z, stw=   )r   r   r   r   r    z, oz=z, z=z, kz=z, sZ=z, stz=zThe convolution for X.shape=z is not implemented yet.)shape
ValueErrornpprodrange_conv_implementationRuntimeErrorappendlistzerostupler   reshapeminmaxlen	enumeratesliceintdotjoin)XXWBauto_pad	dilationsgroupkernel_shapepadsstridesrestdmgdwbggxgwcve	new_shapefinalpndnew_kernel_shapeiddinew_windicesheadtailtarget_size
pad_neededpad_headpad_tailsNsCsHkhsthh_outh0ohbhehnnwcwiohrih1ih2imgjh1jh2w_r
   sWkwstww_outw0owbwewjowrjiw1iw2jw1jw2sZkzstzz_outz0ozbzezzozrziz1iz2jz1jz2r   r   r   r      s  *6

$
&"
 && 



$
(
"",$$
&
"
"( (

$$$( 
,
"
"
".&@
3r   c                   @  s$   e Zd Z							dddZdS )ConvNc
           
   
   C  sB   t |jdk rtd|j dt|||||||||		|jfS )Nr   z3X must have at least 3 dimensions but its shape is r   )r(   r   r   r   astyper   )
selfr.   r/   r0   r1   r2   r3   r4   r5   r6   r   r   r   _run'  s   z	Conv._run)NNNNNNN)__name__
__module____qualname__r   r   r   r   r   r   &  s    r   )
__future__r   numpyr   onnx.reference.op_runr   r   r   r   r   r   r   <module>   s     