Ë
    FêñiÀ†  ã            	       ó†  — d dl Z d dlZd dlZd dlZ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Zd dlZd dlmZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZmZ d dlmZ d d	lmZ d d
l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6 d„ Z7d„ Z8d„ Z9d„ Z:ejv                  jy                  dd¬«      d„ «       Z=ejv                  jy                  dd¬«      d„ «       Z>ejv                  j                  de«      d„ «       Z@ejv                  j                  de«      d„ «       ZAd„ ZBejv                  j†                  ejv                  jy                  e* d¬«      d„ «       «       ZDejv                  j†                  ejv                  jy                  e* d¬«      ejv                  jy                   e0«       d¬«      d„ «       «       «       ZEejv                  jy                  e* d¬«      ejv                  j                  de«      d„ «       «       ZFejv                  j                  d e«      d!eGd"eGd#eGd$dfd%„«       ZHejv                  jy                  e* d¬«      ejv                  jy                  e&xs e'd&¬«      d'„ «       «       ZIejv                  jy                  e* d¬«      d(„ «       ZJejv                  j                  d)d*dg«      d+„ «       ZKd,„ ZLejv                  jy                  e-d-¬«      d.„ «       ZMd/„ ZNejv                  j                  de«      deGfd0„«       ZOd1„ ZPejv                  jy                  e* d¬«      d2„ «       ZQd3„ ZRd4„ ZSd5„ ZTejv                  jy                  e* d¬«      d6„ «       ZUd7„ ZVd8„ ZWd9„ ZXd:„ ZYd;„ ZZejv                  jy                  e-d<¬«      d=„ «       Z[d>„ Z\d?„ Z]d@„ Z^ejv                  j†                  dA„ «       Z_dB„ Z`dC„ Zaejv                  jy                  e* d¬«      dD„ «       ZbejÆ                  dE„ «       Zdejv                  j                  dFg dG¢«      dH„ «       Zeejv                  j†                  ejv                  jy                  e* d¬«      dI„ «       «       Zfejv                  j†                  ejv                  jy                  e* xs e/jÎ                   d¬«      dJ„ «       «       ZhdK„ Ziejv                  jy                  e/jÔ                  dL¬«      ejv                  jy                  e/jÖ                  xr e(xr e!dM¬«      dN„ «       «       Zlejv                  jy                  e6 dO¬«      ejv                  jy                  e/jÔ                  dP¬«      ejv                  jy                  e/jÖ                  xr e(xr e!dQ¬«      dR„ «       «       «       ZmdS„ ZndT„ Zoejv                  j                  dUe«      d!eGdeGd#eGd$dfdV„«       Zpy)Wé    N)Úcopy)ÚPath)ÚImage)ÚCFGÚMODELÚMODELSÚSOURCEÚSOURCES_LISTÚTASK_MODEL_DATA)ÚRTDETRÚYOLO)Ú	TASK2DATAÚTASKS)Úload_inference_source)Úcheck_det_dataset)ÚARM64ÚASSETSÚ
ASSETS_URLÚDEFAULT_CFGÚDEFAULT_CFG_PATHÚ	IS_JETSONÚIS_RASPBERRYPIÚLINUXÚLOGGERÚONLINEÚROOTÚWEIGHTS_DIRÚWINDOWSÚYAMLÚchecksÚis_github_action_running)ÚdownloadÚsafe_download)Ú
TORCH_1_11Ú
TORCH_1_13c                  ó8   — t        t        «      }  | ddd¬«       y)z(Test the forward pass of the YOLO model.Né    T)ÚsourceÚimgszÚaugment)r   r   ©Úmodels    úS/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/tests/test_python.pyÚtest_model_forwardr.   ,   s   € ä”‹I€EÙ	�˜R¨Ö.ó    c                  óv  — t        t        «      } | j                  dd¬«       | j                  «       } | j	                  t        «      } | j                  d«       | j                  «        | j                  d«       | j                  «        | j                  }| j                  }| j                  }| j                  }y)zVTest various methods and properties of the YOLO model to ensure correct functionality.T)ÚverboseÚdetailedÚcpuÚon_train_startN)r   r   ÚinfoÚreset_weightsÚloadÚtoÚfuseÚclear_callbackÚreset_callbacksÚnamesÚdeviceÚ
transformsÚtask_map)r,   Ú_s     r-   Útest_model_methodsrA   2   s�   € ä”‹K€Eð 
‡J�J�t d€JÔ+Ø×ÑÓ!€EØ�J‰J”uÓ€EØ	‡H�HˆU„OØ	‡J�J„LØ	×ÑÐ)Ô*Ø	×ÑÔð 	�‰€AØ�‰€AØ×Ñ€AØ�‰�Ar/   c                  ót   — ddl m}   | «       }t        j                  dddd«      }|j	                  |d¬«      }y)	z^Test profiling of the YOLO model with `profile=True` to assess performance and resource usage.r   )ÚDetectionModelé   é   é@   T)ÚprofileN)Úultralytics.nn.tasksrC   ÚtorchÚrandnÚpredict)rC   r,   Úimr@   s       r-   Útest_model_profilerM   F   s3   € å3áÓ€EÜ	�‰�Q˜˜2˜rÓ	"€BØ�‰�b $ˆÓ'�Ar/   c                 ó   — | dz  }t        |d«      5 }t        D ]  }|j                  |› d�«       Œ 	 ddd«        t        t        «      |d¬«      }t        |«      dk(  sJ dt        |«      › �«       ‚y# 1 sw Y   ŒBxY w)	zVTest YOLO predictions with file, directory, and pattern sources listed in a text file.zsources_multi_row.txtÚwú
Nr'   ©r(   r)   é   z)Expected 7 results from source list, got )Úopenr
   Úwriter   r   Úlen)Útmp_pathÚfileÚfÚsrcÚresultss        r-   Útest_predict_txtr[   O   s…   € àÐ-Ñ-€DÜ	ˆd�C‹ð  ˜AÜò 	 ˆCØ�G‰G�s�e˜2�JÕñ	 ÷ ð Œd”5‹k ¨RÔ0€GÜˆw‹<˜1ÒÐXÐ IÌ#ÈgË,ÈÐXÓXÑ÷	 ð  ús   ’ A4Á4A=Tzdisabled for testing)Úreasonc                 ód  — | dz  }t        |dd¬«      5 }t        j                  |«      }|j                  dg«       |j	                  t
        D �cg c]  }|g‘Œ c}«       ddd«        t        t        «      |d¬«      }t        |«      d	k(  sJ d
t        |«      › �«       ‚yc c}w # 1 sw Y   ŒGxY w)zITest YOLO predictions with sources listed in multiple rows of a CSV file.zsources_multi_row.csvrO   Ú ©Únewliner(   Nr'   rQ   rR   z+Expected 7 results from multi-row CSV, got )	rS   ÚcsvÚwriterÚwriterowÚ	writerowsr
   r   r   rU   )rV   rW   rX   rb   rY   rZ   s         r-   Útest_predict_csv_multi_rowre   Y   s¥   € ð Ð-Ñ-€DÜ	ˆd�C Ô	$ð :¨Ü—‘˜A“ˆØ�‰˜˜
