o
    toi.                     @  s@   d dl mZ d dlZd dlmZ d dlmZ G dd deZdS )    )annotationsN)OpRun)col2im_naive_implementationc                   @  s(   e Zd Z									dddZdS )ConvTransposeNc           $        s6  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 d u rR|dvrRdd tdt D d u rÈd u rh fddttD  fd	dttD }g }g }ttD ]3}|d
kr||| d  ||| || d   q||| || d   ||| d  q|| td n*t j d tfddtD d u r fddtD |j dd  t}|j d | }|| | } j d }|}t j dd  }|| }||||f}d }|dkrt j d D ]a}|d j}t	| | ||f}||d|j d f}t|D ]<}t
|| }|d u r{tjg  j d d ||j R  jd}|d ur||| 7 }|d |||df< qTq1nt j d |gR }g }t|D ]F}  d d | | | | d | | df }!|| | | | d | | df }"| j|!|"||dd}#t|#d }#||# qt j d D ]}t|D ]} ||  }#|#|df ||| | d df< qq| jfS )Nc                 S     g | ]}d qS     .0sr	   r	   X/home/ubuntu/.local/lib/python3.10/site-packages/onnx/reference/ops/op_conv_transpose.py
<listcomp>       z&ConvTranspose._run.<locals>.<listcomp>   c                 S  r   r   r	   r
   r	   r	   r   r       r   c                 S  r   r   r	   r
   r	   r	   r   r   "   r   >   
SAME_LOWER
SAME_UPPERc                 S  r   r   r	   r   ir	   r	   r   r   $   r   c                   s"   g | ]} j |d   |  qS )r   shaper   )Xstridesr	   r   r   '   s    c                   sN   g | ]#}|  j |d   d  |  | d |  d  |  qS )r   r   r   r   )r   	dilationskernel_shapeoutput_paddingoutput_shaper   r	   r   r   *   s    r   c                   s    g | ]}| |   fqS r	   r	   r   )n_dimspadsr	   r   r   >   s     c                   sZ   g | ])}|  j |d   d  |  | d |  d  |ddf   qS )r   r   N)r   sumr   )r   r   r   new_padsr   r   r	   r   r   @   s    r   r   )dtype.)	Bauto_padr   groupr   r   r   r   r   )r   rangelenappendnparrayprodreshapeTmatmulr   emptyr#   zeros_runastype)$selfr   Wr$   r%   r   r&   r   r   r   r   r   total_paddingpads_1pads_2r   kernel_sizenum_output_channels
kernel_dimCmnk
w_reshapedfinalimage_idw_tgemmgemmccresoutput_arraygroup_idgroup_Xgroup_Wgroup_outputr	   )	r   r   r   r   r!   r   r   r   r   r   r2      s   







*zConvTranspose._run)	NNNNNNNNN)__name__
__module____qualname__r2   r	   r	   r	   r   r      s    r   )	
__future__r   numpyr*   onnx.reference.op_runr   onnx.reference.ops.op_col2imr   r   r	   r	   r	   r   <module>   s
   