
    (^i:                    H   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	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j:                         r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e#      Z$dZ% G d de      Z& G d de      Z' G d de      Z( G d de      Z)	 d*dd d!	 	 	 	 	 	 	 	 	 d+d"Z*d,d#Z+	 d-	 	 	 	 	 	 	 d.d$Z,d/d%Z-	 	 	 d0	 	 	 	 	 	 	 	 	 d1d&Z.	 	 	 	 	 	 	 	 	 	 	 	 d2d'Z/d3d(Z0d4d)Z1y)5    )annotations)CallableN)Any)
NamedTuple)
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                  J    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   y)	_AxisInfostrnameztuple[float, float]rangeboolis_logis_catzlist[str | int | float]indiceszlist[str | float | None]valuesN__name__
__module____qualname____annotations__     ^/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/optuna/visualization/_contour.pyr   r   &   s#    
ILL$$$$r(   r   c                  :    e Zd ZU ded<   ded<   ded<   g Zded<   y)	_SubContourInfor   xaxisyaxiszdict[tuple[int, int], float]z_valuesz
list[bool]constraintsN)r#   r$   r%   r&   r/   r'   r(   r)   r+   r+   /   s    ** K r(   r+   c                  6    e Zd ZU ded<   ded<   ded<   ded<   y	)
_ContourInfoz	list[str]sorted_paramszlist[list[_SubContourInfo]]sub_plot_infosr   reverse_scaler   target_nameNr"   r'   r(   r)   r1   r1   6   s    //r(   r1   c                  "    e Zd ZU ded<   ded<   y)_PlotValues	list[Any]xyNr"   r'   r(   r)   r7   r7   =   s    LLr(   r7   Objective Value)targetr5   c               \    t        j                          t        | |||      }t        |      S )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paramsr<   r5   infos        r)   plot_contourrD   B   s*    B NNUFFK@DT""r(   c           	     	   t        j                  d      }| j                  }| j                  }| j                  }| j
                  }t        |      dk  rt        j                  g |      S t        |      dk(  r|d   }|d   }|d   d   }t        |||      }	t        j                  |	|      }
|
j                  ||j                  j                         |
j                  ||j                  j                         |j                  j                  r|
j                  d	       |j                  j                  r|
j                  d	       |j                  j                  rI|j                  j                  D cg c]  }t!        j"                  |       }}|
j                  |d
       |j                  j                  rI|j                  j                  D cg c]  }t!        j"                  |       }}|
j                  |d
       |
S t%        t        |      t        |      dd      }
|
j'                  |       d}t)        |      D ]^  \  }}t)        |      D ]I  \  }}||k(  r-|
j+                  t        j,                         |dz   |dz          ngt        ||   |   ||      }	|	d   }|	d   }|j/                  |       |rd}|
j+                  ||dz   |dz          |
j+                  ||dz   |dz          ||   |   j                  }||   |   j                  }|
j                  |j                  |dz   |dz          |
j                  |j                  |dz   |dz          |j                  r|
j                  d|dz   |dz          |j                  r|
j                  d|dz   |dz          |j                  rG|j                  D cg c]  }t!        j"                  |       }}|
j                  |d
|dz   |dz          |j                  rG|j                  D cg c]  }t!        j"                  |       }}|
j                  |d
|dz   |dz          |dk(  r|
j                  ||dz   |dz          |t        |      dz
  k(  s0|
j                  ||dz   |dz          L a |
S c c}w c c}w c c}w c c}w )NzContour Plot)title   )datalayout   r   )
title_textr   category)typelog)r   rM   T)rowscolsshared_xaxesshared_yaxes)rowcol)	showscaleF)r   rS   rT   )rM   rS   rT   )r   rM   rS   rT   )rK   rS   rT   )r   Layoutr2   r3   r4   r5   lenFigure_get_contour_subplotupdate_xaxesr,   r   update_yaxesr-   r   r   mathlog10r   update_layout	enumerate	add_tracer   update)rC   rI   r2   r3   r4   r5   x_paramy_paramsub_plot_info	sub_plotsfigurep	log_rangerU   x_iy_icontourscatterr,   r-   s                       r)   r@   r@   h   s   YY^,F&&M((N&&M""K
=Qyyb00
=Q""&q)!,({S		&9wm6I6I6O6OPwm6I6I6O6OP%%Z0%%Z0%%0=0C0C0I0IJ1AJIJie<%%0=0C0C0I0IJ1AJIJie<Z MW ]##m*<4^b
 	V$	%m4 $	VLC )- 8 #VWg%$$RZZ\sQwC!G$L 4&s+C0-!I (lG'lGNNYN7 $)	$$W#'sQw$G$$W#'sQw$G&s+C066&s+C066##%++37a#P##%++37a#P<<''ZS1W#PQ''R<<''ZS1W#PQ''R<<8= D1A DI D''ieqVY\]V]'^<<8= D1A DI D''ieqVY\]V]'^!8''7aSSTW'U#m,q00''7aSSTW'UG#V$	VL Mc K KF !E !Es   =R2R7R<%Sc                &   | j                   j                  }| j                  j                  }t        |      dk  st        |      dk  r;t	        j
                         t	        j                         t	        j                         fS t        | j                        dk(  rt        j                  d| j                   j                   d| j                  j                   d       t	        j
                         t	        j                         t	        j                         fS t        g g       }t        g g       }t        | j                   j                  | j                  j                  | j                        D ]{  \  }}}	|
