
    bIg*                    N    d dl mZ d dlZd dlmZ  G d d      Z G d de      Zy)    )annotationsN)OpRunc                      e Zd ZddZddZy)PreCalcc	                t    || _         || _        || _        || _        || _        || _        || _        || _        y )Npos1pos2pos3pos4w1w2w3w4)	selfr	   r
   r   r   r   r   r   r   s	            \/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/reference/ops/op_roi_align.py__init__zPreCalc.__init__   s:    				    c                    d| j                    d| j                   d| j                   d| j                   d| j                   d| j
                   d| j                   d| j                   dS )NzPreCalc(,)r   )r   s    r   __repr__zPreCalc.__repr__   sk    $))Adii[$))Adii[$''RSTXT[T[S\\]^b^e^e]ffghlhohogppqrrr   N)r   r   r   r   r   r   r   r   )returnstr)__name__
__module____qualname__r   r    r   r   r   r      s    sr   r   c                  x    e Zd Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 	 	 	 	 dd       Z	 	 	 	 	 	 ddZy)RoiAlignc                n   d}t        |      D ]  }t        |      D ]  }t        |      D ]  }|||z  z   |dz   |z  |
z  z   }t        |      D ]Z  }|||	z  z   |dz   |	z  |z  z   }|}|}|dk  s|| kD  s
|dk  s||kD  rC||   }d|_        d|_        d|_        d|_        d|_        d|_        d|_        d|_        |dz  }st        |d      }t        |d      }t        |      }t        |      }|| dz
  k\  r
| dz
  x}}|}n|dz   }||dz
  k\  r
|dz
  x}}|}n|dz   }||z
  }||z
  }d|z
  }d|z
  }||z  }||z  } ||z  }!||z  }"t               }||z  |z   |_        ||z  |z   |_        ||z  |z   |_        ||z  |z   |_        ||_        | |_        |!|_        |"|_        |||<   |dz  }]    y )Nr         ?g               ?)ranger	   r
   r   r   r   r   r   r   maxintr   )#heightwidthpooled_heightpooled_widthiy_upperix_upperroi_start_hroi_start_w
bin_size_h
bin_size_wroi_bin_grid_hroi_bin_grid_wpre_calcpre_calc_indexphpwiyyyixxxxypcy_lowx_lowy_highx_highlylxhyhxr   r   r   r   s#                                      r   !pre_calc_for_bilinear_interpolatez*RoiAlign.pre_calc_for_bilinear_interpolate   sc     & F	,BL) E,/ D,B#z/*8z1NBC 
 $Ho >,' :o.!Cx:5FG  t8q6zQXU!).!9B&'BG&'BG&'BG&'BG$%BE$%BE$%BE$%BE*a/N$1I1I #A #A FQJ.-3aZ7FU %A%*QYF EAI--2QY6FU %A%*QYFYY 2X 2X"W"W"W"W %Y"'%-%"7"'%-&"8"(5.5"8"(5.6"9 " " " "350&!+}>,D,E,F	,r   c                   | d   }| d   }| d   }| d   }t        |      D ],  }||z  |z  |z  }||z  }||   }|
rdnd}||dz      |z  |z
  }||dz      |z  |z
  }||dz      |z  |z
  }||dz      |z  |z
  }||z
  }||z
  }|
