o
    }oi,                     @  s0  d dl mZ d dlmZ d dlmZ d dlmZ d dlZd dlm	Z	 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 d dlmZ e rfd dlmZ eeZG dd deZ G dd de
Z!G dd de
Z"d,d!d"Z#dd#d$d%d-d'd(Z$d.d*d+Z%dS )/    )annotations)Callable)Sequence)EnumN)cast)
NamedTuple)
get_logger)_CONSTRAINTS_KEY)Study)StudyDirection)FrozenTrial)
TrialState)_imports)_check_plot_args)goc                   @  s   e Zd ZdZdZdZdS )_ValueStater         N)__name__
__module____qualname__Feasible
Infeasible
Incomplete r   r   ^/home/ubuntu/.local/lib/python3.10/site-packages/optuna/visualization/_optimization_history.pyr      s    r   c                   @  s.   e Zd ZU ded< ded< ded< ded< d	S )
_ValuesInfozlist[float]valueszlist[float] | Nonestdsstr
label_namezlist[_ValueState]statesNr   r   r   __annotations__r   r   r   r   r   "   s
   
 r   c                   @  s&   e Zd ZU ded< ded< ded< dS )_OptimizationHistoryInfoz	list[int]trial_numbersr   values_infoz_ValuesInfo | Nonebest_values_infoNr"   r   r   r   r   r$   )   s   
 r$   studyStudy | Sequence[Study]target%Callable[[FrozenTrial], float] | Nonetarget_namer   	error_barboolreturnlist[_OptimizationHistoryInfo]c              
     s  t | || t| tr| g}nt| }g  |D ]} |  }t|dkr%|n| d| j }g }g }|D ]K}	|	jtj	krI|
td |
tj q3|	jt}
|
d u s\tdd |
D rc|
tj n|
tj |d uru|
||	 q3|
tt|	j q3|d urd }nBg }| jtjkrdd t||D }ttj|}ndd t||D }ttj|}t|dkrdnd	| j }t|d ||} 
td
d |D t|d |||d qt dkrt !d t"dd  D }t"dd  D }|| dkr
t !d  #  |s S t dkrg S |dkr$t !d g S dd  D }t$|d d fdd}||d\}}d }|d u rN|dd\}}t|||gS )Nr   z of nanc                 S  s   g | ]}|d kqS )g        r   ).0xr   r   r   
<listcomp>G   s    z7_get_optimization_history_info_list.<locals>.<listcomp>c                 S  s&   g | ]\}}|t jkr|ntd qS infr   r   floatr2   vsr   r   r   r4   V   s    c                 S  s(   g | ]\}}|t jkr|ntd  qS r5   r7   r9   r   r   r   r4   \   s    z
Best ValuezBest Value of c                 S  s   g | ]}|j qS r   )number)r2   tr   r   r   r4   g   s    )r%   r&   r'   r   zThere are no studies.c                 s       | ]}|j jtjV  qd S N)r&   r!   countr   r   r2   infor   r   r   	<genexpr>p       
z6_get_optimization_history_info_list.<locals>.<genexpr>c                 s  r>   r?   )r&   r!   r@   r   r   rA   r   r   r   rC   s   rD   zThere are no complete trials.zThere are no feasible trials.c                 S  s   g | ]
}|j D ]}|qqS r   )r%   )r2   rB   r<   r   r   r   r4      s    r    r   use_best_valuer.   r/   tuple[list[int], _ValuesInfo]c                   sZ  dd t D }dd t D } d usJ  D ]A\}}}|r)|d us'J |}t||j|jD ])\}}}	t|sS|sJ|	tjkrJ|| | n	|rS|| | || |	 q1qg }
g }g }g }t D ];}t	|| dkrtj|| v r|tj |
| |t
||   |t
||   qh|tj qh|
t||| |fS )Nc                 S     g | ]}g qS r   r   r2   _r   r   r   r4          zK_get_optimization_history_info_list.<locals>._aggregate.<locals>.<listcomp>c                 S  rG   r   r   rH   r   r   r   r4      rJ   r   )rangezipr   r!   mathisinfr   r   appendlennpmeanitemstdr   r   )r    rE   r   r!   r%   r&   r'   nr:   r;   trial_numbers_unionvalue_statesvalue_means
value_stdsi	info_listmax_num_trialr   r   
_aggregate   s6   