||	r7|j                  j!                  |       |j"                  j!                  |       F|j                  j!                  |       |j"                  j!                  |       } t%        j&                  t        |      t        |      ft$        j(                        }
t%        j*                  t-        | j                  j/                                     }t%        j*                  t-        | j                  j                                     }||
|d d df   |d d df   f<   t	        j
                  |||
d|it0        dd	d
d|
      }|t3        |j                  |j"                  d      t3        |j                  |j"                  d      fS )NrJ   r   z,Contour plot will not be displayed because `z` and `z$` cannot co-exist in `trial.params`.rG   rF   Theatmapnoneg?)
r9   r:   zcolorbar
colorscaleconnectgapscontours_coloring	hoverinfoline_smoothingreversescale)is_feasibleF)r,   r    r-   rW   r   r   r   r.   warningswarnr   r7   zipr!   r/   r9   appendr:   npfullnanarraylistkeysr   _create_scatter)rC   r4   r5   	x_indices	y_indicesfeasible
infeasiblex_valuey_valuecr.   xyszsrk   s                 r)   rY   rY      sT   
 

""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%'HSAYAqD	!"jj


;'#"G 	

HJJDA
jllF r(   c                `    d}|rdnd}|rdnd}t        j                  | |d|d|dd	|d
      S )NGrayblackz#cccccczFeasible TrialzInfeasible Trialg       @)widthcolor)liner   markersF)r9   r:   markermoder   
showlegend)r   r   )r9   r:   rx   
edge_colormarker_colorr   s         r)   r   r      sM    J)7yL*0BD::

!J7!
 
 
r(   c           	     0   t        | ||       t        | j                  dt        j                  f      |      }|D ch c]#  }|j
                  j                         D ]  }| % }}}t        |      dk(  rt        j                  d       g }nj|t        |      }n\t        |      dk  rt        j                  d       |D ]   }	|	|vst        dj                  |	             t        t        |            }t        |      d	k(  r|d   }
|d   }t        | ||
||      }|gg}nPg }t        |      D ]@  \  }}|j!                  g        |D ]%  }
t        | ||
||      }||   j!                  |       ' B t#        | |      }t%        ||||
      S c c}}w )NF)deepcopystates)r<   r   z.Your study does not have any completed trials.rG   z,The length of params must be greater than 1.z*Parameter {} does not exist in your study.rJ   )r2   r3   r4   r5   )r   r   
get_trialsr   COMPLETErB   r   rW   _loggerwarningsorted
ValueErrorformatset_get_contour_subplot_infor_   r|   r   r1   )rA   rB   r<   r5   trialstp_name
all_paramsr2   input_p_namerb   rc   rd   r3   ir4   s                   r)   r?   r?      s    UFK0%1D1D0FGPVF #)GQqxx}}GV&G&GJG
6{aHI	z*v;!OOJK" 	dL:- !M!T!TUa!bcc	d s6{+ =Q""1%'SYZ(/*#M2 	8JAw!!"%( 8 9%RY[a bq!((78	8 &eV4M#%#	 ? Hs    (Fc                   t        ||      }t        ||      }||k(  rt        ||i       S t        |j                        dk  r2t        j                  dj                  |             t        ||i       S t        |j                        dk  r2t        j                  dj                  |             t        ||i       S i }t        |      D ]  \  }}	||	j                  vs||	j                  vr#|j                  |   }
|j                  |   }|
J |J |j                  j                  |
      }|j                  j                  |      }||	j                  }n ||	      }|J |j                  ||f      }||||||f<   | j                  t        j                  u rt!        ||      nt#        ||      |||f<    t        ||||D cg c]  }t%        |       c}      S c c}w )N)r,   r-   r.   rJ   z,Param {} unique value length is less than 2.)r,   r-   r.   r/   )_get_axis_infor+   rW   r    r   r   r   r_   rB   r!   indexvalueget	directionr
   MINIMIZEminmax_satisfy_constraints)rA   r   rb   rc   r<   r,   r-   r.   r   trialr   r   ri   rj   r   existingr   s                    r)   r   r   2  s    67+E67+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% 5%,,&'*E,,q/,,q/""""""mm!!'*mm!!'*>KKE5ME   <<c
+v1 $)Hc3Z  ??n&=&== He$5) c3Z -8 6<=)!,=	  >s   G'c                    | j                   j                  t              }|d u xs t        |D cg c]  }|dk  	 c}      S c c}w )Ng        )system_attrsr   r   all)r   r/   r9   s      r)   r   r   k  s@    $$(()9:K$F#&EAqCx&E"FF&Es   Ac                   t        | |      r)| D cg c]  }|j                  j                  |       }}nA| D cg c]6  }||j                  v r$t        |j                  j                  |            nd 8 }}t	        |D cg c]  }||	 c}      }t        |D cg c]  }||	 c}      }t        | |      rt        |      }t        |      }t        j                  |      t        j                  |      z
  t        z  }t        j                  dt        j                  |      |z
        }t        j                  dt        j                  |      |z         }d}d}	ntt        | |      r1t        |      }t        |      }||z
  t        z  }||z
  }||z   }d}d}	n7t        |      }
t        |
      dz
  }d |
v r|dz  }|t        z  }| }||z   }d}d}	t        t        |D cg c]  }||	 c}            }t        |      dk  rt        |||f||	||      S t        | |      r#|j!                  d|       |j#                  |       t        |||f||	||      S c c}w c c}w c c}w c c}w c c}w )N
   TFrG   rJ   )r   r   r   r   r    r!   r   )r   rB   r   r   r   r   r   floatr\   r]   PADDING_RATIOpowr   rW   r   r   insertr|   )r   
param_namer   r!   v	min_value	max_valuepaddingr   r   unique_valuesspanr    s                r)   r   r   p  so   VZ(4:;q!((,,z*;; X^
RSZ188-CCZ()M
 
 81!-Q89I81!-Q89IVZ()$	)$	::i(4::i+@@MQHHRI!6!@A	HHRI!6!@A		vz	*)$	)$	y(M9'	'	 F=!A%= AID&H	7N	SV=q}!=>?G
7|ai(
 	
 VZ(q)$y!)$ m <
 98> >s.   "I;I! I&I&I+$I+"I0*I0)N)
rA   r	   rB   list[str] | Noner<   %Callable[[FrozenTrial], float] | Noner5   r   return'go.Figure')rC   r1   r   r   )r;   )rC   r+   r4   r   r5   r   r   z&tuple['Contour', 'Scatter', 'Scatter'])r9   r8   r:   r8   rx   r   r   r   )NNr;   )
rA   r	   rB   r   r<   r   r5   r   r   r1   )rA   r	   r   list[FrozenTrial]rb   r   rc   r   r<   r   r   r+   )r   r   r   r   )r   r   r   r   r   r   )2
__future__r   collections.abcr   r\   typingr   r   ry   numpyr}   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+   r1   r7   rD   r@   rY   r   r?   r   r   r   r'   r(   r)   <module>r      s   " $      % 2  ' $ # 9 8 9 5 5 9 8<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(   