
    .hm              	       ,   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-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5  e/e      Z6d Z7d Z8d Z9e	jt                  jw                  e6 d      d        Z<e	jt                  jw                  dd      e	jt                  jw                  e6 d      d               Z=e	jt                  jw                  dd      e	jt                  jw                  e6 d      d               Z>e	jt                  j                  de      d        Z@e	jt                  j                  de      d        ZAd ZBe	jt                  j                  e	jt                  jw                  e) d      e	jt                  jw                   e0       d      d                      ZDe	jt                  jw                  e) d      e	jt                  jw                  e6 d      e	jt                  j                  de      d                      ZEe	jt                  j                  d e      d!eFd"eFd#eFd$dfd%       ZGe	jt                  jw                  e%xs e&d&      d'        ZHe	jt                  jw                  e) d      d(        ZIe	jt                  j                  d)d*dg      d+        ZJd, ZKe	jt                  jw                  e,d-      d.        ZLd/ ZMe	jt                  j                  de      deFfd0       ZNd1 ZOe	jt                  jw                  e) d      d2        ZPe	jt                  jw                  e) d      d3        ZQd4 ZRd5 ZSd6 ZTd7 ZUd8 ZVe	jt                  jw                  e,d9      d:        ZWd; ZXd< ZYd= ZZe	jt                  j                  d>        Z[d? Z\d@ Z]e	jt                  jw                  e) d      dA        Z^e	j                  dB        Z`e	jt                  j                  dCg dD      dE        Zae	jt                  j                  e	jt                  jw                  e) d      dF               ZbdG Zce	jt                  jw                  e.j                  dH      e	jt                  jw                  e.j                  xr e'xr e dI      dJ               Zfe	jt                  jw                  e5 dK      e	jt                  jw                  e.j                  dL      e	jt                  jw                  e.j                  xr e'xr e dM      dN                      ZgdO ZhdP Zie	jt                  j                  dQe      d!eFdeFd#eFd$dfdR       Zjy)S    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
ASSETS_URLDEFAULT_CFGDEFAULT_CFG_PATH	IS_JETSONIS_RASPBERRYPILINUXLOGGERONLINEROOTWEIGHTS_DIRWINDOWSYAMLchecksis_dir_writeableis_github_action_running)download)
TORCH_1_11
TORCH_1_13c                  8    t        t              }  | ddd       y)z(Test the forward pass of the YOLO model.N    T)sourceimgszaugment)r   r   models    O/var/www/html/ai-service/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_methodsrB   3   s    KE 
JJtdJ+!EJJuE	HHUO	JJL	)*	 	AAAAr0   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.tasksrD   torchrandnpredict)rD   r-   imrA   s       r.   test_model_profilerN   G   s3    3E	Q2r	"Bb$'Ar0   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_txtr\   P   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.csvrQ    newliner)   Nr(   rS   rT   )
r   rU   csvwriterwriterow	writerowsr
   r   r   rW   )rX   rY   rb   rZ   r[   s        r.   test_predict_csv_multi_rowre   [   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.csvrQ   r^   r_   Nr(   rS   rT   )	r   rU   ra   rb   rc   r
   r   r   rW   )rX   rY   rb   r[   s       r.   test_predict_csv_single_rowrg   h   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	t*         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.ptrE   rF   )flagsTr(   )r)   saver2   r*   )r)   rk   save_txtr*      r*   )r)   rk   streamr*   i@    z/zidane.jpg?token=123dtyper   )r*   classesN)r   r   cv2imreadstrr	   IMREAD_GRAYSCALEIMREAD_COLORrW   r   rU   rJ   randlistzerosnumpyastypenpuint8r   r   r   )rh   channelsr-   rM   batchs        r.   test_predict_imgr   t   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06:,+,F


6
#sH%RXX6E uU"a01SZ???r0   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$?r0   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(   )rk   r2   r*   rE   N)r   rU   r	   r   mkdirconvertrk   r   r   rt   ru   rv   rW   unlink)
rM   	directorysource_greyscalesource_rgbasource_non_utfsource_spacesr-   rY   r)   r[   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$$$	% 	

	r0   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*   rk   zYouTube Test Error: N)r   r   rL   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           	      p   | dk(  ryt          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.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    r8   r   r   rk   )r-   	video_urlgmcreidmdefault_argscustom_yamls         r.   test_track_streamr      s       ,89IKE	KK	.>K?	KK	n$KO 02TU ?
