Ë
    Fêñi"  ã                   ó   — 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	rWerd gZnQ e«       Zej?                  «         e d«      jB                  jE                  dd«      Z#ejI                  de#e#¬«      xZ%re%Zd„ Z&ejN                  jQ                  e d¬«      d„ «       Z)ejN                  jT                  ejN                  jQ                  e d¬«      ejN                  jW                  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jN                  jT                  ejN                  jQ                  e d¬«      ejN                  jW                  d eedgdgdgdg«      D � ����cg c]  \  } }}}}|r|s| ||||f‘Œ c}}}}} «      d„ «       «       «       Z-ejN                  jQ                  e d¬«      d„ «       Z.ejN                  jT                  ejN                  jQ                  e d¬«      d„ «       «       Z/ejN                  jQ                  e d¬«      d„ «       Z0ejN                  jT                  ejN                  jQ                  e d¬«      d „ «       «       Z1ejN                  jQ                  e d¬«      d!„ «       Z2yc c}}}}}}} w c c}}}}} w )"é    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                  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   © ó    úQ/var/www/pod-logistic/pod-ai/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.ú
yolo26n.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é@   ©r2   r9   N)r	   r   Úexportr)   r   r   Úunlink)Útaskr3   r4   r5   r6   r7   r8   Úfiles           r!   Útest_export_onnx_matrixr@   0   su   € ô  ”
˜4Ñ Ó!×(Ñ(ØØØØØØØØÜ�q‰zð )ó €Dð „DˆƒJ”ˆx˜%Ñ©W¡r¸"ÄWÈQÁZÕPÜˆƒJ×ÑÕr    z task, dynamic, int8, half, batchc                 óü  — t        «        ddl}t        |j                  j	                  dd«      d   «      dk\  }|r|r|rt        j                  d«       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                  d	¬«       yd y)zWTest YOLO model export to TensorRT format for various configurations and run inference.r   Nú.r+   é
   zIYOLO26 INT8+dynamic export requires explicit quantization on TensorRT 10+Úenginer0   T)
