
    |hm              	       T
   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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- d dl.m/Z/ d dl0m1Z1  e,e      Z2d Z3d Z4d Z5e	jl                  jo                  e2 d      d        Z8e	jl                  jo                  dd      e	jl                  jo                  e2 d      d               Z9e	jl                  jo                  dd      e	jl                  jo                  e2 d      d               Z:e	jl                  jw                  de      d        Z<e	jl                  jw                  de      d        Z=d Z>e	jl                  j~                  e	jl                  jo                  e& d      e	jl                  jo                   e-       d      d                      Z@e	jl                  jo                  e& d      e	jl                  jo                  e2 d      e	jl                  jw                  de      d                      ZAe	jl                  jw                  d e      d!eBdeBd"eBd#dfd$       ZCd% ZDe	jl                  jw                  d&d'dg      d(        ZEd) ZFe	jl                  jo                  e)d*      d+        ZGd, ZHe	jl                  jw                  de      deBfd-       ZId. ZJe	jl                  jo                  e& d      d/        ZKe	jl                  jo                  e& d      d0        ZLd1 ZMd2 ZNd3 ZOd4 ZPd5 ZQe	jl                  jo                  e)d6      d7        ZRd8 ZSd9 ZTd: ZUe	jl                  j~                  d;        ZVd< ZWd= ZXe	jl                  jo                  e& d      d>        ZYe	j                  d?        Z[e	jl                  jw                  d@g dA      dB        Z\e	jl                  j~                  e	jl                  jo                  e& d      dC               Z]dD Z^e	jl                  jo                  e+j                  dE      e	jl                  jo                  e+j                  xr e$xr e dF      dG               Zae	jl                  jo                  e+j                  xs e1 dH      e	jl                  jo                  e+j                  xr e$xr e dI      dJ               ZbdK ZcdL Zde	jl                  jw                  d e      d!eBdeBd"eBd#dfdM       Zey)N    N)copy)Path)Image)CFGMODELMODELSSOURCESOURCES_LISTTASK_MODEL_DATATMP)RTDETRYOLO)	TASK2DATATASKS)load_inference_source)check_det_dataset)ARM64ASSETSDEFAULT_CFGDEFAULT_CFG_PATHLINUXLOGGERONLINEROOTWEIGHTS_DIRWINDOWSYAMLchecksis_dir_writeableis_github_action_running)download)	TORCH_1_9c                  8    t        t              }  | ddd       y)z(Test the forward pass of the YOLO model.N    T)sourceimgszaugment)r   r   models    P/var/www/html/test/engine/venv/lib/python3.12/site-packages/tests/test_python.pytest_model_forwardr+   *   s    IE	R.    c                  v   t        t              } | j                  dd       | j                         } | j	                  t              } | j                  d       | j                          | j                  d       | j                          | j                  }| j                  }| j                  }| j                  }y)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    KE 
JJtdJ+!EJJuE	HHUO	JJL	)*	 	AAAAr,   c                  t    ddl m}   |        }t        j                  dddd      }|j	                  |d      }y)	z^Test profiling of the YOLO model with `profile=True` to assess performance and resource usage.r   )DetectionModel      @   T)profileN)ultralytics.nn.tasksr@   torchrandnpredict)r@   r)   imr=   s       r*   test_model_profilerJ   D   s3    3E	Q2r	"Bb$'Ar,   zdirectory is not writeable)reasonc                      t         dz  } t        | d      5 }t        D ]  }|j                  | d        	 ddd        t	        t
              | d      }t        |      dk(  sJ y# 1 sw Y   1xY w)zVTest YOLO predictions with file, directory, and pattern sources listed in a text file.zsources_multi_row.txtw
Nr$   r%   r&      )r   openr
   writer   r   len)filefsrcresultss       r*   test_predict_txtrX   M   sv     ((D	dC  A 	 CGGse2J	   d5kR0Gw<1	   s    A''A0Tzdisabled for testingc                  J   t         dz  } t        | dd      5 }t        j                  |      }|j	                  dg       |j                  t        D cg c]  }|g c}       ddd        t        t              | d      }t        |      d	k(  sJ yc c}w # 1 sw Y   6xY w)
