
    jx              	       
   d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d Z4d Z5d Z6d Z7e	j8        9                    dd          d             Z:e	j8        9                    dd          d             Z;e	j8        <                    de          d             Z=e	j8        <                    de          d             Z>d Z?e	j8        j@        e	j8        9                    e( d          d                         ZAe	j8        j@        e	j8        9                    e( d          e	j8        9                     e.            d          d                                     ZBe	j8        9                    e( d          e	j8        <                    de          d                         ZCe	j8        <                    d e          d!eDd"eDd#eDd$dfd%            ZEe	j8        9                    e( d          e	j8        9                    e$pe%d&          d'                         ZFe	j8        9                    e( d          d(             ZGe	j8        <                    d)d*dg          d+             ZHd, ZIe	j8        9                    e+d-          d.             ZJd/ ZKe	j8        <                    de          deDfd0            ZLd1 ZMe	j8        9                    e( d          d2             ZNe	j8        9                    e( d          d3             ZOd4 ZPd5 ZQd6 ZRd7 ZSd8 ZTe	j8        9                    e+d9          d:             ZUd; ZVd< ZWd= ZXe	j8        j@        d>             ZYd? ZZd@ Z[e	j8        9                    e( d          dA             Z\e	j]        dB             Z^e	j8        <                    dCg dD          dE             Z_e	j8        j@        e	j8        9                    e( d          dF                         Z`dG Zae	j8        9                    e-jb        dH          e	j8        9                    e-jc        oe&oedI          dJ                         Zde	j8        9                    e3 dK          e	j8        9                    e-jb        dL          e	j8        9                    e-jc        oe&oedM          dN                                     ZedO ZfdP Zge	j8        <                    dQe          d!eDdeDd#eDd$dfdR            ZhdS )S    N)copy)Path)Image)CFGMODELMODELSSOURCESOURCES_LISTTASK_MODEL_DATA)RTDETRYOLO)	TASK2DATATASKS)load_inference_source)check_det_dataset)ARM64ASSETS
ASSETS_URLDEFAULT_CFGDEFAULT_CFG_PATH	IS_JETSONIS_RASPBERRYPILINUXLOGGERONLINEROOTWEIGHTS_DIRWINDOWSYAMLchecksis_github_action_running)download)
TORCH_1_11
TORCH_1_13c                  J    t          t                    }  | ddd           dS )z(Test the forward pass of the YOLO model.N    T)sourceimgszaugment)r   r   models    V/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/tests/test_python.pytest_model_forwardr-   *   s*    IIE	ER......    c                     t          t                    } |                     dd           |                                 } |                     t                    } |                     d           |                                  |                     d           |                                  | j	        }| j
        }| j        }| j        }dS )zVTest various methods and properties of the YOLO model to ensure correct functionality.T)verbosedetailedcpuon_train_startN)r   r   inforeset_weightsloadtofuseclear_callbackreset_callbacksnamesdevice
transformstask_map)r+   _s     r,   test_model_methodsr@   0   s    KKE 
JJtdJ+++!!EJJuE	HHUOOO	JJLLL	)***	 	AAAAAAr.   c                      ddl m}   |             }t          j        dddd          }|                    |d          }dS )	z^Test profiling of the YOLO model with `profile=True` to assess performance and resource usage.r   )DetectionModel      @   T)profileN)ultralytics.nn.tasksrB   torchrandnpredict)rB   r+   imr?   s       r,   test_model_profilerL   D   sO    333333NE	Q2r	"	"Bb$''AAAr.   c                    | dz  }t          |d          5 }t          D ]}|                    | d           	 ddd           n# 1 swxY w Y    t          t                    |d          }t          |          dk    sJ dS )zVTest YOLO predictions with file, directory, and pattern sources listed in a text file.zsources_multi_row.txtw
Nr&   r'   r(      )openr
   writer   r   len)tmp_pathfilefsrcresultss        r,   test_predict_txtrZ   M   s    --D	dC  A 	  	 CGGsJJJ	                               d5kkR000Gw<<1s   #AA
A
Tzdisabled for testing)reasonc                 h   | dz  }t          |dd          5 }t          j        |          }|                    dg           |                    d t
          D                        ddd           n# 1 swxY w Y    t          t                    |d	          }t          |          d
k    sJ dS )zITest YOLO predictions with sources listed in multiple rows of a CSV file.zsources_multi_row.csvrN    newliner'   c                     g | ]}|gS  ra   ).0rX   s     r,   
<listcomp>z.test_predict_csv_multi_row.<locals>.<listcomp>^   s    888C3%888r.   Nr&   rP   rQ   )	rR   csvwriterwriterow	writerowsr
   r   r   rT   rU   rV   rW   re   rY   s        r,   test_predict_csv_multi_rowri   W   s     --D	dC	$	$	$ :A