r1   r2   r3   r4   r5   r6   ÚdataÚ	workspacer7   r9   r:   r;   z.cache)Ú
missing_ok)r   ÚtensorrtÚintÚ__version__ÚsplitÚpytestÚskipr	   r   r<   r
   r)   r   r   r=   Úwith_suffix)r>   r3   r4   r5   r6   ÚtrtÚis_trt10r?   s           r!   Útest_export_engine_matrixrQ   P   sâ   € ô ÔÛä�3—?‘?×(Ñ(¨¨aÓ0°Ñ3Ó4¸Ñ:€HÙ‘D™WÜ�‰Ð_Ô`ä”
˜4Ñ Ó!×(Ñ(ØØØØØØÜ�t‰_ØØÜ�q‰zð )ó €Dð „DˆƒJ”ˆx˜%Ñ©W¡r¸"ÄWÈQÁZÕPÜˆƒJ×ÑÔÙ@D„DˆƒJ×Ñ˜8Ó$×+Ñ+°tÐ+Õ<Ê$r    c                  ó4  — t        t        «      dkD  rt        t        «      nt        d   } t        sèt	        t
        «      j                  dddt        d   d¬«      }t	        t
        «      j                  ddd| dd	¬
«      }t	        t
        «      j                  ddd| dd¬«      }t        d„ t        j                  d   j                  d«      D «       «      }t        |«      dk(  r|d   n|}|| 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+   r   zcoco8-grayscale.yamlr:   éÿÿÿÿ)rE   r2   Úepochsr9   r6   z
coco8.yamlé   T)rE   r2   rT   r9   r6   Úcompilezcoco128.yamlF)rE   r2   rT   r9   r6   Úvalc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)rI   )Ú.0Úxs     r!   ú	<genexpr>ztest_train.<locals>.<genexpr>   s   è ø€ ÒV 1œ˜AŸÑVùs   ‚ÚCUDA_VISIBLE_DEVICESú,zPassed GPUs 'z', but used GPUs 'ú'N)
Úlenr)   Útupler   r	   r   Útrainr   ÚenvironrK   )r9   ÚresultsÚvisibles      r!   Ú
test_trainre   v   s  € ô  #¤7›|¨aÒ/ŒU”7Œ^´W¸Q±Z€FåÜ”u“+×#Ñ#Ð)?ÀrÐRSÔ\cÐdeÑ\fÐnpÐ#ÓqˆÜ”u“+×#Ñ#¨¸RÈÐRXÐ`bÐlpÐ#ÓqˆÜ”u“+×#Ñ#¨¸rÈ!ÐTZÐbdÐjoÐ#ÓpˆÜÑV¬¯
©
Ð3IÑ(J×(PÑ(PÐQTÓ(UÔVÓVˆÜ # G£°Ò 1�'˜!’*°wˆØ˜&Ò ÐV M°&°Ð9KÈGÈ9ÐTUÐ"VÓVÐ ä$'¬£L°1Ò$4��ÐOÐO¸7Ð;NÐOÐOÐ;N�ð 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	   rg   Ústrr9   r   r)   r(   )r'   Ú_Úcuda_devices      r!   Útest_predict_multiple_devicesrk   †   s4  € ô �Ó€Eð �I‰I‹K€EÜˆu�|‰|Ó Ò%Ð%Ð%ÙŒf‹€AÜˆu�|‰|Ó Ò%Ð%Ð%ð œ' !™*˜Ð&€KØ�H‰H�[Ó!€EÜˆu�|‰|Ó Ò+Ð+Ð+ÙŒf‹€AÜˆu�|‰|Ó Ò+Ð+Ð+ð �I‰I‹K€EÜˆu�|‰|Ó Ò%Ð%Ð%ÙŒf‹€AÜˆu�|‰|Ó Ò%Ð%Ð%ð �H‰H�[Ó!€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)r2   ÚampN)Úultralytics.utils.autobatchrn   r	   r   r'   r(   r)   rm   s    r!   Útest_autobatchrr   ¦   s5   € õ Cáœ4¤›;×,Ñ,×/Ñ/°%¼À¹
°|Ð0DÓEÈSÐVZÖ[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   ©ÚProfileModelsrD   r0   Tr+   )r1   r2   r3   r6   r9   Fé   )r2   r5   Úmin_timeÚnum_timed_runsÚnum_warmup_runsr9   N)Úultralytics.utils.benchmarksru   r	   r   r<   r)   Úrunrt   s    r!   Útest_utils_benchmarksr|   ®   sY   € õ ;ô 	ŒƒK×Ñ˜h¨b¸$ÀaÔPWÐXYÑPZÐÔ[ÙÜ	ˆØØØØØÜ�q‰zô÷ 
�c…er    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   d¬«      ¬«      }|j                  t        dz  «       |j                  «        y)z3Test SAM model predictions using different prompts.r   )ÚSAM)Ú	Predictorzsam2.1_b.pt)r9   )i·  iµ  i  iÅ  )Úbboxesr9   z
zidane.jpgi„  ir  )Úpointsr9   r+   )r�   Úlabelsr9   i�  iè  éd   g      Ð?ÚsegmentÚpredicti   zmobile_sam.ptT)Úconfr>   Úmoder2   r'   r9   r5   )Ú	overridesN)Úultralyticsr~   Úultralytics.models.samr   r   Úinfor   r)   r   ÚdictÚ	set_imageÚreset_image)r~   ÚSAMPredictorr'   Ú	predictors       r!   Útest_predict_samr‘   Á   sJ  € õ  Ý@á”˜mÑ+Ó,€EØ	‡J�J„Lñ 
Œ&œ ™Õ$Ù	Œ&Ò-´g¸a±jÕAÙ	Œ&�<Ñ
¨¨c¨
¼7À1¹:ÕFÙ	Œ&�<Ñ
¨¨c¨
¸A¸3ÄwÈqÁzÕRÙ	Œ&�<Ñ
¨#¨s¨¨¸a¸SÌÐQRÉÕTÙ	Œ&�<Ñ
¨#¨s¨°c¸3°ZÐ(@È!ÈQÈÔX_Ð`aÑXbÕcÙ	Œ&�<Ñ
¨3°¨*°t¸S°kÐ)BÐ(CÈaÐQRÈVÈHÔ]dÐefÑ]gÕhñ ÜØØØØÜ Ñ/Ü˜1‘:Øô
ô
€Ið ×Ñœ Ñ-Ô.ð ×ÑÕr    )3r   Ú	itertoolsr   Úpathlibr   rL   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Úparametrizer@   rQ   re   rk   rr   r|   r‘   )r>   r3   r4   r5   r6   r7   r8   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 '¨E¨7°Q¸°F¸TÀ5¸MÈDÐRWÈ=ó@
÷ô á;ˆD�'˜4  u¨h¸ñ ‘d ¨
Ò 2±sÀÈÂÑRUÑ_iÑmvð 
ˆw˜˜d E¨8°SÒ9÷ð óñóó Eó ðð$ ‡�×ÑØ‡�×Ñ˜�KÐ(CÐÓDØ‡�×ÑØ&ñ
 18¸À¸vÈÀvÐPUÈwÐYZÐX[Ó0\÷	ò ñ -ˆD�'˜4  uÙ™ð	 
ˆw˜˜d EÒ*öó	ñOó	ó Eó ðOð4 ‡�×Ñ˜�KÐ(CÐÓDñPó EðPð ‡�×ÑØ‡�×Ñ˜�KÐ(CÐÓDñ,ó Eó ð,ð< ‡�×Ñ˜�KÐ(CÐÓDñ\ó Eð\ð ‡�×ÑØ‡�×Ñ˜�KÐ(CÐÓDñó Eó ðð" ‡�×Ñ˜�KÐ(CÐÓDñ ó Eñ ù÷]ð ùö@s   Ä=.K<Ç$L