
    Q-j(                    *   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 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  ej:                         rd dlmZ d dlmZ d dlm Z  d dlm!Z!  ee"      Z# G d de	      Z$ G d de	      Z% G d de	      Z&	 	 	 	 	 	 	 	 	 	 	 	 	 	 d'dZ'	 	 	 	 	 	 	 	 	 	 d(dZ(	 d)dd d!	 	 	 	 	 	 	 	 	 d*d"Z)d+d#Z*d,d$Z+	 	 	 	 	 	 d-d%Z,	 	 	 	 d.d&Z-y)/    )annotations)defaultdict)Callable)Any)cast)
NamedTuple)TYPE_CHECKING)CategoricalChoiceType)CategoricalDistribution)
get_logger)_CONSTRAINTS_KEY)
TrialState)_imports)Study)FrozenTrial)_check_plot_args)_filter_nonfinite)_is_log_scale)go)make_subplots)Scatter)COLOR_SCALEc                  ^    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<   ded<   y)_SliceSubplotInfostr
param_name	list[Any]xlist[float]y	list[int]trial_numbersboolis_logis_numericalz
list[bool]constraints(tuple[CategoricalChoiceType, ...] | Nonex_labelsN__name__
__module____qualname____annotations__     i/Users/jameslopez/projects/TradingBot25/.venv/lib/python3.12/site-packages/optuna/visualization/_slice.pyr   r   %   s.    OLNL66r/   r   c                  "    e Zd ZU ded<   ded<   y)_SlicePlotInfor   target_namezlist[_SliceSubplotInfo]subplotsNr)   r.   r/   r0   r2   r2   0   s    %%r/   r2   c                  ,    e Zd ZU ded<   ded<   ded<   y)_PlotValuesr   r   r   r    r!   r"   Nr)   r.   r/   r0   r6   r6   5   s    LNr/   r6   c           
        |dd}|}t        |g g g |||g       }| D ]  }||j                  vr|j                  j                  |j                  |          |j                  j                   ||             |j
                  j                  |j                         |j                  j                  t              }	|j                  j                  |	d u xs t        |	D 
cg c]  }
|
dk  	 c}
              |S c c}
