a
    Df                  	   @   s   d dl Z d dlZd dlmZ zd dlZW n eefyB   dZY n0 d dlZe e	Z
dZeddZeddZdd	 Zd
d Zdd Zdd ZdS )    N)urlparsezcomet://COMET_MODEL_NAMEyolov5!COMET_DEFAULT_CHECKPOINT_FILENAMEzlast.ptc              
   C   sl  | j  d|j }tj|dd t}||}t|dkrNtd|  d S t	|dd dd}d	d
 |D }t
| j}|j}|r||}n|t}t}|d u rtd| d d S zrtd|  |}	|j|ddd}
| d|	 }t|d}||
 W d    n1 s0    Y  || _W n: tyf } z td t| W Y d }~n
d }~0 0 d S )N/Texist_okr   z3COMET ERROR: No checkpoints found for model name : c                 S   s   | d S )Nstep )xr
   r
   U/data/NAS7/SABIOD/METHODE/ermites/yolo-dyni/yolov5/utils/loggers/comet/comet_utils.py<lambda>        z+download_model_checkpoint.<locals>.<lambda>)keyreversec                 S   s   i | ]}|d  |d qS )fileNameassetIdr
   ).0assetr
   r
   r   
<dictcomp>#   r   z-download_model_checkpoint.<locals>.<dictcomp>zCOMET ERROR: Checkpoint z" not found in the given Experimentz#COMET INFO: Downloading checkpoint binaryFreturn_typestreamwbz7COMET WARNING: Unable to download checkpoint from Comet)projectnameosmakedirsr   Zget_model_asset_listlenloggererrorsortedr   weightsquerygetr   info	get_assetopenwrite	Exceptionwarning	exception)opt
experiment	model_dir
model_nameZmodel_asset_listZlogged_checkpoint_mapZresource_urlZcheckpoint_filenameasset_idZasset_filenameZmodel_binaryZmodel_download_pathfer
   r
   r   download_model_checkpoint   sB    


*

r4   c                 C   s   |  }| j}|D ]V}|d dkr|d }|j|ddd}t|}| D ]\}}	t| ||	 qL|| _q| j d|j }
t	j
|
dd	 |
 d
}t|d}t| j| W d   n1 s0    Y  || _dS )zUpdate the opts Namespace with parameters
    from Comet's ExistingExperiment when resuming a run

    Args:
        opt (argparse.Namespace): Namespace of command line options
        experiment (comet_ml.APIExperiment): Comet API Experiment object
    r   zopt.yamlr   r   Fr   r   Tr   z	/hyp.yamlwN)Zget_asset_listresumer'   yaml	safe_loaditemssetattrr   r   r   r   r(   dumphyp)r-   r.   Z
asset_listZresume_stringr   r1   Zasset_binaryopt_dictr   valuesave_dirZhyp_yaml_pathr2   r
   r
   r   set_opt_parametersB   s     

,r@   c                 C   sb   t du rdS t| jtr^| jtr^t  }t| j}|j |j	 }|
|}t| | dS dS )aM  Downloads model weights from Comet and updates the
    weights path to point to saved weights location

    Args:
        opt (argparse.Namespace): Command Line arguments passed
            to YOLOv5 training script

    Returns:
        None/bool: Return True if weights are successfully downloaded
            else return None
    NT)comet_ml
isinstancer#   str
startswithCOMET_PREFIXAPIr   netlocpathr%   r4   r-   apiresourceZexperiment_pathr.   r
   r
   r   check_comet_weightsa   s    


rL   c                 C   sl   t du rdS t| jtrh| jtrht  }t| j}|j |j	 }|
|}t| | t| | dS dS )aU  Restores run parameters to its original state based on the model checkpoint
    and logged Experiment parameters.

    Args:
        opt (argparse.Namespace): Command Line arguments passed
            to YOLOv5 training script

    Returns:
        None/bool: Return True if the run is restored successfully
            else return None
    NT)rA   rB   r6   rC   rD   rE   rF   r   rG   rH   r%   r@   r4   rI   r
   r
   r   check_comet_resume|   s    



rM   )loggingr   urllib.parser   rA   ModuleNotFoundErrorImportErrorr7   	getLogger__name__r    rE   getenvr   r   r4   r@   rL   rM   r
   r
   r
   r   <module>   s   

/