
    -ji5                       S SK Jr  S SKJr  S SK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  \R6                  " 5       r\(       a  S SKJr  S SKJr  S SKJr  S SKJ r   \R6                  " 5       (       a  S SKJ!r"  \" \#5      r$S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 jr+            S,S  jr,S-S! jr-        S.S" jr. " S# S$\5      r/S/S% jr0    S0S& jr1S1S' jr2g)2    )annotations)CallableN)Any)
NamedTuple)
get_logger)_CONSTRAINTS_KEY)Study)FrozenTrial)
TrialState)_imports)_check_plot_args)_is_log_scale)_is_numerical)go)make_subplots)plotly)Scatter)pltg?c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	rg
)	_AxisInfo(   strnameztuple[float, float]rangeboolis_logis_cat N__name__
__module____qualname____firstlineno____annotations____static_attributes__r       T/home/james-whalen/.local/lib/python3.13/site-packages/optuna/visualization/_rank.pyr   r   (   s    
ILLr&   r   c                  \    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   S
\S'   Srg)_RankSubplotInfo/   r   xaxisyaxisz	list[Any]xsyslist[FrozenTrial]trials
np.ndarrayzscolorsr   Nr   r   r&   r'   r)   r)   /   s)    MMNr&   r)   c                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S\S
'   S\S'   Srg)_RankPlotInfo9   	list[str]paramszlist[list[_RankSubplotInfo]]sub_plot_infosr   target_namer1   r2   r3   r   has_custom_targetr   Nr   r   r&   r'   r5   r5   9   s%    00Nr&   r5   zObjective Value)targetr:   c               Z    [         R                  " 5         [        XX#5      n[        U5      $ )aJ  Plot parameter relations as scatter plots with colors indicating ranks of target value.

Note that trials missing the specified parameters will not be 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::
    This function requires plotly >= 5.0.0.
)r   check_get_rank_info_get_rank_plot)studyr8   r<   r:   infos        r'   	plot_rankrC   B   s&    @ NN%=D$r&   c                    [         R                  " U [        S9n[         R                  " U 5      n[	        U 5       H9  u  p4[         R
                  " X$:H  5      S   n[        U5      [        U5      -  X'   M;     U$ )Ndtyper   )np
