U
    {Ph=                     @  s   d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	 er^d dl
mZmZ d dlmZ n<e	dejed	\ZZe	d
ejed\ZZe	d
ejed\ZZG dd dZdS )    )annotationsN)TYPE_CHECKING)
IgniteInfo)min_versionoptional_import)EngineEvents)CallableEventWithFilterzignite.engine.eventsr	   zignite.enginer   r   c                   @  sB   e Zd ZdZddddddZd	d
dddZd	d
dddZdS )GarbageCollectora  
    Run garbage collector after each epoch

    Args:
        trigger_event: the event that trigger a call to this handler.
            - "epoch", after completion of each epoch (equivalent of ignite.engine.Events.EPOCH_COMPLETED)
            - "iteration", after completion of each iteration (equivalent of ignite.engine.Events.ITERATION_COMPLETED)
            - any ignite built-in event from ignite.engine.Events.
            Defaults to "epoch".
        log_level: log level (integer) for some garbage collection information as below. Defaults to 10 (DEBUG).
            - 50 (CRITICAL)
            - 40 (ERROR)
            - 30 (WARNING)
            - 20 (INFO)
            - 10 (DEBUG)
            - 0 (NOTSET)
    epoch
   z&str | Events | CallableEventWithFilterint)trigger_event	log_levelc                 C  s`   |  t |ttfr|| _n<| dkr0tj| _n&| dkrFtj| _ntd| d|| _d S )Nr   	iterationzk'trigger_event' should be either epoch, iteration, or an ignite built-in event from ignite.engine.Events, 'z' was given.)	
isinstancer   r	   r   lowerEPOCH_COMPLETEDITERATION_COMPLETED
ValueErrorr   )selfr   r    r   U/home/dell461/cl/sdc2/HISourceFinder-master-l/src/monai/handlers/garbage_collector.py__init__2   s    


zGarbageCollector.__init__r   None)enginereturnc                 C  s    | | | js|| j|  d S )N)has_event_handlerr   add_event_handler)r   r   r   r   r   attachB   s    zGarbageCollector.attachc              
   C  sH   t  }t   t  }t  }|j| jd| d| d| d dS )z
        This method calls python garbage collector.

        Args:
            engine: Ignite Engine, it should be either a trainer or validator.
        zGarbage Count: [before: z] -> [after: z] (unreachable : )N)gc	get_countcollectloggerlogr   )r   r   Z	pre_countZunreachableZafter_countr   r   r   __call__F   s    zGarbageCollector.__call__N)r   r   )__name__
__module____qualname____doc__r   r   r&   r   r   r   r   r
      s   r
   )
__future__r   r!   typingr   monai.configr   monai.utilsr   r   ignite.enginer   r   Zignite.engine.eventsr	   OPT_IMPORT_VERSION_r
   r   r   r   r   <module>   s       