st        |d      }t        |d      }||z  }||z  }|dkD  rt        |      n t        t        j                  ||z              }|dkD  rt        |      n t        t        j                  ||z              }t        t        ||z  d            }t        ||z  |z  |z        D  cg c]  } t                }!} t        j                  |||||||||||||!       t        |      D ]  }"||"|z  |z  z   }#t        ||z  |"z   |z  |z        }$d}%t        |      D ]  }&t        |      D ]  }'|#|&|z  z   |'z   }(d})|	dk(  rt        |      D ]  }*t        |      D ]  }+|!|%   },|)|,j                  ||$|,j                  z      z  |,j                  ||$|,j                  z      z  z   |,j                  ||$|,j                  z      z  z   |,j                  ||$|,j                  z      z  z   z  })|%dz  }%  |)|z  })nd	}-t        |      D ]  }*t        |      D ]  }+|!|%   },t        |,j                  ||$|,j                  z      z  |,j                  ||$|,j                  z      z  |,j                  ||$|,j                  z      z  |,j                  ||$|,j                  z      z        }.|-s|.})d
}-nt        |)|.      })|%dz  }%  |)||(<      / y c c} w )Nr   r#         r"   g        r$   avgFT)r%   r&   r'   npceilr   r    rG   r   r	   r   r
   r   r   r   r   )/output_shapebottom_dataspatial_scaler(   r)   sampling_ratiobottom_roisnum_roi_colstop_datamode
half_pixelbatch_indices_ptrn_roischannelsr*   r+   nindex_noffset_bottom_roisroi_batch_indoffsetr/   r.   	roi_end_w	roi_end_h	roi_width
roi_heightr0   r1   r2   r3   countir4   c	index_n_coffset_bottom_datar5   r6   r7   index
output_val_iy_ixr>   max_flagvals/                                                  r   roi_align_forwardzRoiAlign.roi_align_forwardt   s{    a?$Q#A v s	5A(l\1MAG "#\!1-a0M 'SCF%&81&<=MPVVK%&81&<=MPVVK#$6$:;mKfTI#$6$:;mKfTI!K/I"[0J	3/	 S1
#m3J"\1J
 "A% N#m!;<=  "A% N#\!9:;  N^;Q?@E "^3lB]R 	H  66  8_ 45#a,&6&FF	%("X-1V;eC&" "#. ,5B#L1 +5 )B,= = B%(
5=',^'< 8+0+@ !8C)1.)AB$.(**56H2776R*S)T*,%%*56H2776R*S+T)T +-%%*56H2776R*S+T	)T +-%%*56H2776R*S+T)T	%&J %3a$7N!88 '%/J',H',^'< 8+0+@ !8C)1.)AB*-(**56H2776R*S)T(**56H2776R*S)T(**56H2776R*S)T(**56H2776R*S)T	+&C ,458
3758S5I
$2a$7N#!88( +5W+5,545s	5Rs   5MNc
                   |xs | j                   }|xs | j                  }|xs | j                  }|xs | j                  }|xs | j                  }|	xs | j
                  }	|j                  d   }
|j                  d   }|j                  d   }||
||f}t        j                  ||j                        j                         }| j                  ||j                         |	|j                  d   |j                  d   ||j                         |||j                         |j                         dk(  |j                                |j                  |      j                  |j                        fS )Nr#   r   )dtyperI   rJ   rV   )coordinate_transformation_moderU   output_heightoutput_widthrQ   rP   shaperL   emptyrp   flattenrn   lowerreshapeastype)r   Xroisbatch_indicesrq   rU   rr   rs   rQ   rP   num_channelsnum_roisrS   y_dimsYs                  r   _runzRoiAlign._run   sJ    +Qd.Q.Q 	'  tyy%;););#8t'8'8'>4+>+>%;););wwqz &&q)zz!}L-FHHV177+335IIKGGAJGGAJLLNJJL*002lB!!#	
 		&!((133r   )r(   r'   r)   r'   r*   r'   r+   r'   r,   r'   r-   r'   r2   r'   r3   r'   )
rN   ztuple[int, int, int, int]r(   r'   r)   r'   rS   r'   rV   bool)NNNNNN)r   r   r   staticmethodrG   rn   r   r   r   r   r    r       s    V,V,V, V, 	V,
 V, V, V, V, V,p G5/G5 	G5
 G5 G5 G5 G5\ (,*4r   r    )
__future__r   numpyrL   onnx.reference.op_runr   r   r    r   r   r   <module>r      s*    #  's sN4u N4r   