
    bIg}                    b    d dl mZ 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y)    )annotationsN)OpRun)_get_indices_is_outc                   |\  }}|\  }}	|\  }
}|\  }}t        | j                        }|dk(  r$| j                  d   dk7  r| j                  d   dk7  s4|dk(  r$| j                  d   dk7  r| j                  d   dk7  st        d      t        | j                        dk(  rdnd}| j                  |dz      }||	|z  z  dk7  rt        d| d| d	      | j                  |dz      }||dd d f   j                         z   |
|dz
  z  z
  dz
  |z  dz   }||dd d f   j                         z   ||	dz
  z  z
  dz
  |z  dz   }|||z  k7  r?t        d
| d| d| j                   d| d| d| d| d| dd| d| d||z   d| d		      |dk\  r|dk\  s4t        d
| d| d| j                   d| d| d| d| d| d| d| d      y )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                       Y/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/reference/ops/op_col2im.py_col2im_shape_check_2dr.      s   ".M<".M<&/#O^")M<qww<D	qwwqzQ1771:?AI!''!*/aggajAo{
 	
 \Q&BIGGIM*M}45:==JO L+nA/
 	
 779q=)LQT
((?ma>O+PPSTT	O 	tAqDz~~''.L1<L*MMPQQ	N .89yk)9-
STSZSZR[ \(> G"74&
7) DVW o.c.1A_WeEeDf g%%1N!5
 	
 q ^q%8yk)9-
STSZSZR[ \(> G"74&
7) DCCRBSSUVdUe f12
 	
 &9    c           	        t        |      dz  }t        j                  t        |      D cg c]  }||   |||z      f c}      }t	        | |||||       | j                         }	t        j                  || j                        j                         }
|\  }}||z  }|\  }}|\  }}|d d df   \  }}|\  }}|\  }}||dd d f   j                         z   ||dz
  z  dz   z
  |z  dz   }||dd d f   j                         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 ]v  } | |z  |z
  ||z  z   }!d|cxk  r|k  sn  d|!cxk  r|k  s,n /||z  |z   |z  |!z   }"||z  |z   |z  | z   }#d|#cxk  r|	j                  d   k  sdn g|
|"xx   |	|#   z  cc<   x   |
j                  |      S c c}w )Nr   dtyper   r	   )r   nparrayranger.   ravelzerosr2   flattenr   r   reshape)$resimage_shaper   r   r   r   n_dimsi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_cols$                                       r-   _col2im_naive_implementation_2drX   A   si   
 Y!^FxxeFmL$q'4F
#34LMH3\9hPWXyy{Hhh{#))4<<>G%Hhh&L Hh&J
AqD>LE5MFE"-M< 	A**,,
hl0Ka0OP	J 	x1~))++zX\/JQ/NO	I |$ 98#X%1H,-:& 	9E8#e+h.CCDy) 9x'%/(Z2GG%v%!t*;e*; 6MD0E9D@D"Z/%79DuLEE5HNN1$55%89	99 ??;''I Ms   G/c                ,   | j                   d   }t        j                  |      }||z  dk7  r%t        d| d| d| d| j                    d| d      | j                   d   }t	        |      }	g }
t        |	      D ]K  }||   ||d d f   j                         z   ||   ||   dz
  z  z
  dz
  ||   z  dz   }|
j                  |       M t        j                  |
      }||k7  r4t        d	| d| j                    d| d
| d| d| d| d|
 d| d| d      y )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   r3   prodr   r   r5   r   append)r   r   r   r   r   r   r)   kernel_sizer*   r<   n_blocksr=   n_block
block_sizes                 r-   _col2im_shape_checkr`   n   s   GGAJM'','K{"a'&&1] 3%%2O 4  ,~ZyP\~]^`
 	
 771:LFH6] !O1a4jnnll1o123  QZ
  	 ! "Jz!"=/AGG9 E(> G"74&
7) D&Zs:, 7%%1N!5
 	
 "r/   c           	     b   t        |      dz  }t        j                  t        |      D cg c]  }||   |||z      f c}      }t	        | |||||       | }	t        j
                  || j                        }
g }t        |      D ]K  }||   ||ddf   j                         z   ||   ||   dz
  z  dz   z
  ||   z  dz   }|j                  |       M t        j                  |      }t        j                  |      }t        |      D ]  }t        ||      }t        |      D ]  }t        ||      }g }t        |      D ]2  }||   ||   z  ||df   z
  ||   ||   z  z   }|j                  |       4 t        ||
j                        rh|
t        |      xx   |	||f   z  cc<     |
S c c}w )z"Naive implementation for `col2im`.r   r1   Nr	   r   )r   r3   r4   r5   r`   r7   r2   r   r[   rZ   r   r   r   tuple)datar;   r   r   r   r   r<   r=   r>   r?   r@   dim_colcolr\   col_sizerN   offsetind_colind_iminds                       r-   col2im_naive_implementationrk      s    Y!^FxxeFmL$q'4F
#34LMHk<HgVHhh{$**5GG6] Nq!tn  "#||A23a79 QZ	 	
 	s '','KwwwH{# ?e\2? 
	?C"30GF6] #AJ+hq!tn<vay9UV<?WW  c"	# 67==1f&(5#:*>>&
	?? NA Ms   F,c                      e Zd Z	 ddZy)Col2ImNc           
        ||D cg c]  }d }}||D cg c]  }d c}dz  }||D cg c]  }d }}t        j                  |      }|j                  d   |z  }	|j                  |j                  d d |	fz   |fz   |j                  dd  z         }t	        |      }
d }t        |j                  d         D ]|  }t        |j                  d         D ]_  }t        |||df   ||
|||      }|=|j                  d d |j                  z   }t        j                  ||j                        }||||df<   a ~ |fS c c}w c c}w c c}w )Nr	   r   r   .r1   )	r3   rZ   r   r9   rb   r5   rk   emptyr2   )selfrc   r;   block_shaper   r   r   sblCksr:   ncout	new_shapes                   r-   _runzCol2Im._run   sb    $/0q0I0<*+!A+a/D?"-.Qq.G.WW[!JJqMR||DJJrNaT1RE9DJJqrNJK;tzz!}% 	%A4::a=) %1AsO["iw ; $

2A :I((9DJJ?C!$Aq#I%	% v+ 1+.s   	D<	E	E)NNN)__name__
__module____qualname__rz    r/   r-   rm   rm      s
    QUr/   rm   )
__future__r   numpyr3   onnx.reference.op_runr   %onnx.reference.ops._op_common_indicesr   r   r.   rX   r`   rk   rm   r~   r/   r-   <module>r      s7    #  ' G2
j*(Z"
J%PU r/   