###88<888999: : : : : : : : : : : : : : : d5kkR000Gw<<1s   AA33A7:A7c                 (   | dz  }t          |dd          5 }t          j        |          }|                    t                     ddd           n# 1 swxY w Y    t          t                    |d          }t          |          dk    sJ dS )	zHTest YOLO predictions with sources listed in a single row of a CSV file.zsources_single_row.csvrN   r]   r^   Nr&   rP   rQ   )rR   rd   re   rf   r
   r   r   rT   rh   s        r,   test_predict_csv_single_rowrk   c   s     ..D	dC	$	$	$ &A%%%& & & & & & & & & & & & & & & d5kkR000Gw<<1s   /AAA
model_namec           
         | dk    rdnd}t          t          | z            }t          j        t	          t
                    |dk    rt          j        nt          j                  }t           |t          j
        t
                    ddd                    dk    sJ t           ||ddd                    dk    sJ t           |t          j        d	|ddf          d
                    d	k    sJ t           |||gddd                    d	k    sJ t          t           |||gddd                              d	k    sJ t           |t          j        dd|                                                              t"          j                  d
                    dk    sJ t	          t
                    t'          t
                    t(          r
t*           dnt
          |t          j
        t
                    t#          j        dd|ft"          j                  g}t           ||dd                    t          |          k    sJ dS )z^Test YOLO model predictions on various image input types and sources, including online images.zyolo11n-grayscale.ptrC   rD   )flagsTr&   )r'   saver0   r(   )r'   ro   save_txtr(      r(   )r'   ro   streamr(   @    z/zidane.jpg?token=123dtyper   )r(   classesN)r   r   cv2imreadstrr	   IMREAD_GRAYSCALEIMREAD_COLORrT   r   rR   rH   randlistzerosnumpyastypenpuint8r   r   r   )rl   channelsr+   rK   batchs        r,   test_predict_imgr   n   sE    "888qqaHz)**E	CKKx1}}s';';RURb	c	c	cBuuEJv..T4rRRRSSWXXXXXuuBTDCCCDDIIIIuuUZHb" 566bAAABBaGGGGuuRH4$bIIIJJaOOOOtEE"bTLLLMMNNRSSSSSuuU[c844::<<CCBHMMUWXXXYY]^^^^^FV06B:,,,,F

6
#sH%RX666E uuU"a00011SZZ??????r.   r+   c                 V     t          t          | z            t          dd           dS )zZTest model prediction methods with 'visualize=True' to generate prediction visualizations.r&   T)r(   	visualizeN)r   r   r	   r*   s    r,   test_predict_visualizer      s.     Du	fB$??????r.   c                 p   t          j        t                    }| dz  }| dz  }| dz  }| dz  }|                    d                              |           |                    d                              |           |                    |           |                    |           t          t                    }||||fD ]s}t          j        |          t          j        t          |                    |fD ]&} ||ddd	          }	t          |	          d
k    sJ '|                                 tdS )zbTest YOLO prediction on SOURCE converted to grayscale and 4-channel images with various filenames.zgrayscale.jpgz4ch.pngu$   non_UTF_测试文件_tést_image.jpgzimage with spaces.jpgLRGBATr&   )ro   r0   r(   rC   N)r   rR   r	   convertro   r   r   ry   rz   r{   rT   unlink)
rU   rK   source_grayscalesource_rgbasource_non_utfsource_spacesr+   rW   r'   rY   s
             r,   test_predict_gray_and_4chr      s>   	F		B/1Y&K FFN66MJJsOO)***JJvK(((GGNGGM KKE*NMI  jmmSZA%7%7: 	% 	%FeFt2FFFGw<<1$$$$$	



	 r.   zenvironment is offlinec                  4   t          d          } t          | d                   }h dfd|dz  dz                      d          D             }|fd|dz  d	z                      d          D             z  }t          |          d
k    sJ dt          |                       d |D             }|k    sJ d|z
               t	          t
                    } ||d          }t          |          d
k    sJ dt          |                       dS )zbPredict on all 12 image formats (AVIF, BMP, DNG, HEIC, JP2, JPEG, JPG, MPO, PNG, TIF, TIFF, WebP).coco12-formats.yamlpath>   bmpdngjp2jpgmpopngtifavifheicjpegtiffwebpc                 p    g | ]2}|j                                                             d           v 0|3S .suffixlowerlstriprb   rK   expecteds     r,   rc   z2test_predict_all_image_formats.<locals>.<listcomp>   s?    xxxRbiooN_N_NfNfgjNkNkowNwNwbNwNwNwr.   imagestrainz*.*c                 p    g | ]2}|j                                                             d           v 0|3S r   r   r   s     r,   rc   z2test_predict_all_image_formats.<locals>.<listcomp>   s?    wwwbRY__M^M^MeMefiMjMjnvMvMvrMvMvMvr.   val   zExpected 12 images, found c                 f    h | ].}|j                                                             d           /S r   r   )rb   imgs     r,   	<setcomp>z1test_predict_all_image_formats.<locals>.<setcomp>   s4    CCCS#*""$$++C00CCCr.   zMissing formats: r&   rr   zExpected 12 results, got N)r   r   globrT   r   r   )datadataset_pathr   
extensionsr+   rY   r   s         @r,   test_predict_all_image_formatsr      sZ   
 233DV%%L ihhHxxxxL83g=CCEJJxxxF
