
    (^i6                    ^   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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j6                         Zerd dlmZ d dlmZ d dlmZ d dlm Z   ej6                         r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(	 d(ddd	 	 	 	 	 	 	 	 	 d)dZ)d*dZ*	 	 	 	 	 	 	 	 	 	 d+dZ+	 	 	 	 	 	 	 	 	 	 	 	 d,d Z,d-d!Z-	 	 	 	 	 	 	 	 d.d"Z. G d# d$e      Z/d/d%Z0	 	 	 	 d0d&Z1d1d'Z2y)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                  6    e Zd ZU ded<   ded<   ded<   ded<   y)		_AxisInfostrnameztuple[float, float]rangeboolis_logis_catN__name__
__module____qualname____annotations__     [/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/optuna/visualization/_rank.pyr   r   (   s    
ILLr#   r   c                  T    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<   y)_RankSubplotInfor   xaxisyaxisz	list[Any]xsyslist[FrozenTrial]trials
np.ndarrayzscolorsNr   r"   r#   r$   r&   r&   /   s)    MMNr#   r&   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)_RankPlotInfo	list[str]paramszlist[list[_RankSubplotInfo]]sub_plot_infosr   target_namer-   r.   r/   r   has_custom_targetNr   r"   r#   r$   r1   r1   9   s%    00Nr#   r1   zObjective Value)targetr5   c               \    t        j                          t        | |||      }t        |      S )a  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)studyr3   r7   r5   infos        r$   	plot_rankr>   B   s*    @ NN%=D$r#   c                    t        j                  | t              }t        j                  |       }t	        |       D ]:  \  }}t        j
                  ||k(        d   }t        |      t        |      z  ||<   < |S )Ndtyper   )np
zeros_likefloatsort	enumeratewheresumlen)dataorderdata_sortedidindicess         r$   $_get_order_with_same_order_averagingrP   g   sk    MM$e,E''$-K$ /1((;!+,Q/w<#g,.a/ Lr#   c                   t        | ||       | j                  dt        j                  f      }|D ch c]#  }|j                  j                         D ]  }| % }}}t        |      dk(  rt        j                  d       g }n3|t        |      }n%|D ]   }||vst        dj                  |             t        |      dk(  rt        j                  d       d}	|dd}d}	t        j                  |D 
cg c]
  }
 ||
       c}
      }t        |      }t        |      d	k\  r|t        |      d
z
  z  nt        j                  dg      }t        |      }t        |      d	k(  r|d   }|d
   }t!        |||||      }|gg}n,|D cg c]  }|D cg c]  }t!        |||||       c}! }}}t#        ||||||	      S c c}}w c c}
w c c}w c c}}w )NF)deepcopystatesr   z.Your study does not have any completed trials.z*Parameter {} does not exist in your study.zparams is an empty list.Tc                J    t        j                  t        | j                        S N)typingcastrD   value)trials    r$   r7   z_get_rank_info.<locals>.target   s    ;;uekk22r#               ?)r3   r4   r5   r.   r/   r6   )rY   r
   returnrD   )r   
get_trialsr   COMPLETEr3   keysrI   _loggerwarningsorted
ValueErrorformatrB   arrayrP   (_convert_color_idxs_to_scaled_rgb_colors_get_rank_subplot_infor1   )r<   r3   r7   r5   r,   tp_name
all_paramsinput_p_namer6   rY   target_values	raw_ranks
color_idxsr/   x_paramy_paramsub_plot_infor4   s                      r$   r:   r:   p   s    UFK0uj6I6I5KLF"(GQqxx}}GV&G&GJG
6{aHI	
#" 	dL:- !M!T!TUa!bcc	d 6{a23~	3 "HH@fUm@AM4]CI25f+2Bc&kAo.RUQVJ5jAF 6{a)).v}fgW^_(/* "

   & 'v}fgwW
 
 %+ S H* A
s#   (G9G		GG*GGc           
     ~   t        | |      }t        | |      }g }g }t        |       D ]  \  }	}
|
j                  j                  t              }|-t        |D cg c]  }|dkD  	 c}      r|j                  |	       ||
j                  v sc||
j                  v sr|j                  |	        |D cg c]  }| |   	 }}|D 
cg c]  }
|
j                  |    }}
|D 
cg c]  }
|
j                  |    }}
||   }d||<   ||   }t        |||||t        j                  |      |      S c c}w c c}w c c}
w c c}
w )Ng        )   rt   rt   )r'   r(   r)   r*   r,   r.   r/   )_get_axis_inforF   system_attrsgetr   anyappendr3   r&   rB   rf   )r,   rm   r/   rp   rq   r'   r(   infeasible_trial_idsfiltered_idsidxrY   constraintsxrM   filtered_trialsr)   r*   r.   s                     r$   rh   rh      sP    67+E67+EL' %
U((,,-=>"s[+IAG+I'J '',ell"w%,,'>$% +77Qvay7O7-<	=E%,,w
	=B	=-<	=E%,,w
	=B	=	|	$B#2F L!F88B<  ,J
 8	=	=s   D+
1D0D5D: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}
nj|r1t        |      }t        |      }||z
  t        z  }||z
  }||z   }d}	d}
n7t        |      }t        |      dz
  }d |v r|dz  }|t        z  }| }||z   }d}	d}
t        |||f|	|
      S c c}w c c}w c c}w c c}w )N
   TFr[   )r   r   r   r   )r   r3   rw   r   minmaxr   rD   mathlog10PADDING_RATIOpowsetrI   r   )r,   
param_nameis_numericalri   valuesv	min_value	max_valuepaddingr   r   unique_valuesspans                r$   ru   ru      s    4L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		)$	)$	y(M9'	'	 F=!A%= AID&H	7N	)$	 M <
 98s"   "G;G"G'
