
    |h                     T   d dl mZ d dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ g ZerWerd gZnQ e       Zej;                           ed      j>                  jA                  dd      Z!ejE                  de!e!      Z#e#re#Zd Z$ejJ                  jM                  e d      d        Z'ejJ                  jP                  ejJ                  jM                  e d      ejJ                  jS                  d eeddgdgdgddgddgddg      D  cg c])  \  } }}}}}}|r|s| dk(  r|s| dk(  r|reres	| ||||||f+ c}}}}}}}       d                      Z*ejJ                  jP                  ejJ                  jM                  dd      ejJ                  jM                  e d      ejJ                  jS                  d eedgdgdgdg      D  cg c]  \  } }}}}|r|s| ||||f c}}}}}       d                             Z+ejJ                  jM                  e d      d        Z,ejJ                  jP                  ejJ                  jM                  e d      d               Z-ejJ                  jM                  e d      d         Z.ejJ                  jP                  ejJ                  jM                  e d      d!               Z/ejJ                  jM                  e d      d"        Z0yc c}}}}}}} w c c}}}}} w )#    )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                      t         j                  j                         t        k(  sJ t         j                  j	                         t
        k(  sJ y)z4Validate CUDA settings against torch CUDA functions.N)torchcudais_availabler   device_countr        N/var/www/html/test/engine/venv/lib/python3.12/site-packages/tests/test_cuda.pytest_checksr!   !   s:    ::""$(9999::""$(9999r   zNo CUDA devices available)reasonc                  z    t        d      j                  j                  dt        d          } t	        |       sJ y)zTest AMP training checks.
yolo11n.ptcuda:r   N)r	   modeltoDEVICESr   )r&   s    r    test_ampr)   '   s8     $$''%
|(<=EUr   z/task, dynamic, int8, half, batch, simplify, nmsTF   classifyobbc                     t        t        |          j                  dd||||||t        d   	      } t        |      t        g|z  |rdndt        d          t        |      j                          y)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?   .   su      
4 !((qz ) 
D DJx%Wr"WQZPJr   zQCUDA export tests disabled pending additional Ultralytics GPU server availabilityz task, dynamic, int8, half, batchc                 P   t        t        |          j                  dd||||t        |    ddt        d   
      } t        |      t
        g|z  |rdndt        d          t        |      j                          |r)t        |      j                  d	      j                          y
d
 y
)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.cacheN)	r	   r   r;   r
   r(   r   r   r<   with_suffix)r=   r2   r3   r4   r5   r>   s         r    test_export_engine_matrixrE   M   s     
4 !((t_qz ) D DJx%Wr"WQZPJ15DJ8$++-4r   c                  >   ddl } t        t              dkD  rt        t              nt        d   }t	        t
              j                  ddd|      }t        sGt        | j                  d         }||k(  sJ d| d	| d
       t        t              dkD  r|J |J yyy)zFTest model training on a minimal dataset using available CUDA devices.r   Nr*   z
coco8.yamlr9   )rB   r1   epochsr8   CUDA_VISIBLE_DEVICESzPassed GPUs 'z', but used GPUs '')
r   lenr(   tupler	   r   trainr   evalenviron)r   r8   resultsvisibles       r    
test_trainrQ   m   s     "7|a/U7^WQZF5k\AfUGrzz"89:& VM&9KG9TU"VV !$W!1W_	
L8K	
L8K_	 r   c                     t        d      } | j                         } t        | j                        dk(  sJ  | t              }t        | j                        dk(  sJ dt
        d    }| j                  |      } t        | j                        |k(  sJ  | t              }t        | j                        |k(  sJ | j                         } t        | j                        dk(  sJ  | t              }t        | j                        dk(  sJ | j                  |      } t        | j                        |k(  sJ  | t              }t        | j                        |k(  sJ y)zBValidate model prediction consistency across CPU and CUDA devices.r$   cpur%   r   N)r	   rS   strr8   r   r(   r'   )r&   _cuda_devices      r    test_predict_multiple_devicesrW   }   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                      ddl m}   | t        t              j                  j                  dt        d          dd       y)zICheck optimal batch size for YOLO model training using autobatch utility.r   check_train_batch_sizer%      T)r1   ampN)ultralytics.utils.autobatchrZ   r	   r   r&   r'   r(   rY   s    r    test_autobatchr^      s5     C4;,,//%
|0DESVZ[r   c            
          ddl m}  t        t              j	                  ddddt
        d           | t        gdddd	dt
        d   
      j                          y)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.benchmarksra   r	   r   r;   r(   runr`   s    r    test_utils_benchmarksrh      sY     ; 	Khb$aPWXYPZ[	qz 
cer   c                     ddl m}  ddlm}  | t        dz        }|j                           |t        t        d           |t        g dt        d           |t        dz  d	d
gt        d           |t        dz  d	d
gdgt        d           |t        dz  d	d
ggdgt        d           |t        dz  dd
gd	d
ggddgt        d           |t        dz  d	d
gddgggddggt        d           |t        ddddt        dz  t        d               }|j                  t        dz         |j                          y)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*   )rm   labelsr8   i  i  d   g      ?segmentpredicti   zmobile_sam.pt)confr=   moder1   r&   r8   )	overridesN)ultralyticsrj   ultralytics.models.samrk   r   infor   r(   r   dict	set_imagereset_image)rj   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   ru   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__rN   getautodevice_fractionselect_idle_gpu	idle_gpusr!   markskipifr)   slowparametrizer?   rE   rQ   rW   r^   rh   r}   )r=   r2   r3   r4   r5   r6   r7   s   0000000r    <module>r      s       E E  8 8 < < 0 . 4 #9(.66::;Z\_`,,)<Pc - 
	 G: K(CD E K(CD5 @GD%=5'E7QFT5MDRW=@
 ;D'4uh d
 2sRU_imv 
wdE8S9  E " D!tuK(CD&
 18vvPUwYZX[0\	  -D'4u	 
wdE*	@	 E v @& K(CD
 E
 K(CD, E ,< K(CD\ E\ K(CD E " K(CD EO @s   7.L:L!