o
    /wi                     @  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 d dl	m
Z
 d dlmZ d dlmZ d d	lmZ e r>d d
lmZ eeZG dd deZG dd deZd.d/ddZd0ddZd1ddZd.d2dd Zd3d"d#Zd4d,d-ZdS )5    )annotationsN)
NamedTuple)
get_logger)_CONSTRAINTS_KEY)Study)
TrialState)_imports)_make_hovertext)goc                   @  s>   e Zd ZU ded< ded< ded< ded< ded	< d
ed< dS )_TimelineBarInfointnumberdatetime.datetimestartcompleter   statestr	hovertextbool
infeasibleN__name__
__module____qualname____annotations__ r   r   [/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/optuna/visualization/_timeline.pyr      s   
 r   c                   @  s   e Zd ZU ded< dS )_TimelineInfolist[_TimelineBarInfo]barsNr   r   r   r   r   r      s   
 r   studyr   n_recent_trials
int | Nonereturn'go.Figure'c                 C  s4   |dur|dkrt dt  t| |d}t|S )a'  Plot the timeline of a study.

    Args:
        study:
            A :class:`~optuna.study.Study` object whose trials are plotted with
            their lifetime.
        n_recent_trials:
            The number of recent trials to plot. If :obj:`None`, all trials are plotted.
            If specified, only the most recent ``n_recent_trials`` will be displayed.
            Must be a positive integer.

    Returns:
        A :class:`plotly.graph_objects.Figure` object.

    Raises:
        ValueError: if ``n_recent_trials`` is 0 or negative.
    Nr   z3n_recent_trials must be a positive integer or None.)r!   )
ValueErrorr   check_get_timeline_info_get_timeline_plot)r    r!   infor   r   r   plot_timeline!   s
   r*   r   c                 C  sJ   t dd | jD d d}t| |rtj S t dd | jD tj dS )Nc                 S  s,   g | ]}|j d ur|jd ur|j |j qS N)datetime_completedatetime_start.0tr   r   r   
<listcomp>>   s
    
z._get_max_datetime_complete.<locals>.<listcomp>)defaultc                 S  s   g | ]
}|j d ur|j qS r+   )r,   r.   r   r   r   r1   I   s    )maxtrials_is_running_trials_in_studydatetimenow)r    max_run_durationr   r   r   _get_max_datetime_complete<   s   

r9   r8   datetime.timedelta | Noner   c                   sH   | j tjfdd} d u rt|dkS tj t fdd|D S )NF)statesdeepcopyr   c                 3  s,    | ]}|j d ur|j  d  k V  qd S )N   )r-   r.   r8   r7   r   r   	<genexpr>V   s    
z._is_running_trials_in_study.<locals>.<genexpr>)
get_trialsr   RUNNINGlenr6   r7   any)r    r8   running_trialsr   r>   r   r5   N   s   
r5   c           
      C  s   g }t | }tjdd}| jdd}|d ur|| d  }|D ]P}|jp%|}|jtjkr0|| n|jp6|| }t	|j
vr>dntdd |j
t	 D }	||k r^td|j d| d	| d
 |t|j|||jt||	d qt|dkr{td t|S )N   )secondsF)r<   c                 S  s   g | ]}|d kqS )r   r   )r/   xr   r   r   r1   r   s    z&_get_timeline_info.<locals>.<listcomp>z"The start and end times for Trial z( seem to be reversed. The start time is z and the end time is .)r   r   r   r   r   r   r   z$Your study does not have any trials.)r9   r6   	timedeltar@   r-   r   r   rA   r,   r   system_attrsrC   _loggerwarningr   appendr   r	   rB   r   )
r    r!   r   max_datetimetimedelta_for_small_barr4   trialr-   r,   r   r   r   r   r'   ^   sJ   



r'   r)   c                   s   dddddd}t  }ttdd d	D ]C  jd
krB fdd| jD } fdd| jD }t|dd| t|| j  j| q fdd| jD }t|| j  j| q|jdd |t j	dddiddid |jdd |S )Nblueredorangegreengray)COMPLETEFAILPRUNEDrA   WAITINGc                 S  s   | j S r+   )name)rG   r   r   r   <lambda>   s    z$_get_timeline_plot.<locals>.<lambda>)keyrV   c                   s    g | ]}|j  kr|jr|qS r   r   r   r/   br   r   r   r1           z&_get_timeline_plot.<locals>.<listcomp>c                   s    g | ]}|j  kr|js|qS r   r]   r^   r`   r   r   r1      ra   z#cccccc
INFEASIBLEc                   s   g | ]	}|j  kr|qS r   r`   r^   r`   r   r   r1      s    date)typezTimeline PlottitleDatetimeTrial)re   xaxisyaxisT)
showlegend)
r
   Figuresortedr   rZ   r   
_plot_barsupdate_xaxesupdate_layoutLayout)r)   _cmfiginfeasible_barsfeasible_barsr   r   r`   r   r(      s2   
r(   r   r   colorr   rZ   rr   	go.FigureNonec                 C  sl   t | dkrd S |tj|dd | D dd | D dd | D dd | D d| d d	t|d
dd	 d S )Nr   c                 S  s    g | ]}|j |j  d  qS )i  )r   r   total_secondsr^   r   r   r   r1      ra   z_plot_bars.<locals>.<listcomp>c                 S     g | ]}|j qS r   )r   r^   r   r   r   r1          c                 S  s   g | ]}|j  qS r   )r   	isoformatr^   r   r   r   r1      s    c                 S  ry   r   )r   r^   r   r   r   r1      rz   z%{text}<extra>z</extra>h)ru   none)	rZ   rG   ybasetexthovertemplateorientationmarkertextposition)rB   	add_tracer
   Bardict)r   ru   rZ   rr   r   r   r   rm      s   
rm   r+   )r    r   r!   r"   r#   r$   )r    r   r#   r   )r    r   r8   r:   r#   r   )r    r   r!   r"   r#   r   )r)   r   r#   r$   )
r   r   ru   r   rZ   r   rr   rv   r#   rw   )
__future__r   r6   typingr   optuna.loggingr   optuna.samplers._baser   optuna.studyr   optuna.trialr   $optuna.visualization._plotly_importsr   optuna.visualization._utilsr	   is_successfulr
   r   rK   r   r   r*   r9   r5   r'   r(   rm   r   r   r   r   <module>   s(    	


.