Ô#Ø×Ñ¬<Ö8 C˜3š%Ò8Ô9÷:ð Œd”5‹k ¨RÔ0€GÜˆw‹<˜1ÒÐZÐ KÌCÐPWËLÈ>ÐZÓZÑùò 9÷:ð :ús   ”;B&Á
B!
ÁB&Â!B&Â&B/c                 ó  — | dz  }t        |dd¬«      5 }t        j                  |«      }|j                  t        «       ddd«        t        t        «      |d¬«      }t        |«      dk(  sJ d	t        |«      › �«       ‚y# 1 sw Y   ŒBxY w)
zHTest YOLO predictions with sources listed in a single row of a CSV file.zsources_single_row.csvrO   r^   r_   Nr'   rQ   rR   z,Expected 7 results from single-row CSV, got )rS   ra   rb   rc   r
   r   r   rU   )rV   rW   rX   rb   rZ   s        r-   Útest_predict_csv_single_rowrg   e   sƒ   € ð Ð.Ñ.€DÜ	ˆd�C Ô	$ð &¨Ü—‘˜A“ˆØ�‰œÔ%÷&ð Œd”5‹k ¨RÔ0€GÜˆw‹<˜1ÒÐ[Ð LÌSÐQXË\ÈNÐ[Ó[Ñ÷	&ð &ús   ”+B Â B	Ú
model_namec           
      ó  — | dk(  rdnd}t        t        | z  «      }t        j                  t	        t
        «      |dk(  rt        j                  nt        j                  ¬«      }t         |t        j                  t
        «      ddd¬«      «      dk(  sJ ‚t         ||ddd¬«      «      dk(  sJ ‚t         |t        j                  d	|ddf«      d¬
«      «      d	k(  sJ ‚t         |||gddd¬«      «      d	k(  sJ ‚t        t         |||gddd¬«      «      «      d	k(  sJ ‚t         |t        j                  dd|«      j                  «       j!                  t"        j$                  «      d¬
«      «      dk(  sJ ‚t	        t
        «      t'        t
        «      t(        rdnt
        |t        j                  t
        «      t#        j                  dd|ft"        j$                  ¬«      g}t         ||dd¬«      «      t        |«      k(  sJ ‚y)z^Test YOLO model predictions on various image input types and sources, including online images.zyolo11n-grayscale.ptrD   rE   )ÚflagsTr'   )r(   Úsaver1   r)   )r(   rk   Úsave_txtr)   é   ©r)   )r(   rk   Ústreamr)   é@  é€  zKhttps://cdn.jsdelivr.net/gh/ultralytics/assets@main/im/zidane.jpg?token=123©Údtyper   )r)   ÚclassesN)r   r   Úcv2ÚimreadÚstrr	   ÚIMREAD_GRAYSCALEÚIMREAD_COLORrU   r   rS   rI   ÚrandÚlistÚzerosÚnumpyÚastypeÚnpÚuint8r   r   )rh   Úchannelsr,   rL   Úbatchs        r-   Útest_predict_imgrƒ   p   s°  € ð Ð"8Ò8‰q¸a€HÜ”˜zÑ)Ó*€EÜ	�‰”Cœ“K¸xÈ1º}¤s×';Ò';ÔRU×RbÑRbÔ	c€BÜ‰uœEŸJ™J¤vÓ.°TÀ4ÈrÔRÓSÐWXÒXÐXÐXÜ‰u˜B T°DÀÔCÓDÈÒIÐIÐIÜ‰u”U—Z‘Z  H¨b°"Ð 5Ó6¸bÔAÓBÀaÒGÐGÐGÜ‰u˜R ˜H¨4¸$ÀbÔIÓJÈaÒOÐOÐOÜŒt‘E " b °¸TÈÔLÓMÓNÐRSÒSÐSÐSÜ‰u”U—[‘[  c¨8Ó4×:Ñ:Ó<×CÑCÄBÇHÁHÓMÐUWÔXÓYÐ]^Ò^Ð^Ð^äŒF‹ÜŒV‹ÝY_ÑUÔekØ
Ü�
‰
”6ÓÜ
�‰�#�s˜HÐ%¬R¯X©XÔ6ð€Eô ‰u�U "¨aÔ0Ó1´S¸³ZÒ?Ð?Ñ?r/   r,   c                 óB   —  t        t        | z  «      t        dd¬«       y)zZTest model prediction methods with 'visualize=True' to generate prediction visualizations.r'   T)r)   Ú	visualizeN)r   r   r	   r+   s    r-   Útest_predict_visualizer†   ‡   s   € ð „DŒ�uÑ	Óœf¨B¸$Ö?r/   c           	      ó\  — t        j                  t        «      }| dz  }| dz  }| dz  }| dz  }|j                  d«      j	                  |«       |j                  d«      j	                  |«       |j	                  |«       |j	                  |«       t        t        «      }||||fD ]…  }t        j                  |«      t        j                  t        |«      «      |fD ]<  } ||ddd¬	«      }	t        |	«      d
k(  rŒJ d|j                  › dt        |	«      › �«       ‚ |j                  «        Œ‡ y)zbTest YOLO prediction on SOURCE converted to grayscale and 4-channel images with various filenames.zgrayscale.jpgz4ch.pngu$   non_UTF_æµ‹è¯•æ–‡ä»¶_tÃ©st_image.jpgzimage with spaces.jpgÚLÚRGBATr'   )rk   r1   r)   rD   zExpected 1 result for z, got N)r   rS   r	   Úconvertrk   r   r   ru   rv   rw   rU   ÚnameÚunlink)
rV   rL   Úsource_grayscaleÚsource_rgbaÚsource_non_utfÚsource_spacesr,   rX   r(   rZ   s
             r-   Útest_predict_gray_and_4chr‘   �   s  € ä	�‰”FÓ	€Bà /Ñ1ÐØ˜YÑ&€KØÐ FÑF€NØÐ6Ñ6€Mà‡J�JˆsƒO×ÑÐ)Ô*Ø‡J�JˆvÓ×Ñ˜KÔ(Ø‡G�GˆNÔØ‡G�GˆMÔô ”‹K€EØÐ*¨N¸MÐIò ˆÜ—j‘j “m¤S§Z¡Z´°A³Ó%7¸Ð:ò 	\ˆFÙ˜F¨°tÀ2ÔFˆGÜ�w“< 1Ó$Ð[Ð(>¸q¿v¹v¸hÀfÌSÐQXË\ÈNÐ&[Ó[Ð$ð	\ð 	
�‰�
ñ	r/   zenvironment is offlinec                  óê  — t        d«      } t        | d   «      }h d£}|dz  dz  j                  d«      D �cg c]0  }|j                  j	                  «       j                  d«      |v sŒ/|‘Œ2 }}||dz  dz  j                  d«      D �cg c]0  }|j                  j	                  «       j                  d«      |v sŒ/|‘Œ2 c}z  }t        |«      d	k(  sJ d
t        |«      › �«       ‚|D �ch c]+  }|j                  j	                  «       j                  d«      ’Œ- }}||k(  sJ d||z
  › �«       ‚t        t        «      } ||d¬«      }t        |«      d	k(  sJ dt        |«      › �«       ‚yc c}w c c}w c c}w )zbPredict on all 12 image formats (AVIF, BMP, DNG, HEIC, JP2, JPEG, JPG, MPO, PNG, TIF, TIFF, WebP).úcoco12-formats.yamlÚpath>   ÚbmpÚdngÚjp2ÚjpgÚmpoÚpngÚtifÚavifÚheicÚjpegÚtiffÚwebpÚimagesÚtrainz*.*ú.Úvalé   zExpected 12 images, found zMissing formats: r'   rn   zExpected 12 results, got N)	r   r   ÚglobÚsuffixÚlowerÚlstriprU   r   r   )	ÚdataÚdataset_pathÚexpectedrL   r¡   ÚimgÚ
extensionsr,   rZ   s	            r-   Útest_predict_all_image_formatsr¯   ¤   sp  € ô
 Ð2Ó3€DÜ˜˜V™Ó%€Lò i€HØ(¨8Ñ3°gÑ=×CÑCÀEÓJÖx�RÈbÏiÉiÏoÉoÓN_×NfÑNfÐgjÓNkÐowÒNwŠbÐx€FÐxØ
˜\¨HÑ4°uÑ<×BÑBÀ5ÓIÖw�bÈRÏYÉYÏ_É_ÓM^×MeÑMeÐfiÓMjÐnvÒMvŠrÒwÑw€FÜˆv‹;˜"ÒÐHÐ :¼3¸v»;¸-ÐHÓHÐð =CÖC°S�#—*‘*×"Ñ"Ó$×+Ñ+¨CÕ0ÐC€JÐCØ˜Ò!ÐNÐ%6°xÀ*Ñ7LÐ6MÐ#NÓNÐ!ô ”‹K€EÙ�F "Ô%€GÜˆw‹<˜2ÒÐIÐ!:¼3¸w»<¸.ÐIÓIÑùò yùÚwùò Ds   ·0E&Á(E&Â0E+Â9E+Ã'0E0z:No auth https://github.com/JuanBindez/pytubefix/issues/166c                  óÜ   — t        t        «      } 	 | j                  ddd¬«       y# t        j                  j
                  t        f$ r"}t        j                  d|› �«       Y d}~yd}~ww xY w)zUTest YOLO model on a YouTube video stream, handling potential network-related errors.zhttps://youtu.be/G17sBkb38XQé`   T)r)   rk   zYouTube Test Error: N)r   r   rK   ÚurllibÚerrorÚ	HTTPErrorÚConnectionErrorr   )r,   Úes     r-   Útest_youtuber·   ¼   s[   € ô
 ”‹K€Eð1Ø�‰Ð4¸BÀTˆÕJøä�L‰L×"Ñ"¤OÐ4ò 1Ü�‰Ð+¨A¨3Ð/×0Ñ0ûð1ús   ‘& ¦#A+Á	A&Á&A+c           	      óh  — | dk(  ryt         › d�}t        | «      } | j                  |dd¬«       | j                  |ddd¬	«       t        g d
¢g d¢«      D ]\  \  }}t	        j
                  t        dz  «      }|d|› d�z  }t	        j                  |i |¥|d|dœ¥«       | j                  |d|¬«       Œ^ y)z½Test streaming tracking on a short 10 frame video using ByteTrack tracker and different GMC methods.

    Note imgsz=160 required for tracking for higher confidence and better matches.
    úyolo26n-cls.ptNz/decelera_portrait_min.mové    zbytetrack.yaml)r)   Útrackerzbotsort.yamlT)r)   r»   Úsave_frames)ÚorbÚsiftÚecc)ÚautorÀ   r¹   zcfg/trackers/botsort.yamlzbotsort-ú.yaml)Ú
