
    jx              	          d dl 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 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/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6 d Z7d Z8d Z9d Z:d Z;ej<        =                    dd          d             Z>ej<        =                    dd          d             Z?ej<        @                    de          d             ZAej<        @                    de          d             ZBd ZCej<        jD        ej<        =                    e* d          d                         ZEej<        jD        ej<        =                    e* d          ej<        =                     e0            d          d                                     ZFej<        =                    e* d          ej<        @                    de          d                          ZGej<        @                    d!e          d"eHd#eHd$eHd%dfd&            ZIej<        =                    e* d          ej<        =                    e&pe'd'          d(                         ZJej<        =                    e* d          d)             ZKej<        @                    d*d+dg          d,             ZLd- ZMej<        =                    e-d.          d/             ZNd0 ZOej<        @                    de          deHfd1            ZPd2 ZQej<        =                    e* d          d3             ZRd4 ZSd5 ZTd6 ZUej<        =                    e* d          d7             ZVd8 ZWd9 ZXd: ZYd; ZZd< Z[ej<        =                    e-d=          d>             Z\d? Z]d@ Z^dA Z_ej<        jD        dB             Z`dC ZadD Zbej<        =                    e* d          dE             Zcejd        dF             Zeej<        @                    dGg dH          dI             Zfej<        jD        ej<        =                    e* d          dJ                         Zgej<        jD        ej<        =                    e* pe/jh         d          ej<        =                     e/ji        dKd+L           dM          dN                                     ZjdO Zkej<        =                    e/jl        dP          ej<        =                    e/jm        oe(oe!dQ          dR                         Znej<        =                    e6 dS          ej<        =                    e/jl        dT          ej<        =                    e/jm        oe(oe!dU          dV                                     ZodW ZpdX Zqej<        @                    dYe          d"eHdeHd$eHd%dfdZ            Zrd[ Zsd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safe_download)
