o
    }oi`#                     @  sr  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 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 d dlmZ d dlmZ d 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/Z%	0d?d0d1d2d@d4d5Z&dAd7d8Z'dBd;d<Z(d0S )C    )annotations)Callable)Any)cast)
NamedTuple)CategoricalChoiceType)CategoricalDistribution)
get_logger)_CONSTRAINTS_KEY)Study)FrozenTrial)
TrialState)_imports)_check_plot_args)_filter_nonfinite)_is_log_scale)go)make_subplots)Scatter)COLOR_SCALEc                   @  sN   e Zd ZU ded< ded< ded< ded< d	ed
< d	ed< ded< ded< dS )_SliceSubplotInfostr
param_name	list[Any]xlist[float]y	list[int]trial_numbersboolis_logis_numericalz
list[bool]constraints(tuple[CategoricalChoiceType, ...] | Nonex_labelsN__name__
__module____qualname____annotations__ r*   r*   O/home/ubuntu/.local/lib/python3.10/site-packages/optuna/visualization/_slice.pyr      s   
 r   c                   @  s   e Zd ZU ded< ded< dS )_SlicePlotInfor   target_namezlist[_SliceSubplotInfo]subplotsNr%   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 )_PlotValuesr   r   r   r   r   r   Nr%   r*   r*   r*   r+   r/   .   s   
 r/   trialslist[FrozenTrial]paramr   target%Callable[[FrozenTrial], float] | None	log_scaler   	numericalr$   r#   returnc           
   
   C  s   |d u rd
dd}|}t |g g g |||g d}| D ]7}||jvr!q|j|j|  |j|| |j|j |jt	}	|j
|	d u pNtdd	 |	D  q|S )Ntr   r7   floatc                 S  s   t t| jS N)r   r9   value)r8   r*   r*   r+   _target>   s   z(_get_slice_subplot_info.<locals>._target)r   r   r   r   r    r!   r$   r"   c                 S  s   g | ]}|d kqS )g        r*   ).0r   r*   r*   r+   
<listcomp>U   s    z+_get_slice_subplot_info.<locals>.<listcomp>)r8   r   r7   r9   )r   paramsr   appendr   r   numbersystem_attrsgetr
   r"   all)
r0   r2   r3   r5   r6   r$   r<   	plot_infor8   r"   r*   r*   r+   _get_slice_subplot_info4   s,   

$rF   studyr   r?   list[str] | Noner-   c           
        s  t | | t| jdtjfddtdkr#td t|g S dd D }i  D ]}|j	
 D ]\}}| vrA| |< q5q.i  
 D ]\}}t|trW|j|< qI|d u rat|}n|D ]}	|	|vrqtd|	 d	qctt|}t| fd
d|D dS )NF)deepcopystates)r3   r   z.Your study does not have any completed trials.c                 S  s    h | ]}|j  D ]}|q	qS r*   )r?   keys)r=   r8   p_namer*   r*   r+   	<setcomp>j   s     z'_get_slice_plot_info.<locals>.<setcomp>z
Parameter z does not exist in your study.c                   s8   g | ]}t |t|t | t |d qS ))r0   r2   r3   r5   r6   r$   )rF   r   
isinstancer   rC   )r=   r2   distributionsr3   r0   r$   r*   r+   r>      s    	z(_get_slice_plot_info.<locals>.<listcomp>)r-   r.   )r   r   
get_trialsr   COMPLETElen_loggerwarningr,   rP   itemsrN   r   choicessorted
ValueErrorset)
rG   r?   r3   r-   
all_paramstrialr   distributionsorted_paramsinput_p_namer*   rO   r+   _get_slice_plot_infoZ   sB   




	r`   NzObjective Value)r3   r-   'go.Figure'c                C  s   t   tt| |||S )aN  Plot the parameter relationship as slice plot in a study.

    Note that, if a parameter contains missing values, a trial with missing values is not plotted.

    Args:
        study:
            A :class:`~optuna.study.Study` object whose trials are plotted for their target values.
        params:
            Parameter list to visualize. The default is all parameters.
        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.

    Returns:
        A :class:`plotly.graph_objects.Figure` object.
    )r   check_get_slice_plotr`   )rG   r?   r3   r-   r*   r*   r+   
plot_slice   s   rd   infoc                 C  s  t jdd}t| jdkrt jg |dS t| jdkrZt jt| jd |d}|j| jd jd |j| j	d | jd j
sL|jdd| jd jd	 |S | jd jrX|jd
d |S tdt| jdd}|| d}t| jddD ]S\}}t|}|d jd|id |rd}|D ]
}|j|d|d q|j|jd|d |dkr|j| j	d|d |j
s|jdd|jd|d qr|jr|jd
d|d qrt| jdkr|jdt| j d |S )Nz
Slice Plot)titler   )datalayout   )
title_textcategoryarray)typecategoryordercategoryarraylog)rm   T)rowscolsshared_yaxes)start	showscale)markerF)rowcol)rj   rw   rx   )rm   rn   ro   rw   rx   )rm   rw   rx      i,  )width)r   LayoutrS   r.   Figure_generate_slice_subplotupdate_xaxesr   update_yaxesr-   r!   r$   r    r   update_layout	enumerateupdate	add_trace)re   rh   figureru   column_indexsubplot_infotracer8   r*   r*   r+   rc      sT   !
rc   r   list[Scatter]c                 C  s  g }t g g g }t g g g }t| j| j| j| jD ]7\}}}}|d us/|dks/|d us/|dkrP|rD|j| |j| |j| q|j| |j| q|tj|j|jddddd|jt	ddd	d
ddd t
|jdkr|tj|j|jddddidd |S )NNonemarkerszFeasible Trialg      ?Grey)rz   colorTrialg      ?(   )rf   r   xpad)liner   
colorscalecolorbarF)r   r   modenamerv   
showlegendr   zInfeasible Trialr   z#cccccc)r/   zipr   r   r   r"   r@   r   r   r   rS   )r   r   feasible
infeasibler   r   numcr*   r*   r+   r}      sX    
r}   )r0   r1   r2   r   r3   r4   r5   r   r6   r   r$   r#   r7   r   )
rG   r   r?   rH   r3   r4   r-   r   r7   r,   r:   )
rG   r   r?   rH   r3   r4   r-   r   r7   ra   )re   r,   r7   ra   )r   r   r7   r   ))
__future__r   collections.abcr   typingr   r   r   optuna.distributionsr   r   optuna.loggingr	   optuna.samplers._baser
   optuna.studyr   optuna.trialr   r   $optuna.visualization._plotly_importsr   optuna.visualization._utilsr   r   r   is_successfulr   r   r   r   r&   rT   r   r,   r/   rF   r`   rd   rc   r}   r*   r*   r*   r+   <module>   sD    

&7
!.