U
    |Phr                     @  s   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
 e
deje	d\ZZerfd dlmZ ne
deje	d	\ZZG d
d dZdS )    )annotations)TYPE_CHECKING)
IgniteInfo)	Evaluator)min_versionoptional_importzignite.engineEvents)Enginer	   c                   @  sX   e Zd ZdZddddddd	d
dZdddddZdddddZdd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intzEvaluator | NoneboolNone)interval	validatorepoch_levelexec_at_startreturnc                 C  sD   |dk	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   V/home/dell461/cl/sdc2/HISourceFinder-master-l/src/monai/handlers/validation_handler.py__init__"   s    zValidationHandler.__init__r   )r   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_validatorr	   )enginer   c                 C  sL   | j r|tj| jd|  n|tj| jd|  | jrH|tj|  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   attachC   s
    zValidationHandler.attachc                 C  s&   | j dk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__O   s    
zValidationHandler.__call__)NTF)r   
__module____qualname____doc__r   r   r&   r+   r   r   r   r   r
      s        r
   N)
__future__r   typingr   monai.configr   Zmonai.engines.evaluatorr   monai.utilsr   r   OPT_IMPORT_VERSIONr   _ignite.enginer	   r
   r   r   r   r   <module>   s   