o
    rriT                     @   sX   d dl Z d dlZd dlmZ d dlZd dlmZ ddlm	Z	 e
eZG dd dZdS )    N)Path)retry   )utilsc                   @   sb   e Zd ZdZddeje fddZedddd	 Z	d
d Z
deje fddZdefddZdS )Linkz
    Connection with Dora for your trainer.
    This is minimalistic and won't do much.

    This can also be used to simulate a fake link by passing `None`
    as the history file.
    Nhistory_filec                 C   s   g | _ || _dS )z0
        Initialize the Link with Dora.
        N)historyr   )selfr    r
   =/home/ubuntu/.local/lib/python3.10/site-packages/dora/link.py__init__   s   
zLink.__init__
   )stop_max_attempt_numberc                 C   sF   | j d u rd S | j  rtj| j tjdd}|d ur!|| _d S d S d S )Nr)loadmode)r   existsr   try_loadjsonr   r   r	   r   r
   r
   r   r   "   s   


z	Link.loadc                 C   sl   | j d u rd S ddlm} | sd S t| j d}tj| j|dd W d    d S 1 s/w   Y  d S )Nr   )distribw   )indent)	r    r   	is_masterr   write_and_renamer   dumpr   )r	   r   tmpr
   r
   r   _commit+   s   
"zLink._commitr   c                 C   s@   t |}t|tstdt| || jd d < |   d S )Nz history must be a list, but got )r   jsonable
isinstancelist
ValueErrortyper   r   r   r
   r
   r   update_history5   s
   

zLink.update_historymetricsc                 C   s"   t |}| j| |   d S N)r   r    r   appendr   )r	   r&   r
   r
   r   push_metrics<   s   
zLink.push_metricsr'   )__name__
__module____qualname____doc__tpOptionalr   r   r   r   r   Listdictr%   r)   r
   r
   r
   r   r      s    

r   )r   loggingpathlibr   typingr.   retryingr   r   r   	getLoggerr*   loggerr   r
   r
   r
   r   <module>   s   