zITest YOLO predictions with sources listed in multiple rows of a CSV file.zsources_multi_row.csvrM    newliner%   Nr$   rO   rP   )
r   rQ   csvwriterwriterow	writerowsr
   r   r   rS   )rT   rU   r^   rV   rW   s        r*   test_predict_csv_multi_rowra   X   s     ((D	dC	$ :A
#<8C3%89: d5kR0Gw<1 9: :s   ;B
B
BBB"c                      t         dz  } t        | dd      5 }t        j                  |      }|j	                  t
               ddd        t        t              | d      }t        |      dk(  sJ y# 1 sw Y   1xY w)	zHTest YOLO predictions with sources listed in a single row of a CSV file.zsources_single_row.csvrM   rZ   r[   Nr$   rO   rP   )	r   rQ   r]   r^   r_   r
   r   r   rS   )rT   rU   r^   rW   s       r*   test_predict_csv_single_rowrc   e   sq     ))D	dC	$ &A%& d5kR0Gw<1	& &s   +A33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|      j                         j!                  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 y)z^Test YOLO model predictions on various image input types and sources, including online images.zyolo11n-grayscale.ptrA   rB   )flagsTr$   )r%   saver.   r&   )r%   rg   save_txtr&      r&   )r%   rg   streamr&   i@    zIhttps://github.com/ultralytics/assets/releases/download/v0.0.0/zidane.jpgdtyper   )r&   classesN)r   r   cv2imreadstrr	   IMREAD_GRAYSCALEIMREAD_COLORrS   r   rQ   rF   randlistzerosnumpyastypenpuint8r   r   )rd   channelsr)   rI   batchs        r*   test_predict_imgr~   q   s    "88qaHz)*E	CKx1}s';';RURbRb	cBuEJJv.T4rRSWXXXXuBTDCDIIIuUZZHb" 56bABaGGGuRH4$bIJaOOOtE"bTLMNRSSSSuU[[c84::<CCBHHMUWXY]^^^^FVW]Sci


6
#sH%RXX6E uU"a01SZ???r,   r)   c                 B     t        t        | z        t        dd       y)zfTest model prediction methods with 'visualize=True' to generate and display prediction visualizations.r$   T)r&   	visualizeN)r   r   r	   r(   s    r*   test_predict_visualizer      s     Du	fB$?r,   c                  X   t        j                  t              } t        dz  }|j	                  dd       |dz  }|dz  }|dz  }|dz  }| j                  d      j                  |       | j                  d	      j                  |       | j                  |       | j                  |       t        t              }||||fD ]g  }t        j                  |      t        j                  t        |            |fD ]  } ||ddd
      }	t        |	      dk(  rJ  |j                          i y)zbTest YOLO prediction on SOURCE converted to greyscale and 4-channel images with various filenames.im4Tparentsexist_okzgreyscale.jpgz4ch.pngu$   non_UTF_测试文件_tést_image.jpgzimage with spaces.jpgLRGBAr$   )rg   r.   r&   rA   N)r   rQ   r	   r   mkdirconvertrg   r   r   rp   rq   rr   rS   unlink)
rI   	directorysource_greyscalesource_rgbasource_non_utfsource_spacesr)   rU   r%   rW   s
             r*   test_predict_grey_and_4chr      s   	F	BeIOOD4O0 ?2i'K!GGN 77MJJsO)*JJvK(GGNGGM KE*NMI jjmSZZA%7: 	%FFt2FGw<1$$$	% 	

	r,   zenvironment is offlinez:No auth https://github.com/JuanBindez/pytubefix/issues/166c                      t        t              } 	 | j                  ddd       y# t        j                  j
                  t        f$ r"}t        j                  d|        Y d}~y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&   rg   zYouTube Test Error: N)r   r   rH   urlliberror	HTTPErrorConnectionErrorr   )r)   es     r*   test_youtuber      s[    
 KE14BTJLL""O4 1+A3/001s   & #A+	A&&A+c           	      b   | dk(  ryd}t        |       } | j                  |dd       | j                  |ddd	       t        g d
