
    
NgA                     ^    d dl Zd dlmZ d dlmZmZ d Zd Zd Z	d Z
 G d d	e          ZdS )
    N)OpRun)_get_indices_is_outc                    |\  }}|\  }}	|\  }
}|\  }}t          | j                  }|dk    r"| j        d         dk    r| j        d         dk    s7|dk    r"| j        d         dk    r| j        d         dk    st          d          t          | j                  dk    rdnd}| j        |dz            }||	|z  z  dk    rt          d| d| d	          | j        |dz            }||dd d f                                         z   |
|dz
  z  z
  dz
  |z  dz   }||dd d f                                         z   ||	dz
  z  z
  dz
  |z  dz   }|||z  k    r>t          d
| d| d| j         d| d| d| d| d| dd| d| d||z   d| d		          |dk    r|dk    s3t          d
| d| d| j         d| d| d| d| d| d| d| d          d S )N   r         zmExpected 2D or 3D (batch mode) tensor for input with possibly 0 batch size and non-zero dimensions for input.zjExpected size of input's dimension 1 to be divisible by the product of kernel_size, but got input.size(1)=z and kernel_size=.zGiven batch_dim=z, n_input_plane=
, X.shape=, output_shape=, kernel_shape=, dilations=, pads=
, strides=zI, expected size of input's dimension 2 to match the calculated number of zsliding blocks z *  = , but got input.size(2)=z6, calculated shape of the array of sliding blocks as (z, z%), which is too small (non-positive).)lenshape
ValueErrorsum)Xoutput_shapekernel_shape	dilationspadsstridesoutput_heightoutput_widthkernel_heightkernel_widthdilation_heightdilation_widthstride_heightstride_widthndim	batch_dimn_input_planeinput_lengthn_blocks_heightn_blocks_widths                       X/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/reference/ops/op_col2im.py_col2im_shape_check_2dr-      s\   ".M<".M<&/#O^")M<qw<<D	qwqzQ171:??AII!'!*//agajAoo{
 
 	
 \\Q&&BIGIM*M}45::/=J/ /+/ / /
 
 	
 79q=)LQT
(((?ma>O+PPSTT	O 	tAqqqDz~~'''.L1<L*MMPQQ	N .899Wy W W- W WSTSZ W W(W W9EW W"W W+/W W;BW W W5o 5 5. 5 5_WeEe 5 5%15 5 5
 
 	
 q  ^q%8%82y 2 2- 2 2STSZ 2 2(2 29E2 2"2 2+/2 2;B2 2 DS2 2 We2 2 2
 
 	
 &9%8    c                 (  " t                    dz  "t          j        "fdt          "          D                       }t	          | |||||           |                                 }t          j        || j                                                  }|\  }	}
|	|
z  }|\  }}|\  }}|d d df         \  }}|\  }}|\  }}||dd d f         	                                z   ||	dz
  z  dz   z
  |z  dz   }||dd d f         	                                z   ||
dz
  z  dz   z
  |z  dz   }t          |          D ]}||
z  }||
z  |	z  }||	|
z  z  }t          |          D ]}||z  |z
  ||z  z   }t          |          D ]}}||z  |z
  ||z  z   }d|cxk    r|k     r`n  d|cxk    r|k     rPn 0||z  |z   |z  |z   } ||z  |z   |z  |z   }!d|!cxk    r|j
        d         k     rn g|| xx         ||!         z  cc<   ~|                    |          S )Nr   c                 6    g | ]}|         |z            fS  r1   .0in_dimsr   s     r,   
<listcomp>z3_col2im_naive_implementation_2d.<locals>.<listcomp>E   +    LLL$q'4F
#34LLLr.   dtyper   r   )r   nparrayranger-   ravelzerosr9   flattenr   r   reshape)#resimage_shaper   r   r   r   new_padsdata_coldata_imkernel_hkernel_wchannels_colstride_hstride_w
dilation_h
dilation_wpad_hpad_wheightwidthr   r   
height_col	width_colc_colw_offseth_offsetc_imh_colh_imw_colw_imi_imi_colr5   s#       `                             @r,   _col2im_naive_implementation_2dr]   A   s    YY!^FxLLLLLeFmmLLLMMH3\9hPWXXXyy{{Hh{#)444<<>>G%Hhh&L Hh&J
AAAqD>LE5MFE"-M< 	AAA**,,,
hl0Ka0OP	J 	x111~))+++zX\/JQ/NO	I |$$ 9 98#X%1H,-:&& 	9 	9E8#e+h.CCDy)) 9 9x'%/(Z2GG%%%%v%%%%%!t*;*;*;*;e*;*;*;*;*; 6MD0E9D@D"Z/%79DuLEE5555HN1$555555%89	9 ??;'''r.   c                 \   | j         d         }t          j        |          }||z  dk    r$t          d| d| d| d| j          d| d          | j         d         }t	          |          }	g }
t          |	          D ]b}||         ||d d f                                         z   ||         ||         dz
  z  z
  dz
  ||         z  dz   }|
                    |           ct          j        |
          }||k    r3t          d	| d| j          d| d