gmc_methodÚ	with_reidr,   )r   r   ÚtrackÚzipr   r7   r   rk   )r,   rV   Ú	video_urlÚgmcÚreidmÚdefault_argsÚcustom_yamls          r-   Útest_track_streamrË   É   sÃ   € ð Ð Ò ØÜ�,Ð8Ð9€IÜ�‹K€EØ	‡K�K�	 Ð.>€KÔ?Ø	‡K�K�	 ¨nÈ$€KÔOô Ò0Ò2TÓUò ?‰
ˆˆUÜ—y‘y¤Ð(CÑ!CÓDˆØ 8¨C¨5°Ð!6Ñ6ˆÜ�	‰	�+Ðe ,Ðe¸cÐPTÐ_dÒeÔfØ�‰�I S°+ˆÕ>ñ	?r/   ztask,weight,dataÚtaskÚweightrª   Úreturnc                 óL  — t        |«      }dD ]”  }|j                  |d|¬«      }|j                  «        |j                  «        |j	                  «        |j
                  j                  «        |j
                  j                  «        |j
                  j	                  «        Œ– y)z+Test the validation mode of the YOLO model.>   FTr'   )rª   r)   ÚplotsN)r   r¤   Úto_dfÚto_csvÚto_jsonÚconfusion_matrix)rÌ   rÍ   rª   r,   rÐ   Úmetricss         r-   Útest_valrÖ   ß   sƒ   € ô �‹L€EØò +ˆØ—)‘) ¨R°u�)Ó=ˆØ�‰ŒØ�‰ÔØ�‰Ôà× Ñ ×&Ñ&Ô(Ø× Ñ ×'Ñ'Ô)Ø× Ñ ×(Ñ(Õ*ñ+r/   z&Edge devices not intended for trainingc            	      ój   — t        t        «      } | j                  ddddddd¬«        | t        «       y	)
zdTest training the YOLO model from scratch on 12 different image types in the COCO12-Formats dataset.r“   rm   r'   ÚdiskéÿÿÿÿrD   r,   )rª   Úepochsr)   Úcacher‚   Úclose_mosaicr‹   N)r   r   r¢   r	   r+   s    r-   Útest_train_scratchrÝ   î   s2   € ô ”‹I€EØ	‡K�KÐ*°1¸BÀfÐTVÐefÐmt€KÔuÙ	Œ&…Mr/   c                  ó^   — t        t        dz  «      } | j                  t        › d�dd¬«       y)z9Test training the YOLO model using NDJSON format dataset.ú
yolo26n.ptz/coco8-ndjson.ndjsonrD   r'   )rª   rÚ   r)   N)r   r   r¢   r   r+   s    r-   Útest_train_ndjsonrà   ÷   s-   € ô ”˜|Ñ+Ó,€EØ	‡K�Kœ
�|Ð#7Ð8ÀÈ"€KÕMr/   ÚsclsFc           
      ór   — t        t        dz  «      }|j                  ddddddd| ¬«        |t        «       y	)