wwww\H4u<BB5IIwwwwFv;;"H3v;;HH DCFCCCJ!!!#Nx*7L#N#N!!! KKEeF"%%%Gw<<2I3w<<IIr.   z:No auth https://github.com/JuanBindez/pytubefix/issues/166c                      t          t                    } 	 |                     ddd           dS # t          j        j        t          f$ r"}t          j        d|            Y d}~dS d}~ww xY w)zUTest YOLO model on a YouTube video stream, handling potential network-related errors.zhttps://youtu.be/G17sBkb38XQ`   T)r(   ro   zYouTube Test Error: N)r   r   rJ   urlliberror	HTTPErrorConnectionErrorr   )r+   es     r,   test_youtuber      s    
 KKE14BTJJJJJL"O4 1 1 1/A//0000000001s   0 A-A((A-c           	         | dk    rdS t            d}t          |           } |                     |dd           |                     |ddd	           t          g d
g d          D ]_\  }}t	          j        t          dz            }|d| dz  }t	          j        |i ||d|d           |                     |d|           `dS )zTest streaming tracking on a short 10 frame video using ByteTrack tracker and different GMC methods.

    Note imgsz=160 required for tracking for higher confidence and better matches.
    yolo26n-cls.ptNz/decelera_portrait_min.mov   zbytetrack.yaml)r(   trackerzbotsort.yamlT)r(   r   save_frames)orbsiftecc)autor   r   zcfg/trackers/botsort.yamlzbotsort-.yaml)
gmc_method	with_reidr+   )r   r   trackzipr   r6   r   ro   )r+   rU   	video_urlgmcreidmdefault_argscustom_yamls          r,   test_track_streamr      s       999IKKE	KK	.>K???	KK	n$KOOO 0002T2T2TUU ? ?
Uy(C!CDD!6C!6!6!66	+e,ecPT_deeefffIS+>>>>	? ?r.   ztask,weight,datataskweightr   returnc                 l   t          |          }dD ]}|                    |d|          }|                                 |                                 |                                 |j                                         |j                                         |j                                         dS )z+Test the validation mode of the YOLO model.>   FTr&   )r   r(   plotsN)r   r   to_dfto_csvto_jsonconfusion_matrix)r   r   r   r+   r   metricss         r,   test_valr      s     LLE + +))Ru)== &&((( ''))) ((****+ +r.   z&Edge devices not intended for trainingc            	          t          t                    } |                     ddddddd            | t                     d	S )
zdTest training the YOLO model from scratch on 12 different image types in the COCO12-Formats dataset.r   rq   r&   diskrC   r+   )r   epochsr(   cacher   close_mosaicnameN)r   r   r   r	   r*   s    r,   test_train_scratchr      sD     IIE	KK*1BfTVefmtKuuu	E&MMMMMr.   c                  t    t          t          dz            } |                     t           ddd           dS )z9Test training the YOLO model using NDJSON format dataset.
yolo26n.ptz/coco8-ndjson.ndjsonrC   r&   )r   r   r(   N)r   r   r   r   r*   s    r,   test_train_ndjsonr      s=     |+,,E	KK
888"KMMMMMr.   sclsFc           
          t          t          dz            }|                    ddddddd|             |t                     d	S )
zGTest training of the YOLO model starting from a pre-trained checkpoint.yolo26n-seg.ptzcoco8-seg.yamlrC   r&   ram      ?r   )r   r   r(   r   
copy_pastemixupr   
single_clsN)r   r   r   r	   )r   r+   s     r,   test_train_pretrainedr      sY     //00E	KKar3VY`anr     
E&MMMMMr.   c                      t           dz  dz                      d          D ]K} d| j        v r,t          r$ t	          | j                  t
          d          }7t          | j                   LdS )z]Test YOLO model creation for all available YAML configurations in the `cfg/models` directory.cfgmodelsz*.yamlrtdetrru   rr   N)r   rglobr   r#   r   r	   r   )mr?   s     r,   test_all_model_yamlsr     ss    UlX%,,X66  qv 6"F16NN6555LLLL r.   zPWindows slow CI export bug https://github.com/ultralytics/ultralytics/pull/16003c                      t          t                    } |                     dddd           |                     d           |                     t
          d           |                     d           d	S )