TORCH_1_11
TORCH_1_13c                  @    t           rt          j        d           dS dS )zKSkip semantic segmentation tests on Raspberry Pi due to memory constraints.zRSemantic segmentation tests are skipped on Raspberry Pi due to memory constraints.N)r   pytestskip     T/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/tests/test_python.pyskip_rpi_semanticr,   ,   s.     jhiiiiij jr*   c                  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    r+   test_model_forwardr4   2   s*    IIE	ER......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)r3   _s     r+   test_model_methodsrF   8   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.tasksrH   torchrandnpredict)rH   r3   imrE   s       r+   test_model_profilerR   L   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t          |                       dS )	zVTest YOLO predictions with file, directory, and pattern sources listed in a text file.zsources_multi_row.txtw
Nr.   r/   r0      z)Expected 7 results from source list, got )openr
   writer   r   len)tmp_pathfilefsrcresultss        r+   test_predict_txtr`   U   s    --D	dC  A 	  	 CGGsJJJ	                               d5kkR000Gw<<1X#g,,XXs   #AA
A
Tzdisabled for testing)reasonc                    | 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t          |                       dS )zITest YOLO predictions with sources listed in multiple rows of a CSV file.zsources_multi_row.csvrT    newliner/   c                     g | ]}|gS r)   r)   ).0r^   s     r+   
<listcomp>z.test_predict_csv_multi_row.<locals>.<listcomp>f   s    888C3%888r*   Nr.   rV   rW   z+Expected 7 results from multi-row CSV, got )	rX   csvwriterwriterow	writerowsr
   r   r   rZ   r[   r\   r]   rj   r_   s        r+   test_predict_csv_multi_rowrn   _   s    --D	dC	$	$	$ :A
###88<888999: : : : : : : : : : : : : : : d5kkR000Gw<<1ZCPWLLZZs   AA33A7:A7c                 X   | 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	t          |                       dS )
zHTest YOLO predictions with sources listed in a single row of a CSV file.zsources_single_row.csvrT   rc   rd   Nr.   rV   rW   z,Expected 7 results from single-row CSV, got )rX   ri   rj   rk   r
   r   r   rZ   rm   s        r+   test_predict_csv_single_rowrp   k   s     ..D	dC	$	$	$ &A%%%& & & & & & & & & & & & & & & d5kkR000Gw<<1[SQX\\[[s   /AAA
model_namec           
         t           r| dk    rt                       | 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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.yolo26n-sem.ptzyolo11n-grayscale.ptrI   rJ   )flagsTr.   )r/   saver6   r0   )r/   ru   save_txtr0      r0   )r/   ru   streamr0   @    zKhttps://cdn.jsdelivr.net/gh/ultralytics/assets@main/im/zidane.jpg?token=123dtyper   )r0   classesN)r   r,   r   r   cv2imreadstrr	   IMREAD_GRAYSCALEIMREAD_COLORrZ   r   rX   rN   randlistzerosnumpyastypenpuint8r   r   )rq   channelsr3   rQ   batchs        r+   test_predict_imgr   v   s]     *(888"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Y_kUUek

6
#sH%RX666E uuU"a00011SZZ??????r*   r3   c                     t           r| dk    rt                        t          t          | z            t          dd           dS )zZTest model prediction methods with 'visualize=True' to generate prediction visualizations.rs   r.   T)r0   	visualizeN)r   r,   r   r   r	   r2   s    r+   test_predict_visualizer      sM      %#333Du	fB$??????r*   c           	         t          j        t                    }| dz  }| dz  }| dz  }| dz  }|                    d                              |           |                    d                              |           |                    |           |                    |           t          t                    }||||fD ]}t          j        |          t          j        t          |                    |fD ]F} ||ddd	          }	t          |	          d
k    s"J d|j         dt          |	                       G|                                 d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.   )ru   r6   r0   rI   zExpected 1 result for z, got N)r   rX   r	   convertru   r   r   r   r   r   rZ   nameunlink)
r[   rQ   source_grayscalesource_rgbasource_non_utfsource_spacesr3   r]   r/   r_   s
             r+   test_predict_gray_and_4chr      sb   	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$$$&[qv&[&[SQX\\&[&[$$$$	



	 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rg   rQ   expecteds     r+   rh   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+   rh   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   )rg   imgs     r+   	<setcomp>z1test_predict_all_image_formats.<locals>.<setcomp>   s4    CCCS#*""$$++C00CCCr*   zMissing formats: r.   rx   zExpected 12 results, got N)r   r   globrZ   r   r   )datadataset_pathr   
extensionsr3   r_   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)r0   ru   zYouTube Test Error: N)r   r   rP   urlliberror	HTTPErrorConnectionErrorr   )r3   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v 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.ptrs   Nz/decelera_portrait_min.mov   zbytetrack.yaml)r0   trackerzbotsort.yamlT)r0   r   save_frames)orbsiftecc)autor   r   zcfg/trackers/botsort.yamlzbotsort-.yaml)
gmc_method	with_reidr3   )r   r   trackzipr   r<   r   ru   )r3   r[   	video_urlgmcreidmdefault_argscustom_yamls          r+   test_track_streamr      s    444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                    t           r| dk    rt                       t          |          }dD ]}|                    |d|          }|                                 |                                 |                                 |j                                         |j                                         |j                                         dS )z+Test the validation mode of the YOLO model.semantic>   FTr.   )r   r0   plotsN)r   r,   r   r   to_dfto_csvto_jsonconfusion_matrix)r   r   r   r3   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   rw   r.   diskrI   r3   )r   epochsr0   cacher   close_mosaicr   N)r   r   r   r	   r2   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.ndjsonrI   r.   )r   r   r0   N)r   r   r   r   r2   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.ptcoco8-seg.yamlrI   r.   ram      ?r   )r   r   r0   r   
copy_pastemixupr   
single_clsN)r   r   r   r	   )r   r3   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rtdetrr{   rx   N)r   rglobr   r$   r   r	   r   )mrE   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.yamlrI   r.   SGD)r   r   r0   	optimizerrx   torchscriptformatN)r   r   r   r   rP   r	   exportr2   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 r)   )datasetbs)rg   rE   	predictors     r+   rh   zQtest_predict_callback_and_setup.<locals>.on_predict_batch_end.<locals>.<listcomp>/  s    ===qi"===r*   N)r   
isinstancer   rangerZ   r   r_   )r  r   im0srE   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   )ry   r0   test_callbackN)
r   r   add_callbackr   r	   r  rP   printshapeboxes)r  r3   r  r  r_   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                    t           r| dk    rt                       | dk    rdnt          }d| v pd| v } t          t          | z            ||g|rdnd          }|D ]}|rX|j        |j        j        |j        k    sJ d
|  d            |j        j        j	        t          j        k    sJ d
|  d            n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                   d	S )zATest YOLO model results processing and output in various formats.rs   zyolo26n-obb.ptz@https://cdn.jsdelivr.net/gh/ultralytics/assets@main/im/boats.jpgr   z-semr.   r   rx   N'z6' semantic_mask should match the original image shape!z-' semantic_mask should use compact class IDs!z' results should not be empty!r8   )rB   r}   zruns/tests/label.txtT)txt_file	save_confzruns/tests/crops/)save_dirrJ   )decimals)	normalizezresults_plot_save.jpg)pilru   filename)confr  )r   r,   r	   r   r   semantic_maskr  
orig_shaper   r}   rN   r   rZ   r8   r   r  r   r=   float32rv   	save_cropr   r   r   plot)r3   r[   rQ   is_semanticr_   r  s         r+   test_resultsr/  ?  s.     %#333OTXhOhOh	K	KntB%85K'd;&''Rk8RsSSSG ! ! 	E?.1?3HAL3X3X3XQEQQQ 4Y3XX ?'-<<<>v%>v>v>v<<<<q66DDDuDDDDD6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 ]t	          j                  j        
j        j	        
                                                                }t          |          dk    sJ dt          |                       |d	
 d
z  }|                                sJ d| d            t          d |                                                                D                       }t          j        j                  |k    s'J dt          j        j                   d|             t#          |dz                                            }d |D             }d |D             	t'          	fd|D                       sJ d	 d|             t          
fd|D                       }|t          j        j                  k    s'J d| dt          j        j                               dS )zLTest output from prediction args for saving YOLO detection labels and crops.z
zidane.jpgr   rz   T)r0   rv   r,  r   rw   z$Expected at least 2 detections, got zlabels/z.txtzLabel file z does not existc                     g | ]}||S r)   r)   )rg   lines     r+   rh   z)test_labels_and_crops.<locals>.<listcomp>j  s    TTTDtT4TTTr*   z
Box count z != label count cropsc                 B    g | ]}|                     d           D ]}|S )*)r   )rg   pr]   s      r+   rh   z)test_labels_and_crops.<locals>.<listcomp>n  s/    @@@AAFF3KK@@qa@@@@r*   c                     h | ]	}|j         
S r)   r   )rg   ds     r+   r   z(test_labels_and_crops.<locals>.<setcomp>p  s    444Q!&444r*   c              3   P   K   | ] }j                             |          v V  !d S )N)rA   get)rg   ccrop_dir_namesr  s     r+   	<genexpr>z(test_labels_and_crops.<locals>.<genexpr>q  s4      FF17;;q>>^3FFFFFFr*   z
Crop dirs z don't match classes c                 &    g | ]}|j         v |S r)   r8  )rg   r]   im_names     r+   rh   z)test_labels_and_crops.<locals>.<listcomp>u  s%    EEE7af3D3D!3D3D3Dr*   zCrop count z != detection count N)r	   r   r   r   r   r#  r   stemr  clsinttolistrZ   exists	read_text
splitlinesr   r   iterdirall)imgsr_   	save_pathcls_idxslabelslabel_count	crop_dirs
crop_files
crop_countr=  r@  r  s            @@@r+   test_labels_and_cropsrR  \  sz   F\)*D.d;-..t3Y]^^^GWQZ())I r rqv,,#7;??$$++--8}}!!!#Y#h--#Y#Y!!!4w4444}}EE Ef E E EEETTF,<,<,>,>,I,I,K,KTTTUU17<  K///1nc!',>O>O1n1nal1n1n///)g-668899	@@@@@
44)444FFFFFXFFFFF 	
 	
HHHhHH	
 	
F EEEEZEEEFF
S.....0qj0q0q^abcbibn^o^o0q0q....+r rr*   c                 |   ddl m} ddlm} ddlm} t          D ]}|dk    r	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_directoryr   z.zipz=https://github.com/ultralytics/hub/raw/main/example_datasets/F)unzipdirr   T)ru   coco8zcoco8/images/valN)ultralytics.data.splitrT  ultralytics.data.utilsrU  ultralytics.utils.downloadsrV  r   r   r   with_suffixr"   get_jsonprocess_images)r[   rT  rU  rV  r   r\   statss          r+   test_data_utilsrb  y  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z  }| dz  }|dz  dz                       d           |dz  dz                       d           |dz  dz                       d           |dz  dz                       d           |d	z                      d
           t          j        |d          5 }|                    d          D ],}|                    ||                    |                      -	 ddd           n# 1 swxY w Y   t          || dz  dd          }| dz  |j        z  }||k    sJ d| d|             |d	z  	                                sJ d|             |dz  dz  
                                sJ d|             dS )zWTest safe_download() unzips local archive paths without treating them like remote URLs.zcoco8 localzcoco8 local.zipr   r   Tparentsr   rM  z	data.yamlz=path: .
train: images/train
val: images/val
names:
  0: item
rT   r5  arcnameNdatasetsFrX  rW  progresszExtracted path z != expected zdata.yaml not found in zimages/val not found in )mkdir
write_textzipfileZipFiler  rY   relative_tor#   r   is_fileis_dir)r[   dataset_dirarchivezfr   	extractedexpected_paths          r+   ,test_safe_download_unzips_local_path_archiverw    s$   ]*K**G8g%,,T,:::8e#**4*8888g%,,T,:::8e#**4*888;**+oppp	#	&	& ?"%%c** 	? 	?DHHT4#3#3H#=#=H>>>>	?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? g8j+@W\]]]Iz)K,<<M%%%'`'`'`Q^'`'`%%%#,,..UU0U)0U0UUU. 5(0022ZZ4Zy4Z4ZZZ2ZZs   (AC88C<?C<c                 R   | dz  }t          j        |d          5 }|                    dd           |                    dd           ddd           n# 1 swxY w Y   t          || dz  d	d
          }| dz                                  rJ |dz                                  sJ dS )z[Test safe_download() skips archive members that would extract outside the target directory.z
unsafe.ziprT   ../unsafe.txtbadzsafe/file.txtokNrh  TFri  
unsafe.txt)rm  rn  writestrr#   rE  rp  )r[   rs  rt  ru  s       r+   /test_safe_download_skips_unsafe_archive_membersr~    s    %G	#	&	& +"
OU+++
OT***+ + + + + + + + + + + + + + + g8j+@W\]]]I<'//11111'002222222s   -AAAc                    | dz  }|                     d           | dz  }t          j        |d          5 }|                    |d           |                    |d           ddd           n# 1 swxY w Y   t	          || dz  d	d
          }| dz                                  rJ |dz                                  sJ dS )zWTest safe_download() skips tar members that would extract outside the target directory.zsafe.txtr{  z
unsafe.tarrT   ry  rf  Nrh  TFri  r|  )rl  tarfilerX   addr#   rE  rp  )r[   r/   rs  tarru  s        r+   +test_safe_download_skips_unsafe_tar_membersr    s   
"F
d%G	gs	#	# ,s000
+++, , , , , , , , , , , , , , , g8j+@W\]]]I<'//11111
"++-------s   /A00A47A4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)rX  yolo_labelsTF)
labels_dirr#  use_segmentsuse_keypoints	cls91to80N)ultralytics.data.converterr  r  r"   r   )r[   r  r  s      r+   test_data_converterr    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   )r[   r  s     r+   test_data_annotatorr    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.eventsr  enabledr   r   mode)r  eventsr   s      r+   test_eventsr    sK    //////VXXFFN
{

CCH
F3KKKKKr*   c                     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-          t          j        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arI   brw   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])rI   rw   rJ   z	(1, 2, 3)z
[640, 640]r{   z{'a': 1, 'b': 2})r  r  some_stringzpath/to/filezhello worldz__import__('os').system('ls')zeval('1+1')zexec('x=1')zzipfile.ZIP_DEFLATEDzzipfile.Path)ultralytics.cfgr  r  r  
contextlibsuppressSyntaxErrorr   cwdr   r   replacer   rm  ZIP_DEFLATEDr  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;-..'2FFFFF;~&&.888888s   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  rI   )max_dimT)warnultralyticsz8.0.0N)r    check_yolov5u_filenamecheck_requirementscheck_imgszcheck_imshowcheck_version
print_argsr)   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.   rI   rJ   )r0   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_syncrI   rK      rw   )ksrJ   )nN)ultralytics.nn.modules.convr  ultralytics.utils.torch_utilsr  r  r  rN   rO   )r  r  r  r  xr  s         r+   test_utils_torchutilsr  3  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  rN   tensorr   allcloserO   )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}m}  |t                      |t                      |t          dz             | dz  }|                    dd            ||          5 }t          |           ddd           n# 1 swxY w Y   | dz  dz  }|                    d	            ||          | dz  d
z  k    sJ |dz  }	|	
                                  ||	          |dz  k    sJ dS )zMTest file handling utilities including file age, date, and paths with spaces.r   )file_age	file_dateget_latest_runincrement_pathspaces_in_pathrunszpath/with spacesT)re  exist_okNexprd  zexp-2zresults.txtzresults-2.txt)ultralytics.utils.filesr  r  r  r  r  r	   r   rk  r  touch)
