§
    1�Åj{@  ã                  óV   — d dl mZ d dlZd dlZd dlmZ d dlmZ  G d„ de¦  «        Z	dS )é    )ÚannotationsN)ÚBase)Úexpectc                  óþ   — e Zd Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Z	edd	„¦   «         Z
edd
„¦   «         Zedd„¦   «         Zedd„¦   «         ZdS )ÚNonMaxSuppressionÚreturnÚNonec            	     ó  — t           j                             dg d¢dg¬¦  «        } t          j        g d¢g d¢g d¢g d¢g d	¢g d
¢gg¦  «                             t          j        ¦  «        }t          j        g d¢gg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        g d¢g d¢g d¢g¦  «                             t          j        ¦  «        }t          | |||||g|gd¬¦  «         d S )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          ú^C:\Projects\Historical\venv\Lib\site-packages\onnx/backend/test/case/node/nonmaxsuppression.pyÚ(export_nonmaxsuppression_suppress_by_IOUz:NonMaxSuppression.export_nonmaxsuppression_suppress_by_IOU   s£  € åŒ{×$Ò$Øðð ð ð (Ð(ð %ñ 

ô 

ˆõ ”ð )Ð(Ð(Ø(Ð(Ð(Ø)Ð)Ð)Ø*Ð*Ð*Ø*Ð*Ð*Ø,Ð,Ð,ðð	ñ
ô 
÷ Š&•”Ñ
Ô
ð 	õ ”Ð<Ð<Ð<Ð=Ð>Ñ?Ô?×FÒFÅrÄzÑRÔRˆÝ%'¤X¨q¨c¡]¤]×%9Ò%9½"¼(Ñ%CÔ%CÐ"Ýœ # ™œ×.Ò.­r¬zÑ:Ô:ˆÝœ( C 5™/œ/×0Ò0µ´Ñ<Ô<ˆÝœ8 Y Y Y°	°	°	¸9¸9¸9Ð$EÑFÔF×MÒMÍbÌhÑWÔWÐåØàØØ*ØØðð &Ð&Ø9ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
ó    c            	     ó  — t           j                             dg d¢dg¬¦  «        } t          j        g d¢g d¢g d¢g d¢g d	¢g d
¢gg¦  «                             t          j        ¦  «        }t          j        g d¢gg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        g d¢g d¢g¦  «                             t          j        ¦  «        }t          | |||||g|gd¬¦  «         d S )Nr   r   r   r   r   r   r   r   r   r    r#   r&   r%   çš™™™™™Ù?r'   r(   Ú1test_nonmaxsuppression_suppress_by_IOU_and_scoresr,   r.   r7   s          r9   Ú3export_nonmaxsuppression_suppress_by_IOU_and_scoreszENonMaxSuppression.export_nonmaxsuppression_suppress_by_IOU_and_scores:   s�  € åŒ{×$Ò$Øðð ð ð (Ð(ð %ñ 

ô 

ˆõ ”ð )Ð(Ð(Ø(Ð(Ð(Ø)Ð)Ð)Ø*Ð*Ð*Ø*Ð*Ð*Ø,Ð,Ð,ðð	ñ
ô 
÷ Š&•”Ñ
Ô
ð 	õ ”Ð<Ð<Ð<Ð=Ð>Ñ?Ô?×FÒFÅrÄzÑRÔRˆÝ%'¤X¨q¨c¡]¤]×%9Ò%9½"¼(Ñ%CÔ%CÐ"Ýœ # ™œ×.Ò.­r¬zÑ:Ô:ˆÝœ( C 5™/œ/×0Ò0µ´Ñ<Ô<ˆÝœ8 Y Y Y°	°	°	Ð$:Ñ;Ô;×BÒBÅ2Ä8ÑLÔLÐåØàØØ*ØØðð &Ð&ØDð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r;   c            	     ó  — t           j                             dg d¢dg¬¦  «        } t          j        g d¢g d¢g d¢g d¢g d	¢g d
¢gg¦  «                             t          j        ¦  «        }t          j        g d¢gg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        g d¢g d¢g d¢g¦  «                             t          j        ¦  «        }t          | |||||g|gd¬¦  «         d S )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.   r7   s          r9   Ú,export_nonmaxsuppression_flipped_coordinatesz>NonMaxSuppression.export_nonmaxsuppression_flipped_coordinatesf   s£  € åŒ{×$Ò$Øðð ð ð (Ð(ð %ñ 

ô 

ˆõ ”ð )Ð(Ð(Ø(Ð(Ð(Ø)Ð)Ð)Ø*Ð*Ð*Ø*Ð*Ð*Ø,Ð,Ð,ðð	ñ
ô 
÷ Š&•”Ñ
Ô
ð 	õ ”Ð<Ð<Ð<Ð=Ð>Ñ?Ô?×FÒFÅrÄzÑRÔRˆÝ%'¤X¨q¨c¡]¤]×%9Ò%9½"¼(Ñ%CÔ%CÐ"Ýœ # ™œ×.Ò.­r¬zÑ:Ô:ˆÝœ( C 5™/œ/×0Ò0µ´Ñ<Ô<ˆÝœ8 Y Y Y°	°	°	¸9¸9¸9Ð$EÑFÔF×MÒMÍbÌhÑWÔWÐåØàØØ*ØØðð &Ð&Ø=ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r;   c            	     ó  — t           j                             dg d¢dg¬¦  «        } t          j        g d¢g d¢g d¢g d¢g d	¢g d
¢gg¦  «                             t          j        ¦  «        }t          j        g d¢gg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        g d¢g d¢g¦  «                             t          j        ¦  «        }t          | |||||g|gd¬¦  «         d S )Nr   r   r   r   r   r   r   r   r   r    r#   é   r%   r   r'   r(   Ú(test_nonmaxsuppression_limit_output_sizer,   r.   r7   s          r9   Ú*export_nonmaxsuppression_limit_output_sizez<NonMaxSuppression.export_nonmaxsuppression_limit_output_size’   s�  € åŒ{×$Ò$Øðð ð ð (Ð(ð %ñ 

ô 

ˆõ ”ð )Ð(Ð(Ø(Ð(Ð(Ø)Ð)Ð)Ø*Ð*Ð*Ø*Ð*Ð*Ø,Ð,Ð,ðð	ñ
ô 
÷ Š&•”Ñ
Ô
ð 	õ ”Ð<Ð<Ð<Ð=Ð>Ñ?Ô?×FÒFÅrÄzÑRÔRˆÝ%'¤X¨q¨c¡]¤]×%9Ò%9½"¼(Ñ%CÔ%CÐ"Ýœ # ™œ×.Ò.­r¬zÑ:Ô:ˆÝœ( C 5™/œ/×0Ò0µ´Ñ<Ô<ˆÝœ8 Y Y Y°	°	°	Ð$:Ñ;Ô;×BÒBÅ2Ä8ÑLÔLÐåØàØØ*ØØðð &Ð&Ø;ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r;   c                 óè  — t           j                             dg d¢dg¬¦  «        } t          j        g d¢gg¦  «                             t          j        ¦  «        }t          j        dggg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        d	g¦  «                             t          j        ¦  «        }t          j        g d
¢g¦  «                             t          j        ¦  «        }t          | |||||g|gd¬¦  «         d S )Nr   r   r   r   r   r   r&   r%   r   r(   Ú!test_nonmaxsuppression_single_boxr,   r.   r7   s          r9   Ú#export_nonmaxsuppression_single_boxz5NonMaxSuppression.export_nonmaxsuppression_single_box¾   sR  € åŒ{×$Ò$Øðð ð ð (Ð(ð %ñ 

ô 

ˆõ ”Ð/Ð/Ð/Ð0Ð1Ñ2Ô2×9Ò9½"¼*ÑEÔEˆÝ”˜S˜E˜7˜)Ñ$Ô$×+Ò+­B¬JÑ7Ô7ˆÝ%'¤X¨q¨c¡]¤]×%9Ò%9½"¼(Ñ%CÔ%CÐ"Ýœ # ™œ×.Ò.­r¬zÑ:Ô:ˆÝœ( C 5™/œ/×0Ò0µ´Ñ<Ô<ˆÝœ8 Y Y Y KÑ0Ô0×7Ò7½¼ÑAÔAÐåØàØØ*ØØðð &Ð&Ø4ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó   — t           j                             dg d¢dg¬¦  «        } t          j        g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
g¦  «                             t          j        ¦  «        }t          j        g d¢gg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        d	g¦  «                             t          j        ¦  «        }t          j        g d
¢g¦  «                             t          j        ¦  «        }t          | |||||g|gd¬¦  «         d S )Nr   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   r&   r%   r   r(   Ú&test_nonmaxsuppression_identical_boxesr,   r.   r7   s          r9   Ú(export_nonmaxsuppression_identical_boxesz:NonMaxSuppression.export_nonmaxsuppression_identical_boxesß   sÂ  € åŒ{×$Ò$Øðð ð ð (Ð(ð %ñ 

ô 

ˆõ ”ð )Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(ððñ
ô 
÷ Š&•”Ñ
Ô
ð 	õ  ”Ø@Ð@Ð@ÐAÐBñ
ô 
ç
Š&•”Ñ
Ô
ð 	õ &(¤X¨q¨c¡]¤]×%9Ò%9½"¼(Ñ%CÔ%CÐ"Ýœ # ™œ×.Ò.­r¬zÑ:Ô:ˆÝœ( C 5™/œ/×0Ò0µ´Ñ<Ô<ˆÝœ8 Y Y Y KÑ0Ô0×7Ò7½¼ÑAÔAÐåØàØØ*ØØðð &Ð&Ø9ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r;   c            	     ó  — t           j                             dg d¢dgd¬¦  «        } t          j        g d¢g d¢g d¢g d	¢g d
¢g d¢gg¦  «                             t          j        ¦  «        }t          j        g d¢gg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        g d¢g d¢g d¢g¦  «                             t          j        ¦  «        }t          | |||||g|gd¬¦  «         d S )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.   r7   s          r9   Ú0export_nonmaxsuppression_center_point_box_formatzBNonMaxSuppression.export_nonmaxsuppression_center_point_box_format  s¦  € åŒ{×$Ò$Øðð ð ð (Ð(Øð %ñ 
ô 
ˆõ ”ð )Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(Ø)Ð)Ð)Ø)Ð)Ð)Ø*Ð*Ð*ðð	ñ
ô 
÷ Š&•”Ñ
Ô
ð 	õ ”Ð<Ð<Ð<Ð=Ð>Ñ?Ô?×FÒFÅrÄzÑRÔRˆÝ%'¤X¨q¨c¡]¤]×%9Ò%9½"¼(Ñ%CÔ%CÐ"Ýœ # ™œ×.Ò.­r¬zÑ:Ô:ˆÝœ( C 5™/œ/×0Ò0µ´Ñ<Ô<ˆÝœ8 Y Y Y°	°	°	¸9¸9¸9Ð$EÑFÔF×MÒMÍbÌhÑWÔWÐåØàØØ*ØØðð &Ð&ØAð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r;   c            	     ó   — t           j                             dg d¢dg¬¦  «        } t          j        g d¢g d¢g d¢g d¢g d	¢g d
¢gg¦  «                             t          j        ¦  «        }t          j        g d¢g d¢gg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        g d¢g d¢g d¢g d¢g¦  «                             t          j        ¦  «        }t          | |||||g|gd¬¦  «         d S )Nr   r   r   r   r   r   r   r   r   r    r#   rD   r%   r   r'   r(   )r   rN   r&   )r   rN   r   Ú"test_nonmaxsuppression_two_classesr,   r.   r7   s          r9   Ú$export_nonmaxsuppression_two_classesz6NonMaxSuppression.export_nonmaxsuppression_two_classes>  sÂ  € åŒ{×$Ò$Øðð ð ð (Ð(ð %ñ 