zUTest the complete workflow including training, validation, prediction, and exporting.
coco8.yamlrC   r&   SGD)r   r   r(   	optimizerrr   torchscriptformatN)r   r   r   r   rJ   r	   exportr*   s    r,   test_workflowr    sm     KKE	KK\!2KGGG	IIBI	MM&M###	LLL&&&&&r.   c                  P   d } t          t                    }|                    d|            t          t                    }|j        }|                    |dd          }|D ]A\  }}}t          d|j                   t          d|           |j	        }t          |           BdS )	zGTest callback functionality during YOLO prediction setup and execution.c                       j         \  }}}t          |t                    r|n|g} fdt          t	          |                    D             }t           j        ||           _        dS )zKCallback function that handles operations at the end of a prediction batch.c                 (    g | ]}j         j        S ra   )datasetbs)rb   r?   	predictors     r,   rc   zQtest_predict_callback_and_setup.<locals>.on_predict_batch_end.<locals>.<listcomp>!  s    ===qi"===r.   N)r   
isinstancer   rangerT   r   rY   )r
  r   im0sr?   r	  s   `    r,   on_predict_batch_endz=test_predict_callback_and_setup.<locals>.on_predict_batch_end  sn    !dA!$--9ttD6====E#d)),<,<===	 14<<	r.   r  )r'   Tr   )rs   r(   test_callbackN)
r   r   add_callbackr   r	   r	  rJ   printshapeboxes)r  r+   r  r	  rY   rim0r  s           r,   test_predict_callback_and_setupr    s    = = = KKE	-/CDDD#6222G	BmmGDm<<G  
3osy)))or"""e	 r.   c                 (   | dk    r
t            dnt          } t          t          | z            ||gd          }|D ]R}t	          |          sJ d|  d            |                                                                }t          |t	          |          |j                   |	                    dt          j                  }|                    |d	z  d
           |                    |dz             |                    d           |                                 |                    d
           |                    d
d
|dz             |                    d
d
           t          |t	          |          |j                   TdS )zATest YOLO model results processing and output in various formats.zyolo26n-obb.ptz
/boats.jpgr   rr   'z' results should not be empty!r2   )r<   rw   zruns/tests/label.txtT)txt_file	save_confzruns/tests/crops/)save_dirrD   )decimals)	normalizezresults_plot_save.jpg)pilro   filename)confr  N)r   r	   r   r   rT   r2   r   r  r   r7   rH   float32rp   	save_cropr   r   r   plot)r+   rU   rK   rY   r  s        r,   test_resultsr$  1  s    ',/?&?&?J	"	"	"	"VB'd;&''R<<<G ! !1vv@@@5@@@@@vEEGGMMOOaQ   DDU]D33	

H'==
NNN	X(;;<<<		


			D	!!!	4dX8O-OPPP	D%%%aQ    ! !r.   c                     t           t          dz  g}  t          t          dz            | ddd          }t	          |d         j                  }|D ]xt	          j                  j        j        j	        
                                                                }t          |          dk    sJ dt          |                       |d	 d
z  }|                                sJ t          j        j                  t          d |                                                                D                       k    sJ t#          |dz                                            d D             }t'          fd|D                       sJ t          fd|D                       t          j        j                  k    sJ zdS )zLTest output from prediction args for saving YOLO detection labels and crops.z
zidane.jpgr   rt   T)r(   rp   r"  r   rq   z$Expected at least 2 detections, got zlabels/z.txtc                     g | ]}||S ra   ra   )rb   lines     r,   rc   z)test_labels_and_crops.<locals>.<listcomp>S  s    (b(b(b$]a(b(b(b(br.   cropsc                 B    g | ]}|                     d           D ]}|S )*)r   )rb   prW   s      r,   rc   z)test_labels_and_crops.<locals>.<listcomp>V  s/    @@@AAFF3KK@@qa@@@@r.   c              3   d   K   | ]*}j                             |          d  D             v V  +dS )c                     h | ]	}|j         
S ra   r   )rb   ds     r,   r   z2test_labels_and_crops.<locals>.<genexpr>.<setcomp>X  s    %@%@%@af%@%@%@r.   N)r;   get)rb   c	crop_dirsr  s     r,   	<genexpr>z(test_labels_and_crops.<locals>.<genexpr>X  sC      SSQ17;;q>>%@%@i%@%@%@@SSSSSSr.   c                 &    g | ]}|j         v |S ra   r.  )rb   rW   im_names     r,   rc   z)test_labels_and_crops.<locals>.<listcomp>Z  s%    ???!W->->A->->->r.   N)r	   r   r   r   r   r  r   stemr  clsinttolistrT   existsr   	read_text
splitlinesr   iterdirall)	imgsrY   	save_pathcls_idxslabels
crop_filesr2  r5  r  s	         @@@r,   test_labels_and_cropsrD  E  s   F\)*D.d;-..t3Y]^^^GWQZ())I V Vqv,,#7;??$$++--8}}!!!#Y#h--#Y#Y!!!4w4444}}17<  C(b(b&:J:J:L:L:W:W:Y:Y(b(b(b$c$ccccc)g-668899	@@@@@
SSSSS(SSSSSSSS????z???@@CDUDUUUUUU!V Vr.   c                 n   ddl m} ddlm} ddlm} t          D ]~}t          t          |                   	                    d          }t          d| d|             || |z  |	          }|                    d
           |                                  || dz              || dz             dS )zWTest data utility functions including dataset stats, auto-splitting, and zip archiving.r   )	autosplit)HUBDatasetStats)zip_directoryz.zipz=https://github.com/ultralytics/hub/raw/main/example_datasets/F)unzipdirr   T)ro   coco8zcoco8/images/valN)ultralytics.data.splitrF  ultralytics.data.utilsrG  ultralytics.utils.downloadsrH  r   r   r   with_suffixr"   get_jsonprocess_images)rU   rF  rG  rH  r   rV   statss          r,   test_data_utilsrT  ]  s     100000666666999999
   IdO$$0088WQUWW_djrssss4d;;;D!!!Ih !!!M(//00000r.   c                     ddl m}m} t          t           d|             || | dz  ddd            |             d	S )
zNTest dataset conversion functions from COCO to YOLO format and class mappings.r   )coco80_to_coco91_classconvert_cocoz/instances_val2017.json)rJ  yolo_labelsTF)
labels_dirr  use_segmentsuse_keypoints	cls91to80N)ultralytics.data.converterrV  rW  r"   r   )rU   rV  rW  s      r,   test_data_converterr^  r  s{     POOOOOOO
333BBBBLh&>Tafrv    r.   c                 `    ddl m}  |t          t          dz  t          dz  | dz             dS )zJTest automatic annotation of data using detection and segmentation models.r   )auto_annotater   zmobile_sam.ptauto_annotate_labels)	det_model	sam_model
output_dirN)ultralytics.data.annotatorr`  r   r   )rU   r`  s     r,   test_data_annotatorrf  ~  sS    888888M,/44	     r.   c                      ddl m}   |             }d|_        t          t                    }d|_         ||           dS )z!Test event sending functionality.r   )EventsTtestN)ultralytics.utils.eventsrh  enabledr   r   mode)rh  eventsr   s      r,   test_eventsrn    sK    //////VXXFFN
{

CCH
F3KKKKKr.   c                  N   ddl m} m}m} t	          j        t                    5   | ddiddi           ddd           n# 1 swxY w Y    |             t          j                    t          j
                            dd	          z                      d
            |d          J  |d          J  |d          J  |d          du sJ  |d          du sJ  |d          du sJ  |d          d