g d      D ]`  \  }}t        j                  t
        dz        }t        d| dz  }t        j                  |i ||d|d       | j                  |d|       b y)z
    Test 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.
    yolo11n-cls.ptNzXhttps://github.com/ultralytics/assets/releases/download/v0.0.0/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   trackzipr   r4   r   r   rg   )r)   	video_urlgmcreidmdefault_argscustom_yamls         r*   test_track_streamr      s       jIKE	KK	.>K?	KK	n$KO 02TU ?
Uyy(C!CDhse511		+e,ecPT_defIS+>	?r,   ztask,model,datataskdatareturnc                 H   dD ]  }t        |      j                  |d|      }|j                          |j                          |j	                          |j                          |j                          |j                          |j                  j                          |j                  j                          |j                  j	                          |j                  j                          |j                  j                          |j                  j                           y)z+Test the validation mode of the YOLO model.>   FTr$   )r   r&   plotsN)	r   valto_dfto_csvto_xmlto_htmlto_jsonto_sqlconfusion_matrix)r   r)   r   r   metricss        r*   test_valr      s      *u+//t2U/C  &&(  '')  '')  ((*  ((*  '')*r,   c            	      j    t        t              } | j                  ddddddd        | t               y	)
zKTest training the YOLO model from scratch using the provided configuration.
coco8.yamlri   r$   diskrA   r)   )r   epochsr&   cacher}   close_mosaicnameN)r   r   trainr	   r(   s    r*   test_train_scratchr      s.    IE	KK\!2V2\]dkKl	&Mr,   sclsFc           
      r    t        t        dz        }|j                  ddddddd|         |t               y	)
zGTest training of the YOLO model starting from a pre-trained checkpoint.yolo11n-seg.ptzcoco8-seg.yamlrA   r$   ram      ?r   )r   r   r&   r   
copy_pastemixupr   
single_clsN)r   r   r   r	   )r   r)   s     r*   test_train_pretrainedr      sB     //0E	KKar3VY`anr   
&Mr,   c                      t         dz  dz  j                  d      D ]N  } d| j                  v r)t        s t	        | j                        t
        d      }:t        | j                         P y)z]Test YOLO model creation for all available YAML configurations in the `cfg/models` directory.cfgmodelsz*.yamlrtdetrrl   rj   N)r   rglobr   r"   r   r	   r   )mr=   s     r*   test_all_model_yamlsr      sU    UlX%,,X6 qvv"F166N65Lr,   zPWindows slow CI export bug https://github.com/ultralytics/ultralytics/pull/16003c                      t        t              } | j                  dddd       | j                  d       | j	                  t
        d       | j                  d       y	)
zUTest the complete workflow including training, validation, prediction, and exporting.r   rA   r$   SGD)r   r   r&   	optimizerrj   torchscriptformatN)r   r   r   r   rH   r	   exportr(   s    r*   test_workflowr      sM     KE	KK\!2KG	IIBI	MM&M#	LLL&r,   c                  4   d } t        t              }|j                  d|        t        t              }|j
                  }|j                  |dd      }|D ]?  \  }}}t        d|j                         t        d|       |j                  }t        |       A y)	zGTest callback functionality during YOLO prediction setup and execution.c                     | j                   \  }}}t        |t              r|n|g}t        t	        |            D cg c]  }| j
                  j                   }}t        | j                  ||      | _        yc c}w )zKCallback function that handles operations at the end of a prediction batch.N)	r}   
isinstancerv   rangerS   datasetbsr   rW   )	predictorpathim0sr=   r   s        r*   on_predict_batch_endz=test_predict_callback_and_setup.<locals>.on_predict_batch_end  sg    !dA!$-tD6,1#d),<=qi""==	 1 14<	 >s   A8r   )r%   Tr   )rk   r&   test_callbackN)
r   r   add_callbackr   r	   r   rH   printshapeboxes)r   r)   r   r   rW   rim0r   s           r*   test_predict_callback_and_setupr     s    = KE	-/CD#62G	BmmGDm<G 
3osyy)or"e	r,   c                    | dk(  rdnt         } t        t        | z        ||gd      }|D ]]  }t        |      sJ d|  d       |j	                         j                         }t        |t        |      |j                         |j                  dt        j                        }|j                  t        d	z  d
       |j                  t        dz         |j                  d       |j                          |j!                          |j#                          |j%                  d
       |j'                          |j)                  d