ô 

ˆõ ”ð )Ð(Ð(Ø(Ð(Ð(Ø)Ð)Ð)Ø*Ð*Ð*Ø*Ð*Ð*Ø,Ð,Ð,ðð	ñ
ô 
÷ Š&•”Ñ
Ô
ð 	õ ”Ø.Ð.Ð.Ð0PÐ0PÐ0PÐQÐRñ
ô 
ç
Š&•”Ñ
Ô
ð 	õ &(¤X¨q¨c¡]¤]×%9Ò%9½"¼(Ñ%CÔ%CÐ"Ýœ # ™œ×.Ò.­r¬zÑ:Ô:ˆÝœ( C 5™/œ/×0Ò0µ´Ñ<Ô<ˆÝœ8ØˆYˆY˜	˜	˜	 9 9 9¨i¨i¨iÐ8ñ
ô 
ç
Š&•”Ñ
Ô
ð 	õ 	ØàØØ*ØØðð &Ð&Ø5ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r;   c            
     óH  — t           j                             dg d¢dg¬¦  «        } t          j        g d¢g d¢g d¢g d¢g d	¢g d
¢gg d¢g d¢g d¢g d¢g d	¢g d
¢gg¦  «                             t          j        ¦  «        }t          j        g d¢gg d¢gg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        g d¢g d¢g d¢g d¢g¦  «                             t          j        ¦  «        }t          | |||||g|gd¬¦  «         d S )Nr   r   r   r   r   r   r   r   r   r    r#   rD   r%   r   r'   r(   )rN   r   r&   )rN   r   r   Ú"test_nonmaxsuppression_two_batchesr,   r.   r7   s          r9   Ú$export_nonmaxsuppression_two_batchesz6NonMaxSuppression.export_nonmaxsuppression_two_batchesn  s  € åŒ{×$Ò$Øðð ð ð (Ð(ð %ñ 