u sJ  |d          d
u sJ  |d          d
u sJ  |d          dk    sJ  |d          dk    sJ  |d          dk    sJ  |d          dk    sJ  |d          dk    sJ  |d           g d!k    sJ  |d"          d!k    sJ  |d#          d$d$gk    sJ  |d%          ddd&k    sJ  |d'          d'k    sJ  |d(          d(k    sJ  |d)          d)k    sJ  |d*          d*k    sJ  |d+          d+k    sJ  |d,          d,k    sJ dS )-zNTest configuration initialization utilities from the 'ultralytics.cfg' module.r   check_dict_alignmentcopy_default_cfgsmart_valuearC   brq   Nr   z
_copy.yamlF)
missing_oknoneNoneNONEtrueTTrueTRUEfalseFalseFALSE42*   z-42iz3.14gQ	@z-3.14gQ	z1e-3MbP?z	[1, 2, 3])rC   rq   rD   z	(1, 2, 3)z
[640, 640]ru   z{'a': 1, 'b': 2})rt  ru  some_stringzpath/to/filezhello worldz__import__('os').system('ls')zeval('1+1')zexec('x=1'))ultralytics.cfgrq  rr  rs  
contextlibsuppressSyntaxErrorr   cwdr   r   replacer   rp  s      r,   test_cfg_initr    s   SSSSSSSSSS		[	)	) 1 1c1XQx0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	XZZ"'//FFFNNZ_N``` ;v&&&;v&&&;v&&& ;v$&&&&;v$&&&&;v$&&&&;w5((((;w5((((;w5(((( ;t"""";u$$$$;v$&&&&;w5((((;v%'''' ;{##yyy0000;{##y0000;|$$c
2222 ;)**AA.>.>>>>> ;}%%6666;~&&.8888;}%%6666 ;677;ZZZZZ;}%%6666;}%%666666s   AAAc                  >    ddl m} m}  |               |             dS )z9Test initialization utilities in the Ultralytics library.r   get_ubuntu_versionr!   N)ultralytics.utilsr  r!   r  s     r,   test_utils_initr    s>    NNNNNNNNr.   c                      t          j        d           t          j        d           t          j        ddgd           t          j        d           t          j        dd	           t          j                     d
S )ziTest various utility checks for filenames, requirements, image sizes, display capabilities, and versions.z
yolov5n.ptr   iX  rC   )max_dimT)warnultralyticsz8.0.0N)r    check_yolov5u_filenamecheck_requirementscheck_imgszcheck_imshowcheck_version
print_argsra   r.   r,   test_utils_checksr    sz    
!,///
g&&&
Sz1----
T""""
000
r.   z3Windows profiling is extremely slow (cause unknown)c                  X    ddl m}   | dgdddd                                           dS )	zVBenchmark model performance using 'ProfileModels' from 'ultralytics.utils.benchmarks'.r   ProfileModelszyolo26n.yamlr&   rC   rD   )r(   min_timenum_timed_runsnum_warmup_runsN)ultralytics.utils.benchmarksr  runr  s    r,   test_utils_benchmarksr    sG     ;:::::M>""q\]^^^bbdddddr.   c                      ddl m}  ddlm}m}m} t          j        dddd          } | dddd          } |||gd	
            ||            |             dS )zGTest Torch utility functions including profiling and FLOP calculations.r   )Conv)get_flops_with_torch_profilerprofile_ops	time_syncrC   rE      rq   )ksrD   )nN)ultralytics.nn.modules.convr  ultralytics.utils.torch_utilsr  r  r  rH   rI   )r  r  r  r  xr   s         r,   test_utils_torchutilsr    s    000000ccccccccccAr2r""ARqAAKA3!!!!$$$IKKKKKr.   c                     ddl m} m}m}m}m}m}m}m}m	}m
}	m}
  |dt          j        dg                     t          j        dd          }t          j        | | ||                               t          j        | |	 ||                               t          j        | |  ||                               t          j        | | ||                               t          j        dd          }t          j        d          dz  |d	d	df<   t          j        | |
 ||                    d
           d	S )zJTest utility operations for coordinate transformations and normalizations.r   )	ltwh2xywh	ltwh2xyxymake_divisible	xywh2ltwh	xywh2xyxy
