
    
Ng8                     6    d dl Zd dlmZ  G d de          ZdS )    N)
CommonPoolc                   <    e Zd Z	 	 	 	 	 	 	 ddZd Zd Zd Zd ZdS )MaxPoolNc	                 N   |3t          |          t          |          k    sHt          |          dk    s5|Pt          |          t          |          k    st          |          dk    r|                     ||||||||          S t          j        | dd||||||||          S )N   )auto_pad	ceil_mode	dilationskernel_shapepadsstorage_orderstridesMAXr   )minmax	_max_poolr   _run)	selfxr   r	   r
   r   r   r   r   s	            Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/reference/ops/op_max_pool.pyr   zMaxPool._run   s     !Y3y>>11S^^q5H5HS\\S\\%A%AS\\UVEVEV>>!##)+ " 	 	 	 %'
 
 
 	
    c	                 R   )d t          t          |          dz            D             |&d t          t          |                    D             }|&d t          t          |                    D             }t          |          t          j        fdt                    D                       }	|j        dd          }
d |
D             }|rt          t          |
                    D ]}t          t          j        |
|         |	|                                         z   ||         dz
  ||         z  dz   z
  ||         z  dz                       ||<   ||         dz
  ||         z  |
|         |	|         d         z   k    }|r||xx         dz  cc<   nt          t          |
                    D ]k}t          t          j        |
|         |	|                                         z   ||         dz
  ||         z  dz   z
  ||         z  dz                       ||<   l|rV|d	k    rO|d
v rt          t          |
                    D ]}|dk    r4t          t          j        |
|         ||         z                      ||<   n3t          t          j        |
|         ||         z                      ||<   ||         dz
  ||         z  ||         dz
  ||         z  dz   z   |
|         z
  }|dz  |	|df<   ||	|df         z
  |	|df<   nmt          t          |
                    D ]P}t          t          j        |
|         ||         dz
  ||         z  dz   z
  dz   ||         z                      ||<   Qt          |
          dk    r| 	                    ||||||	|||	  	        S t          |
          dk    r| 
                    ||||||	|||	  	        S t          |
          dk    r|                     ||||||	|||	  	        S t          d|j         d          )Nc                     g | ]}d S r    .0is     r   