zGTest training of the YOLO model starting from a pre-trained checkpoint.úyolo26n-seg.ptzcoco8-seg.yamlrD   r'   Úramç      à?r   )rª   rÚ   r)   rÛ   Ú
copy_pasteÚmixupr‹   Ú
single_clsN)r   r   r¢   r	   )rá   r,   s     r-   Útest_train_pretrainedré   þ   sB   € ô ”Ð/Ñ/Ó0€EØ	‡K�KØ a¨r¸È3ÐVYÐ`aÐnrð ô ñ 
Œ&…Mr/   c                  óÜ   — t         dz  dz  j                  d«      D ]N  } d| j                  v r)t        sŒ t	        | j                  «      t
        d¬«      }Œ:t        | j                  «       ŒP y)z]Test YOLO model creation for all available YAML configurations in the `cfg/models` directory.ÚcfgÚmodelsz*.yamlÚrtdetrrq   rn   N)r   Úrglobr‹   r$   r   r	   r   )Úmr@   s     r-   Útest_all_model_yamlsrð     sU   € ä�U‰l˜XÑ%×,Ñ,¨XÓ6ò ˆØ�q—v‘vÑÞØ"”F˜1Ÿ6™6“N¤6°Ô5‘ä�—‘�Lñr/   zPWindows slow CI export bug https://github.com/ultralytics/ultralytics/pull/16003c                  óÂ   — t        t        «      } | j                  dddd¬«       | j                  d¬«       | j	                  t
        d¬«       | j                  d¬«       y	)
zUTest the complete workflow including training, validation, prediction, and exporting.ú
coco8.yamlrD   r'   ÚSGD)rª   rÚ   r)   Ú	optimizerrn   Útorchscript©ÚformatN)r   r   r¢   r¤   rK   r	   Úexportr+   s    r-   Útest_workflowrù     sM   € ô ”‹K€EØ	‡K�K�\¨!°2À€KÔGØ	‡I�I�B€IÔØ	‡M�M”& €MÔ#Ø	‡L�L˜€LÕ&r/   c                  ó4  — d„ } t        t        «      }|j                  d| «       t        t        ¬«      }|j
                  }|j                  |dd¬«      }|D ]?  \  }}}t        d|j                  «       t        d|«       |j                  }t        |«       ŒA y)	zGTest callback functionality during YOLO prediction setup and execution.c                 óú   — | j                   \  }}}t        |t        «      r|n|g}t        t	        |«      «      D �cg c]  }| j
                  j                  ‘Œ }}t        | j                  ||«      | _        yc c}w )zKCallback function that handles operations at the end of a prediction batch.N)	r‚   Ú
isinstancer{   ÚrangerU   ÚdatasetÚbsrÅ   rZ   )Ú	predictorr”   Úim0sr@   rÿ   s        r-   Úon_predict_batch_endz=test_predict_callback_and_setup.<locals>.on_predict_batch_end  sg   € à!Ÿ™‰ˆˆd�AÜ! $¬Ô-‰t°D°6ˆÜ,1´#°d³)Ó,<Ö= qˆi×Ñ×"Ó"Ð=ˆÐ=Ü 	× 1Ñ 1°4¸Ó<ˆ	Õùò >s   ¼A8r  )r(   Trº   )ro   r)   Útest_callbackN)
r   r   Úadd_callbackr   r	   rÿ   rK   ÚprintÚshapeÚboxes)r  r,   rþ   rÿ   rZ   ÚrÚim0r  s           r-   Útest_predict_callback_and_setupr
    sˆ   € ò=ô ”‹K€EØ	×ÑÐ-Ð/CÔDä#¬6Ô2€GØ	�‰€BØ�m‰m˜G¨D¸ˆmÓ<€GØò ‰
ˆˆ3�Üˆo˜sŸy™yÔ)Üˆo˜rÔ"Ø—‘ˆÜˆe�ñ	r/   c                 ó¤  — | dk(  rdnt         } t        t        | z  «      ||gd¬«      }|D �]!  }t        |«      sJ d| › d�«       ‚|j	                  «       j                  «       }t        |t        |«      |j                  «       |j                  dt        j                  ¬«      }|j                  |d	z  d
¬«       |j                  |dz  ¬«       |j                  d¬«       |j                  «        |j                  d
¬«       |j!                  d
d
|dz  ¬«       |j!                  d
d
¬«       t        |t        |«      |j                  «       �Œ$ y)zATest YOLO model results processing and output in various formats.zyolo26n-obb.ptz@https://cdn.jsdelivr.net/gh/ultralytics/assets@main/im/boats.jpgrº   rn   ú'z' results should not be empty!r3   )r=   rs   zruns/tests/label.txtT)Útxt_fileÚ	save_confzruns/tests/crops/)Úsave_dirrE   )Údecimals)Ú	normalizezresults_plot_save.jpg)Úpilrk   Úfilename)Úconfr  N)r	   r   r   rU   r3   r}   r  r”   r8   rI   Úfloat32rl   Ú	save_croprÑ   rÒ   rÓ   Úplot)r,   rV   rL   rZ   r  s        r-   Útest_resultsr  3  s#  € ð PUÐXhÒOhÑ	KÔnt€BØ'Œd”; Ñ&Ó'¨¨R¨¸Ô<€GØó !ˆÜ�1ŒvÐ@˜˜5˜'Ð!?Ð@Ó@ˆvØ�E‰E‹G�M‰M‹OˆÜˆa”�Q“˜Ÿ™Ô Ø�D‰D˜¤U§]¡]ˆDÓ3ˆØ	�
‰
˜HÐ'=Ñ=Èˆ
ÔNØ	�‰˜XÐ(;Ñ;ˆÔ<Ø	�‰˜ˆÔØ	�‰Œ
Ø	�	‰	˜Dˆ	Ô!Ø	�‰�4˜d¨XÐ8OÑ-OˆÔPØ	�‰�D ˆÔ%Üˆa”�Q“˜Ÿ™Ö ñ!r/   c                  óä  ‡‡— t         t        dz  g}  t        t        dz  «      | ddd¬«      }t	        |d   j
                  «      }|D �]  Št	        ‰j                  «      j                  }‰j                  j                  j                  «       j                  «       }t        |«      dk\  sJ dt        |«      › �«       ‚|d	|› d
�z  }|j                  «       sJ d|› d�«       ‚t        |j                  «       j                  «       D �cg c]  }|sŒ|‘Œ	 c}«      }t        ‰j                  j                   «      |k(  s*J dt        ‰j                  j                   «      › d|› �«       ‚t#        |dz  j%                  «       «      }|D �	�
cg c]  }	|	j'                  d«      D ]  }
|
‘Œ Œ }}	}
|D �ch c]  }|j(                  ’Œ c}Št+        ˆˆfd„|D «       «      sJ d‰› d|› �«       ‚t        |D �
cg c]  }
||
j(                  v sŒ|
‘Œ c}
«      }|t        ‰j                  j                   «      k(  r�ŒéJ d|› dt        ‰j                  j                   «      › �«       ‚ yc c}w c c}
}	w c c}w c c}
w )zLTest output from prediction args for saving YOLO detection labels and crops.z
zidane.jpgrß   rp   T)r)   rl   r  r   rm   z$Expected at least 2 detections, got zlabels/z.txtzLabel file z does not existz
Box count z != label count ÚcropsÚ*c              3   óX   •K  — | ]!  }‰j                   j                  |«      ‰v –— Œ# y ­w)N)r<   Úget)Ú.0ÚcÚcrop_dir_namesr  s     €€r-   ú	<genexpr>z(test_labels_and_crops.<locals>.<genexpr>\  s"   øè ø€ ÒF¸�1—7‘7—;‘;˜q“> ^Ô3ÑFùs   ƒ'*z
Crop dirs z don't match classes zCrop count z != detection count N)r	   r   r   r   r   r  r”   Ústemr  ÚclsÚintÚtolistrU   ÚexistsÚ	read_textÚ
splitlinesrª   r{   Úiterdirr¦   r‹   Úall)ÚimgsrZ   Ú	save_pathÚim_nameÚcls_idxsÚlabelsÚlineÚlabel_countÚ	crop_dirsÚprX   Ú
crop_filesÚdÚ
crop_countr   r  s                 @@r-   Útest_labels_and_cropsr7  G  s6  ù€ ä”F˜\Ñ)Ð*€DØ.Œd”; Ñ-Ó.¨t¸3ÈÐY]Ô^€GÜ�W˜Q‘Z×(Ñ(Ó)€IØó rˆÜ�q—v‘v“,×#Ñ#ˆØ—7‘7—;‘;—?‘?Ó$×+Ñ+Ó-ˆä�8‹} Ò!ÐYÐ%IÌ#ÈhË-ÈÐ#YÓYÐ!à˜w w i¨tÐ4Ñ4ˆØ�}‰}ŒÐE +¨f¨X°_Ð EÓEˆä¨F×,<Ñ,<Ó,>×,IÑ,IÓ,KÖT DÊtš4ÒTÓUˆÜ�1—7‘7—<‘<Ó  KÒ/Ðn°:¼cÀ!Ç'Á'Ç,Á,Ó>OÐ=PÐP`ÐalÐ`mÐ1nÓnÐ/ä˜) gÑ-×6Ñ6Ó8Ó9ˆ	Ø!*×@˜A°A·F±F¸3³KÒ@¨q’aÐ@�aÐ@ˆ
Ñ@à*3Ö4 Q˜!Ÿ&›&Ò4ˆÜÔF¸XÔFÔFð 	
Ø˜Ð(Ð(=¸h¸ZÐHó	
ÐFô  ZÖE °7¸a¿f¹fÒ3Dš!ÒEÓFˆ
ØœS §¡§¡Ó.Ô.Ðq°+¸j¸\ÐI]Ô^aÐbc×biÑbi×bnÑbnÓ^oÐ]pÐ0qÓqÐ.ñ+rùò Uùó Aùâ4ùò
 Fs$   ÄI
ÄI
ÆI"Æ-I(Ç.I-
ÈI-
c                 ó,  — ddl m} ddlm} ddlm} t        D ]c  }t        t        |   «      j                  d«      }t        d|› �d| ¬«        || |z  |¬	«      }|j                  d
¬«       |j                  «        Œe  || dz  «        || dz  «       y)zWTest data utility functions including dataset stats, auto-splitting, and zip archiving.r   )Ú	autosplit)ÚHUBDatasetStats)Úzip_directoryz.zipz=https://github.com/ultralytics/hub/raw/main/example_datasets/F)ÚunzipÚdir©rÌ   T)rk   Úcoco8zcoco8/images/valN)Úultralytics.data.splitr9  Úultralytics.data.utilsr:  Úultralytics.utils.downloadsr;  r   r   r   Úwith_suffixr"   Úget_jsonÚprocess_images)rV   r9  r:  r;  rÌ   rW   Ústatss          r-   Útest_data_utilsrG  d  s–   € õ 1Ý6Ý9ô
 ò ˆÜ”I˜d‘OÓ$×0Ñ0°Ó8ˆÜÐPÐQUÐPVÐWÐ_dÐjrÕsÙ ¨4¡°dÔ;ˆØ�‰˜DˆÔ!Ø×ÑÕðñ ˆh˜Ñ Ô!Ù�(Ð/Ñ/Õ0r/   c                 ó®  — | dz  }| dz  }|dz  dz  j                  d¬«       |dz  dz  j                  d¬«       |dz  dz  j                  d¬«       |dz  dz  j                  d¬«       |d	z  j                  d
«       t        j                  |d«      5 }|j	                  d«      D ]$  }|j                  ||j                  | «      ¬«       Œ& 	 ddd«       t        || dz  dd¬«      }| dz  |j                  z  }||k(  sJ d|› d|› �«       ‚|d	z  j                  «       s
J d|› �«       ‚|dz  dz  j                  «       s
J d|› �«       ‚y# 1 sw Y   Œ}xY w)zWTest safe_download() unzips local archive paths without treating them like remote URLs.zcoco8 localzcoco8 local.zipr¡   r¢   T©Úparentsr¤   r/  z	data.yamlz=path: .
train: images/train
val: images/val
names:
  0: item
rO   r  ©ÚarcnameNÚdatasetsF©r=  r<  ÚprogresszExtracted path z != expected zdata.yaml not found in zimages/val not found in )ÚmkdirÚ
write_textÚzipfileÚZipFilerî   rT   Úrelative_tor#   r‹   Úis_fileÚis_dir)rV   Údataset_dirÚarchiveÚzfr”   Ú	extractedÚexpected_paths          r-   Ú,test_safe_download_unzips_local_path_archiver\  y  s�  € à˜]Ñ*€KØÐ*Ñ*€GØ�8Ñ˜gÑ%×,Ñ,°TÐ,Ô:Ø�8Ñ˜eÑ#×*Ñ*°4Ð*Ô8Ø�8Ñ˜gÑ%×,Ñ,°TÐ,Ô:Ø�8Ñ˜eÑ#×*Ñ*°4Ð*Ô8Ø�;Ñ×*Ñ*Ð+oÔpä	�‰˜ #Ó	&ð ?¨"Ø×%Ñ% cÓ*ò 	?ˆDØ�H‰H�T 4×#3Ñ#3°HÓ#=ˆHÕ>ñ	?÷?ô ˜g¨8°jÑ+@ÈÐW\Ô]€IØ˜zÑ)¨K×,<Ñ,<Ñ<€MØ˜Ò%Ð`¨¸¸À=ÐQ^ÐP_Ð'`Ó`Ð%Ø˜Ñ#×,Ñ,Ô.ÐUÐ2IÈ)ÈÐ0UÓUÐ.Ø˜Ñ  5Ñ(×0Ñ0Ô2ÐZÐ6NÈyÈkÐ4ZÓZÑ2÷?ð ?ús   Â9EÅEc                 ó$  — | dz  }t        j                  |d«      5 }|j                  dd«       |j                  dd«       ddd«       t        || dz  d	d
¬«      }| dz  j	                  «       rJ ‚|dz  j                  «       sJ ‚y# 1 sw Y   ŒFxY w)z[Test safe_download() skips archive members that would extract outside the target directory.z
unsafe.ziprO   ú../unsafe.txtÚbadzsafe/file.txtÚokNrM  TFrN  ú
unsafe.txt)rR  rS  Úwritestrr#   r&  rU  )rV   rX  rY  rZ  s       r-   Ú/test_safe_download_skips_unsafe_archive_membersrc  Ž  s“   € à˜Ñ%€GÜ	�‰˜ #Ó	&ð +¨"Ø
�‰�O UÔ+Ø
�‰�O TÔ*÷+ô ˜g¨8°jÑ+@ÈÐW\Ô]€Ià˜<Ñ'×/Ñ/Ô1Ð1Ð1Ø˜Ñ'×0Ñ0Ô2Ð2Ñ2÷+ð +ús   œ%BÂBc                 óT  — | dz  }|j                  d«       | dz  }t        j                  |d«      5 }|j                  |d¬«       |j                  |d¬«       ddd«       t	        || dz  d	d
¬«      }| dz  j                  «       rJ ‚|dz  j                  «       sJ ‚y# 1 sw Y   ŒFxY w)zWTest safe_download() skips tar members that would extract outside the target directory.zsafe.txtr`  z
unsafe.tarrO   r^  rK  NrM  TFrN  ra  )rQ  ÚtarfilerS   Úaddr#   r&  rU  )rV   r(   rX  ÚtarrZ  s        r-   Ú+test_safe_download_skips_unsafe_tar_membersrh  ›  s¯   € à˜
Ñ"€FØ
×Ñ�dÔØ˜Ñ%€GÜ	�‰�g˜sÓ	#ð , sØ�‰� ˆÔ0Ø�‰� 
ˆÔ+÷,ô ˜g¨8°jÑ+@ÈÐW\Ô]€Ià˜<Ñ'×/Ñ/Ô1Ð1Ð1Ø˜
Ñ"×+Ñ+Ô-Ð-Ñ-÷,ð ,ús   ²'BÂB'c                 ój   — ddl m}m} t        t        › d�| ¬«        || | dz  ddd¬«        |«        y	)
zNTest dataset conversion functions from COCO to YOLO format and class mappings.r   )Úcoco80_to_coco91_classÚconvert_cocoz/instances_val2017.json)r=  Úyolo_labelsTF)Ú
labels_dirr  Úuse_segmentsÚuse_keypointsÚ	cls91to80N)Úultralytics.data.converterrj  rk  r"   r   )rV   rj  rk  s      r-   Útest_data_converterrr  ª  s<   € ÷ Pä”
ˆ|Ð2Ð3¸ÕBÙØ h°Ñ&>ÈTÐafÐrvõñ Õr/   c                 óR   — ddl m}  |t        t        dz  t        dz  | dz  ¬«       y)zJTest automatic annotation of data using detection and segmentation models.r   )Úauto_annotaterß   zmobile_sam.ptÚauto_annotate_labels)Ú	det_modelÚ	sam_modelÚ
output_dirN)Úultralytics.data.annotatorrt  r   r   )rV   rt  s     r-   Útest_data_annotatorrz  ¶  s)   € å8áÜÜ Ñ,Ü Ñ/ØÐ4Ñ4ö	r/   c                  óh   — ddl m}   | «       }d|_        t        t        «      }d|_         ||«       y)z!Test event sending functionality.r   )ÚEventsTÚtestN)Úultralytics.utils.eventsr|  Úenabledr   r   Úmode)r|  Úeventsrë   s      r-   Útest_eventsr‚  Â  s+   € å/á‹X€FØ€F„NÜ
Œ{Ó
€CØ€C„HÙ
ˆ3…Kr/   c                  óˆ  — ddl m} m}m} t	        j
                  t        «      5   | ddiddi«       ddd«        |«        t        j                  «       t        j                  j                  dd	«      z  j                  d