d
t        dz         |j)                  d
d
       t        |t        |      |j                         ` y)zATest YOLO model results processing and output in various formats.zyolo11n-obb.ptz(https://ultralytics.com/images/boats.jpgr   rj   'z' results should not be empty!r0   )r:   rn   zruns/tests/label.txtT)txt_file	save_confzruns/tests/crops/)save_dirrB   )decimals)	normalizezresults_plot_save.jpg)pilrg   filename)confr   N)r	   r   r   rS   r0   rx   r   r   r5   rF   float32rh   r   	save_cropr   r   r   r   r   r   plot)r)   temp_srW   r   s       r*   test_resultsr     s>    <ADT;T7Z`F'd;&'(8DG !1v@5'!?@@vEEGMMOaQ DDU]]D3	

C"88D
I	S#667		
	
						D	!	
	4dS3J-JK	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                  j                         j                         }|j                  j                  d      rg dng d	k(  sJ |d
| dz  }|j                         sJ t        j                  j                        t        |j!                         j#                         D cg c]  }|s|	 c}      k(  sJ t%        |dz  j'                               

D cg c]  }|j)                  d      D ]  }|  }	}}t+        
fd|D              sJ t        |	D cg c]  }||j,                  v s| c}      t        j                  j                        k(  rJ  yc c}w c c}}w c c}w )zLTest output from prediction args for saving YOLO detection labels and crops.z
zidane.jpg
yolo11n.ptr   T)r&   rh   r   r   zbus.jpg)r   rP   r   r   )r   r   r   zlabels/z.txtcrops*c              3      K   | ]9  }j                   j                  |      D ch c]  }|j                   c}v  ; y c c}w w)N)r9   getr   ).0cd	crop_dirsr   s      r*   	<genexpr>z(test_labels_and_crops.<locals>.<genexpr>E  s4     SQ177;;q>i%@aff%@@S%@s   #AAAN)r	   r   r   r   r   r   r   stemr   clsinttolistendswithexistsrS   r   	read_text
splitlinesrv   iterdirgloballr   )imgsrW   	save_pathim_namecls_idxslabelslineprU   
crop_filesr	  r   s             @@r*   test_labels_and_cropsr  2  s   F\)*D.d;-.t3Y]^GWQZ(()I Vqvv,##77;;??$++-AFFOOI,FLIVVVwwit44}}177<< C&:J:J:L:W:W:Y(b$]a(b$cccc)g-6689	!*@AAFF3K@qa@a@
@S(SSSSz?!W->A?@CDUUUU!V )c A @s   #G"+G"G'G-
1G-
c                  L   ddl m}  ddlm} ddlm} t        D ]k  }t        t        |         j                  d      }t        d| dt                |t        |z  |	      }|j                  d
       |j                          m  | t        dz          |t        dz         y)z`Test utility functions in ultralytics/data/utils.py, including dataset stats and auto-splitting.r   )	autosplit)HUBDatasetStats)zip_directoryz.zipz=https://github.com/ultralytics/hub/raw/main/example_datasets/F)unzipdirr   T)rg   coco8zcoco8/images/valN)ultralytics.data.splitr   ultralytics.data.utilsr!  ultralytics.utils.downloadsr"  r   r   r   with_suffixr!   r   get_jsonprocess_images)r   r!  r"  r   rT   statss         r*   test_data_utilsr.  J  s     169
  IdO$008PQUPVW_djmnd
6D! cGm#**+r,   c                  ~    ddl m} m} d}t        d| t                |t        t        dz  ddd	        |         y
)zNTest dataset conversion functions from COCO to YOLO format and class mappings.r   )coco80_to_coco91_classconvert_cocozinstances_val2017.jsonz?https://github.com/ultralytics/assets/releases/download/v0.0.0/)r$  yolo_labelsTF)
labels_dirr   use_segmentsuse_keypoints	cls91to80N)ultralytics.data.converterr0  r1  r!   r   )r0  r1  rT   s      r*   test_data_converterr8  _  s=     P#DNtfU[^_C#*=D`equvr,   c                  Z    ddl m}   | t        t        dz  t        dz  t        dz         y)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_annotatorrA  j  s)    8,///	r,   c                  h    ddl m}   |        }d|_        t        t              }d|_         ||       y)z!Test event sending functionality.r   )EventsTtestN)ultralytics.hub.utilsrC  enabledr   r   mode)rC  eventsr   s      r*   test_eventsrI  v  s+    ,XFFN
{
CCH
3Kr,   c                  \   ddl m} m}m} t	        j
                  t              5   | ddiddi       ddd        |        t        j                         t        j                  j                  dd	      z  j                  d
       dD cg c]
  } ||       c} y# 1 sw Y   lxY wc c}w )zNTest configuration initialization utilities from the 'ultralytics.cfg' module.r   )check_dict_alignmentcopy_default_cfgsmart_valuearA   bri   Nr   z
