
    h$                         S SK r S SKJrJr  S SKrS SKJr  \ R                   " S S5      5       r	 " S S5      r
S\S	\S
\\\4   4S jrS\R                  S\S\S\S\S
\4S jr " S S5      r " S S\5      rg)    N)OptionalTuple)OpRunc                   $   \ rS rSr% Sr\\R                     \S'   Sr	\
\S'   Sr\\R                     \S'   Sr\
\S'   Sr\\R                     \S'   Sr\\R                     \S	'   Sr\\R                     \S
'   Sr\
\S'   Sr\
\S'   Sr\
\S'   Srg)PrepareContext   Nboxes_data_r   boxes_size_scores_data_scores_size_max_output_boxes_per_class_score_threshold_iou_threshold_num_batches_num_classes_
num_boxes_ )__name__
__module____qualname____firstlineno__r	   r   npndarray__annotations__r
   intr   r   r   r   r   r   r   r   __static_attributes__r       c/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/reference/ops/op_non_max_suppression.pyr   r      s    (,K"**%,K)-L(2::&-L#8<"**!5<-1hrzz*1+/NHRZZ(/L#L#Jr   r   c            	       8    \ rS rSrSr S
S\S\S\SS4S jjrS	rg)SelectedIndex   batch_index_class_index_
box_index_batch_indexclass_index	box_indexreturnNc                 (    Xl         X l        X0l        g Nr"   )selfr&   r'   r(   s       r   __init__SelectedIndex.__init__   s     ('#r   )r#   r%   r$   )r   r   r   )r   r   r   r   	__slots__r   r-   r   r   r   r   r    r       s8    >I LM$$14$EH$	$ $r   r    lhsrhsr)   c                     X:  a  X4$ X4$ r+   r   )r0   r1   s     r   max_minr3   '   s    
zx8Or   
boxes_data
box_index1
box_index2center_point_boxiou_thresholdc                    X   nX   nUS:X  a  [        US   US   5      u  px[        US   US   5      u  p[        Xy5      n[        X5      nX::  a  g[        US   US   5      u  p[        US   US   5      u  nn[        X5      n[        UU5      nUU::  a  gOUS   S-  nUS   S-  nUS   S-  nUS   S-  nUS   U-
  nUS   U-   nUS   U-
  n	US   U-   n
[        Xy5      n[        X5      nX::  a  gUS   U-
  nUS   U-   nUS   U-
  nUS   U-   n[        X5      n[        UU5      nUU::  a  gX-
  UU-
  -  nUS::  a  gX-
  X-
  -  nX-
  UU-
  -  nUU-   U-
  nUS::  d  US::  d  US::  a  gUU-  nUU:  $ )Nr         F   )r3   maxmin)r4   r5   r6   r7   r8   box1box2x1_minx1_maxx2_minx2_maxintersection_x_minintersection_x_maxy1_miny1_maxy2_miny2_maxintersection_y_minintersection_y_maxbox1_width_halfbox1_height_halfbox2_width_halfbox2_height_halfintersection_areaarea1area2
union_areaintersection_over_unions                               r   suppress_by_iourV   -   s*    !D!D1 a$q'2 a$q'2 0 03 a$q'2 a$q'2 0 0!33 4 q'A+7Q;q'A+7Q;a?*a?*a?*a?* 0 03a++a++a++a++ 0 0!33+@// A_1E_&1E!22JzUaZ:?/*<"]22r   c                   F    \ rS rSrS
S\S\4S jjrS\4S jrS\	4S jr
Srg	)BoxInfos   scoreidxc                     Xl         X l        g r+   score_idx_)r,   rZ   r[   s      r   r-   BoxInfo.__init__t   s    	r   r)   c                     U R                   UR                   :  =(       d9    U R                   UR                   :H  =(       a    U R                  UR                  :  $ r+   r]   )r,   r1   s     r   __lt__BoxInfo.__lt__x   s>    {{SZZ' 
KK3::%>$))chh*>	
r   c                 <    SU R                    SU R                   S3$ )NzBoxInfo(z, )r]   )r,   s    r   __repr__BoxInfo.__repr__}   s    $++b155r   )r_   r^   N)r   )r   r   r   r   floatr   r-   boolrb   strrf   r   r   r   r   rX   rX   s   s-    e c 
T 

6# 6r   rX   c                       \ rS rSrS\S\S\S\S\\\\4   4
S jrS\S\	R                  S	\	R                  S
\	R                  S\	R                  S\	R                  4S jrS rSrg)NonMaxSuppression   pcmax_output_boxes_per_classr8   score_thresholdr)   c                     UR                   b  [        UR                   S   S5      nUR                  b  UR                  S   nUR                  b  UR                  S   nX#U4$ )Nr   )r   r=   r   r   )r,   ro   rp   r8   rq   s        r   get_thresholds_from_inputs,NonMaxSuppression.get_thresholds_from_inputs   sl     ))5),R-K-KA-NPQ)R&(--a0M* 11!4O)/IIr   boxes_tensorscores_tensor!max_output_boxes_per_class_tensoriou_threshold_tensorscore_threshold_tensorc                 P   X!l         X1l        UR                  S:w  a  XAl        UR                  S:w  a  XQl        UR                  S:w  a  Xal        UR                  Ul        UR                  Ul        UR                  nUR                  nUS   Ul	        US   Ul
        US   Ul        g )Nr   r:   )r	   r   sizer   r   r   r
   r   shaper   r   r   )	r,   ro   ru   rv   rw   rx   ry   
