
    h                        S SK Jr  S SKJr  S SKrS SKrS SKJrJrJ	r	J
r
  S SKJr  S SKJrJrJr  S SKJrJrJr  S SKJr  S S	KJr  S S
KJr  / r\(       a^  \(       a  S /rOS\" 5       r\R;                  5         \" S5      R>                  RA                  SS5      r!\RE                  S\!\!S9=r#(       a  \#rS r$\RJ                  RM                  \(       + SS9S 5       r'\RJ                  RP                  \RJ                  RM                  \(       + SS9\RJ                  RS                  S\" \SS/S/S/SS/SS/SS/5       V VVVVVVs/ s HL  u  pp#pEnU(       a	  U(       a  M  U S:X  a	  U(       a  M'  U S:X  a  U(       a  \(       d  M=  \(       a  MF  XX#XEU4PMN     snnnnnnn 5      S 5       5       5       r*\RJ                  RP                  \RJ                  RM                  \(       + SS9\RJ                  RS                  S\" \S/S/S/S/5       V VVVVs/ s H  u  pp#nU(       a	  U(       a  M  XX#U4PM     snnnnn 5      S 5       5       5       r+\RJ                  RM                  \(       + SS9S 5       r,\RJ                  RP                  \RJ                  RM                  \(       + SS9S 5       5       r-\RJ                  RM                  \(       + SS9S 5       r.\RJ                  RP                  \RJ                  RM                  \(       + SS9S  5       5       r/\RJ                  RM                  \(       + SS9S! 5       r0gs  snnnnnnn f s  snnnnn f )"    )product)PathN)CUDA_DEVICE_COUNTCUDA_IS_AVAILABLEMODELSOURCE)YOLO)	TASK2DATA
TASK2MODELTASKS)ASSETS	IS_JETSONWEIGHTS_DIR)GPUInfo)	check_amp)
TORCH_1_13osYOLO_AUTODEVICE_FRACTION_FREEg333333?   )countmin_memory_fractionmin_util_fractionc                      [         R                  R                  5       [        :X  d   e[         R                  R	                  5       [
        :X  d   eg)z4Validate CUDA settings against torch CUDA functions.N)torchcudais_availabler   device_countr        I/home/james-whalen/.local/lib/python3.13/site-packages/tests/test_cuda.pytest_checksr!   "   s:    ::""$(9999::""$(9999r   zNo CUDA devices available)reasonc                      [        S5      R                  R                  S[        S    35      n [	        U 5      (       d   eg)zTest AMP training checks.
yolo11n.ptcuda:r   N)r	   modeltoDEVICESr   )r&   s    r    test_ampr)   (   s;     $$''%
|(<=EUr   z/task, dynamic, int8, half, batch, simplify, nmsTF   classifyobbc                     [        [        U    5      R                  SSUUUUUU[        S   S9	n[        U5      " [        /U-  U(       a  SOS[        S   S9  [        U5      R                  5         g)zLTest YOLO exports to ONNX format with various configurations and parameters.onnx    r   )	formatimgszdynamicint8halfbatchsimplifynmsdevice@   r1   r8   N)r	   r   exportr(   r   r   unlink)taskr2   r3   r4   r5   r6   r7   files           r    test_export_onnx_matrixr?   /   ss      
4 !((qz ) D 	Jx%Wr"WQZPJr   z task, dynamic, int8, half, batchc                 V   [        [        U    5      R                  SSUUUU[        U    SS[        S   S9
n[        U5      " [
        /U-  U(       a  SOS[        S   S9  [        U5      R                  5         U(       a(  [        U5      R                  S	5      R                  SS
9  gS  g)zWTest YOLO model export to TensorRT format for various configurations and run inference.enginer/   r*   Tr   )
r0   r1   r2   r3   r4   r5   data	workspacer6   r8   r9   r:   z.cache)
missing_okN)	r	   r   r;   r
   r(   r   r   r<   with_suffix)r=   r2   r3   r4   r5   r>   s         r    test_export_engine_matrixrF   O   s     
4 !((t_qz ) D 	Jx%Wr"WQZPJ@DDJ8$++t+<$r   c                  N   SSK n [        [        5      S:  a  [        [        5      O[        S   n[        (       dk  [        [        5      R                  SSSUSS9n[        U R                  S   5      nX1:X  d   S	U S
U S35       e[        [        5      S:  a  Ub	    eUc   eggg)zFTest model training on a minimal dataset using available CUDA devices.r   Nr*   z
coco8.yamlr9      )rB   r1   epochsr8   r5   CUDA_VISIBLE_DEVICESzPassed GPUs 'z', but used GPUs '')
r   lenr(   tupler   r	   r   trainevalenviron)r   r8   resultsvisibles       r    
test_trainrS   n   s     "7|a/U7^WQZF9u+##R& $ 
 rzz"89: VM&9KG9TU"VV !$W!1W_	
L8K	
L8K_ r   c                     [        S5      n U R                  5       n [        U R                  5      S:X  d   eU " [        5      n[        U R                  5      S:X  d   eS[
        S    3nU R                  U5      n [        U R                  5      U:X  d   eU " [        5      n[        U R                  5      U:X  d   eU R                  5       n [        U R                  5      S:X  d   eU " [        5      n[        U R                  5      S:X  d   eU R                  U5      n [        U R                  5      U:X  d   eU " [        5      n[        U R                  5      U:X  d   eg)zBValidate model prediction consistency across CPU and CUDA devices.r$   cpur%   r   N)r	   rU   strr8   r   r(   r'   )r&   _cuda_devices      r    test_predict_multiple_devicesrY      s4    E IIKEu||%%%fAu||%%% '!*&KHH[!Eu||+++fAu||+++ IIKEu||%%%fAu||%%% HH[!Eu||+++fAu||+++r   c                      SSK Jn   U " [        [        5      R                  R                  S[        S    35      SSS9  g)zICheck optimal batch size for YOLO model training using autobatch utility.r   check_train_batch_sizer%      T)r1   ampN)ultralytics.utils.autobatchr\   r	   r   r&   r'   r(   r[   s    r    test_autobatchr`      s5     C4;,,//%
|0DESVZ[r   c            
          SSK Jn   [        [        5      R	                  SSSS[
        S   S9  U " [        /SSSS	S[
        S   S
9R                  5         g)z/Profile YOLO models for performance benchmarks.r   ProfileModelsrA   r/   Tr*   )r0   r1   r2   r5   r8   F   )r1   r4   min_timenum_timed_runsnum_warmup_runsr8   N)ultralytics.utils.benchmarksrc   r	   r   r;   r(   runrb   s    r    test_utils_benchmarksrj      sY     ; 	Khb$aPWXYPZ[	qz 
cer   c                  R   SSK Jn   SSKJn  U " [        S-  5      nUR                  5         U" [        [        S   S9  U" [        / SQ[        S   S9  U" [        S-  S	S
/[        S   S9  U" [        S-  S	S
/S/[        S   S9  U" [        S-  S	S
//S/[        S   S9  U" [        S-  SS
/S	S
//SS/[        S   S9  U" [        S-  S	S
/SS///SS//[        S   S9  U" [        SSSS[        S-  [        S   S9S9nUR                  [        S-  5        UR                  5         g)z3Test SAM model predictions using different prompts.r   )SAM)	Predictorzsam2.1_b.pt)r8   )i  i  i  i  )bboxesr8   z
zidane.jpgi  ir  )pointsr8   r*   )ro   labelsr8   i  i  d   g      ?segmentpredicti   zmobile_sam.pt)confr=   moder1   r&   r8   )	overridesN)ultralyticsrl   ultralytics.models.samrm   r   infor   r(   r   dict	set_imagereset_image)rl   SAMPredictorr&   	predictors       r    test_predict_samr      sG     @m+,E	JJL 
&$	&-gajA	&<
c
71:F	&<
c
A3wqzR	&<
#saSQRT	&<
#sc3Z(@!QX_`aXbc	&<
3*tSk)B(CaQRVH]def]gh /1:
	I -. r   )1	itertoolsr   pathlibr   pytestr   testsr   r   r   r   rw   r	   ultralytics.cfgr
   r   r   ultralytics.utilsr   r   r   ultralytics.utils.autodevicer   ultralytics.utils.checksr   ultralytics.utils.torch_utilsr   r(   gpu_infoprint_status
__import__rP   getautodevice_fractionselect_idle_gpu	idle_gpusr!   markskipifr)   slowparametrizer?   rF   rS   rY   r`   rj   r   )r=   r2   r3   r4   r5   r6   r7   s   0000000r    <module>r      s       E E  8 8 < < 0 . 4 #9(.66::;Z\_` 00 31 1 
 
9 

  G: K(CD E K(CD5 @GD%=5'E7QFT5MDRW=@
 @
;D4u d 	:
 !%
 2s 	:
 AERU_i 	:
 nw 	:ES9@
 E $ K(CD&
 18vvPUwYZX[0\	 1],D4u	 	+E* 1]		O	 E O& K(CD
 E
" K(CD, E ,< K(CD\ E\ K(CD E " K(CD ES @s*   L: L:/L:L:
L:M,	M