xywhn2xyxyxywhr2xyxyxyxy	xyxy2ltwh	xyxy2xywh
xyxy2xywhnxyxyxyxy2xywhr      
            Nr  )rtol)ultralytics.utils.opsr  r  r  r  r  r  r  r  r  r  r  rH   tensorr~   allcloserI   )r  r  r  r  r  r  r  r  r  r  r  r  s               r,   test_utils_opsr    s                             N2u|QC(()))Jr1E	N5))IIe$4$455666	N5**ZZ%6%677888	N5))IIe$4$455666	N5))IIe$4$455666Jr1E+b//B&E!!!Q$K	N5..)>)>??dKKKKKKr.   c                 "   ddl m}m}m}m}  |t
                      |t
                      |t          dz             | dz  }|                    dd            ||          5 }t          |           ddd           dS # 1 swxY w Y   dS )zMTest file handling utilities including file age, date, and paths with spaces.r   )file_age	file_dateget_latest_runspaces_in_pathrunszpath/with spacesT)parentsexist_okN)	ultralytics.utils.filesr  r  r  r  r	   r   mkdirr  )rU   r  r  r  r  r   new_paths          r,   test_utils_filesr    s    [[[[[[[[[[[[HVIfN4&=!!!((DJJtdJ+++			 h                 s   'BBBc                 \   ddl m}m} ddlm}  |t
                    } |d|          5  t          j        t
                    5   |t          j	        d          | dz             d	d	d	           n# 1 swxY w Y   d	d	d	           n# 1 swxY w Y   |j
        d