¬«        |d«      �J ‚ |d«      �J ‚ |d«      �J ‚ |d«      du sJ ‚ |d«      du sJ ‚ |d«      du sJ ‚ |d«      d
u sJ ‚ |d«      d
u sJ ‚ |d«      d
u sJ ‚ |d«      dk(  sJ ‚ |d«      dk(  sJ ‚ |d«      dk(  sJ ‚ |d«      dk(  sJ ‚ |d«      dk(  sJ ‚ |d «      g d!¢k(  sJ ‚ |d"«      d!k(  sJ ‚ |d#«      d$d$gk(  sJ ‚ |d%«      ddd&œk(  sJ ‚ |d'«      d'k(  sJ ‚ |d(«      d(k(  sJ ‚ |d)«      d)k(  sJ ‚ |d*«      d*k(  sJ ‚ |d+«      d+k(  sJ ‚ |d,«      d,k(  sJ ‚y# 1 sw Y   �Œ‡xY w)-zNTest configuration initialization utilities from the 'ultralytics.cfg' module.r   ©Úcheck_dict_alignmentÚcopy_default_cfgÚsmart_valueÚarD   Úbrm   NrÁ   z
_copy.yamlF)Ú
missing_okÚnoneÚNoneÚNONEÚtrueTÚTrueÚTRUEÚfalseÚFalseÚFALSEÚ42é*   z-42iÖÿÿÿz3.14g…ëQ¸	@z-3.14g…ëQ¸	Àz1e-3çü©ñÒMbP?z	[1, 2, 3])rD   rm   rE   z	(1, 2, 3)z
[640, 640]rq   z{'a': 1, 'b': 2})rˆ  r‰  Úsome_stringzpath/to/filezhello worldz__import__('os').system('ls')zeval('1+1')zexec('x=1'))Úultralytics.cfgr…  r†  r‡  Ú
contextlibÚsuppressÚSyntaxErrorr   Úcwdr   r‹   ÚreplacerŒ   r„  s      r-   Útest_cfg_initrž  Í  sQ  € çSÑSä	×	Ñ	œ[Ó	)ñ 1Ù˜c 1˜X¨¨Q xÔ0÷1áÔÜ	‡X�XƒZÔ"×'Ñ'×/Ñ/°¸ÓFÑF×NÑNÐZ_ÐNÔ`ñ �vÓÐ&Ð&Ð&Ù�vÓÐ&Ð&Ð&Ù�vÓÐ&Ð&Ð&ñ �vÓ $Ñ&Ð&Ð&Ù�vÓ $Ñ&Ð&Ð&Ù�vÓ $Ñ&Ð&Ð&Ù�wÓ 5Ñ(Ð(Ð(Ù�wÓ 5Ñ(Ð(Ð(Ù�wÓ 5Ñ(Ð(Ð(ñ �tÓ Ò"Ð"Ð"Ù�uÓ Ò$Ð$Ð$Ù�vÓ $Ò&Ð&Ð&Ù�wÓ 5Ò(Ð(Ð(Ù�vÓ %Ò'Ð'Ð'ñ �{Ó#¢yÒ0Ð0Ð0Ù�{Ó# yÒ0Ð0Ð0Ù�|Ó$¨¨c¨
Ò2Ð2Ð2ñ Ð)Ó*°A¸AÑ.>Ò>Ð>Ð>ñ �}Ó%¨Ò6Ð6Ð6Ù�~Ó&¨.Ò8Ð8Ð8Ù�}Ó%¨Ò6Ð6Ð6ñ Ð6Ó7Ð;ZÒZÐZÐZÙ�}Ó%¨Ò6Ð6Ð6Ù�}Ó%¨Ò6Ð6Ñ6÷W1ñ 1ús   ¤F7Æ7Gc                  ó0   — ddl m} m}  | «         |«        y)z9Test initialization utilities in the Ultralytics library.r   ©Úget_ubuntu_versionr!   N)Úultralytics.utilsr¡  r!   r   s     r-   Útest_utils_initr£  ÿ  s   € çNáÔÙÕr/   c                  ó
  — t        j                  d«       t        j                  d«       t        j                  ddgd¬«       t        j                  d¬«       t        j
                  dd	«       t        j                  «        y
)ziTest various utility checks for filenames, requirements, image sizes, display capabilities, and versions.z
yolov5n.ptr}   iX  rD   )Úmax_dimT)ÚwarnÚultralyticsz8.0.0N)r    Úcheck_yolov5u_filenameÚcheck_requirementsÚcheck_imgszÚcheck_imshowÚcheck_versionÚ
print_args© r/   r-   Útest_utils_checksr¯    s\   € ä
×!Ñ! ,Ô/Ü
×Ñ˜gÔ&Ü
×Ñ˜˜S�z¨1Õ-Ü
×Ñ˜TÕ"Ü
×Ñ˜¨Ô0Ü
×ÑÕr/   z3Windows profiling is extremely slow (cause unknown)c                  óH   — ddl m}   | dgdddd¬«      j                  «        y)	zVBenchmark model performance using 'ProfileModels' from 'ultralytics.utils.benchmarks'.r   ©ÚProfileModelszyolo26n.yamlr'   rD   rE   )r)   Úmin_timeÚnum_timed_runsÚnum_warmup_runsN)Úultralytics.utils.benchmarksr²  Úrunr±  s    r-   Útest_utils_benchmarksr¸    s$   € õ ;á�>Ð"¨"°qÈÐ\]Ô^×bÑbÕdr/   c                  ó¢   — ddl m}  ddlm}m}m} t        j                  dddd«      } | dddd¬«      } |||gd	¬
«        ||«        |«        y)zGTest Torch utility functions including profiling and FLOP calculations.r   )ÚConv)Úget_flops_with_torch_profilerÚprofile_opsÚ	time_syncrD   rF   é   rm   )ÚkÚsrE   )ÚnN)Úultralytics.nn.modules.convrº  Úultralytics.utils.torch_utilsr»  r¼  r½  rI   rJ   )rº  r»  r¼  r½  Úxrï   s         r-   Útest_utils_torchutilsrÅ    sJ   € å0ßcÑcä�‰�A�r˜2˜rÓ"€AÙˆR��q˜AÔ€Aá��A�3˜!ÕÙ! !Ô$Ù…Kr/   c                  ó`  — ddl m} m}m}m}m}m}m}m}m	}m
}	m}
  |dt        j                  dg«      «       t        j                  dd«      }t        j                  | | ||«      «      «       t        j                  | |	 ||«      «      «       t        j                  | |  ||«      «      «       t        j                  | | ||«      «      «       t        j                  dd«      }t        j                   d«      dz  |d	d	…df<   t        j                  | |
 ||«      «      d
