
    .hb                         d dl Z d dlmZ d dlZd dl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 d dlmZmZmZ d	 Zd
 Zd Zd Zd Zd Zy)    N)mock)MODEL)YOLO)get_cfg)Exporter)classifydetectsegment)ASSETSDEFAULT_CFGWEIGHTS_DIRc                      t        d       y)zETest function callback for evaluating YOLO model performance metrics.zcallback test passedN)printargss    O/var/www/html/ai-service/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_startcallback test failedyolo11n.yamlmodelN)r   add_callbackr   	callbacksr   r   r   )exporterfs     r   test_exportr      s\    zH+Y7**+<==U?UU=tN+112ADGFOr   c                     dddddd} t        t              }d|_        d|_        t	        j
                  |       }|j                  dt               t        |j                  d   v sJ d	       |j                          t	        j                  |
      }|j                  dt               t        |j                  d   v sJ d	        ||j                         t	        j                  dddgi      }|j                  dt               t        |j                  d   v sJ d	       t        j                  j                  t         dg       5   |t"        t$              }t'        |      sJ d       	 ddd       |j(                  | d<   t	        j
                  |       }	 |j                          t+        d      # 1 sw Y   JxY w# t*        $ r}t-        d|        Y d}~yd}~ww xY w)zNTest YOLO object detection training, validation, and prediction functionality.
coco8.yamlr          Fdatar   imgszepochssave	overrideson_train_startr   r   on_val_startr   r&   @   on_predict_startargvsourcer   predictor test failedNresumeExpected exception caught: Resume test failed!)r   r   r%   r&   r	   DetectionTrainerr   r   r   trainDetectionValidatorbestDetectionPredictorr   patchobjectsysr   r   lenlast	Exceptionr   r*   cfgtrainervalpredresultes          r   test_detectrH      s   %WXbghI
+
CCHCI %%	:G)95))*:;;S=SS;MMO 
#
#
-C^Y/n55M7MM5gll $$"b/BCD()4'9::R<RR:			3	+ 4V516{333{4
 ",,Ih%%	:G
 )
**4 4  +A3/0s$   
%F9G 9G	G&G!!G&c                  f   dddddddd} t        t              }d|_        d|_        t	        j
                  |       }|j                  dt               t        |j                  d   v sJ d	       |j                          t	        j                  |
      }|j                  dt               t        |j                  d   v sJ d	        ||j                         t	        j                  dddgi      }|j                  dt               t        |j                  d   v sJ d	        |t        t        dz        }t        |      sJ d       |j                   | d<   t	        j
                  |       }	 |j                          t#        d      # t"        $ r}t%        d|        Y d}~yd}~ww xY w)zYTest image segmentation training, validation, and prediction pipelines using YOLO models.zcoco8-seg.yamlzyolo11n-seg.yamlr"   r#   F)r%   r   r&   r'   r(   
mask_ratiooverlap_maskr)   r+   r   r   r,   r   r&   r-   r.   zyolo11n-seg.ptr0   r2   r3   r4   Nr5   )r   r   r%   r&   r
   SegmentationTrainerr   r   r   r7   SegmentationValidatorr9   SegmentationPredictorr   r   r>   r?   r@   r   rA   s          r   test_segmentrO   F   s    !#I +
CCHCI ))I>G)95))*:;;S=SS;MMO 
'
'S
1C^Y/n55M7MM5gll ((Gb"X3FGD()4'9::R<RR:{5E'EFFv;///; ",,Ih))I>G
 )
**	  +A3/0s   4F 	F0F++F0c                     dddddd} t        t              }d|_        d|_        t	        j
                  |       }|j                  dt               t        |j                  d   v sJ d	       |j                          t	        j                  |
      }|j                  dt               t        |j                  d   v sJ d	        ||j                         t	        j                  dddgi      }|j                  dt               t        |j                  d   v sJ d	        |t        |j                        }t        |      sJ d       y)zPTest image classification including training, validation, and prediction phases.
imagenet10zyolo11n-cls.yamlr"   r#   Fr$   r)   r+   r   r   r,   r   r&   r-   r.   r0   r2   N)r   r   r%   r&   r   ClassificationTrainerr   r   r   r7   ClassificationValidatorr9   ClassificationPredictorr   r>   )r*   rB   rC   rD   rE   rF   s         r   test_classifyrU   t   s0   %0BR[\fklI
+
CCHCI ,,yAG)95))*:;;S=SS;MMO 
*
*
4C^Y/n55M7MM5gll ++wR6IJD()4'9::R<RR:w||4Fv;///;r   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)epochtlosstorchtensorfloat)rC   nan_injecteds    r   
inject_nanz%test_nan_recovery.<locals>.inject_nan   sP    ==A'--";LQROMMU\\%,77M"LO ET";r   r!   r   r"      )r%   r   r&   r'   r)   on_train_batch_endr   zNaN injection failedN)r	   r6   r   r7   )r_   r*   rC   r^   s      @r   test_nan_recoveryrb      s\    7L# &WXYI%%	:G-z:MMO?222?r   )r=   unittestr   r[   testsr   ultralyticsr   ultralytics.cfgr   ultralytics.engine.exporterr   ultralytics.models.yolor   r	   r
   ultralytics.utilsr   r   r   r   r   rH   rO   rU   rb    r   r   <module>rk      sH         # 0 = = > >"
%+P++\063r   