
    -ji:                    n   S SK Jr  S SKJr  S SKrS SKJr  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  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  S SKJ r   S SKJ!r!  S SKJ"r"  S SKJ#r#  \" \$5      r%Sr& " S S\5      r' " S S\5      r( " S S\5      r) " S S \5      r* S+SS!S".         S,S# jjjr+S-S$ jr, S.       S/S% jjr-S0S& jr.   S1         S2S' jjr/            S3S( jr0S4S) jr1S5S* jr2g)6    )annotations)CallableN)Any)
NamedTuple)optuna_warn)
get_logger)_CONSTRAINTS_KEY)Study)StudyDirection)FrozenTrial)
TrialState)_imports)_check_plot_args)_filter_nonfinite)_is_log_scale)_is_numerical)_is_reverse_scale)Contour)go)make_subplots)Scatter)COLOR_SCALEg?c                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   Srg)	_AxisInfo&   strnameztuple[float, float]rangeboolis_logis_catzlist[str | int | float]indiceszlist[str | float | None]values N__name__
__module____qualname____firstlineno____annotations____static_attributes__r$       W/home/james-whalen/.local/lib/python3.13/site-packages/optuna/visualization/_contour.pyr   r   &   s#    
ILL$$$$r,   r   c                  B    \ rS rSr% S\S'   S\S'   S\S'   / rS\S'   S	rg
)_SubContourInfo/   r   xaxisyaxiszdict[tuple[int, int], float]z_valuesz
list[bool]constraintsr$   N)r&   r'   r(   r)   r*   r4   r+   r$   r,   r-   r/   r/   /   s    ** K r,   r/   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
rg)_ContourInfo6   z	list[str]sorted_paramszlist[list[_SubContourInfo]]sub_plot_infosr   reverse_scaler   target_namer$   Nr%   r$   r,   r-   r6   r6   6   s    //r,   r6   c                  *    \ rS rSr% S\S'   S\S'   Srg)_PlotValues=   	list[Any]xyr$   Nr%   r$   r,   r-   r=   r=   =   s    LLr,   r=   Objective Value)targetr;   c               Z    [         R                  " 5         [        XX#5      n[        U5      $ )a  Plot the parameter relationship as contour 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 color bar.

Returns:
    A :class:`plotly.graph_objects.Figure` object.