¬«       y	)zJTest utility operations for coordinate transformations and normalizations.r   )Ú	ltwh2xywhÚ	ltwh2xyxyÚmake_divisibleÚ	xywh2ltwhÚ	xywh2xyxyÚ
xywhn2xyxyÚxywhr2xyxyxyxyÚ	xyxy2ltwhÚ	xyxy2xywhÚ
xyxy2xywhnÚxyxyxyxy2xywhré   é   é
   é   é   é   Nr–  )Úrtol)Úultralytics.utils.opsrÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  rI   Útensorrz   ÚallcloserJ   )rÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  r  s               r-   Útest_utils_opsrÜ  &  sá   € ÷÷ ÷ ñ ñ �2”u—|‘| Q CÓ(Ô)ä�J‰J�r˜1Ó€EÜ	‡N�N�5™)¡I¨eÓ$4Ó5Ô6Ü	‡N�N�5™*¡Z°Ó%6Ó7Ô8Ü	‡N�N�5™)¡I¨eÓ$4Ó5Ô6Ü	‡N�N�5™)¡I¨eÓ$4Ó5Ô6ä�J‰J�r˜1Ó€EÜ—+‘+˜b“/ BÑ&€EŠ!ˆQˆ$�KÜ	‡N�N�5™.©¸Ó)>Ó?ÀdÖKr/   c                 ó’  — ddl m}m}m}m}m}  |t        «        |t        «        |t        dz  «       | dz  }|j                  dd¬«        ||«      5 }t        |«       ddd«       | dz  dz  }|j                  d¬	«        ||«      | dz  d
z  k(  sJ ‚|dz  }	|	j                  «         ||	«      |dz  k(  sJ ‚y# 1 sw Y   Œ\xY w)zMTest file handling utilities including file age, date, and paths with spaces.r   )Úfile_ageÚ	file_dateÚget_latest_runÚincrement_pathÚspaces_in_pathÚrunszpath/with spacesT)rJ  Úexist_okNÚexprI  zexp-2zresults.txtzresults-2.txt)Úultralytics.utils.filesrÞ  rß  rà  rá  râ  r	   r   rP  r  Útouch)
rV   rÞ  rß  rà  rá  râ  r”   Únew_pathÚexp_dirÚresults_files
             r-   Útest_utils_filesrë  C  sÏ   € çkÕkáŒVÔÙŒfÔÙ”4˜&‘=Ô!àÐ(Ñ(€DØ‡J�J�t d€JÔ+Ù	˜Ó	ð  ÜˆhŒ÷ð ˜Ñ %Ñ'€GØ‡M�M˜$€MÔÙ˜'Ó" h°Ñ&7¸'Ñ&AÒAÐAÐAà˜]Ñ*€LØ×ÑÔÙ˜,Ó'¨7°_Ñ+DÒDÐDÑD÷ð ús   ÁB=Â=Cc                 ó>  — ddl m}m} ddlm}  |t
        ¬«      } |d|¬«      5  t        j                  t
        «      5   |t        j                  d«      | dz  «       d	d	d	«       d	d	d	«       |j                  d
k(  sJ d«       ‚y	# 1 sw Y   Œ(xY w# 1 sw Y   Œ,xY w)z=Test torch_save backoff when _torch_save raises RuntimeError.r   )Ú	MagicMockÚpatch)Ú
torch_save)Úside_effectz%ultralytics.utils.patches._torch_save)ÚnewrD   ztest.ptNrÕ  z9torch_save was not attempted the expected number of times)Úunittest.mockrí  rî  Úultralytics.utils.patchesrï  ÚRuntimeErrorÚpytestÚraisesrI   r|   Ú
call_count)rV   rí  rî  rï  Úmocks        r-   Útest_utils_patches_torch_saverù  Y  s†   € ÷ /å4á¤Ô.€Dá	Ð6¸DÔ	Añ =Ü�]‰]œ<Ó(ñ 	=Ù”u—{‘{ 1“~ x°)Ñ';Ô<÷	=÷=ð �?‰?˜aÒÐ\Ð!\Ó\Ñ÷	=ð 	=ú÷=ð =ús#   ¦BÁ  BÁ BÂB	ÂBÂBc                  ó  — ddl m} m}m}m}m} d\  }}t        j                  d|dd«      }  |||«      |«         |||«      |«         |||«      |«         | |«      |«        |||«      }|j                  «         ||«       y)zSTest Convolutional Neural Network modules including CBAM, Conv2, and ConvTranspose.r   )ÚCBAMÚConv2ÚConvTransposeÚDWConvTranspose2dÚFocus©rÓ  é   rÕ  rÔ  N)	rÂ  rû  rü  rý  rþ  rÿ  rI   r|   Ú
fuse_convs)	rû  rü  rý  rþ  rÿ  Úc1Úc2rÄ  rï   s	            r-   Útest_nn_modules_convr  i  s„   € ç`Õ`à�F€BˆÜ�‰�A�r˜2˜rÓ"€Að Ñ�b˜"Ó˜aÔ Ø�M�"�bÓ˜!ÔØ�Eˆ"ˆbƒM�!ÔØ�DˆƒHˆQ„Kñ 	ˆb�"‹€AØ‡L�L„NÙ€a…Dr/   c                  óð   — ddl m} m}m}m}m} d\  }}t        j                  d|dd«      }  | ||«      |«         |||«      |«         |||«      |«         |||«      |«         |||«      |«       y)z*Test various neural network block modules.r   )ÚC1ÚC3TRÚBottleneckCSPÚC3GhostÚC3xr   rÕ  rÔ  N)Úultralytics.nn.modules.blockr  r  r	  r
  r  rI   r|   )r  r  r	  r
  r  r  r  rÄ  s           r-   Útest_nn_modules_blockr  |  su   € çRÕRà�F€BˆÜ�‰�A�r˜2˜rÓ"€Að �B€rˆ2ƒJˆq„MØ�CˆˆBƒK�„NØ�DˆˆRƒL�„OØ�GˆB�ƒO�AÔØ�M�"�bÓ˜!Õr/   c                  óR   — ddl m} m} ddlm}  | «         |«         |ddd¬«       y)	z%Test Ultralytics HUB functionalities.r   )Úexport_fmts_hubÚlogout)Úsmart_requestÚGETzhttps://github.comT)rO  N)Úultralytics.hubr  r  Úultralytics.hub.utilsr  )r  r  r  s      r-   Útest_hubr  ‹  s"   € ÷ 8Ý3áÔÙ
