Ë
    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
 d dl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 d d	lmZ d d
lmZmZmZ d„ Zd„ Zej>                  jA                  dejB                  ejD                  ejF                  ddefejH                  ejJ                  ejL                  ddedz  fejN                  ejP                  ejR                  dddfejT                  ejV                  ejX                  dddfejZ                  ej\                  ej^                  dddfg«      d„ «       Z0ej>                  jA                  de
«      d„ «       Z1d„ Z2d„ Z3y)é    N)ÚSimpleNamespace)Úmock)ÚMODELÚSOURCEÚTASK_MODEL_DATA)ÚYOLO)Úget_cfg)ÚExporter)ÚclassifyÚdetectÚobbÚposeÚsegment)Úload_checkpoint)ÚASSETSÚDEFAULT_CFGÚWEIGHTS_DIRc                  ó   — t        d«       y)zFTest function used as a callback stub to verify callback registration.zcallback test passedN)Úprint)ÚargsÚkwargss     úS/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/tests/test_engine.pyÚ	test_funcr      s   € ä	Ð
 Õ!ó    c                  óÞ   — t        «       } | j                  dt        «       t        | j                  d   v sJ d«       ‚ | t	        d«      j
                  ¬«      } t	        |«      t        «       y)zTTest model exporting functionality by adding a callback and verifying its execution.Úon_export_startz'on_export_start callback not registeredúyolo26n.yaml©ÚmodelN)r
   Úadd_callbackr   Ú	callbacksr   r   r   )ÚexporterÚfs     r   Útest_exportr$      s\   € ä‹z€HØ×ÑÐ+¬YÔ7Ü˜×*Ñ*Ð+<Ñ=Ñ=ÐhÐ?hÓhÐ=Ù”t˜NÓ+×1Ñ1Ô2€AØ„DˆƒGŒF…Or   z:trainer_cls,validator_cls,predictor_cls,data,model,weightsú
coco8.yamlr   zcoco8-seg.yamlzyolo26n-seg.yamlzyolo26n-seg.ptÚ
imagenet10zyolo26n-cls.yamlz
dota8.yamlzyolo26n-obb.yamlzcoco8-pose.yamlzyolo26n-pose.yamlc                 óæ  — ||ddddddœ} | |¬«      }|j                  dt        «       t        |j                  d   v sJ d«       ‚|j                  «        t	        t
        «      }||_        d|_         ||¬«      }	|	j                  d	t        «       t        |	j                  d	   v sJ d
«       ‚ |	|j                  ¬«        |dddgi¬«      }
|
j                  dt        «       t        |
j                  d   v sJ d«       ‚|r|n|j                  }|dk(  rVt        j                  j                  t        dg «      5   |
t        |¬«      }t        |«      dkD  s
J d|› �«       ‚	 ddd«       n& |
t        |¬«      }t        |«      dkD  s
J d|› �«       ‚t        j                   t"        «      5   | i |¥d|j$                  i¥¬«      j                  «        ddd«       y# 1 sw Y   ŒSxY w# 1 sw Y   yxY w)zATest YOLO training, validation, and prediction for various tasks.é    é   F)Údatar   ÚimgszÚepochsÚsaveÚ
mask_ratioÚoverlap_mask©Ú	overridesÚon_train_startz&on_train_start callback not registered)r   Úon_val_startz$on_val_start callback not registeredr   r+   é@   Úon_predict_startz(on_predict_start callback not registeredr   Úargv)Úsourcer   r   z"Predictor returned no results for NÚresume)r    r   r!   Útrainr	   r   r*   r+   Úbestr   ÚpatchÚobjectÚsysr   ÚlenÚpytestÚraisesÚAssertionErrorÚlast)Útrainer_clsÚvalidator_clsÚpredictor_clsr*   r   Úweightsr1   ÚtrainerÚcfgÚvalÚpredÚ
model_pathÚresults                r   Ú	test_taskrM   !   s÷  € ðD ØØØØØØñ€Iñ  IÔ.€GØ×ÑÐ)¬9Ô5Ü˜×)Ñ)Ð*:Ñ;Ñ;ÐeÐ=eÓeÐ;Ø‡M�M„Oô ”+Ó
€CØ€C„HØ€C„IÙ
˜SÔ
!€CØ×Ñ�^¤YÔ/Ü˜Ÿ™ nÑ5Ñ5Ð]Ð7]Ó]Ð5Ùˆg�l‰lÕñ  G¨b°"¨XÐ#6Ô7€DØ×ÑÐ(¬)Ô4Ü˜Ÿ™Ð'9Ñ:Ñ:ÐfÐ<fÓfÐ:ñ $‘¨¯©€JØ�Òä�Z‰Z×Ñœs F¨BÓ/ñ 	QÙ¤¨zÔ:ˆFÜ�v“; ’?ÐPÐ&HÈÈÐ$PÓP‘?÷	Qð 	Qñ œV¨:Ô6ˆÜ�6‹{˜QŠÐLÐ"DÀUÀGÐ LÓLˆô 
�‰”~Ó	&ñ MÙÐC ÐC¨H°g·l±lÑCÔD×JÑJÔL÷Mð M÷	Qð 	Qú÷Mð Mús   Ä:'GÆ*(G'ÇG$Ç'G0ztask,weight,datac           
      óÒ  — |dddd|| dddœ	}d„ }d„ }t        |«      }|j                  d	|«       |j                  d