<listcomp>z%MaxPool._max_pool.<locals>.<listcomp>B   s    <<<!A<<<r      c                     g | ]}d S r   r   r   s     r   r   z%MaxPool._max_pool.<locals>.<listcomp>D   s    ;;;Qq;;;r   c                     g | ]}d S r"   r   r   s     r   r   z%MaxPool._max_pool.<locals>.<listcomp>F   s    ===q===r   c                 6    g | ]}|         |z            fS r   r   )r   r   n_dimsr   s     r   r   z%MaxPool._max_pool.<locals>.<listcomp>I   s+    PPPQd1gtAJ'78PPPr   c                     g | ]}d S r   r   )r   ss     r   r   z%MaxPool._max_pool.<locals>.<listcomp>L   s    ???a???r   r   r   NOTSET)
SAME_UPPER
SAME_LOWERr)      zNot implemented yet for shape .)rangelennparrayshapeintceilsumfloor_max_pool_1d_max_pool_2d_max_pool_3dRuntimeError)r   r   r   r	   r
   r   r   r   r   new_padsinput_spatial_shapeoutput_spatial_shaper   $need_to_reduce_out_size_in_ceil_modepad_ir%   s         `        @r   r   zMaxPool._max_pool6   s9    <<<uS%6%6%:;;<<<D?;;%L(9(9":":;;;G==E#l*;*;$<$<===I\""8PPPPP%--PPPQQgabbk??+>??? 	323344 1 1*-G/2&qkoo//0 ,Q! 3y|CaGI "!*%  
+ 
+$Q' )+a/AJ8"5a"88A;q>"I8J4 8 1(+++q0+++!1$ 323344  *-H/2&qkoo//0 ,Q! 3y|CaGI "!*%  
+ 
+$Q''  	H,,777s#67788 < <A<//25G$7$:WQZ$GHH3 3,Q// 36H%8%;gaj%HII3 3,Q/ .a014
B(Oa/9Q<?!CE-a01 
 &+aZHQTN%*Xad^%;HQTNN<" s#67788 
 
A.1 3A 6$0Oa$79Q<#G!#K!M"#!$ &aj) 	/ 	/(++ "##q(($$$
 
 
 "##q(($$$
 
 
 "##q(($$$
 
 
 FAGFFFGGGr   c
                    d}
|j         d d         t          |	          z   }t          j        ||j                  }t          j        |t          j        d          }|j         }|d         }|d         |d         |d         |z  }|
rdn|d         |d         |                                |                                |                                fd}t          |          D ]} ||           t          | j
                  dk    r                    |          fS                     |                              |          fS )	NFr    dtyperA   
fill_valuer   r   c                 4   | z  }| z  }| z  }t                    D ]w}|z  d         z
  }|d         z  z   }d }d}t          ||          D ]-}	|	dk     s|	k    r|||	z            |k    r||	z            }|	}.|||z   <   | z  |z   
||z   <   xd S )Nr   r   r   rB   r-   )cx_dy_di_dphhstarthendYhh_indexhI_dataX_dataY_data
dilation_hheightr   r:   pooled_heightstride_hx_stepy_steps             r   	iterationz'MaxPool._max_pool_1d.<locals>.iteration   s    f*Cf*Cf*CM** 8 8h$7Q* <<vtZ88 $ $A1uuV zVC!G_r%9%9#C!G_"##%sRx #$v:#7sRx  8 8r   )r1   tupler/   zerosrA   fullint64ravelr-   r.   outputreshape)r   r   r   r	   r
   r   r:   r   r   r<   global_poolingy_dimsyindicesx_dimschannelstotal_channelsr[   rH   rR   rS   rT   rU   rV   rW   rX   rY   rZ   s        ``            @@@@@@@@@r   r6   zMaxPool._max_pool_1d   s    !u%9:::HV17+++'&R@@@!9q	X-&611GAJq\
	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8$ ~&& 	 	AIaLLLLt{q  NN6**,,v&&v(>(>??r   c
                    d}
|j         d d         t          |	          z   }t          j        ||j                  }t          j        |t          j        d          }|j         }|d         }|d         t                    dk    r|d         nd|d         t                    dk    r|d         nd|d         |z  }|
rdn|d         |
rdn|d         z  z  |d         |d         |                                |                                |                                fd	}t          |          D ]} ||           t          | j
                  dk    r                    |          fS                     |                              |          fS )
NFr    r@   rB   rC   r   r+   r   c                 ^   | z  }| z  }t                    D ]}|z  d         z
  }|d         z  z   }t                    D ]}|z  d         z
  }|d         z  z   }|z  |z   }	d }
d}d}t          ||          D ]p}|dk     s|k    rt          ||          D ]O}|dk     s|k    r|z  |z   }|dk     s|j        d         k    r/|
||z            |
k    r||z            }
|}|}Pq|
|
||	z   <   dk    r| z  |z  z   |z   n| z  |z   |z  z   ||	z   <   d S )NrF   r   r   r   r   rB   )r-   r1   ) rH   rI   rJ   rL   rM   rN   pwwstartwend
pool_indexrO   rP   w_indexrQ   winput_indexrR   rS   rT   rU   
dilation_wrV   r   r:   rW   pooled_widthr   rX   stride_wwidthrY   rZ   s                    r   r[   z'MaxPool._max_pool_2d.<locals>.iteration  s   f*Cf*CM**  h$7Q* <<--  B(]Xd^;F!LOj$@@D!#l!2R!7JB G G"64<< , ,q55AKK$!&vtZ!@!@ 	, 	,A 1uuU

 (*+e)a-K*Q+Q2O2O (!zVC+4E-F-K-K%+C+,=%>*+*+	, z /1F3+, )A-- F
Wu_4w>>Z'1Gf4DD 3+,,/ r   r1   r\   r/   r]   rA   r^   r_   r.   r`   r-   ra   rb   ) r   r   r   r	   r
   r   r:   r   r   r<   rc   rd   re   rf   rg   rh   ri   r[   rH   rR   rS   rT   rU   rt   rV   rW   ru   rX   rv   rw   rY   rZ   s         ```           @@@@@@@@@@@@@r   r7   zMaxPool._max_pool_2d   s    !u%9:::HV17+++'&R@@@!9 ..22q		q	$'$5$5$9$9vayyqX-&611GAJ&611GAJ%-q\
q\
!	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	F ~&& 	 	AIaLLLLt{q  NN6**,,v&&v(>(>??r   c
                 J   !"# d}
|j         d d         t          |	          z   }t          j        ||j                  }t          j        |t          j        d          }|j         }|d         }|d         t                    dk    r|d         nd!t                    dk    r|d         nd|d         t                    dk    r|d         ndt                    dk    r|d         nd|d	         |z  }|
rdn|d	         |
rdn|d          |
rdn|d         !z  z  "z  z  #|d	         |d         |d         |                                |                                |                                 !"#fd
}t          |          D ]} ||           t          | j
                  dk    r                    |          fS                     |                              |          fS )NFr    r@   rB   rC   r   r+      r   c           
      (   | (z  }| )z  }| )z  }t          !          D ]p}|%z  d         z
  }|d         z  z   }t          "          D ]@}|&z  d         z
  }|d         z  z   }	t                     D ]}
|
$z  d         z
  }|d         z  z   }|"z   z  | z  z   |
z   }d }d}d}d}t          ||          D ]}|dk     s|k    rt          ||	          D ]c}|dk     s|'k    rt          ||          D ]B}|dk     s|k    r|'z  z  |z  z   |z   }|||z            |k    r||z            }|}|}|}Cd|||z   <   #dk    r| (z  |'z  z  z   |z  z   |z   n| (z  |z   |z  z   |z  'z  z   ||z   <   Brd S )NrF   r   rl   r   )r    r   r    rB   rG   )*rH   rI   rJ   rK   rL   rM   rN   rm   rn   ro   pddstartdendrp   rO   rP   rq   d_indexrQ   rr   drs   rR   rS   rT   depth
dilation_drU   rt   rV   r   r:   pooled_depthrW   ru   r   stride_drX   rv   rw   rY   rZ   s*                         r   r[   z'MaxPool._max_pool_3d.<locals>.iterationb  s   f*Cf*Cf*CM** / /h$7Q* <<-- , ,B(]Xd^;F!LOj$@@D#L11 ) )!#h$!?%Q*(DD-<rL?PPSUU # ""$"$"$!&vtZ!@!@ 4 4A 1uuV (%*64%D%D 4 4#$q55AJJ$,).vtZ)H)H !4 !4A'(1uuU

(023e)e2Ca%i2ORS2SK')zVC+<M5NQS5S5S-3C+4E-F232323!44 46sZ/0  -11 !"F
")E/E"9!:")E/!2 #*!* !* !"F
")!*")F"2!3 #*F"2U":!; sZ/007),/ /r   rx   )$r   r   r   r	   r
   r   r:   r   r   r<   rc   rd   re   rf   rg   rh   ri   r[   rH   rR   rS   rT   r   r   rU   rt   rV   r   rW   ru   r   rX   rv   rw   rY   rZ   s$        ```           @@@@@@@@@@@@@@@@@r   r8   zMaxPool._max_pool_3d;  s    !u%9:::HV17+++'&R@@@!9 ..22q		 ..22q		q	$'$5$5$9$9vayyq$'$5$5$9$9vayyqX-&611GAJ&611GAJ&611GAJ%%'-<q\
q\
q\
4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	 4	l ~&& 	 	AIaLLLLt{q  NN6**,,v&&v(>(>??r   )NNNNNNN)__name__
__module____qualname__r   r   r6   r7   r8   r   r   r   r   r      s         (
 (
 (
 (
T~H ~H ~H@6@ 6@ 6@pK@ K@ K@Zb@ b@ b@ b@ b@r   r   )numpyr/   "onnx.reference.ops._op_common_poolr   r   r   r   r   <module>r      sm        9 9 9 9 9 9R@ R@ R@ R@ R@j R@ R@ R@ R@ R@r   