.. note::
    The colormap is reversed when the ``target`` argument isn't :obj:`None` or ``direction``
    of :class:`~optuna.study.Study` is ``minimize``.
)r   check_get_contour_info_get_contour_plot)studyparamsrC   r;   infos        r-   plot_contourrK   B   s&    B NNUF@DT""r,   c           	     	   [         R                  " SS9nU R                  nU R                  nU R                  nU R
                  n[        U5      S::  a  [         R                  " / US9$ [        U5      S:X  Ga  US   nUS   nUS   S   n[        XU5      n	[         R                  " XS9n
U
R                  XhR                  R                  S9  U
R                  XxR                  R                  S9  UR                  R                  (       a  U
R                  SS	9  UR                  R                  (       a  U
R                  SS	9  UR                  R                  (       aJ  UR                  R                   Vs/ s H  n[         R"                  " U5      PM     nnU
R                  US
S9  UR                  R                  (       aJ  UR                  R                   Vs/ s H  n[         R"                  " U5      PM     nnU
R                  US
S9  U
$ [%        [        U5      [        U5      SSS9n
U
R'                  U5        Sn[)        U5       GHZ  u  p[)        U5       GHD  u  pXg:X  a+  U
R+                  [         R,                  " 5       US-   US-   S9  Oa[        X?   U   XE5      n	U	S   nU	S   nUR/                  US9  U(       a  SnU
R+                  UUS-   US-   S9  U
R+                  UUS-   US-   S9  X?   U   R                  nX?   U   R                  nU
R                  UR                  US-   US-   S9  U
R                  UR                  US-   US-   S9  UR                  (       a  U
R                  SUS-   US-   S9  UR                  (       a  U
R                  SUS-   US-   S9  UR                  (       aH  UR                   Vs/ s H  n[         R"                  " U5      PM     nnU
R                  US
US-   US-   S9  UR                  (       aH  UR                   Vs/ s H  n[         R"                  " U5      PM     nnU
R                  US
US-   US-   S9  US:X  a  U
R                  XS-   US-   S9  U[        U5      S-
  :X  d  GM.  U
R                  XoS-   US-   S9  GMG     GM]     U
$ s  snf s  snf s  snf s  snf )NzContour Plot)title   )datalayout   r   )
title_textr   category)typelog)r   rT   T)rowscolsshared_xaxesshared_yaxes)rowcol)	showscaleF)r   rZ   r[   )rT   rZ   r[   )r   rT   rZ   r[   )rR   rZ   r[   )r   Layoutr8   r9   r:   r;   lenFigure_get_contour_subplotupdate_xaxesr1   r   update_yaxesr2   r!   r    mathlog10r   update_layout	enumerate	add_tracer   update)rJ   rP   r8   r9   r:   r;   x_paramy_paramsub_plot_info	sub_plotsfigurep	log_ranger\   x_iy_icontourscatterr1   r2   s                       r-   rG   rG   h   sr   YY^,F&&M((N&&M""K
=Qyyb00
=Q""&q)!,({S		9w6I6I6O6OPw6I6I6O6OP%%Z0%%Z0%%0=0C0C0I0IJ0I1A0IIJie<%%0=0C0C0I0IJ0I1A0IIJie<Z MW ]##m*<4^b
 	V$	%m4LC )- 8%$$RZZ\sQwC!G$L 4&+C0-!I (lG'lGNNYN7 $)	$$W#'sQw$G$$W#'sQw$G&+C066&+C066##%++37a#P##%++37a#P<<''ZS1W#PQ''R<<''ZS1W#PQ''R<<8= D1AI D''ieqVY\]V]'^<<8= D1AI D''ieqVY\]V]'^!8''7aSSTW'U#m,q00''7aSSTW'UG !9 5L Mc K KF !E !Es   8 R. R3 R8! R=c                .   U R                   R                  nU R                  R                  n[        U5      S:  d  [        U5      S:  a>  [        R
                  " 5       [        R                  " 5       [        R                  " 5       4$ [        U R                  5      S:X  ax  [        SU R                   R                   SU R                  R                   S35        [        R
                  " 5       [        R                  " 5       [        R                  " 5       4$ [        / / 5      n[        / / 5      n[        U R                   R                  U R                  R                  U R                  5       H  u  pxn	Uc  M  Uc  M  U	(       a8  UR                  R                  U5        UR                   R                  U5        MO  UR                  R                  U5        UR                   R                  U5        M     ["        R$                  " [        U5      [        U5      4["        R&                  5      n
["        R(                  " [+        U R                  R-                  5       5      5      n["        R(                  " [+        U R                  R                  5       5      5      nXUS S 2S4   US S 2S4   4'   [        R
                  " UUU
SU0[.        SS	S
SUS9
nU[1        UR                  UR                   SS9[1        UR                  UR                   SS94$ )NrQ   r   z,Contour plot will not be displayed because `z` and `z$` cannot co-exist in `trial.params`.rN   rM   Theatmapnoneg?)
r@   rA   zcolorbar
colorscaleconnectgapscontours_coloring	hoverinfoline_smoothingreversescale)is_feasibleF)r1   r"   r2   r^   r   r   r   r3   r   r   r=   zipr#   r4   r@   appendrA   npfullnanarraylistkeysr   _create_scatter)rJ   r:   r;   	x_indices	y_indicesfeasible
infeasiblex_valuey_valuecr3   xyszsrr   s                 r-   r`   r`      sH   
 

""I

""I
9~S^a/zz|RZZ\2::<77
4==Q:4::??:K L

  DF	
 zz|RZZ\2::<772r"HR$J"4::#4#4djj6G6GIYIYZ!7#6

!!'*

!!'*##G,##G,  [ wwII7@H
((4**,-
.C	$t}}++-.	/B%'SAYAqD	!"jj


;'#"G 	

HJJDA
jllF r,   c           	     p    SnU(       a  SOSnU(       a  SOSn[         R                  " U USUS.US.S	US
S9$ )NGrayblackz#cccccczFeasible TrialzInfeasible Trialg       @)widthcolor)liner   markersF)r@   rA   markermoder   
showlegend)r   r   )r@   rA   r   
edge_colormarker_colorr   s         r-   r   r      sM    J)7yL*0BD::

!J7!
 
 
r,   c           	     ,   [        XU5        [        U R                  S[        R                  4S9US9nU VVs1 s H%  oUR
                  R                  5         H  ofiM     M'     nnn[        U5      S:X  a  [        R                  S5        / nOoUc  [        U5      nO`[        U5      S::  a  [        R                  S5        U H"  n	X;  d  M
  [        SR                  U	5      5      e   [        [        U5      5      n[        U5      S	:X  a  US   n
US   n[        XXU5      nU//nOP/ n[        U5       H?  u  pUR!                  / 5        U H#  n
[        XXU5      nX   R!                  U5        M%     MA     [#        X5      n[%        UUUUS
9$ s  snnf )NF)deepcopystates)rC   r   z.Your study does not have any completed trials.rN   z,The length of params must be greater than 1.z*Parameter {} does not exist in your study.rQ   )r8   r9   r:   r;   )r   r   
get_trialsr   COMPLETErI   r   r^   _loggerwarningsorted
ValueErrorformatset_get_contour_subplot_inforf   r   r   r6   )rH   rI   rC   r;   trialstp_name
all_paramsr8   input_p_nameri   rj   rk   r9   ir:   s                   r-   rF   rF      s    UK0%1D1D0FGPVF #)G&Qxx}}V&&&JG
6{aHI	z*v;!OOJK"L- !M!T!TUa!bcc # s6{+ =Q""1%SYZ(/*#M2JA!!"%( 9%[a b!((7 ) 3 &e4M#%#	 ? Hs   ,Fc                   [        X5      n[        X5      nX#:X  a
  [        XV0 S9$ [        UR                  5      S:  a.  [        R                  SR                  U5      5        [        XV0 S9$ [        UR                  5      S:  a.  [        R                  SR                  U5      5        [        XV0 S9$ 0 n[        U5       H  u  pX)R                  ;  d  X9R                  ;  a  M%  UR                  U   n
UR                  U   nU
c   eUc   eUR                  R                  U
5      nUR                  R                  U5      nUc  U	R                  nOU" U	5      nUc   eUR                  X45      nUb  Ub  XX4'   M  U R                  [        R                  L a  [!        X5      O
[#        X5      X|U4'   M     [        UUUU Vs/ s H  n[%        U5      PM     snS9$ s  snf )N)r1   r2   r3   rQ   z,Param {} unique value length is less than 2.)r1   r2   r3   r4   )_get_axis_infor/   r^   r"   r   r   r   rf   rI   r#   indexvalueget	directionr   MINIMIZEminmax_satisfy_constraints)rH   r   ri   rj   rC   r1   r2   r3   r   trialr   r   rp   rq   r   existingr   s                    r-   r   r   2  s    6+E6+EU"EE
5==AFMMgVWU"EE
5==AFMMgVWU"EE-/Hf%,,&'*E,,q/,,q/""""""mm!!'*mm!!'*>KKE5ME   <<
+v1 $)cZ  ??n&=&== H$) 3Z - &8 6<=f)!,f=	  >s   G!c                    U R                   R                  [        5      nUS L =(       d    [        U Vs/ s H  o"S:*  PM	     sn5      $ s  snf )Ng        )system_attrsr   r	   all)r   r4   r@   s      r-   r   r   k  sB    $$(()9:K$F#&EACx&E"FF&Es   A	c           	     (   [        X5      (       a+  U  Vs/ s H  o"R                  R                  U5      PM     nnOEU  Vs/ s H8  o!UR                  ;   a$  [        UR                  R                  U5      5      OS PM:     nn[	        U Vs/ s H	  oDc  M  UPM     sn5      n[        U Vs/ s H	  oDc  M  UPM     sn5      n[        X5      (       a  [        U5      n[        U5      n[        R                  " U5      [        R                  " U5      -
  [        -  n[        R                  " S[        R                  " U5      U-
  5      n[        R                  " S[        R                  " U5      U-   5      nSnSn	Ov[        X5      (       a.  [        U5      n[        U5      nXe-
  [        -  nXW-
  nXg-   nSnSn	O8[        U5      n
[        U
5      S-
  nS U
;   a  US-  nU[        -  nU* nX-   nSnSn	[        [        U Vs/ s H	  oDc  M  UPM     sn5      5      n[        U5      S:  a  [        UXV4UU	UUS9$ [        X5      (       a#  UR!                  SU5        UR#                  U5        [        UXV4UU	UUS9$ s  snf s  snf s  snf s  snf s  snf )N
   TFrN   rQ   )r   r   r    r!   r"   r#   r   )r   rI   r   r   r   r   r   floatrc   rd   PADDING_RATIOpowr   r^   r   r   insertr   )r   
param_namer   r#   v	min_value	max_valuepaddingr    r!   unique_valuesspanr"   s                r-   r   r   p  sj   V((4:;Fq((,,z*F; X^
W]RS188-CCZ()MW] 	 
 81Q89I81Q89IV(()$	)$	::i(4::i+@@MQHHRI!6!@A	HHRI!6!@A		v	*	*)$	)$	(M9'	'	 F=!A%= AID&H	N	SV=V!V=>?G
7|a(
 	
 V((q)$y!$ m <
 98> >s/   $I; ?J 
JJ*J
4J
 J
J)N)
rH   r
   rI   list[str] | NonerC   %Callable[[FrozenTrial], float] | Noner;   r   return'go.Figure')rJ   r6   r   r   )rB   )rJ   r/   r:   r   r;   r   r   z&tuple['Contour', 'Scatter', 'Scatter'])r@   r?   rA   r?   r   r   r   r   )NNrB   )
rH   r
   rI   r   rC   r   r;   r   r   r6   )rH   r
   r   list[FrozenTrial]ri   r   rj   r   rC   r   r   r/   )r   r   r   r   )r   r   r   r   r   r   )3
__future__r   collections.abcr   rc   typingr   r   numpyr   optuna._warningsr   optuna.loggingr   optuna.samplers._baser	   optuna.studyr
   r   optuna.trialr   r   $optuna.visualization._plotly_importsr   optuna.visualization._utilsr   r   r   r   r   is_successfulr   r   r   r   r   r&   r   r   r   r/   r6   r=   rK   rG   r`   r   rF   r   r   r   r$   r,   r-   <module>r      s   " $     ( % 2  ' $ # 9 8 9 5 5 9 <7B<7
X
 %
 %!j !: *   $## 59(###### 2	##
 ## ##LKb )5
55 5 ,	5p&  $48(	000 20 	0
 0f666 6 	6
 26 6rG
@r,   