z7_get_optimization_history_info_list.<locals>._aggregateFT)r    r   rE   r.   r/   rF   )%r   
isinstancer
   list
get_trialsrP   
study_namestater   COMPLETErO   r8   r   r   system_attrsgetr	   allr   r   r   value	directionr   MINIMIZErL   rQ   minimum
accumulatemaximumr   r$   _loggerwarningsumclearmax)r(   r*   r,   r-   studiestrialsr    r   rW   trialconstraintsr'   feasible_best_valuesbest_valuesbest_label_namefeasible_trial_countinfeasible_trial_countall_trial_numbersr^   eb_trial_numberseb_values_infoeb_best_values_inforI   r   r[   r   #_get_optimization_history_info_list/   s   
 




r   zObjective ValueF)r*   r,   r-   'go.Figure'c                C  s    t   t| |||}t||S )a7  Plot optimization history of all trials in a study.

    Args:
        study:
            A :class:`~optuna.study.Study` object whose trials are plotted for their target values.
            You can pass multiple studies if you want to compare those optimization histories.
        target:
            A function to specify the value to display. If it is :obj:`None` and ``study`` is being
            used for single-objective optimization, the objective values are plotted.

            .. note::
                Specify this argument if ``study`` is being used for multi-objective optimization.
        target_name:
            Target's name to display on the axis label and the legend.
        error_bar:
            A flag to show the error bar.

    Returns:
        A :class:`plotly.graph_objects.Figure` object.
    )r   checkr   _get_optimization_history_plot)r(   r*   r,   r-   r\   r   r   r   plot_optimization_history   s   
r   r\   c                 C  s  t jdddid|id}g }| D ]\}}}dd t||jD }|jd u rQd }dd t||jD }	g }
|	D ]
}|
|j|  q6g }|D ]
}||j|  qEntj|jv s]tj	|jv rbt
d d	|jd
d}|}	|j}
g }|t j|	|
|d|jd |d ur|t j||j|jdd |jd urt|jt|j }|t j||dtdddd t|jt|j }|t j||ddddd |t j|||ddddidd qt j||dS )NzOptimization History PlottitleTrial)r   xaxisyaxisc                 S     g | ]\}}|t jkr|qS r   )r   r   )r2   rU   r;   r   r   r   r4      s    z2_get_optimization_history_plot.<locals>.<listcomp>c                 S  r   r   )r   r   )r2   numr;   r   r   r   r4      s
    
z~Your study contains infeasible trials. In optimization history plot, error bars are calculated for only feasible trial values.dataT)typearrayvisiblemarkers)r3   yerror_ymodenamelines)r3   r   r   r   g{Gz?)widthF)r3   r   r   line
showlegendnonetonextyzrgba(255,0,0,0.2))r3   r   r   r   fill	fillcolorzInfeasible Trialcolorz#cccccc)r3   r   r   r   r   markerr   )r   layout)r   LayoutrL   r!   r   rO   r   r   r   r   rn   ro   Scatterr    rQ   r   dictFigure)r\   r,   r   tracesr%   r&   r'   infeasible_trial_numbersr   feasible_trial_numbersfeasible_trial_valuesr   infeasible_trial_valuesupperlowerr   r   r   r      s   


	
	
r   )
r(   r)   r*   r+   r,   r   r-   r.   r/   r0   )
r(   r)   r*   r+   r,   r   r-   r.   r/   r   )r\   r0   r,   r   r/   r   )&
__future__r   collections.abcr   r   enumr   rM   typingr   r   numpyrQ   optuna.loggingr   optuna.samplers._baser	   optuna.studyr
   optuna.study._study_directionr   optuna.trialr   r   $optuna.visualization._plotly_importsr   optuna.visualization._utilsr   is_successfulr   r   rn   r   r   r$   r   r   r   r   r   r   r   <module>   s:    
 "