r[   r  r  r  r  r  r   new_pathexp_dirresults_files
             r+   test_utils_filesr  ]  sz   kkkkkkkkkkkkkkHVIfN4&=!!!((DJJtdJ+++			 h               %'GMM$M>'""h&7'&AAAAA]*L>,''7_+DDDDDDDs   )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)newrI   ztest.ptNr  z9torch_save was not attempted the expected number of times)unittest.mockr  r	  ultralytics.utils.patchesr
  RuntimeErrorr'   raisesrN   r   
call_count)r[   r  r	  r
  mocks        r+   test_utils_patches_torch_saver  s  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  rN   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%  rN   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)rj  N)ultralytics.hubr)  r*  ultralytics.hub.utilsr+  )r)  r*  r+  s      r+   test_hubr/    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).)r   r   r   r	   r)   r*   r+   imager1    s     :c&kk"""r*   z)auto_augment, erasing, force_color_jitter))N        F)randaugmentr   T)augmixg?F)autoaugmentr2  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)rJ   r8  r8  N)ultralytics.data.augmentr7  r   	fromarrayr   cvtColorCOLOR_BGR2RGBr  rN   	is_tensorr}   r+  )r1  r@  rE  rD  r7  	transformtransformed_images          r+   test_classify_transforms_trainrM    s     @?????&&$!-  I  "	%/#,ucFW2X2X"Y"YZZ"m3333?,-----"em333333r*   c                      t          d                              ddgddddd	           t          d
                              dddddd	           t          d                              dddddd	           dS ),Tune YOLO model for performance improvement.r   r  zcoco8-grayscale.yamlFr.   rI   rw   r8   )r   r   r0   r   
iterationsrB   zyolo26n-pose.ptzcoco8-pose.yamlr   
imagenet10Nr   tuner)   r*   r+   test_model_tunerT    s     	235STabkp     		  &7uBWXefot uuu	\bQR_`inooooor*   ray)installzray[tune] not installedc            
      Z    t          d                              dddddddd	
           dS )rO  r   rQ  TFr.   rI   rw   randomr8   )r   use_rayr   r0   r   rP  
search_algrB   NrR  r)   r*   r+   test_model_tune_rayr[    sL    
 		   	 	 	 	 	r*   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.   rV   N)r   r   r   r	   rZ   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.yamlrI   r.   r   )r   r   r0   r   r   r   )WorldTrainerFromScratchzyolov8s-worldv2.yaml	yolo_datar   r   )r   r   r0   r   r   trainerN)r   r   set_classesr	   r   )ultralytics.models.yolo.world.train_worldrf  )r3   rf  s     r+   test_yolo_worldrl     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busrd  re  r   )YOLOE)YOLOEVPSegPredictor)gq=
ףk@g\y@gHzu@gQ̊@)x   i  r   i  rI   )bboxesrB  )visual_promptsr  zcoco128-seg.yamlr.   r   r0   T)r   load_vpr0   )YOLOEPESegTrainerYOLOESegTrainerFromScratch)r   r   r   ri  r0   )rg  rh  zyoloe-data.yamlr   r\   zyoloe-11s-seg.yamlzyoloe-11s-seg-pf.ptN)r   r   rj  r	   r  rp  ultralytics.models.yolo.yoloerq  dictr   arrayrP   r   rw  rx  r   r   ru   )
r[   r3   rp  rq  visualsrw  rx  	data_dict	data_yamlr   s
             r+   
test_yoloer  $  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  rI   r.   r   r   r   r0   r   r   ru  T)r0   rv   r,  r1   N)r   r   r   rP   r	   r2   s    r+   test_yolov10r  i  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.yamlrI   r.   r   r  r   )r.   r.   r  r|   Tr/   r0   rv   r,  r1   onnxr	  N)r   r   r   r   r   r   rP   r  )r3   rQ   s     r+   test_multichannelr  s  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                    t           r| dk    rt                       | 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.r   classifyNz-grayscale.yamlrI   r   ry  >   r   r   r   z*.npyr.   r   r  r  )r.   r.   rI   r|   Tr  r  r	  rY  rV   )r   r,   r   rA  r   r   ru   r   r   r   r   r   r   r   r   rP   r  )	r   r3   r   r[   grayscale_datasplitnpy_filerQ   export_models	            r+   test_grayscaler  }  s     $*,,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*   c                      t                       t          d          } |                     dddd           |                     d           dS )z8Test YOLO semantic segmentation model with polygon data.rs   r   rI   r.   )r   r   r0   r   r  N)r,   r   r   r   r2   s    r+   test_semantic_polygon_datar    sR    !""E	KK%arKJJJ	II#I$$$$$r*   )tr  ri   r  r   rm  r   pathlibr   r   r   r   r'   rN   PILr   testsr   r   r   r	   r
   r   r  r   r   r  r   r   ultralytics.data.buildr   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,   r4   rF   rR   r`   markskipifrn   rp   parametrizer   r   r   slowr   r   r   r   r   r   r   r   r  r  r  r/  rR  rb  rw  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r/  fixturer1  rM  rT  IS_PYTHON_MINIMUM_3_10r  r[  r`  IS_PYTHON_3_12IS_PYTHON_3_8rl  r  r  r  r  r  r)   r*   r+   <module>r     sv
       



                



             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                                   $ @ ? ? ? ? ? ? ? @ @ @ @ @ @ @ @j j j/ / /  (( ( (Y Y Y D!788[ [ 98[ D!788\ \ 98\ v..@ @ /.@0 &))@ @ *)@  . 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'  . &))! ! ! ! *)!8r r r: J'?@@1 1 A@1,[ [ [*
3 
3 
3. . . J'?@@  A@	 	 	  29 29 29j     G$YZZe e [Ze
 
 
L L L:E E E, ] ] ]	 	 	&   J'?@@> > A@> # # #
 /   4 4 46 J'?@@p p A@ p JCf&C"CLdee11%GGGGPijj  kj fe 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 ' '$ ' ' ' =<'4% % % % %r*   