boxes_dimsscores_dimss	            r   prepare_compute!NonMaxSuppression.prepare_compute   s     &',11Q6-N*$$) 4!&&!+"8%**',,!''
#))$Q-%a."1r   c           
         U=(       d    U R                   n[        5       nU R                  UUUUUU5        U R                  USSS5      u  nnnUR                  S:X  a$  [
        R                  " S[
        R                  S94$ UR                  nUR                  n	/ n
[        UR                  5       GH  n[        UR                  5       GHy  nX4nX   n/ nX   nUR                  bF  [        UR                  5       H,  nUU   U:  d  M  UR                  [!        UU   U5      5        M.     O:[        UR                  5       H!  nUR                  [!        UU   U5      5        M#     [#        U5      n/ n[%        U5      S:  d  M  [%        U5      U:  d  M  US   nSnU H/  n['        UUR(                  UR(                  UU5      (       d  M-  Sn  O   U(       a6  UR                  U5        U
R                  [+        XUR(                  5      5        UR-                  5         [%        U5      S:  d  GMh  [%        U5      U:  a  M  GM|     GM     [
        R                  " [%        U
5      S4[
        R                  S9n[        UR.                  S   5       H?  nU
U   R0                  UUS4'   U
U   R2                  UUS4'   U
U   R4                  UUS	4'   MA     U4$ )
Nr   )r   )dtyperh   TFr;   r:   r<   )r7   r   r   rs   r{   r   emptyint64r	   r   ranger   r   r   r   appendrX   sortedlenrV   r_   r    popr|   r#   r$   r%   )r,   boxesscoresrp   r8   rq   r7   ro   r4   scores_dataselected_indicesr&   r'   box_score_offsetbatch_boxescandidate_boxesclass_scoresr(   sorted_boxesselected_boxes_inside_classnext_top_scoreselectedselected_indexresultis                            r   _runNonMaxSuppression._run   s    ,Dt/D/D&	
 ++B1a8		
& &**a/HHT244^^
oo
 !1K$R__5$/#= (5
 #%*<&&2%*2==%9	'	2_D+22 'Y(? K &: &+2==%9	'..#L$;YG &:
  &o6.0+ %)78;UU%1"%5N#H +F*'*//*//,)  (-H! +F  3::>J(//)+NDWDWX !$$&3 %)78;UUU7  6 2l 3/0!4BHHEv||A'A+A.;;F1a4L+A.;;F1a4L+A.99F1a4L ( yr   r   N)r   r   r   r   r   r   ri   r   rs   r   r   r   r   r   r   r   r   rm   rm      s    JJ %(J 	J
 J 
sE5 	!J$&& jj& zz	&
 ,.::& !jj& !#

&:ar   rm   )dataclassestypingr   r   numpyr   onnx.reference.op_runr   	dataclassr   r    ri   r3   r   r   rj   rV   rX   rm   r   r   r   <module>r      s     "  ' 
 
 
$ $ U uUE\': C3

C3C3 C3 	C3
 C3 
C3L6 6Q Qr   