_copy.yamlF)
missing_ok>   nonetruefalse)ultralytics.cfgrK  rL  rM  
contextlibsuppressSyntaxErrorr   cwdr   r   replacer   )rK  rL  rM  xs       r*   test_cfg_initr[    s    SS			[	) 1c1XQx01	XXZ"''//FFNNZ_N`67[^7	1 1 8s   B
B)B&c                  T    ddl m} m}m}m}  |         |         |         |         y)z9Test initialization utilities in the Ultralytics library.r   get_git_branchget_git_origin_urlget_ubuntu_versionr    N)ultralytics.utilsr^  r_  r`  r    r]  s       r*   test_utils_initrb    s     rrr,   c                  :   t        j                  d       t        j                  t               t        j                          t        j
                  ddgd       t        j                  d       t        j                  dd       t        j                          y	)
z_Test various utility checks for filenames, git status, requirements, image sizes, and versions.z
yolov5n.ptiX  rA   )max_dimT)warnultralyticsz8.0.0N)	r   check_yolov5u_filenamegit_describer   check_requirementscheck_imgszcheck_imshowcheck_version
print_args r,   r*   test_utils_checksro    sh    
!!,/


Sz1-
T"
0
r,   z3Windows profiling is extremely slow (cause unknown)c                  H    ddl m}   | dgdddd      j                          y)	zVBenchmark model performance using 'ProfileModels' from 'ultralytics.utils.benchmarks'.r   ProfileModelszyolo11n.yamlr$   rA   rB   )r&   min_timenum_timed_runsnum_warmup_runsN)ultralytics.utils.benchmarksrr  runrq  s    r*   test_utils_benchmarksrx    s$     ;>""q\]^bbdr,   c                      ddl m}  ddlm}m}m} t        j                  dddd      } | dddd      } |||gd	
        ||        |        y)zGTest Torch utility functions including profiling and FLOP calculations.r   )Conv)get_flops_with_torch_profilerprofile_ops	time_syncrA   rC      ri   )ksrB   )nN)ultralytics.nn.modules.convrz  ultralytics.utils.torch_utilsr{  r|  r}  rF   rG   )rz  r{  r|  r}  rZ  r   s         r*   test_utils_torchutilsr    sJ    0ccAr2r"ARqAAA3!!!$Kr,   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
       y	)zJTest utility operations for coordinate transformations and normalizations.r   )	ltwh2xywh	ltwh2xyxymake_divisible	xywh2ltwh	xywh2xyxy
xywhn2xyxyxywhr2xyxyxyxy	xyxy2ltwh	xyxy2xywh
xyxy2xywhnxyxyxyxy2xywhr      
            NgMbP?)rtol)ultralytics.utils.opsr  r  r  r  r  r  r  r  r  r  r  rF   tensorru   allcloserG   )r  r  r  r  r  r  r  r  r  r  r  r   s               r*   test_utils_opsr    s        2u||QC()JJr1E	NN5)Ie$456	NN5*Z%678	NN5)Ie$456	NN5)Ie$456JJr1E++b/B&E!Q$K	NN5.)>?dKr,   c                      ddl m} m}m}m}  | t
                |t
                |t        dz         t        dz  }|j                  dd        ||      5 }t        |       ddd       y# 1 sw Y   yxY w)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 spacesTr   N)
ultralytics.utils.filesr  r  r  r  r	   r   r   r   r   )r  r  r  r  r   new_paths         r*   test_utils_filesr    se    [[Vf4&=!##DJJtdJ+		 h  s   A--A6c                  F   ddl m} m} ddlm}  | t
              } |d|      5  t        j                  t
              5   |t        j                  d      t        dz         d	d	d	       d	d	d	       |j                  d
k(  sJ d       y	# 1 sw Y   (xY w# 1 sw Y   ,xY w)z=Test torch_save backoff when _torch_save raises RuntimeError.r   )	MagicMockpatch)
torch_save)side_effectz%ultralytics.utils.patches._torch_save)newrA   ztest.ptNr  z9torch_save was not attempted the expected number of times)unittest.mockr  r  ultralytics.utils.patchesr  RuntimeErrorpytestraisesrF   rw   r   
call_count)r  r  r  mocks       r*   test_utils_patches_torch_saver    s     /4.D	6D	A 8]]<( 	8u{{1~sY7	88 ??a\!\\	8 	88 8s#   B $B$BB	BB c                     ddl m} m}m}m}m} d\  }}t        j                  d|dd      }  |||      |         |||      |         |||      |         | |      |        |||      }|j                           ||       y)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  rF   rw   
fuse_convs)	r  r  r  r  r  c1c2rZ  r   s	            r*   test_nn_modules_convr    s    ``FBAr2r"A b"a M"b!E"bM!DHQK 	b"ALLNaDr,   c                      ddl m} m}m}m}m} d\  }}t        j                  d|dd      }  | ||      |         |||      |         |||      |         |||      |         |||      |       y)z*Test various neural network block modules.r   )C1C3TRBottleneckCSPC3GhostC3xr  r  r  N)ultralytics.nn.modules.blockr  r  r  r  r  rF   rw   )r  r  r  r  r  r  r  rZ  s           r*   test_nn_modules_blockr    su    RRFBAr2r"A Br2JqMCBKNDRLOGBOAM"b!r,   c                  R    ddl m} m} ddlm}  |          |         |ddd       y)	z%Test Ultralytics HUB functionalities.r   )export_fmts_hublogout)smart_requestGETzhttps://github.comT)progressN)ultralytics.hubr  r  rE  r  )r  r  r  s      r*   test_hubr    s"     83
H%-=r,   c                  F    t        j                  t        t                    S )z2Load and return an image from a predefined source.)rp   rq   rr   r	   rn  r,   r*   imager    s     ::c&k""r,   z)auto_augment, erasing, force_color_jitter))N        F)randaugmentr   T)augmixg?F)autoaugmentr  Tc                 B   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 y)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)rB   r  r  N)ultralytics.data.augmentr  r   	fromarrayrp   cvtColorCOLOR_BGR2RGBr   rF   	is_tensorrn   r   )r  r  r  r  r  	transformtransformed_images          r*   test_classify_transforms_trainr  $  s     @&$!-I  "%//#,,ucFWFW2X"YZ""m333??,---""emm333r,   c                      t        d      j                  dddddd       t        d	      j                  d
ddddd       y)z,Tune YOLO model for performance improvement.zyolo11n-pose.ptzcoco8-pose.yamlFr$   rA   ri   r0   )r   r   r&   r   
iterationsr:   r   
imagenet10N)r   tunern  r,   r*   test_model_tuner  H  sM     		  &7uBWXefot u	\bQR_`inor,   c                     t        t              } t        t        dz        }t        gt        t        gfD ]V  }t	        | j                  |d            t	        |      k(  sJ t	        |j                  |d            t	        |      k(  rVJ  y)z4Test YOLO model embeddings extraction functionality.r   r$   rO   N)r   r   r   r	   rS   embed)model_detectmodel_segmentr}   s      r*   test_model_embeddingsr  P  s    ;L'778MFF++ N<%%U"%=>#e*LLL=&&e2&>?3u:MMMNr,   z3YOLOWorld with CLIP is not supported in Python 3.12zDYOLOWorld with CLIP is not supported in Python 3.8 and aarch64 Linuxc                     t        t        dz        } | j                  ddg        | t        d       t        t        dz        } | j	                  ddd	d
d       ddlm} t        d      } | j	                  ddgiddgiddd	d
d|       y)z)Test YOLO world models with CLIP support.zyolov8s-world.pttreewindow{Gz?r   zyolov8s-worldv2.ptz
dota8.yamlrA   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_worldr  Z  s     112E	vx()	&t334E 
KK   R'(E	KK#l^4kL>=Z['  r,   z/YOLOE with CLIP is not supported in Python 3.12z@YOLOE with CLIP is not supported in Python 3.8 and aarch64 Linuxc                  z   t        t        dz        } ddg}| j                  || j                  |              | t        d       ddl}ddlm} dd	lm	} t         |j                  g d
g dg       |j                  ddg            }| j                  t        ||        |t        dz        } | j                  dd       | j                  ddd       ddlm}  |d      } | j                  ddd|d        |t        dz        } | j                  t                |d      } | j                  dd       y)z*Test YOLOE models with MobileClip support.zyoloe-11s-seg.ptpersonbusr  r  r   N)YOLOE)YOLOEVPSegPredictor)gq=
ףk@g\y@gHzu@gQ̊@)x   i  r   i  rA   )bboxesr  )visual_promptsr   zcoco128-seg.yamlr$   r   r&   T)r   load_vpr&   )YOLOEPESegTrainer)r   r   r   r  r&   zyoloe-11s-seg-pf.pt)r   r   r  get_text_per	   rx   rf  r  ultralytics.models.yolo.yoloer  dictarrayrH   r   r  r   )r)   r9   rz   r  r  visualsr  s          r*   
test_yoloer  ~  s@    112EuE	eU..u56	&t!A rxx,.BC
 BHHaV	G 
