o
    oi                     @   s   d dl mZmZ d dlmZ d dlmZmZmZm	Z	 d dl
mZmZ d dlmZ G dd deZeG dd	 d	ZG d
d deZG dd dZdS )    )	dataclassfield)Enum)AnyCallableDictTuple)ModuleTensor)AverageMeterc                   @   s   e Zd ZdZdZdZdZdS )TrainerStater            N)__name__
__module____qualname__STARTINGTRAININGVALIDATE	TERMINATE r   r   B/home/ubuntu/.local/lib/python3.10/site-packages/kornia/x/utils.pyr      s
    r   c                   @   s   e Zd ZU edddidZeed< edddidZeed< eddd	idZ	eed
< edddidZ
eed< edddidZeed< edddidZeeef ed< dS )Configurationz./helpzThe input data directory.)defaultmetadata	data_pathr   z2The number of batches for the training dataloader.
batch_sizez)The number of epochs to run the training.
num_epochsgMbP?z.The learning rate to be used for the optimize.lrz./outputzThe output data directory.output_path)   r"   zThe input image size.
image_sizeN)r   r   r   r   r   str__annotations__r   intr   r    floatr!   r#   r   r   r   r   r   r   $   s   
 $r   c                       sD   e Zd ZdZdedef ddf fddZdedefd	d
Z  Z	S )LambdaaB  Module to create a lambda function as Module.

    Args:
        fcn: a pointer to any function.

    Example:
        >>> import torch
        >>> import kornia as K
        >>> fcn = Lambda(lambda x: K.geometry.resize(x, (32, 16)))
        >>> fcn(torch.rand(1, 4, 64, 32)).shape
        torch.Size([1, 4, 32, 16])

    fcn.returnNc                    s   t    || _d S N)super__init__r)   )selfr)   	__class__r   r   r-   I   s   

zLambda.__init__xc                 C   s
   |  |S r+   )r)   )r.   r1   r   r   r   forwardM      
zLambda.forward)
r   r   r   __doc__r   r   r-   r
   r2   __classcell__r   r   r/   r   r(   :   s    r(   c                   @   s   e Zd ZdZdddZedeeef fddZ	ded	e
d
eddfddZdeee
f d
eddfddZdefddZdeeef fddZdS )StatsTrackerz/Stats tracker for computing metrics on the fly.r*   Nc                 C   s
   i | _ d S r+   _statsr.   r   r   r   r-   T   r3   zStatsTracker.__init__c                 C      | j S r+   r7   r9   r   r   r   statsW      zStatsTracker.statskeyvalr   c                 C   s,   || j vrt | j |< | j | || dS )z'Update the stats by the key value pair.N)r8   r   update)r.   r=   r>   r   r   r   r   r?   [   s   
zStatsTracker.updatedicc                 C   s$   |  D ]\}}| ||| qdS )zUpdate the stats by the dict.N)itemsr?   )r.   r@   r   kvr   r   r   update_from_dicta   s   zStatsTracker.update_from_dictc                 C   s   d dd | j D S )N c                 S   s2   g | ]\}}|   d |jdd|jddqS )z: z.2frE   )upperr>   ).0rB   rC   r   r   r   
<listcomp>g   s   2 z)StatsTracker.__repr__.<locals>.<listcomp>)joinr8   rA   r9   r   r   r   __repr__f   s   zStatsTracker.__repr__c                 C   r:   )zReturn the dict format.r7   r9   r   r   r   as_dicti   r<   zStatsTracker.as_dict)r*   N)r   r   r   r4   r-   propertyr   r$   r   r;   r'   r&   r?   rD   rJ   rK   r   r   r   r   r6   Q   s    
r6   N)dataclassesr   r   enumr   typingr   r   r   r   kornia.corer	   r
   kornia.metrics.average_meterr   r   r   r(   r6   r   r   r   r   <module>   s   