
    ,YHh`#                       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j4                         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e      Z! G d de      Z" G d de      Z#	 	 	 	 	 	 	 	 	 	 	 	 	 	 d#dZ$	 	 	 	 	 	 	 	 	 	 d$dZ%	 d%ddd	 	 	 	 	 	 	 	 	 d&d Z&d'd!Z'd(d"Z(y))    )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                  ^    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<   y)_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__     T/var/www/html/planif/env/lib/python3.12/site-packages/optuna/visualization/_slice.pyr   r      s.    OLNL66r-   r   c                  "    e Zd ZU ded<   ded<   y)_SlicePlotInfor   target_namezlist[_SliceSubplotInfo]subplotsNr'   r,   r-   r.   r0   r0   )   s    %%r-   r0   c                  ,    e Zd ZU ded<   ded<   ded<   y)_PlotValuesr   r   r   r   r   r    Nr'   r,   r-   r.   r4   r4   .   s    LNr-   r4   c           
        |dd}|}t        |g g g |||g       }| D ]  }||j                  vr|j                  j                  |j                  |          |j                  j                   ||             |j
                  j                  |j                         |j                  j                  t              }	|j                  j                  |	d u xs t        |	D 
cg c]  }
|
dk  	 c}
              |S c c}
w )Nc                6    t        t        | j                        S N)r   floatvalue)ts    r.   _targetz(_get_slice_subplot_info.<locals>._target>   s    qww''r-   )r   r   r   r    r"   r#   r&   r$   g        )r:   r   returnr8   )r   paramsr   appendr   r    numbersystem_attrsgetr   r$   all)trialsparamtarget	log_scale	numericalr&   r;   	plot_infor:   r$   r   s              r.   _get_slice_subplot_inforI   4   s     ~	( !

	I  b 188E?+6!9%&&qxx0nn(()9:$$[D%8%`CS^@_ac@_<`ab  A`s   !C<c                J   t        | ||       t        | j                  dt        j                  f      |      }t        |      dk(  r!t        j                  d       t        |g       S |D ch c]#  }|j                  j                         D ]  }| % }}}i }|D ].  }	|	j                  j                         D ]  \  }
}|
|vs|||
<    0 i }|j                         D ]%  \  }
}t        |t              s|j                  ||
<   ' |t!        |      }n.|D ]  }||vst#        d| d       t!        t%        |            }t        ||D cg c]>  }t'        |||t)        ||      t        ||   t               |j+                  |            @ c}	      S c c}}w c c}w )
NF)deepcopystates)rE   r   z.Your study does not have any completed trials.z
Parameter z does not exist in your study.)rC   rD   rE   rF   rG   r&   )r1   r2   )r   r   
get_trialsr   COMPLETElen_loggerwarningr0   r=   keysdistributionsitems
isinstancer	   choicessorted
ValueErrorsetrI   r   rA   )studyr=   rE   r1   rC   r:   p_name
all_paramsrS   trialr   distributionr&   sorted_paramsinput_p_namerD   s                   r.   _get_slice_plot_infora   Z   s    UFK0%1D1D0FGPVF 6{aHIk2.."(GQqxx}}GV&G&GJGM 9(-(;(;(A(A(C 	9$J.,8j)	99
 H$1$7$7$9 8 
Ll$;<#/#7#7HZ 8 ~z*" 	\L:- :l^;Y!Z[[	\ s6{+ '

  $'6(u)=?VWW!e,

 + H.

s   /(FAF 
NzObjective Value)rE   r1   c               X    t        j                          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_plotra   )rZ   r=   rE   r1   s       r.   
plot_slicere      s%    : NN/vv{STTr-   c                P   t        j                  d      }t        | j                        dk(  rt        j                  g |      S t        | j                        dk(  rt        j                  t        | j                  d         |      }|j                  | j                  d   j                         |j                  | j                         | j                  d   j                  s-|j                  dd| j                  d   j                  	       |S | j                  d   j                  r|j                  d
       |S t        dt        | j                        d      }|j                  |       d}t        | j                  d      D ]  \  }}t        |      }|d   j!                  d|i       |rd}|D ]  }|j#                  |d|        |j                  |j                  d|       |dk(  r|j                  | j                  d|       |j                  s!|j                  dd|j                  d|       |j                  s|j                  d
d|        t        | j                        dkD  r(|j                  dt        | j                        z         |S )Nz
Slice Plot)titler   )datalayout   )
title_textcategoryarray)typecategoryordercategoryarraylog)rn   T)rowscolsshared_yaxes)start	showscale)markerF)rowcol)rk   rx   ry   )rn   ro   rp   rx   ry   )rn   rx   ry      i,  )width)r   LayoutrO   r2   Figure_generate_slice_subplotupdate_xaxesr   update_yaxesr1   r#   r&   r"   r   update_layout	enumerateupdate	add_trace)infori   figurerv   column_indexsubplot_infotracer:   s           r.   rd   rd      sj   YY\*F
4==Qyyb00	T]]	q	  7a8H IRXYt}}Q'7'B'BCt'7'78}}Q,,wdmmTUFVF_F_   B M= ]]1$$U+: M7 AC,>TRV$	*3DMM*K 	I&L,+L9E!HOOK#;O<!	 =  | <=<+B+B|\q ##t/?/?QL#Y,,###")"."7"7$ $  $$##A<#H'	I( t}}!  sS-?'? @Mr-   c                P   g }t        g g g       }t        g g g       }t        | j                  | j                  | j                  | j
                        D ]  \  }}}}||dk7  s||dk7  s|rR|j                  j                  |       |j                  j                  |       |j                  j                  |       k|j                  j                  |       |j                  j                  |        |j                  t        j                  |j                  |j                  ddddd|j                  t        ddd	d
dd             t        |j                        dkD  r@|j                  t        j                  |j                  |j                  ddddid             |S )NNonemarkerszFeasible Trialg      ?Grey)r{   colorTrialg      ?(   )rg   r   xpad)liner   
colorscalecolorbarF)r   r   modenamerw   
showlegendr   zInfeasible Trialr   z#cccccc)r4   zipr   r   r    r$   r>   r   r   r   rO   )r   r   feasible
infeasibler   r   numcs           r.   r~   r~      s   E2r2&HRR(J(B(BLD\D\ 
'1c1 =AK1=AK

!!!$

!!!$&&--c2##A&##A&
' 
LL


jjjj!"%7!//)$		 	
& :<<1JJ,,,,'Y !		
 Lr-   )rC   zlist[FrozenTrial]rD   r   rE   %Callable[[FrozenTrial], float] | NonerF   r!   rG   r!   r&   r%   r<   r   )
rZ   r   r=   list[str] | NonerE   r   r1   r   r<   r0   r7   )
rZ   r   r=   r   rE   r   r1   r   r<   'go.Figure')r   r0   r<   r   )r   r   r<   zlist[Scatter]))
__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(   rP   r   r0   r4   rI   ra   re   rd   r~   r,   r-   r.   <module>r      sS   " $    6 8 % 2  $ # 9 8 9 5 87B<7
X
7
 7&Z &
* ### 2# 	#
 # 7# #L222 22 	2
 2n  $U 59(UUU 2	U
 U UB+\2r-   