Uyy(C!CDhse511		+e,ecPT_defIS+>	?r0   ztask,weight,datataskweightdatareturnc                 L   t        |      }dD ]  }|j                  |d|      }|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_jsonconfusion_matrix)r   r   r   r-   r   metricss         r.   test_valr      s     LE +))Ru)=  &&(  '')  ((*+r0   z&Edge devices not intended for trainingc            	      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.yamlrm   r(   diskrE   r-   )r   epochsr*   cacher   close_mosaicnameN)r   r   trainr	   r,   s    r.   test_train_scratchr      s0     IE	KK\!2V2\]dkKl	&Mr0   c                  ^    t        t        dz        } | j                  t         ddd       y)z9Test training the YOLO model using NDJSON format dataset.
yolo11n.ptz/coco8-ndjson.ndjsonrE   r(   )r   r   r*   N)r   r   r   r   r,   s    r.   test_train_ndjsonr      s-     |+,E	KK
|#78"KMr0   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.yamlrE   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   
&Mr0   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rtdetrrp   rn   N)r   rglobr   r%   r   r	   r   )mrA   s     r.   test_all_model_yamlsr      sU    UlX%,,X6 qvv"F166N65Lr0   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   rE   r(   SGD)r   r   r*   	optimizerrn   torchscriptformatN)r   r   r   r   rL   r	   exportr,   s    r.   test_workflowr     sM     KE	KK\!2KG	IIBI	MM&M#	LLL&r0   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   
isinstancerz   rangerW   datasetbsr   r[   )	predictorpathim0srA   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   )ro   r*   test_callbackN)
r   r   add_callbackr   r	   r   rL   printshapeboxes)r   r-   r   r   r[   rim0r   s           r.   test_predict_callback_and_setupr     s    = KE	-/CD#62G	BmmGDm<G 
3osyy)or"e	r0   c                    | dk(  r	t          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#                  d
       |j%                  d
d
t        dz         |j%                  d
d
       t        |t	        |      |j                         0 y)zATest YOLO model results processing and output in various formats.zyolo11n-obb.ptz
/boats.jpgr   rn   'z' results should not be empty!r4   )r>   rr   zruns/tests/label.txtT)txt_file	save_confzruns/tests/crops/)save_dirrF   )decimals)	normalizezresults_plot_save.jpg)pilrk   filename)confr   N)r   r	   r   r   rW   r4   r|   r   r   r9   rJ   float32rl   r   	save_cropr   r   r   plot)r-   rM   r[   r   s       r.   test_resultsr  "  s&    ',/?&?J<z	"VB'd;&'R<G !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 !r0   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.jpgr   r   T)r*   rl   r  r   zbus.jpg)r   rT   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)r=   getr   ).0cd	crop_dirsr   s      r.   	<genexpr>z(test_labels_and_crops.<locals>.<genexpr>I  s4     SQ177;;q>i%@aff%@@S%@s   #AAAN)r	   r   r   r   r   r   r   stemr   clsinttolistendswithexistsrW   r   	read_text
splitlinesrz   iterdirgloballr   )imgsr[   	save_pathim_namecls_idxslabelslineprY   
crop_filesr  r   s             @@r.   test_labels_and_cropsr!  6  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)rk   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   rX   statss         r.   test_data_utilsr1  N  s     169
  IdO$008PQUPVW_djmnd
6D! cGm#**+r0   c                      ddl m} m} t        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.json)r'  yolo_labelsTF)
labels_dirr   use_segmentsuse_keypoints	cls91to80N)ultralytics.data.converterr4  r5  r$   r   r   r3  s     r.   test_data_converterr<  c  s7     P
|23=C#*=D`equvr0   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_annotatorrE  m  s)    8,///	r0   c                  h    ddl m}   |        }d|_        t        t              }d|_         ||       y)z!Test event sending functionality.r   )EventsTtestN)ultralytics.utils.eventsrG  enabledr   r   mode)rG  eventsr   s      r.   test_eventsrM  y  s+    /XFFN
{
CCH
3Kr0   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arE   brm   Nr   z
_copy.yamlF)
missing_ok>   nonetruefalse)ultralytics.cfgrO  rP  rQ  
contextlibsuppressSyntaxErrorr   cwdr   r   replacer   )rO  rP  rQ  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                  0    ddl m} m}  |          |        y)z9Test initialization utilities in the Ultralytics library.r   get_ubuntu_versionr#   N)ultralytics.utilsrb  r#   ra  s     r.   test_utils_initrd    s    Nr0   c                  
   t        j                  d       t        j                  d       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.ptr|   iX  rE   )max_dimT)warnultralyticsz8.0.0N)r!   check_yolov5u_filenamecheck_requirementscheck_imgszcheck_imshowcheck_version