k    s
J d            d	S )z=Test torch_save backoff when _torch_save raises RuntimeError.r   )	MagicMockpatch)
torch_save)side_effectz%ultralytics.utils.patches._torch_save)newrC   ztest.ptNr  z9torch_save was not attempted the expected number of times)unittest.mockr  r  ultralytics.utils.patchesr  RuntimeErrorpytestraisesrH   r   
call_count)rU   r  r  r  mocks        r,   test_utils_patches_torch_saver    sS    /.......4444449...D	6D	A	A	A = =]<(( 	= 	=Ju{1~~x)';<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	== = = = = = = = = = = = = = = ?a!\s5   B"A5)B5A9	9B<A9	=BBBc                  V   ddl m} m}m}m}m} d\  }}t          j        d|dd          }  |||          |             |||          |             |||          |             | |          |            |||          }|                                  ||           dS )zSTest Convolutional Neural Network modules including CBAM, Conv2, and ConvTranspose.r   )CBAMConv2ConvTransposeDWConvTranspose2dFocusr     r  r  N)	r  r  r  r  r  r  rH   r   
fuse_convs)	r  r  r  r  r  c1c2r  r   s	            r,   test_nn_modules_convr  )  s    ``````````````FBAr2r""A b"a   MM"b!EE"bMM!DDHHQKKK 	b"ALLNNNAaDDDDDr.   c                  ,   ddl m} m}m}m}m} d\  }}t          j        d|dd          }  | ||          |             |||          |             |||          |             |||          |             |||          |           dS )z*Test various neural network block modules.r   )C1C3TRBottleneckCSPC3GhostC3xr  r  r  N)ultralytics.nn.modules.blockr  r  r  r  r  rH   r   )r  r  r  r  r  r  r  r  s           r,   test_nn_modules_blockr  <  s    RRRRRRRRRRRRRRFBAr2r""A BBr2JJqMMMCCBKKNNNDDRLLOOOGGBOOAMM"b!r.   c                  f    ddl m} m} ddlm}  |               |              |ddd           dS )	z%Test Ultralytics HUB functionalities.r   )export_fmts_hublogout)smart_requestGETzhttps://github.comT)progressN)ultralytics.hubr  r  ultralytics.hub.utilsr  )r  r  r  s      r,   test_hubr  K  se     87777777333333O
FHHHM%-======r.   c                  N    t          j        t          t                              S )z?Load and return an image from a predefined source (OpenCV BGR).)ry   rz   r{   r	   ra   r.   r,   imager   V  s     :c&kk"""r.   z)auto_augment, erasing, force_color_jitter))N        F)randaugmentr   T)augmixg?F)autoaugmentr  Tc                 *   ddl m}  |ddddddd|dd	d	||
          } |t          j        t	          j        | t          j                                      }|j        dk    sJ t          j	        |          sJ |j
        t          j        k    sJ dS )zJTest classification transforms during training with various augmentations.r   )classify_augmentations   )r   r   r   )g{Gz?g      ?)g      ?gUUUUUU?r   gQ?g?)sizemeanstdscaleratiohflipvflipauto_augmenthsv_hhsv_shsv_vforce_color_jittererasing)rD   r  r  N)ultralytics.data.augmentr  r   	fromarrayry   cvtColorCOLOR_BGR2RGBr  rH   	is_tensorrw   r!  )r   r  r  r  r  	transformtransformed_images          r,   test_classify_transforms_trainr  \  s     @?????&&$!-  I  "	%/#,ucFW2X2X"Y"YZZ"m3333?,-----"em333333r.   c                      t          d                              dddddd           t          d	                              d
ddddd           dS )z,Tune YOLO model for performance improvement.zyolo26n-pose.ptzcoco8-pose.yamlFr&   rC   rq   r2   )r   r   r(   r   
iterationsr<   r   
imagenet10N)r   tunera   r.   r,   test_model_tuner!    se     		  &7uBWXefot uuu	\bQR_`inooooor.   c                  j   t          t                    } t          t          dz            }t          gt          t          gfD ]p}t	          |                     |d                    t	          |          k    sJ t	          |                    |d                    t	          |          k    sJ qdS )z4Test YOLO model embeddings extraction functionality.r   r&   rP   N)r   r   r   r	   rT   embed)model_detectmodel_segmentr   s      r,   test_model_embeddingsr&    s    ;;L'7788MFF++ N N<%%U"%==>>#e**LLLL=&&e2&>>??3u::MMMMMN Nr.   z3YOLOWorld with CLIP is not supported in Python 3.12zDYOLOWorld with CLIP is not supported in Python 3.8 and aarch64 Linuxc                  Z   t          t          dz            } |                     ddg            | t          d           t          t          dz            } |                     ddd	d
d           ddlm} t          d          } |                     ddgiddgiddd	d
d|           dS )z)Test YOLO world models with CLIP support.zyolov8s-world.pttreewindow{Gz?r   zyolov8s-worldv2.ptz
dota8.yamlrC   r&   r   )r   r   r(   r   r   r   )WorldTrainerFromScratchzyolov8s-worldv2.yaml	yolo_datar   r   )r   r   r(   r   r   trainerN)r   r   set_classesr	   r   )ultralytics.models.yolo.world.train_worldr,  )r+   r,  s     r,   test_yolo_worldr2    s     1122E	vx()))	E&t3344E 
KK     RQQQQQ'((E	KK#l^4kL>=Z[['      r.   z$YOLOE with CLIP requires torch>=1.13z/YOLOE with CLIP is not supported in Python 3.12z@YOLOE with CLIP is not supported in Python 3.8 and aarch64 Linuxc                    t          t          dz            }|                    ddg            |t          d           ddlm} ddlm} t          t          j
        g d	g d
g          t          j
        ddg                    }|                    t          ||            |t          dz            }|                    dd           |                    ddd           ddlm}m}  |d          }|                    ddd|d           t          t          dg          t          dg                    }| dz  }t!          j        ||           ||fD ]'}	 |d          }|                    |	dd|d           ( |t          dz            }|                    t                      |d          }|                    dd           dS )z*Test YOLOE models with MobileCLIP support.zyoloe-11s-seg.ptpersonbusr*  r+  r   )YOLOE)YOLOEVPSegPredictor)gq=
ףk@g\y@gHzu@gQ̊@)x   i  r   i  rC   )bboxesr7  )visual_promptsr
  zcoco128-seg.yamlr&   r   r(   T)r   load_vpr(   )YOLOEPESegTrainerYOLOESegTrainerFromScratch)r   r   r   r/  r(   )r-  r.  zyoloe-data.yamlr   rV   zyoloe-11s-seg.yamlzyoloe-11s-seg-pf.ptN)r   r   r0  r	   r  r6  ultralytics.models.yolo.yoloer7  dictr   arrayrJ   r   r=  r>  r   r   ro   )
rU   r+   r6  r7  visualsr=  r>  	data_dict	data_yamlr   s
             r,   
test_yoloerF    sm    1122E	x'(((	E&t!!!!!!AAAAAA x888:N:N:NOPPHaV  G 
MM%     E+ 2233E	II%RI000	II%t2I>>> \[[[[[[[E$%%E	KK!     4+=*>???TUgThEiEiEijjjI,,II99----I& 
 
*++. 	 	
 	
 	
 	
 E+ 5566E	MM&E$%%E	II%RI00000r.   c                      t          d          } |                     ddddd           |                     dd           |                     dddd	            | t                     d
S )zFTest YOLOv10 model training, validation, and prediction functionality.zyolov10n.yamlr   rC   r&   r   r   r   r(   r   r   r;  T)r(   rp   r"  r)   N)r   r   r   rJ   r	   r*   s    r,   test_yolov10rI    sl    !!E	KK\!2AVKTTT	II<rI***	MMTT4MHHH	E&MMMMMr.   c                  $   t          d          } |                     ddddd           |                     d           t          j        dt          j        	          }|                     |dd
d
d
           |                     d           dS )zQTest YOLO model multi-channel training, validation, and prediction functionality.r   zcoco8-multispectral.yamlrC   r&   r   rH  r   )r&   r&   r  rv   Tr'   r(   rp   r"  r)   onnxr  N)r   r   r   r   r   r   rJ   r  )r+   rK   s     r,   test_multichannelrN    s    E	KK/RS[aKbbb	II-I...	,bh	/	/	/B	MM2dMSSS	LLLr.   ztask,model,datac                    | dk    rdS |t          |          j         dz  }t          |          }d|d<   t          j        ||           dD ]J}t          |d                   ||         z                      d	          D ]}|                                 Kt          |          }|                    |dd
dd           |	                    |           t          j        dt          j                  }|                    |d
ddd           |                    d          }t          ||           }|                    |d
           dS )zMTest YOLO model grayscale training, validation, and prediction functionality.classifyNz-grayscale.yamlrC   r   r?  >   r   r   r   z*.npyr&   r   rH  rK  )r&   r&   rC   rv   TrL  rM  r  rK  rP   )r   r6  r   r   ro   r   r   r   r   r   r   r   r   rJ   r  )	r   r+   r   rU   grayscale_datasplitnpy_filerK   export_models	            r,   test_grayscalerU    sd    z4::? C C CCNT""DDI4n----!  d6l++d5k9??HH 	 	HOO	 KKE	KK^ARauKUUU	II>I"""	+RX	.	.	.B	MM2dMSSS<<v<..LD)))E	MM2M&&&&&r.   )ir  rd   r   r   pathlibr   ry   r   r   r  rH   PILr   testsr   r   r   r	   r
   r   r  r   r   r  r   r   ultralytics.data.buildr   rN  r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   rO  r"   r  r#   r$   r-   r@   rL   rZ   markskipifri   rk   parametrizer   r   r   slowr   r   r   r{   r   r   r   r   r   r  r  r$  rD  rT  r^  rf  rn  r  r  r  r  r  r  r  r  r  r  r  fixturer   r  r!  r&  IS_PYTHON_3_12IS_PYTHON_3_8r2  rF  rI  rN  rU  ra   r.   r,   <module>ra     sx	       



              



             K K K K K K K K K K K K K K K K $ $ $ $ $ $ $ $ , , , , , , , , 8 8 8 8 8 8 4 4 4 4 4 4                                   $ 1 0 0 0 0 0 @ @ @ @ @ @ @ @/ / /  (( ( (   D!788  98 D!788  98 v..@ @ /.@, &))@ @ *)@
  . J'?@@J J A@ J, J'?@@,,..7stt1 1 ut A@ 1 J'?@@&))? ? *) A@?( +_==+3 + +3 +4 + + + >=+ J'?@@I/8`aa  ba A@ J'?@@N N A@N %//  0/   G$vww' ' xw'  . &))! ! ! ! *)!&V V V0 J'?@@1 1 A@1( J'?@@  A@	 	 	  /7 /7 /7d     G$YZZe e [Ze
 
 
L L L:   ] ] ]	 	 	&   J'?@@> > A@> # # #
 /   4 4 46 J'?@@p p A@ pN N N F)2ghh
,U,uQ    	  ih
> 
N+QRRF)2cdd
,U,uM   <1 <1	  ed SR<1~        *O<<' 'S ' '$ ' ' ' =<' ' 'r.   