
    -ji3                    8   S SK J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  \
" 5        rS SKrSSS5        \R2                  " 5       (       a  S SKJr  S SKJr  S SKJr  S SKJr  Sr\" S5       S"SSS.         S#S jjj5       rS$S jr S%S jr! " S S5      r"      S&S jr#      S'S jr$S(S jr%        S)S jr&            S*S  jr'S+S! jr(g! , (       d  f       N= f),    )annotations)Callable)SequenceN)experimental_func)
try_import)Study)FrozenTrial)	_AxisInfo)_ContourInfo)_get_contour_info)_PlotValues)_SubContourInfo)_imports)Axes)Colormap)
ContourSet)pltd   z2.2.0zObjective Value)targettarget_namec               Z    [         R                  " 5         [        XX#5      n[        U5      $ )a  Plot the parameter relationship as contour plot in a study with Matplotlib.

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

.. seealso::
    Please refer to :func:`optuna.visualization.plot_contour` for an example.

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:`matplotlib.axes.Axes` object.

.. note::
    The colormap is reversed when the ``target`` argument isn't :obj:`None` or ``direction``
    of :class:`~optuna.study.Study` is ``minimize``.
)r   checkr   _get_contour_plot)studyparamsr   r   infos        b/home/james-whalen/.local/lib/python3.13/site-packages/optuna/visualization/matplotlib/_contour.pyplot_contourr   !   s&    J NNUF@DT""    c                    U R                   nU R                  nU R                  nU R                  n[	        U5      S::  a  [
        R                  " 5       u  pVU$ [	        U5      n[
        R                  R                  S5        US:X  a~  [
        R                  " 5       u  pU	R                  S5        [        U5      n
[        US   S   X5      n[        U[        5      (       a"  UR                  U5      nUR                  U5        U	$ [
        R                  " Xw5      u  p[        U	[         R"                  5      (       d   eUR%                  S5        [        U5      n
/ n['        [	        U5      5       H]  n['        [	        U5      5       HB  nXU4   n[        X/   U   Xj5      n[        U[        5      (       d  M1  UR)                  U5        MD     M_     U(       a$  UR                  US   U	S9nUR                  U5        U	$ )N   ggplot   zContour Plotr   )ax)sorted_paramssub_plot_infosreverse_scaler   lenr   subplotsstyleuse	set_title	_set_cmap_generate_contour_subplot
isinstancer   colorbar	set_labelnpndarraysuptitlerangeappend)r   r%   r&   r'   r   _r$   n_paramsfigaxscmapcsaxcbcs_listx_iy_is                   r   r   r   K   s   &&M((N&&M""K
=Q	=!HIIMM(1}<<>n%'&~a'8';SGb*%%<<#DNN;'( J# <<3#rzz****^$' ]+,CS/0c].~/B3/GRb*--NN2&	 1 - <<
s<3DNN;'Jr   c                D    U (       d  SOSn[         R                  " U5      $ )NBlues_rBlues)r   get_cmap)r'   r;   s     r   r-   r-   w   s    )9wD<<r   c                  P    \ rS rSrS
S jrSS jrSS jrSS jrSS jrSS jr	Sr
g	)_LabelEncoder|   c                    / U l         g Nlabelsselfs    r   __init___LabelEncoder.__init__}   s	    !#r   c                8    [        [        U5      5      U l        U $ rI   )sortedsetrK   rM   rK   s     r   fit_LabelEncoder.fit   s    S[)r   c                b    U Vs/ s H  o R                   R                  U5      PM     sn$ s  snf rI   )rK   index)rM   rK   labels      r   	transform_LabelEncoder.transform   s'    6<=fU!!%(f===s   $,c                B    U R                  U5      R                  U5      $ rI   )rT   rY   rS   s     r   fit_transform_LabelEncoder.fit_transform   s    xx))&11r   c                    U R                   $ rI   rJ   rL   s    r   
get_labels_LabelEncoder.get_labels   s    {{r   c                P    [        [        [        U R                  5      5      5      $ rI   )listr5   r(   rK   rL   s    r   get_indices_LabelEncoder.get_indices   s    E#dkk*+,,r   rJ   N)returnNone)rK   	list[str]re   z'_LabelEncoder')rK   rg   re   	list[int])re   rg   )re   rh   )__name__
__module____qualname____firstlineno__rN   rT   rY   r\   r_   rc   __static_attributes__ r   r   rF   rF   |   s     $>2-r   rF   c                    / n/ n[        U R                  UR                  5       H1  u  pEUc  M
  Uc  M  UR                  U5        UR                  U5        M3     X#4$ rI   )zipvaluesr6   )xaxisyaxisx_valuesy_valuesx_valuey_values         r   _filter_missing_valuesrx      sX     HHell;7#6OOG$OOG$ < r   c                   / n/ nU R                   (       a  [        5       nUR                  [        [	        [
        [        S U R                  5      5      5      5        UR                  [        [	        [
        U5      5      5      nUR                  5       nUR                  5       nO[        [	        S U5      5      nU R                  (       a_  [        R                  " [        R                  " U R                  S   5      [        R                  " U R                  S   5      [         5      nO6[        R"                  " U R                  S   U R                  S   [         5      nXbU[        U5      4$ )Nc                
    U S L$ rI   rn   )values    r   <lambda>&_calculate_axis_data.<locals>.<lambda>   s	    53Dr   c                    [        U 5      $ rI   )float)xs    r   r|   r}      s    U1Xr   r   r!   )is_catrF   rT   rb   mapstrfilterrq   rY   r_   rc   is_logr2   logspacelog10r5   CONTOUR_POINT_NUMlinspace)axisrq   cat_param_labelscat_param_posencreturned_valuescis          r   _calculate_axis_datar      s    
 #%!M{{oSf%DdkkRSTU --Sf-=(>?>>+)s#5v>? {{[[$**Q-0"((4::a=2IK\][[A

17HI_0EEEr   c                n   U R                   nU R                  nU R                  n/ n/ n/ n[        UR                  UR                  5       H|  u  pxUc  M
  Uc  M  UR                  U5        UR                  U5        UR                  R                  U5      n	UR                  R                  U5      n
UR                  X9U
4   5        M~     [        U5      S:X  d  [        U5      S:X  a-  [        R                  " / 5      [        / / 5      [        / / 5      4$ [        UU5      u  pp[        UU5      u  nnnn[        R                  " / 5      nUR                  UR                  :w  a  [        UUXkU5      n[        U[         5      n[        / / 5      n[        / / 5      n[        UUU R"                  5       H{  u  pxnU(       a8  UR$                  R                  U5        UR&                  R                  U5        ME  UR$                  R                  U5        UR&                  R                  U5        M}     UUU4$ )Nr   )rr   rs   z_valuesrp   rq   r6   indicesrW   r(   r2   arrayr   r   name_create_zmap_interpolate_zmapr   constraintsr   y)r   rr   rs   z_values_dictrt   ru   r   rv   rw   r?   r@   xicat_param_labels_xcat_param_pos_xtransformed_x_valuesyicat_param_labels_ycat_param_pos_ytransformed_y_valueszizmapfeasible
infeasiblecs                           r   _calculate_griddatar      s   JJEJJEMMMHHHell;7#6OOG$OOG$--%%g.C--%%g.COOM*56 < 8}S]a/xx|[R0+b"2EEEDXEABO EYEABO-A XXb\B zzUZZ02FVXYt%67 2r"HR$J"#79MtO_O_`!JJg&JJg&LL(LL(  a x##r   c           
     P   UR                  5         [        U R                  R                  5      S:  d#  [        U R                  R                  5      S:  a  g UR                  U R                  R                  U R                  R                  S9  UR                  U R                  R                  S   U R                  R                  S   5        UR                  U R                  R                  S   U R                  R                  S   5        [        U R                  U R                  5      u  p4[        U R                  U5      u  pVpx[        U R                  U5      u  ppU R                  R                  (       a#  UR                  U5        UR                  U5        O.UR                  U R                  R                   (       a  SOS5        U R                  R                  (       a#  UR#                  U5        UR%                  U
5        O.UR'                  U R                  R                   (       a  SOS5        U R                  R                  U R                  R                  :X  a  g [)        U 5      u  pnS n[        U5      S:  a  UR+                  XYUSSS	S
9  UR-                  XYUSUR/                  5       S9n[1        U[2        5      (       d   eUR5                  UR6                  UR8                  SSSSSS9  UR5                  UR6                  UR8                  SSSSSS9  U$ )Nr#   )xlabelylabelr   r!   loglinear   g      ?k)
linewidthscolors)r;   oblack   greyg       @)markerr   s
edgecolors	linewidthz#cccccc)label_outerr(   rr   r   rs   rR   r   set_xlimr5   set_ylimrx   r   r   
set_xticksset_xticklabels
set_xscaler   
set_yticksset_yticklabels
set_yscaler   contourcontourfreversedr/   r   scatterr   r   )r   r$   r;   rt   ru   r   x_cat_param_labelx_cat_param_posr7   r   y_cat_param_labely_cat_param_posr   feasible_plot_valuesinfeasible_plot_valuesr<   s                   r   r.   r.      sj    NN
4::"c$***<*<&=&AFF$**//$**//F:KK

  #TZZ%5%5a%89KK

  #TZZ%5%5a%89/

DJJGH0DTZZQY0Z-B?0DTZZQY0Z-B?zz
o&
,-
tzz00eh?zz
o&
,-
tzz00eh?zz$**//)7J47P4B4	B
2w{


22rc#
>[[Rdmmo[>"j))))


 "" "" 	 	
 	

"$$"$$ 	 	
 Ir   c           	     $   [        5       n[        XU5       Hu  u  pgn[        [        R                  " [        R
                  " X6-
  5      5      5      n	[        [        R                  " [        R
                  " XG-
  5      5      5      n
XX4'   Mw     U$ rI   )dictrp   intr2   argminabs)rt   ru   r   r   r   r   r   r   zxindexyindexs              r   r   r   )  sl    " 6Dx84aRYYrvvbf~./RYYrvvbf~./!"f 5
 Kr   c                    / n/ n/ n[         R                  " US-  5      n[        U5       GH  n[        U5       H  nXq-  U-   nXg4U ;   a=  UR                  S5        UR                  U5        UR                  U5        XU4   XX'   MN  S H  u  pSXi-   s=::  a  U:  d  M  O  M  SXz-   s=::  a  U:  d  M+  O  M/  UR                  S5        UR                  U5        UR                  U5        UR                  S5        UR                  U5        UR                  XU-  -   U	-   5        M     M     GM     [        R
                  R                  R                  [        R
                  R                  X#U445      U5      nUR                  X45      $ )Nr#   r!   ))r   )r!   r   )r   r   )r   r!   r   r   )
r2   zerosr5   r6   scipysparselinalgspsolve
csc_matrixreshape)r   contour_plot_numa_dataa_rowa_colbr   r   
grid_indexdxdyr   s               r   r   r   C  s^   " FEE
!1$%A#$'(A-1Jv~a Z(Z( $V@FBAF5%555!qv:XHX:X:Xa(Z0Z0b)Z0Z7G2G%G"%LM A ) %$ 	##ELL$;$;VU^<T$UWXYA99&9::r   rI   )
r   r   r   zlist[str] | Noner   z%Callable[[FrozenTrial], float] | Noner   r   re   'Axes')r   r   re   r   )r'   boolre   
'Colormap')rr   r
   rs   r
   re   z+tuple[list[str | float], list[str | float]])r   r
   rq   zSequence[str | float]re   z:tuple[np.ndarray, list[str], list[int], list[int | float]])r   r   re   z+tuple[np.ndarray, _PlotValues, _PlotValues])r   r   r$   r   r;   r   re   z'ContourSet' | None)rt   Sequence[int | float]ru   r   r   zSequence[float]r   
np.ndarrayr   r   re   dict[tuple[int, int], float])r   r   r   r   re   r   ))
__future__r   collections.abcr   r   numpyr2   optuna._experimentalr   optuna._importsr   optuna.studyr   optuna.trialr	   optuna.visualization._contourr
   r   r   r   r   3optuna.visualization.matplotlib._matplotlib_importsr   _optuna_importsr   is_successfulr   r   r   r   r   r   r   r-   rF   rx   r   r   r.   r   r   rn   r   r   <module>r      s   " $ $  2 &  $ 3 6 ; 5 9 H \_  HLNG   7  $&# 59(&#&#&# 2	&#
 &# &# &#R)X
- -*		&	0	F
F!F @F<1$h7
7%7-777t##  		
 	 "4);_	 \s   D
D