
    Q-j@6                    n   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Zd dl	m
Z
 d dlmZ d dlmZ d d	lmZ e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 d dlmZ d d	lmZ  ej8                         Zerd dlmZ d dlmZ d dlm Z  d dlm!Z!  ej8                         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      Z0d0d&Z1	 	 	 	 d1d'Z2d2d(Z3y)3    )annotationsN)Any)
NamedTuple)TYPE_CHECKING)
get_logger)_CONSTRAINTS_KEY)
TrialState)_imports)Callable)Study)FrozenTrial)_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__     h/Users/jameslopez/projects/TradingBot25/.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'   4   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/   r0   r   has_custom_targetNr   r#   r$   r%   r2   r2   >   s%    00Nr$   r2   zObjective Value)targetr6   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)studyr4   r8   r6   infos        r%   	plot_rankr?   G   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_averagingrQ   l   sf    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 }n(|t        |      }n|D ]  }||vst        d| d       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 z does not exist in your study.zparams is an empty list.Tc                B    t        j                  d| j                        S )NrE   )typingcastvalue)trials    r%   r8   z_get_rank_info.<locals>.target   s    ;;w44r$               ?)r4   r5   r6   r/   r0   r7   )rY   r   returnrE   )r   
get_trialsr	   COMPLETEr4   keysrJ   _loggerwarningsorted
ValueErrorrC   arrayrQ   (_convert_color_idxs_to_scaled_rgb_colors_get_rank_subplot_infor2   )r=   r4   r8   r6   r-   tp_name
all_paramsinput_p_namer7   rY   target_values	raw_ranks
color_idxsr0   x_paramy_paramsub_plot_infor5   s                      r%   r;   r;   u   s    UFK0uj6I6I5KLF"(G&Qqxx}}V&&&JG
6{aHI	
#"L:- :l^;Y!Z[[ # 6{a23~	5 "HH@fUm@AM4]CI25f+2Bc&kAo.RUQVJ5jAF 6{a)).v}fgW^_(/* "

 "  &%G 'v}fgwW% " 	 
 %+ S H* A
s#   (F8.F> 	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        )   rs   rs   )r(   r)   r*   r+   r-   r/   r0   )_get_axis_inforG   system_attrsgetr   anyappendr4   r'   rC   re   )r-   rl   r0   ro   rp   r(   r)   infeasible_trial_idsfiltered_idsidxrY   constraintsxrN   filtered_trialsr*   r+   r/   s                     r%   rg   rg      sR    67+E67+EL'
U((,,-=>"s[+I[AG[+I'J '',ell"w%,,'>$ ( +77,Qvay,O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   r4   rv   r   minmaxr   rE   mathlog10PADDING_RATIOpowsetrJ   r   )r-   
param_nameis_numericalrh   valuesv	min_value	max_valuepaddingr   r   unique_valuesspans                r%   rt   rt      s    4L4:;Fq!((,,z*F; X^
W]RSZ188-CCZ()MW] 	 
 81!-Q89I81!-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>)numberr4   itemsrG   r   join)rY   target_valuelineskr   rN   print_raw_objectivesr6   s         r%   get_hover_textz)_get_rank_subplot.<locals>.get_hover_text  s    5<<.)*%,,*<*<*>?*>$!QQCr!+*>??C}B|nD9::5<<9PQ9PAA3b,9P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   rE   r]   r   )r   r   r(   r   r*   r   r)   r+   listmapr   r0   	label_rgbzipr-   r/   )	r>   r6   r   r   r}   r   rY   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   D!D&
D+c                  "    e Zd ZU ded<   ded<   y)	_TickInfozlist[float]	coloridxsr3   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   )rC   rF   quantiler   rJ   r   )rl   sorted_target_valuesr   r   	rank_textrN   r   s          r%   _get_tick_infor   +  su    77=1'I[[-y9F5I8=c&k8JK8J1y|nBvaynA.8JD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   )rK   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   )r4   r5   r   Layoutr6   rJ   Figurer   r7   update_xaxesr(   r   update_yaxesr)   r   r   r   r   r   update_layoutrG   	add_tracer   r/   r   dictr   r   )r>   r4   r5   r   ro   rp   rq   	sub_plotsfigurep	log_rangex_iy_ir   r(   r)   	tick_infocolormapcolorbar_traces                      r%   r<   r<   4  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J0I1A0IIJie<%%0=0C0C0I0IJ0I1A0IIJie<VV#c&k1!CK/
 	V$%f-LC )& 1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= D1AI D''ieqVY\]V]'^<<8= D1AI D''ieqVY\]V]'^!8''7aSSTW'U#f+/)''7aSSTW'U5 !2 .: 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         rA   )plotly_is_availabler   r0   sample_colorscalerC   re   unlabel_rgbmatplotlib_pltget_cmapasarrayint)rn   r   labeled_colorsclscaled_rgb_colorscmapr0   
rgb_colorss           r%   rf   rf     s    H88:NHHn%]nfmm&?&?&Cn%]^  &&x0j!!RaR%(ZZC8
 &^s   &B1)N)
r=   r   r4   list[str] | Noner8   %Callable[[FrozenTrial], float] | Noner6   r   r]   'go.Figure')rK   r.   r]   r.   )
r=   r   r4   r   r8   r   r6   r   r]   r2   )r-   r,   rl   r.   r0   r.   ro   r   rp   r   r]   r'   )r-   r,   r   r   r]   r   )r>   r'   r6   r   r   r   r]   z	'Scatter')rl   r.   r]   r   )r>   r2   r]   r   )rn   r.   r]   r.   )4
__future__r   r   rV   r   r   r   numpyrC   optuna.loggingr   optuna.samplers._baser   optuna.trialr	   $optuna.visualization._plotly_importsr
   collections.abcr   optuna.studyr   r   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'   r2   r?   rQ   r;   rg   rt   r   r   r   r<   rf   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$   