o
    iZ                     @  s   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 e	dej
ed\ZZer/d dlmZ n
e	dej
ed\ZZG d	d
 d
ZdS )    )annotations)TYPE_CHECKING)	Evaluator)
IgniteInfomin_versionoptional_importzignite.engineEvents)Enginer	   c                   @  s<   e Zd ZdZ	ddddZdddZdddZdddZdS )ValidationHandlerz
    Attach validator to the trainer engine in Ignite.
    It can support to execute validation every N epochs or every N iterations.

    NTFintervalint	validatorEvaluator | Noneepoch_levelboolexec_at_startreturnNonec                 C  sD   |durt |tstdt|j d|| _|| _|| _|| _dS )a  
        Args:
            interval: do validation every N epochs or every N iterations during training.
            validator: run the validator when trigger validation, suppose to be Evaluator.
                if None, should call `set_validator()` before training.
            epoch_level: execute validation every N epochs or N iterations.
                `True` is epoch level, `False` is iteration level.
            exec_at_start: whether to execute a validation first when starting the training.
                default to `False`. It can be useful especially for some transfer-learning cases
                to validate the initial model before training.

        Raises:
            TypeError: When ``validator`` is not a ``monai.engines.evaluator.Evaluator``.

        N=validator must be a monai.engines.evaluator.Evaluator but is .)	
isinstancer   	TypeErrortype__name__r   r   r   r   )selfr   r   r   r    r   c/home/dell461/cl/sdc2/last_ska_mid/HISourceFinder-master-l/src/monai/handlers/validation_handler.py__init__!   s   
zValidationHandler.__init__r   c                 C  s*   t |tstdt|j d|| _dS )zA
        Set validator if not setting in the __init__().
        r   r   N)r   r   r   r   r   r   )r   r   r   r   r   set_validator:   s   

zValidationHandler.set_validatorenginer	   c                 C  sP   | j r|tj| jd|  n|tj| jd|  | jr&|tj|  dS dS )g
        Args:
            engine: Ignite Engine, it can be a trainer, validator or evaluator.
        )everyN)r   add_event_handlerr   EPOCH_COMPLETEDr   ITERATION_COMPLETEDr   STARTEDr   r   r   r   r   attachB   s   zValidationHandler.attachc                 C  s&   | j du r	td| j |jj dS )r    NzMplease set validator in __init__() or call `set_validator()` before training.)r   RuntimeErrorrunstateepochr&   r   r   r   __call__N   s   
zValidationHandler.__call__)NTF)
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   )r   r	   r   r   )r   
__module____qualname____doc__r   r   r'   r,   r   r   r   r   r
      s    

r
   N)
__future__r   typingr   Zmonai.engines.evaluatorr   monai.utilsr   r   r   OPT_IMPORT_VERSIONr   _ignite.enginer	   r
   r   r   r   r   <module>   s   