L i6^ddlmZddlmZddlZddlZddlmZddlmZddlZ ddl m Z ddl m Z ddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZdd lmZej6ZerddlmZddlmZddlmZddlm Z ej6rddlm!Z"e e#Z$dZ%GddeZ&GddeZ'GddeZ( d(ddd d)dZ)d*dZ* d+dZ+ d,d Z,d-d!Z- d.d"Z.Gd#d$eZ/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?c6eZdZUded<ded<ded<ded<y) _AxisInfostrnameztuple[float, float]rangeboolis_logis_catN__name__ __module__ __qualname____annotations__`/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/optuna/visualization/_rank.pyrr(s I  L Lr#rcTeZdZUded<ded<ded<ded<ded<d ed <d ed <y ) _RankSubplotInforxaxisyaxisz list[Any]xsyslist[FrozenTrial]trials np.ndarrayzscolorsNrr"r#r$r&r&/s)  MM N r#r&cJeZdZUded<ded<ded<ded<ded <d ed <y ) _RankPlotInfo list[str]paramszlist[list[_RankSubplotInfo]]sub_plot_infosr target_namer-r.r/rhas_custom_targetNrr"r#r$r1r19s% 00N r#r1zObjective Value)targetr5c\tjt||||}t|S)aPlot 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)studyr3r7r5infos r$ plot_rankr>Bs*@ NN % =D $ r#ctj|t}tj|}t |D]:\}}tj ||k(d}t |t|z ||<<|S)Ndtyper)np zeros_likefloatsort enumeratewheresumlen)dataorder data_sortedidindicess r$$_get_order_with_same_order_averagingrPgsk MM$e ,E''$-K$/1((;!+,Q/w<#g,.a/ Lr#ct||||jdtjf}|Dchc]#}|jj D]}|%}}}t |dk(rtjdg}n3| t|}n%|D] }||vstdj|t |dk(rtjdd} |d d}d} tj|D cgc] } ||  c} } t| } t |d k\r| t |d z z ntjd g} t| }t |d k(r|d}|d }t!|| |||}|gg}n,|Dcgc]}|Dcgc]}t!|| |||c}!}}}t#|||| || Scc}}wcc} wcc}wcc}}w)NF)deepcopystatesrz.Your study does not have any completed trials.z*Parameter {} does not exist in your study.zparams is an empty list.TcJtjt|jSN)typingcastrDvalue)trials r$r7z_get_rank_info..targets;;uekk2 2r#?)r3r4r5r.r/r6)rYr returnrD)r get_trialsr COMPLETEr3keysrI_loggerwarningsorted ValueErrorformatrBarrayrP(_convert_color_idxs_to_scaled_rgb_colors_get_rank_subplot_infor1)r<r3r7r5r,tp_name all_params input_p_namer6rY target_values raw_ranks color_idxsr/x_paramy_param sub_plot_infor4s r$r:r:ps UFK0   uj6I6I5K  LF"(GQqxx}}GV&G&GJG 6{aHI  #" dL:- !M!T!TUa!bcc d 6{a23 ~ 3"HH@fUm@AM4]CI25f+2Bc&kAo.RUQVJ 5j AF 6{a)).v}fgW^_ (/*"   & 'v}fgwW    % +  SH*A  s#(G9G  GG *GGc ~t||}t||}g}g}t|D]\} } | jjt} | -t | D cgc]} | dkD c} r|j | || jvsc|| jvsr|j | |D cgc]} ||  }} |D cgc]} | j|}} |D cgc]} | j|}} ||}d||<||}t|||||tj||Scc} wcc} wcc} wcc} w)Ng)rtrt)r'r(r)r*r,r.r/) _get_axis_inforF system_attrsgetranyappendr3r&rBrf)r,rmr/rprqr'r(infeasible_trial_ids filtered_idsidxrY constraintsxrMfiltered_trialsr)r*r.s r$rhrhsP 67 +E 67 +EL'% U((,,-=>  "s[+IAG+I'J ' ' , ell "w%,,'>    $ %+77Qvay7O7-< =E%,,w  =B =-< =E%,,w  =B = | $B#2F  L !F   88B< ,J 8 = =s D+ 1 D0D5D:ct||}|r)|Dcgc]}|jj|}}nA|Dcgc]6}||jvr$t|jj|nd8}}t |Dcgc]}|| c}}t |Dcgc]}|| c}}t ||rt|}t|}tj|tj|z tz}tjdtj||z }tjdtj||z}d} d} nj|r1t|}t|}||z tz}||z }||z}d} d} n7t|} t| dz } d| vr| dz} | tz}| }| |z}d} d} t|||f| | Scc}wcc}wcc}wcc}w)N TFr[)rrrr)rr3rwrminmaxrrDmathlog10 PADDING_RATIOpowsetrIr) r, param_name is_numericalrivaluesv min_value max_valuepaddingrr unique_valuesspans r$rurus 4L4:;q!((,,z*;;X^ RSZ188-CC Z( ) M  81!-Q89I81!-Q89IVZ()$ )$ ::i(4::i+@@MQHHRI!6!@A HHRI!6!@A  )$ )$ y(M9' ' F =!A% = AID&H 7N   )$  M< 98s""G;G"G' G'G,&G,cbd fd }tj|jjr#|jDcgc] }t |c}n |j|j jr#|jDcgc] }t |c}n |jtttjj|jdddddddt|j|jDcgc]\}}|||c}} }|Scc}wcc}wcc}}w) Nc Hd|jg}||jjDcgc] \}}|d|c}}z }|dd|dgz }r1|t|jDcgc] \}}d|d|c}}z }dj |Scc}}wcc}}w)NzTrial #z: zzz Objective #z
)numberr3itemsrFrjoin)rY target_valuelineskrrMprint_raw_objectivesr5s r$get_hover_textz)_get_rank_subplot..get_hover_texts5<<.)* %,,*<*<*>?$!QQCr!+?? C }B|nD9::  5<<9PQA A3b,Q QE{{5!! @Rs B/Br\Grey)widthcolor)rlinemarkersFz%{hovertext})r~ymarkermode showlegend hovertemplate hovertext)rYr rrDr]r)rrr'rr)rr(r*listmaprr/ label_rgbzipr,r.) r=r5rrr~rrYrscatters `` r$_get_rank_subplotrs"jj'+zz'8'8477 #a3q6 #dgg'+zz'8'8477 #a3q6 #dgg#fmm55t{{CD!F3 3(+4;;'@ #| 5, / G N $ # sD!D& D+c"eZdZUded<ded<y) _TickInfoz list[float] coloridxsr2textNrr"r#r$rr!s  Or#rctj|}gd}tj||}gd}tt |Dcgc]}||d||dd}}t ||Scc}w)N)rg?r\g?r[)zmin.z25%z50%z75%zmax.z (3g))rr)rBrEquantilerrIr)rmsorted_target_valuesrr rank_textrMrs r$_get_tick_infor&sr77=1'I [[-y 9F5I8=c&k8J K1y|nBvaynA . KD K yt 44 Ls A/c |j}|j}tjd|jd}t |dk(rtj g|St |dk(r|d}|d}|dd}t||j|j}tj ||}|j||jj|j||jj|jjr|jd |jjr|jd |jjrI|jjD cgc]} t!j"| } } |j| d |jjr|jjD cgc]} t!j"| } } |j| d nat%t |t |d d dt |z dt |z }|j'|t)|D]\} }t)|D]\} }t|| | |j|j} |j+| | dz| dz|| | j}|| | j}|j|j| dz| dz|j|j| dz| dz|jr|jd | dz| dz|jr|jd | dz| dz|jrG|jD cgc]} t!j"| } } |j| d | dz| dz|jrG|jD cgc]} t!j"| } } |j| d | dz| dz| dk(r|j|| dz| dz| t |dz k(s|j|| dz| dz t-|j.}d}tj0dgdgdt3|d ddt3d|j4|j6dd}|j+||Scc} wcc} wcc} wcc} w)NzRank (r)titler)rJlayoutrZr[) title_textrcategory)typelog)rrTg{Gz?)rowscols shared_xaxes shared_yaxeshorizontal_spacingvertical_spacing)rowcol)rrr)rrr)rrrr)rrrRdYlBu_rrr) thicknesstickvalsticktext) colorscale showscalecmincmaxcolorbarnoneF)r~rrr hoverinfor)r3r4rLayoutr5rIFigurerr6 update_xaxesr'r update_yaxesr(rrrrr update_layoutrF add_tracerr.rdictrr)r=r3r4rrprqrr sub_plotsfigurep log_rangex_iy_irr'r( tick_infocolormapcolorbar_traces r$r;r;/s[[F((N YYvd&6&6%7q9 :F 6{ayyb00 6{a))&q)!, %mT5E5EtG]G]^  &9wm6I6I6O6OPwm6I6I6O6OP    % %   Z  0    % %   Z  0    % %0=0C0C0I0IJ1AJIJ   ie  <    % %0=0C0C0I0IJ1AJIJ   ie  <VV#c&k1!CK/   V$%f- VLC )& 1 V W+"3',d.>.>@V@V  cAg37 C&s+C066&s+C066##%++37a#P##%++37a#P<<''ZS1W#PQ''R<<''ZS1W#PQ''R<<8= D1A DI D''ieqVY\]V]'^<<8= D1A DI D''ieqVY\]V]'^!8''7aSSTW'U#f+/)''7aSSTW'U5 V V:tww'IHZZ & & B1D1Dy~~^   N ^$ MKK>!E!EsS0'S5S:0S?cld}trbtjj||}t j |Dcgc]!}tjj |#c}}|Stj|}||ddddf}t j|dzt}|Scc}w)Nrr@) plotly_is_availablerr/sample_colorscalerBrf unlabel_rgbmatplotlib_pltget_cmapasarrayint)rorlabeled_colorsclscaled_rgb_colorscmapr/ rgb_colorss r$rgrgsH88:NHHn%]fmm&?&?&C%]^  &&x0j!!RaR%(ZZ C8  &^s&B1rU) r<r r3list[str] | Noner7%Callable[[FrozenTrial], float] | Noner5rr] 'go.Figure')rJr-r]r-) r<r r3rr7rr5rr]r1) r,r+rmr-r/r-rprrqrr]r&)r,r+rrr]r)r=r&r5rrrr]z 'Scatter')rmr-r]r)r=r1r]r)ror-r]r-)3 __future__rcollections.abcrrrVrrnumpyrBoptuna.loggingroptuna.samplers._baser optuna.studyr optuna.trialr r $optuna.visualization._plotly_importsr optuna.visualization._utilsr rr3optuna.visualization.matplotlib._matplotlib_importsmatplotlib_imports is_successfulrrrrrrrrrarrr&r1r>rPr:rhrurrrr;rgr"r#r$rs"$ %2$#9855^-h,,.7B;<###%Z X   zJ $" 59( " " "  2 "  "  " J: : : 2: :  :z" "" " "  "  "J/d ),DH:  5Y YYx r#