ô 

ˆõ ”ð )Ð(Ð(Ø(Ð(Ð(Ø)Ð)Ð)Ø*Ð*Ð*Ø*Ð*Ð*Ø,Ð,Ð,ðð )Ð(Ð(Ø(Ð(Ð(Ø)Ð)Ð)Ø*Ð*Ð*Ø*Ð*Ð*Ø,Ð,Ð,ððñ
ô 
÷& Š&•”Ñ
Ô
ð' 	õ( ”Ø.Ð.Ð.Ð/Ð2RÐ2RÐ2RÐ1SÐTñ
ô 
ç
Š&•”Ñ
Ô
ð 	õ &(¤X¨q¨c¡]¤]×%9Ò%9½"¼(Ñ%CÔ%CÐ"Ýœ # ™œ×.Ò.­r¬zÑ:Ô:ˆÝœ( C 5™/œ/×0Ò0µ´Ñ<Ô<ˆÝœ8ØˆYˆY˜	˜	˜	 9 9 9¨i¨i¨iÐ8ñ
ô 
ç
Š&•”Ñ
Ô
ð 	õ 	ØàØØ*ØØðð &Ð&Ø5ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r;   c                 ó  — t           j                             dg d¢dg¬¦  «        } t          j        g d¢g d¢gg¦  «                             t          j        ¦  «        }t          j        ddggg¦  «                             t          j        ¦  «        }t          j        d	g¦  «                             t          j        ¦  «        }t          j        d
¦  «        }t          j        |g¦  «                             t          j        ¦  «        }t          j        dg¦  «                             t          j        ¦  «        }t          j        g d¢g d¢g¦  «                             t          j        ¦  «        }t          | |||||g|gd¬¦  «         dS )a  Test 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%   ç      ø?rY   r   gš™™™™™é?r&   g’$I’$IÂ?r   r(   )r   r   rN   Ú-test_nonmaxsuppression_iou_threshold_boundaryr,   Nr.   )r8   r   r   r   Ú	exact_iour   r   r   s           r9   Ú/export_nonmaxsuppression_iou_threshold_boundaryzANonMaxSuppression.export_nonmaxsuppression_iou_threshold_boundary¦  s‰  € õ Œ{×$Ò$Øðð ð ð (Ð(ð %ñ 

ô 

ˆõ  ”ð )Ð(Ð(Ø(Ð(Ð(ððñ
ô 
÷ Š&•”Ñ
Ô
ð 	õ ”˜S #˜J˜<˜.Ñ)Ô)×0Ò0µ´Ñ<Ô<ˆÝ%'¤X¨q¨c¡]¤]×%9Ò%9½"¼(Ñ%CÔ%CÐ"õ ”J˜{Ñ+Ô+ˆ	Ýœ ) Ñ-Ô-×4Ò4µR´ZÑ@Ô@ˆÝœ( C 5™/œ/×0Ò0µ´Ñ<Ô<ˆåœ8 Y Y Y°	°	°	Ð$:Ñ;Ô;×BÒBÅ2Ä8ÑLÔLÐåØàØØ*ØØðð &Ð&Ø@ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r;   N)r   r	   )Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr:   r?   rB   rF   rI   rL   rQ   rT   rW   r\   © r;   r9   r   r      s[  € € € € € Øð)
ð )
ð )
ñ „\ð)
ðV ð)
ð )
ð )
ñ „\ð)
ðV ð)
ð )
ð )
ñ „\ð)
ðV ð)
ð )
ð )
ñ „\ð)
ðV ð
ð 
ð 
ñ „\ð
ð@ ð/
ð /
ð /
ñ „\ð/
ðb ð*
ð *
ð *
ñ „\ð*
ðX ð-
ð -
ð -
ñ „\ð-
ð^ ð5
ð 5
ð 5
ñ „\ð5
ðn ð4
ð 4
ð 4
ñ „\ð4
ð 4
ð 4
r;   r   )
Ú
__future__r   Únumpyr2   r/   Úonnx.backend.test.case.baser   Úonnx.backend.test.case.noder   r   ra   r;   r9   ú<module>rf      s�   ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø .Ð .Ð .Ð .Ð .Ð .ðN
ð N
ð N
ð N
ð N
˜ñ N
ô N
ð N
ð N
ð N
r;   