MM%   + 223E	II%RI0	II%t2I> @$%E	KK!   + 556E	MM&$%E	II%RI0r,   c                      t        d      } | j                  ddddd       | j                  dd       | j                  dddd	        | t               y
)zFTest YOLOv10 model training, validation, and prediction functionality.zyolov10n.yamlr   rA   r$   r   r   r   r&   r   r   r
  T)r&   rh   r   r'   N)r   r   r   rH   r	   r(   s    r*   test_yolov10r    sM    !E	KK\!2AVKT	II<rI*	MMTT4MH	&Mr,   c                     t        d      } | j                  ddddd       | j                  d       t        j                  dt        j
                  	      }| j                  |dd
d
d
       | j                  d       y)zQTest YOLO model multi-channel training, validation, and prediction functionality.r  zcoco8-multispectral.yamlrA   r$   r   r  r   )r$   r$   r  rm   Tr%   r&   rh   r   r'   onnxr   N)r   r   r   rz   rw   r{   rH   r   )r)   rI   s     r*   test_multichannelr    sl    E	KK/RS[aKb	II-I.	,bhh	/B	MM2dMS	LLLr,   c                 h   | dk(  ryt        t              t        |      j                   dz  }t        |      }d|d<   t	        j
                  ||       dD ]:  }t        |d         ||   z  j                  d      D ]  }|j                           < t        |      }|j                  |dd	d
       |j                  |       t        j                  dt        j                        }|j                  |d	ddd       |j                  d      }t        ||       }|j                  |d	       y)zMTest YOLO model grayscale training, validation, and prediction functionality.classifyNz-grayscale.yamlrA   r|   >   r   r   r   z*.npyr$   )r   r   r&   r   r  )r$   r$   rA   rm   Tr  r  r   r%  rO   )r   r   r  r   r   rg   r  r   r   r   r   rz   rw   r{   rH   r   )r   r)   r   grayscale_datasplitnpy_filerI   export_models           r*   test_grayscaler!    s    z#YDJOO#4O!DDNT"DDIInd#! d6l+d5k9??H 	HOO	 KE	KK^ARaKH	II>I"	+RXX	.B	MM2dMS<<v<.LD)E	MM2M&r,   )frU  r]   r   r   pathlibr   rp   rx   rz   r  rF   PILr   testsr   r   r   r	   r
   r   r   rf  r   r   rT  r   r   ultralytics.data.buildr   r(  r   ra  r   r   r   r   r   r   r   r   r   r   r   r   r   r    r)  r!   r  r"   IS_TMP_WRITEABLEr+   r>   rJ   markskipifrX   ra   rc   parametrizer~   r   r   slowr   r   rr   r   r   r   r   r   r   r   r  r.  r8  rA  rI  r[  rb  ro  rx  r  r  r  r  r  r  r  fixturer  r  r  r  IS_PYTHON_3_12IS_PYTHON_3_8r  r  r  r  r!  rn  r,   r*   <module>r.     s    
    
     P P P $ , 8 4     1 3#C( /(( ((1MN O D!78((1MN O 9 D!78((1MN O 9 v.@ /@, &)@ *@
2 J'?@,.7st1 u A 1 J'?@((1MN&)? * O A?* *O<*3 *s *# *$ * =*$ %/ 0 G$vw' x'. &)! ! *!,V0 J'?@, A,( J'?@ A	8 G$YZe [e
L: ] ]	& J'?@> A> # #
 /446 J'?@p A pN F))2gh
,U,uQ  	 i
> F)):]Ctu
,U,uM  41	 v
41n  *O<' 'S ' ' ' ='r,   