|«        |j                  di |¤Ž |j                  j                  }t        |«      \  }	}
|
d   dk(  sJ d«       ‚t        |«      } |j                  dddi|¤Ž |j                  j                  |j                  j                  cxk(  rdk(  sJ d«       ‚ J d«       ‚y)z4Test training resumes from an incomplete checkpoint.é   TFr   r(   )	r*   r,   r-   ÚplotsÚworkersÚprojectÚnamer+   Úexist_okc                 ó2   — | j                   dk(  rd| _        y y )Nr   T)ÚepochÚstop©rG   s    r   Ústop_after_first_epochz6test_resume_incomplete.<locals>.stop_after_first_epoch   s   € Ø�=‰=˜AÒØˆG�Lð r   c                 ó   — d„ | _         y )Nc                   ó   — y ©N© r]   r   r   ú<lambda>zDtest_resume_incomplete.<locals>.disable_final_eval.<locals>.<lambda>„   ó   � r   )Ú
final_evalrX   s    r   Údisable_final_evalz2test_resume_incomplete.<locals>.disable_final_evalƒ   s
   € Ù)ˆÕr   r2   Úon_train_epoch_endrV   zcheckpoint should be resumabler8   r)   zresume test failedNr]   )r   r    r9   rG   rB   r   Ústart_epochrV   )ÚtaskÚweightr*   Útmp_pathÚ
train_argsrY   ra   r   Ú	last_pathÚ_ÚckptÚresume_models               r   Útest_resume_incompleterl   p   s  € ð ØØØØØØØØñ
€Jò ò*ô �‹L€EØ	×ÑÐ'Ð);Ô<Ø	×ÑÐ+Ð-CÔDØ€E‡K�KÑ�*ÒØ—‘×"Ñ"€IÜ˜iÓ(�G€A€tØ�‰=˜AÒÐ?Ð?Ó?Ðô ˜	“?€LØ€L×ÑÑ1˜dÐ1 jÒ1Ø×Ñ×+Ñ+¨|×/CÑ/C×/IÑ/IÔNÈQÒNÐdÐPdÓdÑNÐdÐPdÓdÑNr   c                  ó¬   ‡— dgŠˆfd„} dddddœ}t        j                  |¬«      }|j                  d	| «       |j                  «        ‰d
   sJ d«       ‚y)z5Test NaN loss detection and recovery during training.Fc                 ó¸   •— | j                   dk(  rJ| j                  �=‰d   s7| xj                  t        j                  t	        d«      «      z  c_        d‰d<   yyyy)zHInject NaN into loss during batch processing to test recovery mechanism.r)   Nr   ÚnanT)rV   ÚtlossÚtorchÚtensorÚfloat)rG   Únan_injecteds    €r   Ú
inject_nanz%test_nan_recovery.<locals>.inject_nan˜   sP   ø€ à�=‰=˜AÒ '§-¡-Ð";ÀLÐQRÂOØ�MŠMœUŸ\™\¬%°«,Ó7Ñ7�MØ"ˆL˜ŠOð ETÐ";Ðr   r%   r   r(   é   )r*   r   r+   r,   r0   Úon_train_batch_endr   zNaN injection failedN)r   ÚDetectionTrainerr    r9   )ru   r1   rG   rt   s      @r   Útest_nan_recoveryry   ”   s\   ø€ à�7€Lô#ð &°ÈÐWXÑY€IÜ×%Ñ%°	Ô:€GØ×ÑÐ-¨zÔ:Ø‡M�M„OØ˜Š?Ð2Ð2Ó2‰?r   c                 óÚ  ‡‡‡— t        d«      }ddi|_        d|_        d|j                  d<   |j                  Ši Š G ˆˆfd„d«      Š| j                  d	d
„ «       | j                  |dˆfd„«       | j                  dˆfd„«       |j                  dd¬«       ‰d   j                  ‰u sJ d«       ‚‰d   ‰j                  k(  sJ d‰d   › d‰j                  › �«       ‚‰d   ‰u sJ d«       ‚y)z_Test training reuses an already-loaded checkpoint model instead of re-parsing the model source.r   Ú
checkpointTz/tmp/fake.ptzul://glenn-jocher/m2/exp-14r   c                   ó.   •— e Zd Zdˆ fd„	Zdˆ ˆfd„	Zd„ Zy)ú>test_train_reuses_loaded_checkpoint_model.<locals>.FakeTrainerNc                 ó¢   •— || _         || _        d | _        t        d ¬«      | _        t
        j                  dz  | _        t
        | _        | ‰d<   y )N)Úmetricsznonexistent-best.ptrG   )	r1   r!   r   r   Ú	validatorr   Úparentr:   rB   )Úselfr1   Ú