print_args r0   r.   test_utils_checksrp    s\    
!!,/
g&
Sz1-
T"
0
r0   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(   rE   rF   )r*   min_timenum_timed_runsnum_warmup_runsN)ultralytics.utils.benchmarksrs  runrr  s    r.   test_utils_benchmarksry    s$     ;>""q\]^bbdr0   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_syncrE   rG      rm   )ksrF   )nN)ultralytics.nn.modules.convr{  ultralytics.utils.torch_utilsr|  r}  r~  rJ   rK   )r{  r|  r}  r~  r^  r   s         r.   test_utils_torchutilsr    sJ    0ccAr2r"ARqAAA3!!!$Kr0   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  rJ   tensorry   allcloserK   )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Kr0   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)newrE   ztest.ptNr  z9torch_save was not attempted the expected number of times)unittest.mockr  r  ultralytics.utils.patchesr  RuntimeErrorpytestraisesrJ   r{   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  rJ   r{   
fuse_convs)	r  r  r  r  r  c1c2r^  r   s	            r.   test_nn_modules_convr    s    ``FBAr2r"A b"a M"b!E"bM!DHQK 	b"ALLNaDr0   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  rJ   r{   )r  r  r  r  r  r  r  r^  s           r.   test_nn_modules_blockr    su    RRFBAr2r"A Br2JqMCBKNDRLOGBOAM"b!r0   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  ultralytics.hub.utilsr  )r  r  r  s      r.   test_hubr    s"     83
H%-=r0   c                  F    t        j                  t        t                    S )z2Load and return an image from a predefined source.)rt   ru   rv   r	   ro  r0   r.   imager    s     ::c&k""r0   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)rF   r  r  N)ultralytics.data.augmentr  r   	fromarrayrt   cvtColorCOLOR_BGR2RGBr   rJ   	is_tensorrr   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3r0   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(   rE   rm   r4   )r   r   r*   r   
iterationsr>   r   
imagenet10N)r   tunero  r0   r.   test_model_tuner  H  sM     		  &7uBWXefot u	\bQR_`inor0   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(   rS   N)r   r   r   r	   rW   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r0   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.yamlrE   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['  r0   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}| j                  || j                  |              | t        d       ddlm} ddlm} t        t        j                  g d	g d
g      t        j                  ddg            }| j                  t        ||        |t        dz        } | j                  dd       | j                  ddd       ddlm}m}  |d      } | j!                  ddd|d        |d      } | j!                  t        t        dg      t        dg            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   )YOLOE)YOLOEVPSegPredictor)gq=
ףk@g\y@gHzu@gQ̊@)x   i  r   i  rE   )bboxesr  )visual_promptsr   zcoco128-seg.yamlr(   r   r*   T)r   load_vpr*   )YOLOEPESegTrainerYOLOESegTrainerFromScratch)r   r   r   r  r*   zyoloe-11s-seg.yaml)r  r   zyoloe-11s-seg-pf.ptN)r   r   r  get_text_per	   rh  r  ultralytics.models.yolo.yoloer	  dictr~   arrayrL   r   r  r  r   )r-   r=   r  r	  visualsr  r  s          r.   
test_yoloer  ~  s{    112EuE	eU..u56	&t!A xx8:NOPHHaVG 
MM%   + 223E	II%RI0	II%t2I> \$%E	KK!   &'E	KK(:';<$RdQeBfg*   + 556E	MM&$%E	II%RI0r0   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   rE   r(   r   r   r   r*   r   r   r  T)r*   rl   r  r+   N)r   r   r   rL   r	   r,   s    r.   test_yolov10r    sM    !E	KK\!2AVKT	II<rI*	MMTT4MH	&Mr0   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.yamlrE   r(   r   r  r   )r(   r(   r  rq   Tr)   r*   rl   r  r+   onnxr   N)r   r   r   r~   r{   r   rL   r   )r-   rM   s     r.   test_multichannelr    sl    E	KK/RS[aKb	II-I.	,bhh	/B	MM2dMS	LLLr0   ztask,model,datac                 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.yamlrE   r   >   r   r   r   z*.npyr(   )r   r   r*   r   r  )r(   r(   rE   rq   Tr  r  r   r(  rS   )r   r   r  r   r    rk   r  r   r   r   r   r~   r{   r   rL   r   )r   r-   r   grayscale_datasplitnpy_filerM   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&r0   )krY  ra   r   r   pathlibr   rt   r|   r~   r  rJ   PILr   testsr   r   r   r	   r
   r   r   rh  r   r   rX  r   r   ultralytics.data.buildr   r+  r   rc  r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r,  r$   r  r%   r&   IS_TMP_WRITEABLEr/   rB   rN   markskipifr\   re   rg   parametrizer   r   r   slowr   r   rv   r   r   r   r   r   r   r   r  r!  r1  r<  rE  rM  r_  rd  rp  ry  r  r  r  r  r  r  r  fixturer  r  r  r  IS_PYTHON_3_12IS_PYTHON_3_8r  r  r  r  r%  ro  r0   r.   <module>r2     s>    
    
     P P P $ , 8 4    & 1 @#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?* +_=+3 + +3 +4 + >+ I/8`a b J'?@N AN %/ 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
> 
N+QRF))2cd
,U,uM  91	 e S91x  *O<' 'S ' ' ' ='r0   