o
    }oi"                     @  s@  d dl mZ d dlmZ d dl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 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dZdZG dd deZeddddefd=d"d#Z			d>d?d%d&Z 	'	(d@dAd1d2Z!dBd5d6Z"dCd9d:Z#dDd;d<Z$dS )E    )annotations)
NamedTupleN)experimental_func)
get_logger)Study)BaseErrorEvaluator)BaseImprovementEvaluator)CrossValidationErrorEvaluator)RegretBoundEvaluator)StaticErrorEvaluator)BestValueStagnationEvaluator)DEFAULT_MIN_N_TRIALS)_imports)gog?g      ?c                   @  s&   e Zd ZU ded< ded< ded< dS )_ImprovementInfo	list[int]trial_numberslist[float]improvementslist[float] | NoneerrorsN)__name__
__module____qualname____annotations__ r   r   `/home/ubuntu/.local/lib/python3.10/site-packages/optuna/visualization/_terminator_improvement.pyr      s   
 r   z3.2.0Fstudyr   
plot_errorboolimprovement_evaluatorBaseImprovementEvaluator | Noneerror_evaluatorBaseErrorEvaluator | Nonemin_n_trialsintreturn'go.Figure'c                 C  s    t   t| |||}t||S )a  Plot the potentials for future objective improvement.

    This function visualizes the objective improvement potentials, evaluated
    with ``improvement_evaluator``.
    It helps to determine whether we should continue the optimization or not.
    You can also plot the error evaluated with
    ``error_evaluator`` if the ``plot_error`` argument is set to :obj:`True`.
    Note that this function may take some time to compute
    the improvement potentials.

    Args:
        study:
            A :class:`~optuna.study.Study` object whose trials are plotted
            for their improvement.
        plot_error:
            A flag to show the error. If it is set to :obj:`True`, errors
            evaluated by ``error_evaluator`` are also plotted as line graph.
            Defaults to :obj:`False`.
        improvement_evaluator:
            An object that evaluates the improvement of the objective function.
            Defaults to :class:`~optuna.terminator.RegretBoundEvaluator`.
        error_evaluator:
            An object that evaluates the error inherent in the objective function.
            Defaults to :class:`~optuna.terminator.CrossValidationErrorEvaluator`.
        min_n_trials:
            The minimum number of trials before termination is considered.
            Terminator improvements for trials below this value are
            shown in a lighter color. Defaults to ``20``.

    Returns:
        A :class:`plotly.graph_objects.Figure` object.
    )r   check_get_improvement_info_get_improvement_plot)r   r   r    r"   r$   infor   r   r   plot_terminator_improvement%   s   (
r,   	get_errorc                 C  s   |   rtd|d u rt }|d u r!t|trtdd}nt }g }g }g }g }t| jD ]8}|j	t
jjjkr>|| t|dkrEq/||j |j|| jd}	||	 |rg|j|| jd}
||
 q/t|dkrut||d dS t|||dS )NzBThis function does not support multi-objective optimization study.r   )constant)trialsstudy_direction)r   r   r   )_is_multi_objective
ValueErrorr
   
isinstancer   r   r	   tqdmr/   stateoptunatrial
TrialStateCOMPLETEappendlennumberevaluate	directionr   )r   r-   r    r"   r   completed_trialsr   r   r7   improvementerrorr   r   r   r)   S   sF   



r)         ?Tr   r   r   r   opacityfloat
showlegend'go.Scatter'c              
   C  s2   d| d}t j| |dt|dt|dd|ddS )Nzrgba(99, 110, 250, )markers+linescolorTerminator Improvementr@   )xymodemarkerlinenamerE   legendgroupr   Scatterdict)r   r   rC   rE   plotly_blue_with_opacityr   r   r   _get_improvement_scatter   s   rW   r   r   c              	   C  s6   |d u rt  S d}t j| |ddt|dt|ddS )Nzrgb(239, 85, 59)rH   ErrorrI   )rL   rM   rN   rQ   rO   rP   rS   )r   r   
plotly_redr   r   r   _get_error_scatter   s   rZ   r+   tuple[float, float]c                 C  s   t | j}| jd urt |t | j}t| j|kr#t| j|d  }nt| j}| jd ur5t|t| j}|| t }|| || fS )N)minr   r   r;   r   maxPADDING_RATIO_Y)r+   r$   	min_value	max_valuepaddingr   r   r   _get_y_range   s   



rb   c                 C  s   t | j}tjtjdtddtdddd}|dkr"td |S |t	| jd |d	  | j
d |d	  t||k ||krR|t	| j|d  | j
|d   |t| j| j |jt| |d
 |S )NzTerminator Improvement PlotTrial)titlerK   )rd   xaxisyaxis)layoutr   zThere are no complete trials.   )range)r;   r   r   FigureLayoutrU   _loggerwarning	add_tracerW   r   OPACITYrZ   r   update_yaxesrb   )r+   r$   n_trialsfigr   r   r   r*      s:   


r*   )r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   )FNN)
r   r   r-   r   r    r!   r"   r#   r&   r   )rB   T)
r   r   r   r   rC   rD   rE   r   r&   rF   )r   r   r   r   r&   rF   )r+   r   r$   r%   r&   r[   )r+   r   r$   r%   r&   r'   )%
__future__r   typingr   r4   r6   optuna._experimentalr   optuna.loggingr   optuna.study.studyr   optuna.terminatorr   r   r	   r
   optuna.terminator.errorevalr   'optuna.terminator.improvement.evaluatorr   r   $optuna.visualization._plotly_importsr   is_successfulr   r   rl   r^   ro   r   r,   r)   rW   rZ   rb   r*   r   r   r   r   <module>   sJ    /7

