
    Si>                    N    S SK Jr  S SKrS SKrS SKJr  S SKJr   " S S\5      r	g)    )annotationsN)Base)expectc                      \ rS rSr\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\SS j5       r\SS	 j5       r\SS
 j5       r\SS j5       rSrg)NonMaxSuppression   c            	        [         R                  R                  S/ SQS/S9n [        R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q//5      R                  [        R                  5      n[        R                  " / SQ//5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " / SQ/ SQ/ SQ/5      R                  [        R                  5      n[        U UUUUU/U/SS9  g )Nr   boxesscoresmax_output_boxes_per_classiou_thresholdscore_thresholdselected_indicesinputsoutputs        r         ?r   r   g?r   g?r   皙r   ?r   g      $@r   g      &@r   333333$@r   333333&@r         Y@r        @Y@r   g      ?333333?gffffff?      ?g333333?   r$   r   r   r   r%   r   r   r   r   r      &test_nonmaxsuppression_suppress_by_IOUr   r   name	onnxhelper	make_nodenparrayastypefloat32int64r   noder   r   r   r   r   r   s          l/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnx/backend/test/case/node/nonmaxsuppression.py(export_nonmaxsuppression_suppress_by_IOU:NonMaxSuppression.export_nonmaxsuppression_suppress_by_IOU   s<   {{$$ (( % 

  )()**,	
 &
 	 <=>?FFrzzR%'XXqc]%9%9"((%C"#..rzz:((C5/00<88Y	9$EFMMbhhW* &&9	
    c            	        [         R                  R                  S/ SQS/S9n [        R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q//5      R                  [        R                  5      n[        R                  " / SQ//5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " / SQ/ SQ/5      R                  [        R                  5      n[        U UUUUU/U/SS9  g )Nr   r
   r   r   r   r   r   r   r   r   r"   r%   r$   皙?r&   r'   1test_nonmaxsuppression_suppress_by_IOU_and_scoresr+   r-   r6   s          r8   3export_nonmaxsuppression_suppress_by_IOU_and_scoresENonMaxSuppression.export_nonmaxsuppression_suppress_by_IOU_and_scores:   s:   {{$$ (( % 

  )()**,	
 &
 	 <=>?FFrzzR%'XXqc]%9%9"((%C"#..rzz:((C5/00<88Y	$:;BB288L* &&D	
r;   c            	        [         R                  R                  S/ SQS/S9n [        R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q//5      R                  [        R                  5      n[        R                  " / SQ//5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " / SQ/ SQ/ SQ/5      R                  [        R                  5      n[        U UUUUU/U/SS9  g )Nr   r
   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   )r   r!   r   r    r"   r%   r$   r   r&   r'   r(   *test_nonmaxsuppression_flipped_coordinatesr+   r-   r6   s          r8   ,export_nonmaxsuppression_flipped_coordinates>NonMaxSuppression.export_nonmaxsuppression_flipped_coordinatesf   s<   {{$$ (( % 

  )()**,	
 &
 	 <=>?FFrzzR%'XXqc]%9%9"((%C"#..rzz:((C5/00<88Y	9$EFMMbhhW* &&=	
r;   c            	        [         R                  R                  S/ SQS/S9n [        R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q//5      R                  [        R                  5      n[        R                  " / SQ//5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " / SQ/ SQ/5      R                  [        R                  5      n[        U UUUUU/U/SS9  g )Nr   r
   r   r   r   r   r   r   r   r   r"      r$   r   r&   r'   (test_nonmaxsuppression_limit_output_sizer+   r-   r6   s          r8   *export_nonmaxsuppression_limit_output_size<NonMaxSuppression.export_nonmaxsuppression_limit_output_size   s:   {{$$ (( % 

  )()**,	
 &
 	 <=>?FFrzzR%'XXqc]%9%9"((%C"#..rzz:((C5/00<88Y	$:;BB288L* &&;	
r;   c                    [         R                  R                  S/ SQS/S9n [        R                  " / SQ//5      R                  [        R                  5      n[        R                  " S///5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S	/5      R                  [        R                  5      n[        R                  " / S
Q/5      R                  [        R                  5      n[        U UUUUU/U/SS9  g )Nr   r
   r   r   r   r   r%   r$   r   r'   !test_nonmaxsuppression_single_boxr+   r-   r6   s          r8   #export_nonmaxsuppression_single_box5NonMaxSuppression.export_nonmaxsuppression_single_box   s   {{$$ (( % 

 /01299"**ESE7)$++BJJ7%'XXqc]%9%9"((%C"#..rzz:((C5/00<88YK077A* &&4	
r;   c                 "   [         R                  R                  S/ SQS/S9n [        R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/
/5      R                  [        R                  5      n[        R                  " / SQ//5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S	/5      R                  [        R                  5      n[        R                  " / S
Q/5      R                  [        R                  5      n[        U UUUUU/U/SS9  g )Nr   r
   r   r   r   )
r   r   r   r   r   r   r   r   r   r   r%   r$   r   r'   &test_nonmaxsuppression_identical_boxesr+   r-   r6   s          r8   (export_nonmaxsuppression_identical_boxes:NonMaxSuppression.export_nonmaxsuppression_identical_boxes   sI   {{$$ (( % 

  )(((((((((
 &
 	  @AB

&
 	 &(XXqc]%9%9"((%C"#..rzz:((C5/00<88YK077A* &&9	
r;   c            	        [         R                  R                  S/ SQS/SS9n [        R                  " / SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ//5      R                  [        R                  5      n[        R                  " / SQ//5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " / SQ/ SQ/ SQ/5      R                  [        R                  5      n[        U UUUUU/U/SS9  g )Nr   r
   r      )r   r   center_point_box)r$   r$   r   r   )r$   r#   r   r   )r$   r=   r   r   )r$   g      %@r   r   )r$   g333333%@r   r   )r$   g      Y@r   r   r"   r%   r$   r   r&   r'   r(   .test_nonmaxsuppression_center_point_box_formatr+   r-   r6   s          r8   0export_nonmaxsuppression_center_point_box_formatBNonMaxSuppression.export_nonmaxsuppression_center_point_box_format  s?   {{$$ (( % 
  )(())*	
 &
 	 <=>?FFrzzR%'XXqc]%9%9"((%C"#..rzz:((C5/00<88Y	9$EFMMbhhW* &&A	
r;   c            	     "   [         R                  R                  S/ SQS/S9n [        R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q//5      R                  [        R                  5      n[        R                  " / SQ/ SQ//5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " / SQ/ SQ/ SQ/ SQ/5      R                  [        R                  5      n[        U UUUUU/U/SS9  g )Nr   r
   r   r   r   r   r   r   r   r   r"   rF   r$   r   r&   r'   )r   rS   r%   )r   rS   r   "test_nonmaxsuppression_two_classesr+   r-   r6   s          r8   $export_nonmaxsuppression_two_classes6NonMaxSuppression.export_nonmaxsuppression_two_classes>  sM   {{$$ (( % 

  )()**,	
 &
 	 .0PQR

&
 	 &(XXqc]%9%9"((%C"#..rzz:((C5/00<88	9i8

&
 	 	* &&5	
r;   c            
     J   [         R                  R                  S/ SQS/S9n [        R                  " / SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q// SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q//5      R                  [        R                  5      n[        R                  " / SQ// SQ//5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " / SQ/ SQ/ SQ/ SQ/5      R                  [        R                  5      n[        U UUUUU/U/SS9  g )Nr   r
   r   r   r   r   r   r   r   r   r"   rF   r$   r   r&   r'   )rS   r   r%   )rS   r   r   "test_nonmaxsuppression_two_batchesr+   r-   r6   s          r8   $export_nonmaxsuppression_two_batches6NonMaxSuppression.export_nonmaxsuppression_two_batchesn  si   {{$$ (( % 

  )()**, )()**,
& &
' 	( ./2R1ST

&
 	 &(XXqc]%9%9"((%C"#..rzz:((C5/00<88	9i8

&
 	 	* &&5	
r;   c                 $   [         R                  R                  S/ SQS/S9n [        R                  " / SQ/ SQ//5      R                  [        R                  5      n[        R                  " SS///5      R                  [        R                  5      n[        R                  " S	/5      R                  [        R                  5      n[        R                  " S
5      n[        R                  " U/5      R                  [        R                  5      n[        R                  " S/5      R                  [        R                  5      n[        R                  " / SQ/ SQ/5      R                  [        R                  5      n[        U UUUUU/U/SS9  g)zTest boundary condition where IoU exactly equals threshold.

This test verifies that the comparison is strict (>), not inclusive (>=).
When IoU exactly equals the threshold, boxes should be KEPT, not suppressed.
This follows PyTorch's NMS implementation.
r   r
   r   r   r   )r$   r$         ?ra   r   g?r%   g$I$I?r   r'   )r   r   rS   -test_nonmaxsuppression_iou_threshold_boundaryr+   Nr-   )r7   r   r   r   	exact_iour   r   r   s           r8   /export_nonmaxsuppression_iou_threshold_boundaryANonMaxSuppression.export_nonmaxsuppression_iou_threshold_boundary  sB    {{$$ (( % 

   )(
 &
 	 S#J<.)00<%'XXqc]%9%9"((%C" JJ{+	)-44RZZ@((C5/00<88Y	$:;BB288L* &&@	
r;    N)returnNone)__name__
__module____qualname____firstlineno__staticmethodr9   r?   rC   rH   rL   rP   rV   rZ   r^   rd   __static_attributes__rf   r;   r8   r   r      s    )
 )
V )
 )
V )
 )
V )
 )
V 
 
@ /
 /
b *
 *
X -
 -
^ 5
 5
n 4
 4
r;   r   )

__future__r   numpyr1   r.   onnx.backend.test.case.baser   onnx.backend.test.case.noder   r   rf   r;   r8   <module>rs      s$    #   , .N
 N
r;   