G'G,&G,c                b   d
fd}t        j                  | j                  j                  r#| j                  D cg c]  }t        |       c}n| j                  | j                  j                  r#| j                  D cg c]  }t        |       c}n| j                  t        t        t        j                  j                  | j                              dddddddt        | j                  | j                        D cg c]  \  }} |||       c}}	      }|S c c}w c c}w c c}}w )Nc           	     H   d| j                    g}|| j                  j                         D cg c]  \  }}| d|  c}}z  }|d d| dgz  }r1|t        | j                        D cg c]  \  }}d| d|  c}}z  }dj                  |      S c c}}w c c}}w )NzTrial #z: z<b>z</b>zObjective #z<br>)numberr3   itemsrF   r   join)rY   target_valuelineskr   rM   print_raw_objectivesr5   s         r$   get_hover_textz)_get_rank_subplot.<locals>.get_hover_text  s    5<<.)*%,,*<*<*>?$!QQCr!+??C}B|nD9::5<<9PQAA3b,QQE{{5!!	 @ Rs   B/Br\   Grey)widthcolor)r   linemarkersFz%{hovertext}<extra></extra>)r~   ymarkermode
showlegendhovertemplate	hovertext)rY   r
   r   rD   r]   r   )r   r   r'   r   r)   r   r(   r*   listmapr   r/   	label_rgbzipr,   r.   )	r=   r5   r   r   r~   r   rY   r   scatters	    ``      r$   _get_rank_subplotr     s    " jj'+zz'8'8477
#a3q6
#dgg'+zz'8'8477
#a3q6
#dgg#fmm55t{{CD!F3
 3 (+4;;'@
#| 5,/
G N $
#
s   D!D&
D+c                  "    e Zd ZU ded<   ded<   y)	_TickInfozlist[float]	coloridxsr2   textNr   r"   r#   r$   r   r   !  s    
Or#   r   c                    t        j                  |       }g d}t        j                  ||      }g d}t        t	        |            D cg c]  }||    d||   dd }}t        ||      S c c}w )N)r   g      ?r\   g      ?r[   )zmin.z25%z50%z75%zmax.z (3g))r   r   )rB   rE   quantiler   rI   r   )rm   sorted_target_valuesr   r   	rank_textrM   r   s          r$   _get_tick_infor   &  sr    77=1'I[[-y9F5I8=c&k8JK1y|nBvaynA.KDKyt44 Ls   
A/c                
   | j                   }| j                  }t        j                  d| j                   d      }t        |      dk(  rt        j                  g |      S t        |      dk(  r|d   }|d   }|d   d   }t        || j                  | j                        }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                  r|j                  j                  D 	cg c]  }	t!        j"                  |	       }
}	|j                  |
d       nat%        t        |      t        |      dddt        |      z  dt        |      z        }|j'                  |       t)        |      D ]  \  }}t)        |      D ]  \  }}t        ||   |   | j                  | j                        }|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|j                  ||dz   |dz           	 t-        | j.                        }d}t        j0                  d gd gdt3        |dddt3        d|j4                  |j6                              dd      }|j+                  |       |S c c}	w c c}	w c c}	w c c}	w )NzRank (r   )titler   )rJ   layoutrZ   r[   )
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   )r3   r4   r   Layoutr5   rI   Figurer   r6   update_xaxesr'   r   update_yaxesr(   r   r   r   r   r   update_layoutrF   	add_tracer   r.   r   dictr   r   )r=   r3   r4   r   rp   rq   rr   	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)!,%mT5E5EtG]G]^		&9wm6I6I6O6OPwm6I6I6O6OP%%Z0%%Z0%%0=0C0C0I0IJ1AJIJie<%%0=0C0C0I0IJ1AJIJie<VV#c&k1!CK/
 	V$%f- 	VLC )& 1 VW+"3',d.>.>@V@V   cAg37 C&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#f+/)''7aSSTW'U5V	V: tww'IHZZ&&B1D1Dy~~^
 N ^$M K K> !E !Es   S0'S5S:0S?c                l   d}t         rbt        j                  j                  ||       }t	        j
                  |D cg c]!  }t        j                  j                  |      # c}      }|S t        j                  |      } ||       d d d df   }t	        j                  |dz  t              }|S c c}w )Nr         r@   )plotly_is_availabler   r/   sample_colorscalerB   rf   unlabel_rgbmatplotlib_pltget_cmapasarrayint)ro   r   labeled_colorsclscaled_rgb_colorscmapr/   
rgb_colorss           r$   rg   rg     s    H88:NHHn%]fmm&?&?&C%]^  &&x0j!!RaR%(ZZC8
 &^s   &B1rU   )
r<   r	   r3   list[str] | Noner7   %Callable[[FrozenTrial], float] | Noner5   r   r]   'go.Figure')rJ   r-   r]   r-   )
r<   r	   r3   r   r7   r   r5   r   r]   r1   )r,   r+   rm   r-   r/   r-   rp   r   rq   r   r]   r&   )r,   r+   r   r   r]   r   )r=   r&   r5   r   r   r   r]   z	'Scatter')rm   r-   r]   r   )r=   r1   r]   r   )ro   r-   r]   r-   )3
__future__r   collections.abcr   r   rV   r   r   numpyrB   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   ra   r   r   r&   r1   r>   rP   r:   rh   ru   r   r   r   r;   rg   r"   r#   r$   <module>r      s   " $      % 2  $ # 9 8 5 5 ^ -h,,. 7B;<###% Z
X
 
 z J   $"  59(" " "  2	" 
 "  " J::: 2: 	:
 :z""" " 	"
 " "J/d
),DH:
 
5Y
YYxr#   