
    -ji                    $   S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S S	KJr  \R"                  " 5       (       a  S S
KJr  \" \5      r " S S\5      r " S S\5      rSSS jjrSS jrSS jrSSS jjrSS jrSS jrg)    )annotationsN)
NamedTuple)
get_logger)_CONSTRAINTS_KEY)Study)
TrialState)_imports)_make_hovertext)goc                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   Srg)_TimelineBarInfo   intnumberdatetime.datetimestartcompleter   statestr	hovertextbool
infeasible N__name__
__module____qualname____firstlineno____annotations____static_attributes__r       X/home/james-whalen/.local/lib/python3.13/site-packages/optuna/visualization/_timeline.pyr   r      s$    KNr!   r   c                       \ rS rSr% S\S'   Srg)_TimelineInfo   list[_TimelineBarInfo]barsr   Nr   r   r!   r"   r$   r$      s    
  r!   r$   c                |    Ub  US::  a  [        S5      e[        R                  " 5         [        XS9n[	        U5      $ )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.
r   z3n_recent_trials must be a positive integer or None.)n_recent_trials)
ValueErrorr	   check_get_timeline_info_get_timeline_plot)studyr)   infos      r"   plot_timeliner0   !   s<    & "!';NOONNeEDd##r!   c                   [        U R                   Vs/ s H:  nUR                  c  M  UR                  c  M!  UR                  UR                  -
  PM<     snS S9n[	        X5      (       a  [
        R
                  R                  5       $ [        U R                   Vs/ s H  oR                  c  M  UR                  PM     sn[
        R
                  R                  5       S9$ s  snf s  snf )N)default)maxtrialsdatetime_completedatetime_start_is_running_trials_in_studydatetimenow)r.   tmax_run_durations      r"   _get_max_datetime_completer<   <   s     \\	
!"" 3343C3C 3A!"2"22!	

  #5;;  $$&&&+llVl6I6I			lV!!%%' 	
 	Ws   C"C"C"C'0C'c                   ^^ U R                  [        R                  4SS9nTc  [        U5      S:  $ [        R                  R                  5       m[        UU4S jU 5       5      $ )NF)statesdeepcopyr   c              3  l   >#    U  H)  nUR                   c  M  TUR                   -
  ST-  :  v   M+     g 7f)N   )r6   ).0r:   r;   r9   s     r"   	<genexpr>._is_running_trials_in_study.<locals>.<genexpr>V   s9      A 	6a%5!55s   44)
get_trialsr   RUNNINGlenr8   r9   any)r.   r;   running_trialsr9   s    ` @r"   r7   r7   N   sg    %%j.@.@-BU%SN>"Q&&





!C    r!   c                   / n[        U 5      n[        R                  " SS9nU R                  SS9nUb  XQ* S  nU H  nUR                  =(       d    UnUR
                  [        R                  :X  a  X4-   OUR                  =(       d    Xt-   n[        UR                  ;  a  SO.[        UR                  [            V	s/ s H  oS:  PM	     sn	5      n
X:  a)  [        R                  SUR                   SU SU S	35        UR                  [!        UR                  UUUR
                  [#        U5      U
S
95        GM     [%        U5      S:X  a  [        R                  S5        ['        U5      $ s  sn	f )N   )secondsF)r?   r   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   z$Your study does not have any trials.)r<   r8   	timedeltarE   r6   r   r   rF   r5   r   system_attrsrH   _loggerwarningr   appendr   r
   rG   r$   )r.   r)   r'   max_datetimetimedelta_for_small_barr4   trialr6   r5   xr   s              r"   r,   r,   ^   ss   D-e4L&00;u-F"()*--= {{j000 2((TN,T 	  u'9'99 U%7%78H%IJ%I!e%IJK 	
 -OO8 G))7(88MN_M``ac 	||$*kk)%0%		
' < 4yA~>?/ Ks   <E-
c                F   SSSSSS.n[         R                  " 5       n[        [        S S9 GH  nUR                  S	:X  a  U R
                   Vs/ s H)  oDR                  U:X  d  M  UR                  (       d  M'  UPM+     nnU R
                   Vs/ s H)  oDR                  U:X  d  M  UR                  (       a  M'  UPM+     nn[        US
SU5        [        XaUR                     UR                  U5        M  U R
                   Vs/ s H  oDR                  U:X  d  M  UPM     nn[        XqUR                     UR                  U5        GM     UR                  SS9  UR                  [         R                  " SSS0SS0S95        UR                  SS9  U$ s  snf s  snf s  snf )Nblueredorangegreengray)COMPLETEFAILPRUNEDrF   WAITINGc                    U R                   $ N)name)rV   s    r"   <lambda>$_get_timeline_plot.<locals>.<lambda>   s    !&&r!   )keyr]   z#cccccc
INFEASIBLEdate)typezTimeline PlottitleDatetimeTrial)rj   xaxisyaxisT)
showlegend)r   Figuresortedr   rc   r'   r   r   
_plot_barsupdate_xaxesupdate_layoutLayout)r/   _cmfigr   binfeasible_barsfeasible_barsr'   s           r"   r-   r-      sZ   C ))+C
(89::#*.))Y)Qww%7GqALLq)OY(,		[	1WW5EQallQ	M[	<E}%**ouzz3G#yy=y!GGu,<AyD=t_ejj#> : &!
		!J'G$	
 &J! Z[ >s0   F&F9FF&F9FFFc                   [        U 5      S:X  a  g UR                  [        R                  " UU  Vs/ s H,  oDR                  UR
                  -
  R                  5       S-  PM.     snU  Vs/ s H  oDR                  PM     snU  Vs/ s H  oDR
                  R                  5       PM     snU  Vs/ s H  oDR                  PM     snSU-   S-   S[        US9SS9	5        g s  snf s  snf s  snf s  snf )	Nr   i  z%{text}<extra>z</extra>h)colornone)	rc   rV   ybasetexthovertemplateorientationmarkertextposition)rG   	add_tracer   Barr   r   total_secondsr   	isoformatr   dict)r'   r}   rc   rw   rx   s        r"   rr   rr      s    
4yA~MM
FJKd

QWW$335<dK!%&Axx&/34t!''##%t4'+,t!++t,*T1J>e$
	
 L&4,s   3C*C##C(.C-rb   )r.   r   r)   
int | Nonereturn'go.Figure')r.   r   r   r   )r.   r   r;   zdatetime.timedelta | Noner   r   )r.   r   r)   r   r   r$   )r/   r$   r   r   )
r'   r&   r}   r   rc   r   rw   z	go.Figurer   None)
__future__r   r8   typingr   optuna.loggingr   optuna.samplers._baser   optuna.studyr   optuna.trialr   $optuna.visualization._plotly_importsr	   optuna.visualization._utilsr
   is_successfulr   r   rP   r   r$   r0   r<   r7   r,   r-   rr   r   r!   r"   <module>r      su    "   % 2  # 9 7 7
X
z !J !$6$ +\>r!   