„HÙ�%Ð-¸Ö=r/   c                  óF   — t        j                  t        t        «      «      S )z?Load and return an image from a predefined source (OpenCV BGR).)ru   rv   rw   r	   r®  r/   r-   Úimager  –  s   € ô �:‰:”cœ&“kÓ"Ð"r/   z)auto_augment, erasing, force_color_jitter))Nç        F)Úrandaugmentrå   T)Úaugmixgš™™™™™É?F)Úautoaugmentr  Tc                 óB  — ddl m}  |ddddddd|dd	d	||¬
«      } |t        j                  t	        j
                  | t        j                  «      «      «      }|j                  dk(  sJ ‚t        j                  |«      sJ ‚|j                  t        j                  k(  sJ ‚y)zJTest classification transforms during training with various augmentations.r   )Úclassify_augmentationséà   )rå   rå   rå   )g{®Gáz´?g      ð?)g      è?gUUUUUUõ?rå   g¸…ëQ¸Ž?gš™™™™™Ù?)ÚsizeÚmeanÚstdÚscaleÚratioÚhflipÚvflipÚauto_augmentÚhsv_hÚhsv_sÚhsv_vÚforce_color_jitterÚerasing)rE   r  r  N)Úultralytics.data.augmentr  r   Ú	fromarrayru   ÚcvtColorÚCOLOR_BGR2RGBr  rI   Ú	is_tensorrs   r  )r  r&  r+  r*  r  Ú	transformÚtransformed_images          r-   Útest_classify_transforms_trainr3  œ  sŸ   € õ @á&ØØØØØ$ØØØ!ØØØØ-Øô€Iñ  "¤%§/¡/´#·,±,¸uÄc×FWÑFWÓ2XÓ"YÓZÐà×"Ñ" mÒ3Ð3Ð3Ü�?‰?Ð,Ô-Ð-Ð-Ø×"Ñ"¤e§m¡mÒ3Ð3Ñ3r/   c                  óÈ   — t        d«      j                  ddgddddd¬	«       t        d
