
    j!                     p   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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mZ d d
lmZ g Ze	rderd gZn^ e            Ze                                  e d          j!        "                    dd          Z#e$                    de#e#          xZ%re%Zd Z&ej'        (                    e d          d             Z)ej'        j*        ej'        (                    e d          ej'        +                    dd  eeddgdgdgddgddgddg          D                       d                                     Z,ej'        j*        ej'        (                    e d          ej'        +                    dd  eedgdgdgdg          D                       d                                     Z-ej'        (                    e d          d             Z.ej'        j*        ej'        (                    e d          d                         Z/ej'        (                    e d          d             Z0ej'        j*        ej'        (                    e d          d                          Z1ej'        (                    e d          d!             Z2dS )"    N)product)Path)CUDA_DEVICE_COUNTCUDA_IS_AVAILABLEMODELSOURCE)YOLO)	TASK2DATA
TASK2MODELTASKS)ASSETS	IS_JETSONWEIGHTS_DIR)GPUInfo)	check_ampcheck_tensorrt)
TORCH_1_13osYOLO_AUTODEVICE_FRACTION_FREEg333333?   )countmin_memory_fractionmin_util_fractionc                      t           j                                        t          k    sJ t           j                                        t
          k    sJ dS )z4Validate CUDA settings against torch CUDA functions.N)torchcudais_availabler   device_countr        T/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/tests/test_cuda.pytest_checksr"   #   sH    :""$$(99999:""$$(9999999r    zNo CUDA devices available)reasonc                      t          d          j                            dt          d                    } t	          |           sJ dS )zTest AMP training checks.
yolo26n.ptcuda:r   N)r	   modeltoDEVICESr   )r'   s    r!   test_ampr*   )   sI     $''(<
(<(<==EUr    z/task, dynamic, int8, half, batch, simplify, nmsc           	      t    g | ]5\  }}}}}}}|r|s'|d k    r||dk    r|rt           %t          ,|||||||f6S )classifyobb)r   r   ).0taskdynamicint8halfbatchsimplifynmss           r!   
<listcomp>r6   4   s~       ;D'4uh   !%
 2 2s 2RU_imv 
wdE8S9
 ANr    TF   c                 0   t          t          |                                        dd||||||t          d         	  	        } t          |          t          g|z  |rdndt          d                    t          |                                           dS )zLTest YOLO exports to ONNX format with various configurations and parameters.onnx    r   )	formatimgszr0   r1   r2   r3   r4   r5   device@   r<   r=   N)r	   r   exportr)   r   r   unlink)r/   r0   r1   r2   r3   r4   r5   files           r!   test_export_onnx_matrixrC   0   s      
4 !!((qz )  D DJJx%W'<rr"WQZPPPPJJr    z task, dynamic, int8, half, batchc                 0    g | ]\  }}}}}|r||||||fS r   r   )r.   r/   r0   r1   r2   r3   s         r!   r6   r6   T   sO        -D'4u
 	wdE*  r    c                 |   t                       ddl}t          |j                            dd          d                   dk    }|r|r|rt          j        d           t          t          |                    	                    dd||||t          |          dd	t          d         

  
        } t          |          t          g|z  |rdndt          d                    t          |                                           |r8t          |                              d                              d	           dS d dS )zWTest YOLO model export to TensorRT format for various configurations and run inference.r   N.r7   
   zIYOLO26 INT8+dynamic export requires explicit quantization on TensorRT 10+enginer:   T)
