a
    yf                     @   s  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 d dlmZ d	d
 Zejje dddd Zejjejjdddejje ddejddd eedgdgdgdgD dd Zejje dddd Zejjejje dddd Zejje dddd Zejjejje dddd Z ejje ddd d! Z!dS )"    )product)PathN)CUDA_DEVICE_COUNTCUDA_IS_AVAILABLEMODELSOURCE)YOLO)	TASK2DATA
TASK2MODELTASKS)ASSETSWEIGHTS_DIR)	check_ampc                   C   s(   t j tksJ t j tks$J dS )z4Validate CUDA settings against torch CUDA functions.N)torchcudaZis_availabler   Zdevice_countr    r   r   K/var/www/html/django/DPS/env/lib/python3.9/site-packages/tests/test_cuda.pytest_checks   s    r   zCUDA is not available)reasonc                  C   s   t dj } t| sJ dS )zTest AMP training checks.
yolo11n.ptN)r   modelr   r   )r   r   r   r   test_amp   s    r   TzQCUDA export tests disabled pending additional Ultralytics GPU server availabilityz task, dynamic, int8, half, batchc                 C   s,   g | ]$\}}}}}|r|s|||||fqS r   r   ).0taskdynamicint8halfbatchr   r   r   
<listcomp>"   s   r   F   c                 C   sp   t t|  jdd||||t|  ddd	}t |tg| |r>dndd t|  |rht|d nd	 d	S )
zWTest YOLO model export to TensorRT format for various configurations and run inference.engine       T)	formatimgszr   r   r   r   dataZ	workspacesimplify@   )r$   z.cacheN)r   r
   exportr	   r   r   unlinkwith_suffix)r   r   r   r   r   filer   r   r   test_export_engine_matrix   s    r,   c                  C   s.   t dkrdnddg} ttjddd| d dS )zFTest model training on a minimal dataset using available CUDA devices.r"   r   z
coco8.yamlr'   )r%   r$   ZepochsdeviceN)r   r   r   trainr-   r   r   r   
test_train<   s    r0   c                  C   s   t d} |  } t| jdks"J | t}t| jdks<J | d} t| jdksXJ | t}t| jdksrJ |  } t| jdksJ | t}t| jdksJ |  } t| jdksJ | t}t| jdksJ dS )zBValidate model prediction consistency across CPU and CUDA devices.r   cpuzcuda:0N)r   r1   strr-   r   tor   )r   _r   r   r   test_predict_multiple_devicesC   s"    
r5   c                  C   s(   ddl m}  | ttj ddd dS )zICheck optimal batch size for YOLO model training using autobatch utility.r   check_train_batch_size   T)r$   ampN)Zultralytics.utils.autobatchr7   r   r   r   r   r6   r   r   r   test_autobatch]   s    r:   c                  C   s@   ddl m}  ttjddddd | tgdddd	dd
  dS )z/Profile YOLO models for performance benchmarks.r   ProfileModelsr    r!   Tr"   )r#   r$   r   r   F   )r$   r   Zmin_timeZnum_timed_runsZnum_warmup_runsN)Zultralytics.utils.benchmarksr<   r   r   r(   Zprofiler;   r   r   r   test_utils_benchmarkse   s    r>   c                  C   s   ddl m}  ddlm} | td }|  |tdd |tg ddd |td d	d
gdgdd tddddtd d}||d}|	td  |
  dS )zcTest SAM model predictions using different prompts, including bounding boxes and point annotations.r   )SAM)	Predictorzsam_b.ptr/   )i  i  i  i  )Zbboxesr-   z
zidane.jpgi  ir  r"   )Zpointslabelsr-   g      ?segmentZpredicti   zmobile_sam.pt)confr   moder$   r   )	overridesN)ultralyticsr?   Zultralytics.models.samr@   r   infor   r   dictZ	set_imageZreset_image)r?   ZSAMPredictorr   rE   Z	predictorr   r   r   test_predict_samp   s    
rI   )"	itertoolsr   pathlibr   Zpytestr   testsr   r   r   r   rF   r   Zultralytics.cfgr	   r
   r   Zultralytics.utilsr   r   Zultralytics.utils.checksr   r   markZskipifr   ZslowZparametrizer,   r0   r5   r:   r>   rI   r   r   r   r   <module>   sB   



	