zeros_likefloatsort	enumeratewheresumlen)dataorderdata_sortedidindicess         r'   $_get_order_with_same_order_averagingrU   g   s`    MM$e,E''$-K$((;+,Q/w<#g,.   Lr&   c                   [        XU5        U R                  S[        R                  4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O,Uc  [        U5      nOU H  nX;  d  M
  [        SU S35      e   [        U5      S:X  a  [        R                  S5        Sn	Uc  SS	 jnSn	[        R                  " U V
s/ s H
  o" U
5      PM     sn
5      n[        U5      n[        U5      S
:  a  U[        U5      S-
  -  O[        R                  " S/5      n[        U5      n[        U5      S
:X  a  US   nUS   n[        XKXU5      nU//nO0U VVs/ s H!  nU Vs/ s H  n[        XKXU5      PM     snPM#     nnn[!        UUUUUU	S9$ s  snnf s  sn
f s  snf s  snnf )NF)deepcopystatesr   z.Your study does not have any completed trials.z
Parameter z does not exist in your study.zparams is an empty list.Tc                L    [         R                  " [        U R                  5      $ N)typingcastrI   value)trials    r'   r<   _get_rank_info.<locals>.target   s    ;;uekk22r&               ?)r8   r9   r:   r2   r3   r;   )r^   r
   returnrI   )r   
get_trialsr   COMPLETEr8   keysrN   _loggerwarningsorted
ValueErrorrG   arrayrU   (_convert_color_idxs_to_scaled_rgb_colors_get_rank_subplot_infor5   )rA   r8   r<   r:   r0   tp_name
all_paramsinput_p_namer;   r^   target_values	raw_ranks
color_idxsr3   x_paramy_paramsub_plot_infor9   s                      r'   r?   r?   p   s    UK0uj6I6I5KLF"(G&Qxx}}V&&&JG
6{aHI	
#"L- :l^;Y!Z[[ # 6{a23~	3 "HH@fUm@AM4]CI25f+2Bc&kAo.RUQVJ5jAF 6{a)).vfW^_(/* "

 "  &%G 'vfwW% " 	 
 %+ S H* A
s#   ,G7G
GG-GGc           
        [        X5      n[        X5      n/ n/ n[        U 5       H  u  pU
R                  R                  [        5      nUb4  [        U Vs/ s H  oS:  PM	     sn5      (       a  UR                  U	5        X:R                  ;   d  Ml  XJR                  ;   d  M}  UR                  U	5        M     U Vs/ s H  oU   PM	     nnU V
s/ s H  oR                  U   PM     nn
U V
s/ s H  oR                  U   PM     nn
X   nSX''   X(   n[        UUUUU[        R                  " U5      US9$ s  snf s  snf s  sn
f s  sn
f )Ng        )   ry   ry   )r+   r,   r-   r.   r0   r2   r3   )_get_axis_inforK   system_attrsgetr   anyappendr8   r)   rG   rk   )r0   rr   r3   ru   rv   r+   r,   infeasible_trial_idsfiltered_idsidxr^   constraintsxrR   filtered_trialsr-   r.   r2   s                     r'   rm   rm      s<    6+E6+EL'
((,,-=>"s[+I[G[+I'J'J '',ll"w,,'>$ ( +77,Qay,O7-<	=_E,,w
_B	=-<	=_E,,w
_B	=		$B#2F !F88B<  ,J
 8	=	=s   D7
<D<E.Ec                   [        X5      nU(       a+  U  Vs/ s H  o3R                  R                  U5      PM     nnOEU  Vs/ s H8  o1UR                  ;   a$  [        UR                  R                  U5      5      OS PM:     nn[	        U Vs/ s H	  oUc  M  UPM     sn5      n[        U Vs/ s H	  oUc  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
OmU(       a.  [        U5      n[        U5      nXv-
  [        -  nXh-
  nXx-   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Xg4U	U
S9$ s  snf s  snf s  snf s  snf )N
   TFra   )r   r   r   r   )r   r8   r|   r   minmaxr   rI   mathlog10PADDING_RATIOpowsetrN   r   )r0   
param_nameis_numericalrn   valuesv	min_value	max_valuepaddingr   r   unique_valuesspans                r'   rz   rz      s    4L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		)$	)$	(M9'	'	 F=!A%= AID&H	N	$	 M <
 98s#   $G8?G=HH,H6Hc                  ^^ S
UU4S jjn[         R                  " U R                  R                  (       a&  U R                   Vs/ s H  n[        U5      PM     snOU R                  U R                  R                  (       a&  U R                   Vs/ s H  n[        U5      PM     snOU R                  [        [        [        R                  R                  U R                  5      5      SSS.S.SSS[        U R                  U R                  5       VVs/ s H  u  pgU" Xg5      PM     snnS	9nU$ s  snf s  snf s  snnf )Nc           	     X  > SU R                    3/nX R                  R                  5        VVs/ s H  u  p4U SU 3PM     snn-  nUST SU S3/-  nT(       a3  U[        U R                  5       VVs/ s H  u  pTSU SU 3PM     snn-  nSR                  U5      $ s  snnf s  snnf )NzTrial #z: z<b>z</b>zObjective #z<br>)numberr8   itemsrK   r   join)r^   target_valuelineskr   rR   print_raw_objectivesr:   s         r'   get_hover_text)_get_rank_subplot.<locals>.get_hover_text  s    5<<.)*,,*<*<*>?*>$!QCr!+*>??C}B|nD9::5<<9PQ9PA3b,9PQQE{{5!!	 @ Rs   B 5B&rb   Grey)widthcolor)r   linemarkersFz%{hovertext}<extra></extra>)r   ymarkermode
showlegendhovertemplate	hovertext)r^   r
   r   rI   rc   r   )r   r   r+   r   r-   r   r,   r.   listmapr   r3   	label_rgbzipr0   r2   )	rB   r:   r   r   r   r   r^   r   scatters	    ``      r'   _get_rank_subplotr     s    " " jj'+zz'8'8477
#7a3q67
#dgg'+zz'8'8477
#7a3q67
#dgg#fmm55t{{CD!F3
 3 (+4;;'@
'@# 5/'@
G N $
#
s   D2D7
D<c                  *    \ rS rSr% S\S'   S\S'   Srg)	_TickInfoi!  zlist[float]	coloridxsr7   textr   Nr   r   r&   r'   r   r   !  s    
Or&   r   c                    [         R                  " U 5      n/ SQn[         R                  " X5      n/ SQn[        [	        U5      5       Vs/ s H  oTU    SX5   S S3PM     nn[        X&S9$ s  snf )N)r   g      ?rb   g      ?ra   )zmin.z25%z50%z75%zmax.z (3g))r   r   )rG   rJ   quantiler   rN   r   )rr   sorted_target_valuesr   r   	rank_textrR   r   s          r'   _get_tick_infor   &  sm    77=1'I[[-9F5I8=c&k8JK8J1|nBvynA.8JDKy44 Ls   A-c                	   U R                   nU R                  n[        R                  " SU R                   S3S9n[        U5      S:X  a  [        R                  " / US9$ [        U5      S:X  Ga  US   nUS   nUS   S   n[        X`R                  U R                  5      n[        R                  " XsS9nUR                  XFR                  R                  S9  UR                  XVR                  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  GO^[%        [        U5      [        U5      SSS[        U5      -  S[        U5      -  S9nUR'                  U5        [)        U5       GH  u  p[)        U5       GH  u  p[        X,   U   U R                  U R                  5      nUR+                  XS-   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                  XLS-   US-   S9  GM     GM     [-        U R.                  5      nSn[        R0                  " S /S /S[3        USSS[3        SUR4                  UR6                  S9S9SSS9nUR+                  U5        U$ s  sn	f s  sn	f s  sn	f s  sn	f )NzRank (r   )titler   )rO   layoutr`   ra   )
title_textr   category)typelog)r   r   Tg{Gz?)rowscolsshared_xaxesshared_yaxeshorizontal_spacingvertical_spacing)rowcol)r   r   r   )r   r   r   )r   r   r   r   )r   r   r   RdYlBu_rr   r   )	thicknesstickvalsticktext)
colorscale	showscalecmincmaxcolorbarnoneF)r   r   r   r   	hoverinfor   )r8   r9   r   Layoutr:   rN   Figurer   r;   update_xaxesr+   r   update_yaxesr,   r   r   r   r   r   update_layoutrK   	add_tracer   r2   r   dictr   r   )rB   r8   r9   r   ru   rv   rw   	sub_plotsfigurep	log_rangex_iy_ir   r+   r,   	tick_infocolormapcolorbar_traces                      r'   r@   r@   /  s    [[F((NYYvd&6&6%7q9:F
6{ayyb00
6{a))&q)!,%m5E5EtG]G]^		9w6I6I6O6OPw6I6I6O6OP%%Z0%%Z0%%0=0C0C0I0IJ0I1A0IIJie<%%0=0C0C0I0IJ0I1A0IIJie<VV#c&k1!CK/
 	V$%f-LC )& 1+"',d.>.>@V@V   Ag37 C&+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#f+/)''7aSSTW'U5 !2 .: tww'IHZZ&&B1D1Dy~~^
 N ^$M K K> !E !Es    S&' S+ S0. S5c                z   Sn[         (       ae  [        R                  R                  X5      n[        R
                  " U Vs/ s H"  n[        R                  R                  U5      PM$     sn5      nU$ [        R                  " U5      nU" U 5      S S 2S S24   n[        R                  " US-  [        S9nU$ s  snf )Nr         rE   )plotly_is_availabler   r3   sample_colorscalerG   rk   unlabel_rgbmatplotlib_pltget_cmapasarrayint)rt   r   labeled_colorsclscaled_rgb_colorscmapr3   
rgb_colorss           r'   rl   rl     s    H88NHHn%]nfmm&?&?&Cn%]^  &&x0j!!RaR%(ZZC8
 &^s   )B8rZ   )
rA   r	   r8   list[str] | Noner<   %Callable[[FrozenTrial], float] | Noner:   r   rc   'go.Figure')rO   r1   rc   r1   )
rA   r	   r8   r   r<   r   r:   r   rc   r5   )r0   r/   rr   r1   r3   r1   ru   r   rv   r   rc   r)   )r0   r/   r   r   rc   r   )rB   r)   r:   r   r   r   rc   z	'Scatter')rr   r1   rc   r   )rB   r5   rc   r   )rt   r1   rc   r1   )3
__future__r   collections.abcr   r   r[   r   r   numpyrG   optuna.loggingr   optuna.samplers._baser   optuna.studyr	   optuna.trialr
   r   $optuna.visualization._plotly_importsr   optuna.visualization._utilsr   r   r   3optuna.visualization.matplotlib._matplotlib_importsmatplotlib_importsis_successfulr   r   r   r   r   r   r   r    rg   r   r   r)   r5   rC   rU   r?   rm   rz   r   r   r   r@   rl   r   r&   r'   <module>r     s   " $      % 2  $ # 9 8 5 5 ^ ,,. 7B;<##%% Z
X
 
 z J   $"  59(" " "  2	" 
 "  " J::: 2: 	:
 :z""" " 	"
 " "J/d
),DH:
 
5Y
YYxr&   