| d| d| d| d|
 d| d| d          d S )Nr   zSExpected size of input's dimension 1 to be divisible by the product of kernel_size=z, but got input.size(1)=z and kernel_shape=r   r   r   r   zGiven n_input_plane=r   r   r   r   zX, expected size of input's dimension 2 to match the calculated number of sliding blocks r   r   )r   r:   prodr   r   r<   r   append)r   r   r   r   r   r   r(   kernel_sizer)   r5   n_blocksr4   n_block
block_sizes                 r,   _col2im_shape_checkre   l   s   GAJM',''K{"a''`&1` `%2` ` !-` ` 9:` ` Q]` ` `
 
 	
 71:LFH6]] ! !O1aaa4jnnll1o123  QZ
  	    ""Jz!!5= 5 5AG 5 5(5 59E5 5"5 5+/5 5;B5 5 '	5 5 ,6	5 5
 &25 5 5
 
 	
 "!r.   c                    t                    dz  t          j        fdt                    D                       }t	          | |||||           | }t          j        || j                  }g }	t                    D ]b}
||
         ||
ddf                                         z   ||
         ||
         dz
  z  dz   z
  ||
         z  dz   }|	                    |           ct          j	        |          }t          j	        |	          }t          |          D ]}t          ||          }t          |          D ]}t          ||	          }g }t                    D ]E}
||
         ||
         z  ||
df         z
  ||
         ||
         z  z   }|                    |           Ft          ||j                  s%|t          |          xx         |||f         z  cc<   |S )z"Naive implementation for `col2im`.r   c                 6    g | ]}|         |z            fS r1   r1   r2   s     r,   r6   z/col2im_naive_implementation.<locals>.<listcomp>   r7   r.   r8   Nr   r   )r   r:   r;   r<   re   r>   r9   r   r`   r_   r   r   r   tuple)datarB   r   r   r   r   rC   rD   rE   dim_colr4   colra   col_sizerS   offsetind_colind_imindr5   s       `              @r,   col2im_naive_implementationrq      s   YY!^FxLLLLLeFmmLLLMMHk<HgVVVHh{$*555GG6]]  Nq!!!tn  ""#||A23a79 QZ	 	
 	s',''KwwH{## ? ?e\22?? 
	? 
	?C"300GF6]] # #AJ+hq!tn<vay9UV<?WW  c""""67=11 ?f&&&(5#:*>>&&&
	? Nr.   c                       e Zd ZddZdS )Col2ImNc           
      f   |d |D             }|d |D             dz  }|d |D             }t          j        |          }|j        d         |z  }|                    |j        d d         |fz   |fz   |j        dd          z             }t	          |          }	d }
t          |j        d                   D ]x}t          |j        d                   D ][}t          |||df         ||	|||          }|
2|j        d d         |j        z   }t          j        ||j                  }
||
||df<   \y|
fS )	Nc                     g | ]}d S r   r1   r3   ss     r,   r6   zCol2Im._run.<locals>.<listcomp>   s    000q000r.   c                     g | ]}d S )r   r1   rw   s     r,   r6   zCol2Im._run.<locals>.<listcomp>   s    +++!A+++r.   r   c                     g | ]}d S rv   r1   rw   s     r,   r6   zCol2Im._run.<locals>.<listcomp>   s    ...Qq...r.   r   r   .r8   )	r:   r_   r   r@   rh   r<   rq   emptyr9   )selfri   rB   block_shaper   r   r   blCksrA   ncout	new_shapes                  r,   _runzCol2Im._run   sk   00K000I<++{+++a/D?..+...GW[!!JqMR||DJrrNaT1RE9DJqrrNJKK;tz!}%% 	% 	%A4:a=)) % %1AsO["iw  ; $
2A2 :I(9DJ???C!$Aq#I% vr.   )NNN)__name__
__module____qualname__r   r1   r.   r,   rs   rs      s(             r.   rs   )numpyr:   onnx.reference.op_runr   %onnx.reference.ops._op_common_indicesr   r   r-   r]   re   rq   rs   r1   r.   r,   <module>r      s        ' ' ' ' ' ' G G G G G G G G2
 2
 2
j(( (( ((V"
 "
 "
J# # #L    U     r.   