«      j                  dddddd¬	«       t        d«      j                  dddddd¬	«       y)ú,Tune YOLO model for performance improvement.rß   rò   zcoco8-grayscale.yamlFr'   rD   rm   r3   )rª   rÐ   r)   rÚ   Ú
iterationsr=   zyolo26n-pose.ptzcoco8-pose.yamlr¹   Ú
imagenet10N©r   Útuner®  r/   r-   Útest_model_tuner:  À  s}   € ô 	ˆÓ×ÑØÐ2Ð3¸5ÈÐSTÐabÐkpð ô ô 	Ð	Ó× Ñ Ð&7¸uÈBÐWXÐefÐotÐ ÔuÜÐ	Ó×Ñ \¸ÀbÐQRÐ_`ÐinÐÕor/   c            
      óH   — t        d«      j                  dddddddd	¬
«       y)r5  r¹   r7  TFr'   rD   rm   Úrandomr3   )rª   Úuse_rayrÐ   r)   rÚ   r6  Ú
search_algr=   Nr8  r®  r/   r-   Útest_model_tune_rayr?  Ë  s5   € ô 	Ð	Ó×ÑØØØØØØØØð  õ 	r/   c                  ó  — t        t        «      } t        t        dz  «      }t        gt        t        gfD ]V  }t	        | j                  |d¬«      «      t	        |«      k(  sJ ‚t	        |j                  |d¬«      «      t	        |«      k(  rŒVJ ‚ y)z4Test YOLO model embeddings extraction functionality.rã   r'   rQ   N)r   r   r   r	   rU   Úembed)Úmodel_detectÚmodel_segmentr‚   s      r-   Útest_model_embeddingsrD  Û  s†   € äœ“;€LÜœÐ'7Ñ7Ó8€Mä�œF¤FÐ+Ð+ò NˆÜ�<×%Ñ%¨U¸"Ð%Ó=Ó>Ä#ÀeÃ*ÒLÐLÐLÜ�=×&Ñ&¨e¸2Ð&Ó>Ó?Ä3ÀuÃ:ÓMÐMÐMñNr/   z3YOLOWorld with CLIP is not supported in Python 3.12zDYOLOWorld with CLIP is not supported in Python 3.8 and aarch64 Linuxc                  ó  — t        t        dz  «      } | j                  ddg«        | t        d¬«       t        t        dz  «      } | j	                  ddd	d
d¬«       ddlm} t        d«      } | j	                  ddgiddgidœdd	d
d|¬«       y)z)Test YOLO world models with CLIP support.zyolov8s-world.ptÚtreeÚwindowç{®Gáz„?©r  zyolov8s-worldv2.ptz
dota8.yamlrD   r'   rØ   )rª   rÚ   r)   rÛ   rÜ   r   )ÚWorldTrainerFromScratchzyolov8s-worldv2.yamlÚ	yolo_data©r¢   r¤   )rª   rÚ   r)   rÛ   rÜ   ÚtrainerN)r   r   Úset_classesr	   r¢   Ú)ultralytics.models.yolo.world.train_worldrJ  )r,   rJ  s     r-   Útest_yolo_worldrP  å  sª   € ô ”Ð1Ñ1Ó2€EØ	×Ñ�v˜xÐ(Ô)Ù	Œ&�tÕä”Ð3Ñ3Ó4€Eð 
‡K�KØØØØØð ô õ RäÐ'Ó(€EØ	‡K�KØ# l ^Ð4¸kÈLÈ>Ð=ZÑ[ØØØØØ'ð õ r/   z$YOLOE with CLIP requires torch>=1.13z/YOLOE with CLIP is not supported in Python 3.12z@YOLOE with CLIP is not supported in Python 3.8 and aarch64 Linuxc                 ó*  — t        t        dz  «      }|j                  ddg«        |t        d¬«       ddlm} ddlm} t        t        j                  g d	¢g d
¢g«      t        j                  ddg«      ¬«      }|j                  t        ||¬«        |t        dz  «      }|j                  dd¬«       |j                  ddd¬«       ddlm}m}  |d«      }|j                  ddd|d¬«       t        t        dg¬«      t        dg¬«      ¬«      }| dz  }t!        j"                  ||¬«       ||fD ]   }	 |d«      }|j                  |	dd|d¬«       Œ"  |t        dz  «      }|j                  t        «        |d«      }|j                  dd¬«       y)z*Test YOLOE models with MobileCLIP support.zyoloe-11s-seg.ptÚpersonÚbusrH  rI  r   )ÚYOLOE)ÚYOLOEVPSegPredictor)gq=
×£°k@gÍÌÌÌÌ\y@gHáz®�u@g¸…ëQÌŠ@)éx   i©  rº   i½  rD   )Úbboxesr#  )Úvisual_promptsr   zcoco128-seg.yamlr'   ©rª   r)   T)rª   Úload_vpr)   )ÚYOLOEPESegTrainerÚYOLOESegTrainerFromScratch)rª   rÚ   rÜ   rM  r)   )rK  rL  zyoloe-data.yaml©rª   rW   zyoloe-11s-seg.yamlzyoloe-11s-seg-pf.ptN)r   r   rN  r	   r§  rT  Úultralytics.models.yolo.yoloerU  Údictr   ÚarrayrK   r¤   r[  r\  r¢   r   rk   )
rV   r,   rT  rU  Úvisualsr[  r\  Ú	data_dictÚ	data_yamlrª   s
             r-   Ú
test_yoloerd  	  s›  € ô ”Ð1Ñ1Ó2€EØ	×Ñ�x Ð'Ô(Ù	Œ&�tÕå!ÝAô Ü�x‰xÒ8Ò:NÐOÓPÜ�H‰H�a˜�VÓô€Gð 
‡M�MÜØØ%ð ô ñ ”+Ð 2Ñ2Ó3€Eà	‡I�IÐ%¨R€IÔ0à	‡I�IÐ%¨t¸2€IÔ>÷ \áÐ$Ó%€EØ	‡K�KØØØØ!Øð ô ô œ4Ð+=Ð*>Ô?ÄTÐUgÐThÔEiÔj€IØÐ,Ñ,€IÜ‡I�I�9 9Õ-Ø˜IÐ&ò 
ˆÙÐ*Ó+ˆØ�‰ØØØØ.Øð 	õ 	
ð
ñ ”+Ð 5Ñ5Ó6€EØ	‡M�M”&ÔáÐ$Ó%€EØ	‡I�IÐ%¨R€IÕ0r/   c                  ó®   — t        d«      } | j                  ddddd¬«       | j                  dd¬«       | j                  dddd¬	«        | t        «       y
)zFTest YOLOv10 model training, validation, and prediction functionality.zyolov10n.yamlrò   rD   r'   rØ   ©rª   rÚ   r)   rÜ   rÛ   rY  T)r)   rl   r  r*   N)r   r¢   r¤   rK   r	   r+   s    r-   Útest_yolov10rg  N  sM   € ä�Ó!€Eà	‡K�K�\¨!°2ÀAÈV€KÔTØ	‡I�I�< r€IÔ*Ø	‡M�M˜ T°TÀ4€MÔHÙ	Œ&…Mr/   c                  ó  — t        d«      } | j                  ddddd¬«       | j                  d¬«       t        j                  dt        j
                  ¬	«      }| j                  |dd
d
d
¬«       | j                  d¬«       y)zQTest YOLO model multi-channel training, validation, and prediction functionality.rß   zcoco8-multispectral.yamlrD   r'   rØ   rf  ©rª   )r'   r'   rÔ  rr   T©r(   r)   rl   r  r*   Úonnxrö   N)r   r¢   r¤   r   r|   r€   rK   rø   )r,   rL   s     r-   Útest_multichannelrl  X  sl   € ä�Ó€EØ	‡K�KÐ/¸ÀÐRSÐ[a€KÔbØ	‡I�IÐ-€IÔ.Ü	�‰�,¤b§h¡hÔ	/€BØ	‡M�M˜ 2°ÀÈd€MÔSØ	‡L�L˜€LÕr/   ztask,model,datac                 óR  — | dk(  ry|t        |«      j                  › d�z  }t        |«      }d|d<   t        j                  ||¬«       dD ]:  }t        |d   «      ||   z  j                  d	«      D ]  }|j                  «        Œ Œ< t        |«      }|j                  |dd
dd¬«       |j                  |¬«       t        j                  dt        j                  ¬«      }|j                  |d
ddd¬«       |j                  d¬«      }t        || ¬«      }|j                  |d
¬«       y)zMTest YOLO model grayscale training, validation, and prediction functionality.ÚclassifyNz-grayscale.yamlrD   r�   r]  >   r¤   r¢   r”   z*.npyr'   rä   rf  ri  )r'   r'   rD   rr   Trj  rk  rö   r>  rQ   )r   r"  r   r   rk   r¦   rŒ   r   r¢   r¤   r   r|   r€   rK   rø   )	rÌ   r,   rª   rV   Úgrayscale_dataÚsplitÚnpy_filerL   Úexport_models	            r-   Útest_grayscalers  b  s  € ð ˆzÒØØ¤4¨£:§?¡?Ð"3°?Ð CÑC€NÜ˜TÓ"€DØ€DˆÑÜ‡I�I�4˜nÕ-à!ò ˆÜ˜d 6™lÓ+¨d°5©kÑ9×?Ñ?ÀÓHò 	ˆHØ�O‰OÕñ	ðô �‹K€EØ	‡K�K�^¨A°RÀaÈu€KÔUØ	‡I�I�>€IÔ"Ü	�‰�+¤R§X¡XÔ	.€BØ	‡M�M˜ 2°ÀÈd€MÔSØ—<‘< v�<Ó.€Lä� DÔ)€EØ	‡M�M˜ 2€MÕ&r/   )qr™  ra   re  r²   rR  r   Úpathlibr   ru   r}   r   rõ  rI   ÚPILr   Útestsr   r   r   r	   r
   r   r§  r   r   r˜  r   r   Úultralytics.data.buildr   rA  r   r¢  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   rB  r"   r#   rÃ  r$   r%   r.   rA   rM   r[   ÚmarkÚskipifre   rg   Úparametrizerƒ   r†   r‘   Úslowr¯   r·   rË   rw   rÖ   rÝ   rà   ré   rð   rù   r
  r  r7  rG  r\  rc  rh  rr  rz  r‚  rž  r£  r¯  r¸  rÅ  rÜ  rë  rù  r  r  r  Úfixturer  r3  r:  ÚIS_PYTHON_MINIMUM_3_10r?  rD  ÚIS_PYTHON_3_12ÚIS_PYTHON_3_8rP  rd  rg  rl  rs  r®  r/   r-   ú<module>r€     sk  ðó Û 
Û Û Û Ý Ý ã 
Û Û Û Ý ç K× Kß $ß ,Ý 8Ý 4÷÷ ÷ ÷ ó ÷$ @ß @ò/òò((òYð ‡�×Ñ�DÐ!7ÐÓ8ñ[ó 9ð[ð ‡�×Ñ�DÐ!7ÐÓ8ñ\ó 9ð\ð ‡�×Ñ˜ vÓ.ñ@ó /ð@ð, ‡�×Ñ˜ &Ó)ñ@ó *ð@ò
ð. ‡�×ÑØ‡�×Ñ˜�JÐ'?ÐÓ@ñJó Aó ðJð, ‡�×ÑØ‡�×Ñ˜�JÐ'?ÐÓ@Ø‡�×ÑÑ,Ó.Ð7sÐÓtñ1ó uó Aó ð1ð ‡�×Ñ˜�JÐ'?ÐÓ@Ø‡�×Ñ˜ &Ó)ñ?ó *ó Að?ð( ‡�×ÑÐ+¨_Ó=ð+�3ð + ð +¨3ð +°4ò +ó >ð+ð ‡�×Ñ˜�JÐ'?ÐÓ@Ø‡�×Ñ�IÒ/ Ð8`ÐÓañó bó Aðð ‡�×Ñ˜�JÐ'?ÐÓ@ñNó AðNð ‡�×Ñ˜ %¨ Ó/ñó 0ðòð ‡�×Ñ�GÐ$vÐÓwñ'ó xð'òð. ‡�×Ñ˜ &Ó)ð!˜ò !ó *ð!ò&rð: ‡�×Ñ˜�JÐ'?ÐÓ@ñ1ó Að1ò([ò*
3ò.ð ‡�×Ñ˜�JÐ'?ÐÓ@ñó Aðò	òò/7òdòð ‡�×Ñ�GÐ$YÐÓZñeó [ðeò
òLò:Eð, ‡�×Ññ]ó ð]ò	ò&ð ‡�×Ñ˜�JÐ'?ÐÓ@ñ>ó Að>ð ‡�ñ#ó ð#ð
 ‡�×ÑØ/òóñ4óð4ð6 ‡�×ÑØ‡�×Ñ˜�JÐ'?ÐÓ@ñpó Aó ðpð ‡�×ÑØ‡�×Ñ˜�JÒC f×&CÑ&CÐ"CÐLdÐÓeñó fó ðòNð ‡�×Ñ�F×)Ñ)Ð2gÐÓhØ‡�×ÑØ
×ÑÒ,˜UÒ, uØQð ó ñó	ó ið
ð> ‡�×Ñ˜
�NÐ+QÐÓRØ‡�×Ñ�F×)Ñ)Ð2cÐÓdØ‡�×ÑØ
×ÑÒ,˜UÒ, uØMð ó ñ<1ó	ó eó Sð<1ò~ò ð ‡�×ÑÐ*¨OÓ<ð'˜ð ' Sð '°ð 'À$ò 'ó =ñ'r/   