r;   r<   r0   r1   r2   r3   data	workspacer4   r=   r>   r?   z.cache)
missing_ok)r   tensorrtint__version__splitpytestskipr	   r   r@   r
   r)   r   r   rA   with_suffix)r/   r0   r1   r2   r3   trtis_trt10rB   s           r!   test_export_engine_matrixrU   P   sE    3?((a00344:H aD aW a_```
4 !!((t_qz )  D DJJx%W'<rr"WQZPPPPJJ@DNDJJ8$$++t+<<<<<$$$$r    c                  Z   t          t                    dk    rt          t                    nt          d         } t          st	          t
                                        dddt          d         d          }t	          t
                                        ddd| dd	
          }t	          t
                                        ddd| dd          }t          t          j	        d                   }|| k    sJ d|  d| d            t          t                    dk    r|	n|J dS dS dS )zFTest model training on a minimal dataset using available CUDA devices.r7   r   zcoco8-grayscale.yamlr>   )rI   r<   epochsr=   r3   z
coco8.yaml   T)rI   r<   rX   r=   r3   compilezcoco128.yamlF)rI   r<   rX   r=   r3   valCUDA_VISIBLE_DEVICESzPassed GPUs 'z', but used GPUs ''N)
lenr)   tupler   r	   r   trainevalr   environ)r=   resultsvisibles      r!   
test_trainre   v   s-     #7||a//U7^^^WQZF Pu++##)?rRS\cde\fnp#qqu++##RRX`blp#qqu++##r!TZbdjo#pprz"89::&   "V&"V"VG"V"V"V   $'LL1$4$47;N;NOP P <O;Nr    c                     t          d          } |                                 } t          | j                  dk    sJ  | t                    }t          | j                  dk    sJ dt
          d          }|                     |          } t          | j                  |k    sJ  | t                    }t          | j                  |k    sJ |                                 } t          | j                  dk    sJ  | t                    }t          | j                  dk    sJ |                     |          } t          | j                  |k    sJ  | t                    }t          | j                  |k    sJ dS )zBValidate model prediction consistency across CPU and CUDA devices.r%   cpur&   r   N)r	   rg   strr=   r   r)   r(   )r'   _cuda_devices      r!   test_predict_multiple_devicesrk      sx    E IIKKEu|%%%%fAu|%%%% ''!*&&KHH[!!Eu|++++fAu|++++ IIKKEu|%%%%fAu|%%%% HH[!!Eu|++++fAu|++++++r    c                      ddl m}   | t          t                    j                            dt          d                    dd           dS )zICheck optimal batch size for YOLO model training using autobatch utility.r   check_train_batch_sizer&      T)r<   ampN)ultralytics.utils.autobatchrn   r	   r   r'   r(   r)   rm   s    r!   test_autobatchrr      sZ     CBBBBB4;;,//0D
0D0DEESVZ[[[[[[r    c            
          ddl m}  t          t                                        ddddt
          d                     | t          gdddd	dt
          d         
                                           dS )z/Profile YOLO models for performance benchmarks.r   ProfileModelsrH   r:   Tr7   )r;   r<   r0   r3   r=   F   )r<   r2   min_timenum_timed_runsnum_warmup_runsr=   N)ultralytics.utils.benchmarksru   r	   r   r@   r)   runrt   s    r!   test_utils_benchmarksr|      s     ;::::: 	KKhb$aPWXYPZ[[[M	qz   
ceeeeer    c                  6   ddl m}  ddlm}  | t          dz            }|                                  |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         d                    }|
                    t          dz             |                                 dS )z3Test SAM model predictions using different prompts.r   )SAM)	Predictorzsam2.1_b.pt)r=   )i  i  i  i  )bboxesr=   z
zidane.jpgi  ir  )pointsr=   r7   )r   labelsr=   i  i  d   g      ?segmentpredicti   zmobile_sam.ptT)confr/   moder<   r'   r=   r2   )	overridesN)ultralyticsr~   ultralytics.models.samr   r   infor   r)   r   dict	set_imagereset_image)r~   SAMPredictorr'   	predictors       r!   test_predict_samr      s     @@@@@@Cm+,,E	JJLLL 
E&$$$$	E&---gajAAAA	E&<
c
71:FFFF	E&<
c
A3wqzRRRR	E&<
#saSQRTTTT	E&<
#sc3Z(@!QX_`aXbcccc	E&<
3*tSk)B(CaQRVH]def]ghhhh /1:
 
 

 
 
I -... r    )3r   	itertoolsr   pathlibr   rP   r   testsr   r   r   r   r   r	   ultralytics.cfgr
   r   r   ultralytics.utilsr   r   r   ultralytics.utils.autodevicer   ultralytics.utils.checksr   r   ultralytics.utils.torch_utilsr   r)   gpu_infoprint_status
__import__rb   getautodevice_fractionselect_idle_gpu	idle_gpusr"   markskipifr*   slowparametrizerC   rU   re   rk   rr   r|   r   r   r    r!   <module>r      sa   
			               E E E E E E E E E E E E       8 8 8 8 8 8 8 8 8 8 < < < < < < < < < < 0 0 0 0 0 0 > > > > > > > > 4 4 4 4 4 4     #799(j..6::;Z\_`` 00 31 1 
 
 
9 	 
  G: : : K(CDD  ED K(CDD5 ?FwD%=5'E7QFT5MDRW=@
 @
      ED $ K(CDD&  18vvPUwYZX[0\0\	  	 	O O	 	 ED O4 K(CDDP P EDP K(CDD, , ED ,< K(CDD\ \ ED\ K(CDD  ED " K(CDD    ED     r    