_callbacksÚcaptureds      €r   Ú__init__zGtest_train_reuses_loaded_checkpoint_model.<locals>.FakeTrainer.__init__¯   sF   ø€ Ø&ˆDŒNØ'ˆDŒNØˆDŒJÜ,°TÔ:ˆDŒNÜŸ™Ð'<Ñ<ˆDŒIÜˆDŒIØ"&ˆH�YÒr   c                 ó   •— |‰d<   |‰d<   ‰S )NrH   rF   r]   )r‚   rH   rF   Úverboser„   Úoriginal_models       €€r   Ú	get_modelzHtest_train_reuses_loaded_checkpoint_model.<locals>.FakeTrainer.get_model¸   s   ø€ Ø!ˆH�U‰OØ")ˆH�YÑØ!Ð!r   c                  ó   — y r\   r]   )r‚   s    r   r9   zDtest_train_reuses_loaded_checkpoint_model.<locals>.FakeTrainer.train½   s   € Ør   )NN)NNT)Ú__name__Ú
__module__Ú__qualname__r…   r‰   r9   )r„   rˆ   s   €€r   ÚFakeTrainerr}   ®   s   ø„ õ	'ö	"ó
	r   rŽ   z:ultralytics.engine.model.checks.check_pip_update_availablec                   ó   — y r\   r]   r]   r   r   r^   z;test_train_reuses_loaded_checkpoint_model.<locals>.<lambda>À   r_   r   Ú_smart_loadc                 ó   •— ‰S r\   r]   )ÚkeyrŽ   s    €r   r^   z;test_train_reuses_loaded_checkpoint_model.<locals>.<lambda>Á   s   ø€ ¸+€ r   z(ultralytics.engine.model.load_checkpointc                 ó   •— ‰ddifS )Nr{   Tr]   )Úpathrˆ   s    €r   r^   z;test_train_reuses_loaded_checkpoint_model.<locals>.<lambda>Ä   s   ø€ �n |°TÐ&:Ð;€ r   r%   r)   )r*   r,   rG   z%Trainer model does not match originalrH   zConfig mismatch: z != rF   z#Weights do not match original modelN)r   rj   Ú	ckpt_pathr1   r   Úsetattrr9   Úyaml)Úmonkeypatchr   rŽ   r„   rˆ   s     @@@r   Ú)test_train_reuses_loaded_checkpoint_modelr™   ¥   s  ú€ ä�Ó €EØ Ð%€E„JØ$€E„OØ<€E‡O�O�GÑØ—[‘[€NØ€H÷ô ð$ ×ÑÐTÑVbÔcØ×Ñ˜˜}Ó.EÔFØ×ÑØ2Û;ôð
 
‡K�K�\¨!€KÔ,à�IÑ×$Ñ$¨Ñ6Ð_Ð8_Ó_Ð6Ø�E‰?˜n×1Ñ1Ò1ÐqÐ5FÀxÐPUÁÐFWÐW[Ð\j×\oÑ\oÐ[pÐ3qÓqÐ1Ø�IÑ .Ñ0ÐWÐ2WÓWÑ0r   )4r=   Útypesr   Úunittestr   r?   rq   Útestsr   r   r   Úultralyticsr   Úultralytics.cfgr	   Úultralytics.engine.exporterr
   Úultralytics.models.yolor   r   r   r   r   Úultralytics.nn.tasksr   Úultralytics.utilsr   r   r   r   r$   ÚmarkÚparametrizerx   ÚDetectionValidatorÚDetectionPredictorÚSegmentationTrainerÚSegmentationValidatorÚSegmentationPredictorÚClassificationTrainerÚClassificationValidatorÚClassificationPredictorÚ
OBBTrainerÚOBBValidatorÚOBBPredictorÚPoseTrainerÚPoseValidatorÚPosePredictorrM   rl   ry   r™   r]   r   r   ú<module>r³      sp  ðó Ý !Ý ã Û ç 0Ñ 0Ý Ý #Ý 0ß HÕ HÝ 0ß >Ñ >ò"ò
ð ‡�×ÑØ@ð ×#Ñ#Ø×%Ñ%Ø×%Ñ%ØØØð	
ð ×'Ñ'Ø×)Ñ)Ø×)Ñ)ØØØÐ*Ñ*ð	
ð ×*Ñ*Ø×,Ñ,Ø×,Ñ,ØØØð	
ð 
�‰˜×)Ñ)¨3×+;Ñ+;¸\ÐK]Ð_cÐdØ	×	Ñ	˜4×-Ñ-¨t×/AÑ/AÐCTÐViÐkoÐpð5óñ>-Mó?ð>-Mð` ‡�×ÑÐ+¨_Ó=ñ eó >ð eòF3ó"&Xr   