w )Nc                .    t        d| j                        S )Nfloat)r   value)ts    r0   _targetz(_get_slice_subplot_info.<locals>._targetE   s    ))r/   )r   r   r    r"   r$   r%   r(   r&   g        )r;   r   returnr9   )r   paramsr   appendr    r"   numbersystem_attrsgetr   r&   all)trialsparamtarget	log_scale	numericalr(   r<   	plot_infor;   r&   r   s              r0   _get_slice_subplot_inforJ   ;   s     ~	* !

	I  188E?+6!9%&&qxx0nn(()9:$$[D%8%`CS^@_S^acS^@_<`a   A`s   !C<c                J   t        | ||       t        | j                  dt        j                  f      |      }t        |      dk(  r!t        j                  d       t        |g       S |D ch c]#  }|j                  j                         D ]  }| % }}}i }|D ].  }	|	j                  j                         D ]  \  }
}|
|vs|||
<    0 i }|j                         D ]%  \  }
}t        |t              s|j                  ||
<   ' |t!        |      }n.|D ]  }||vst#        d| d       t!        t%        |            }t        ||D cg c]>  }t'        |||t)        ||      t        ||   t               |j+                  |            @ c}	      S c c}}w c c}w )
NF)deepcopystates)rF   r   z.Your study does not have any completed trials.z
Parameter z does not exist in your study.)rD   rE   rF   rG   rH   r(   )r3   r4   )r   r   
get_trialsr   COMPLETElen_loggerwarningr2   r>   keysdistributionsitems
isinstancer   choicessorted
ValueErrorsetrJ   r   rB   )studyr>   rF   r3   rD   r;   p_name
all_paramsrT   trialr   distributionr(   sorted_paramsinput_p_namerE   s                   r0   _get_slice_plot_inforb   a   s    UFK0%1D1D0FGPVF 6{aHIk2.."(G&Qqxx}}V&&&JGM(-(;(;(A(A(C$J.,8j) )D 
 H$1$7$7$9 
Ll$;<#/#7#7HZ  %: ~z*"L:- :l^;Y!Z[[ # s6{+ '

 ' $'6(u)=?VWW!e, '

 + H.

s   /(FAF 
NzObjective Value)rF   r3   c               X    t        j                          t        t        | |||            S )aN  Plot the parameter relationship as slice plot in a study.

    Note that, if a parameter contains missing values, a trial with missing values is not 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 axis label.

    Returns:
        A :class:`plotly.graph_objects.Figure` object.
    )r   check_get_slice_plotrb   )r[   r>   rF   r3   s       r0   
plot_slicerf      s%    : NN/vv{STTr/   c                t   t        j                  d      }t        | j                        dk(  rt        j                  g |      S t        | j                        dk(  rt        j                  t        | j                  d         |      }|j                  | j                  d   j                         |j                  | j                         | j                  d   j                  s6|j                  ddt        | j                  d   j                        	       |S | j                  d   j                  r|j                  d
       |S t        dt        | j                        d      }|j                  |       d}t!        | j                  d      D ]  \  }}t        |      }|d   j#                  d|i       |rd}|D ]  }|j%                  |d|        |j                  |j                  d|       |dk(  r|j                  | j                  d|       |j                  s*|j                  ddt        |j                        d|       |j                  s|j                  d
d|        t        | j                        dkD  r(|j                  dt        | j                        z         |S )Nz
Slice Plot)titler   )datalayout   )
title_textcategoryarray)typecategoryordercategoryarraylog)ro   T)rowscolsshared_yaxes)start	showscale)markerF)rowcol)rl   ry   rz   )ro   rp   rq   ry   rz   )ro   ry   rz      i,  )width)r   LayoutrP   r4   Figure_generate_slice_subplotupdate_xaxesr   update_yaxesr3   r%   _get_categorical_labelsr(   r$   r   update_layout	enumerateupdate	add_trace)inforj   figurerw   column_indexsubplot_infotracer;   s           r0   re   re      sj   YY\*F
4==Qyyb00	T]]	q	  7a8H IRXYt}}Q'7'B'BCt'7'78}}Q,,%5dmmA6F6O6OP   F M= ]]1$$U+: M7 AC,>TRV$	*3DMM*K&L,+L9E!HOOK#;O<!	  | < <+B+B|\q ##t/?/?QL#Y,,###")"9,:O:O"P$ $  $$##A<#H' +L( t}}!  sS-?'? @Mr/   c                   g }t        g g g       }t        g g g       }t        | j                  | j                  | j                  | j
                        D ]  \  }}}}| j                  r||rR|j                  j                  |       |j                  j                  |       |j                  j                  |       k|j                  j                  |       |j                  j                  |        | j                  r=|j                  }|j                  }	|j                  }
|j                  }|j                  }n t        | |      \  }}	}
t        | |      \  }}}|j                  t        j                  ||	ddddd|
t        dddd	d
d             t        |      dkD  r,|j                  t        j                  ||ddddid             |S )NmarkerszFeasible Trialg      ?Grey)r|   colorTrialg      ?(   )rh   r   xpad)liner   
colorscalecolorbarF)r   r    modenamerx   
showlegendr   zInfeasible Trialr   z#cccccc)r6   zipr   r    r"   r&   r%   r?   _get_categorical_plot_valuesr   r   r   rP   )r   r   feasible
infeasibler   r    numc
feasible_x
feasible_y
feasible_cinfeasible_xinfeasible_y_s                 r0   r   r      s   E2r2&HRR(J(B(BLD\D\1c1 $$JJa JJa ""))#.LL"LL"   ZZ
ZZ
++
!||!||-I,X`-a*
J
(D\S](^%lA	LL


!"%7#)$		 	
& <1JJ'Y !		
 Lr/   c                   | j                   J g }g }g }t        t              }t        |j                  |j
                  |j                        D ]  \  }}}||   j                  ||f        | j                   D ]K  }	||	   D ]A  \  }}|j                  t        |	             |j                  |       |j                  |       C M |||fS N)	r(   r   listr   r   r    r"   r?   repr)
r   valuesvalue_xvalue_yvalue_cpoints_dictr   r    r@   x_labels
             r0   r   r   (  s       ,,,GGGd#KFHHfhh0D0DE1fAq&k* F(($W-IAvNN4=)NN1NN6" . )
 GW$$r/   c                D    | y | D cg c]  }t        |       c}S c c}w r   )r   )r(   r   s     r0   r   r   :  s)     )12gDM222s   )rD   zlist[FrozenTrial]rE   r   rF   %Callable[[FrozenTrial], float] | NonerG   r#   rH   r#   r(   r'   r=   r   )
r[   r   r>   list[str] | NonerF   r   r3   r   r=   r2   r   )
r[   r   r>   r   rF   r   r3   r   r=   'go.Figure')r   r2   r=   r   )r   r   r=   zlist[Scatter])r   r   r   r6   r=   z(tuple[list[Any], list[float], list[int]])r(   r'   r=   r   ).
__future__r   collectionsr   collections.abcr   typingr   r   r   r	   optuna.distributionsr
   r   optuna.loggingr   optuna.samplers._baser   optuna.trialr   $optuna.visualization._plotly_importsr   optuna.studyr   r   optuna.visualization._utilsr   r   r   is_successfulr   r   r   r   r*   rQ   r   r2   r6   rJ   rb   rf   re   r   r   r   r.   r/   r0   <module>r      s   " # $      6 8 % 2 # 9 ("( 8 9 5 87B<7
X
7
 7&Z &
* ### 2# 	#
 # 7# #L222 22 	2
 2n  $U 59(UUU 2	U
 U UB-`>B%#%-8%-%$3633r/   