
    Q-j@:                    \   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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# 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* G d  d!e      Z+	 d,dd"d#	 	 	 	 	 	 	 	 	 d-d$Z,d.d%Z-	 d/	 	 	 	 	 	 	 d0d&Z.d1d'Z/	 	 	 d2	 	 	 	 	 	 	 	 	 d3d(Z0	 	 	 	 	 	 	 	 	 	 	 	 d4d)Z1d5d*Z2d6d+Z3y)7    )annotationsN)Any)
NamedTuple)TYPE_CHECKING)optuna_warn)
get_logger)_CONSTRAINTS_KEY)Study)StudyDirection)FrozenTrial)
TrialState)_imports)Callable)_check_plot_args)_filter_nonfinite)_is_log_scale)_is_numerical)_is_reverse_scale)Contour)go)make_subplots)Scatter)COLOR_SCALEg?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)	_AxisInfostrnameztuple[float, float]rangeboolis_logis_catzlist[str | int | float]indiceszlist[str | float | None]valuesN__name__
__module____qualname____annotations__     k/Users/jameslopez/projects/TradingBot25/.venv/lib/python3.12/site-packages/optuna/visualization/_contour.pyr   r   +   s#    
ILL$$$$r*   r   c                  :    e Zd ZU ded<   ded<   ded<   g Zded<   y)	_SubContourInfor   xaxisyaxiszdict[tuple[int, int], float]z_valuesz
list[bool]constraintsN)r%   r&   r'   r(   r1   r)   r*   r+   r-   r-   4   s    ** K r*   r-   c                  6    e Zd ZU ded<   ded<   ded<   ded<   y	)
_ContourInfoz	list[str]sorted_paramszlist[list[_SubContourInfo]]sub_plot_infosr   reverse_scaler   target_nameNr$   r)   r*   r+   r3   r3   ;   s    //r*   r3   c                  "    e Zd ZU ded<   ded<   y)_PlotValues	list[Any]xyNr$   r)   r*   r+   r9   r9   B   s    LLr*   r9   Objective Value)targetr7   c               \    t        j                          t        | |||      }t        |      S )a  Plot the parameter relationship as contour 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 color bar.

    Returns:
        A :class:`plotly.graph_objects.Figure` object.

    .. note::
        The colormap is reversed when the ``target`` argument isn't :obj:`None` or ``direction``
        of :class:`~optuna.study.Study` is ``minimize``.
    )r   check_get_contour_info_get_contour_plot)studyparamsr>   r7   infos        r+   plot_contourrF   G   s*    B NNUFFK@DT""r*   c           	     	   t        j                  d      }| j                  }| j                  }| j                  }| j
                  }t        |      dk  rt        j                  g |      S t        |      dk(  r|d   }|d   }|d   d   }t        |||      }	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                  rI|j                  j                  D cg c]  }t!        j"                  |       }}|
j                  |d
       |
S t%        t        |      t        |      dd      }
|
j'                  |       d}t)        |      D ]^  \  }}t)        |      D ]I  \  }}||k(  r-|
j+                  t        j,                         |dz   |dz          ngt        ||   |   ||      }	|	d   }|	d   }|j/                  |       |rd}|
j+                  ||dz   |dz          |
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0|
j                  ||dz   |dz          L a |
S c c}w c c}w c c}w c c}w )NzContour Plot)title   )datalayout   r   )
title_textr   category)typelog)r   rO   T)rowscolsshared_xaxesshared_yaxes)rowcol)	showscaleF)r   rU   rV   )rO   rU   rV   )r   rO   rU   rV   )rM   rU   rV   )r   Layoutr4   r5   r6   r7   lenFigure_get_contour_subplotupdate_xaxesr.   r   update_yaxesr/   r!   r    mathlog10r   update_layout	enumerate	add_tracer   update)rE   rK   r4   r5   r6   r7   x_paramy_paramsub_plot_info	sub_plotsfigurep	log_rangerW   x_iy_icontourscatterr.   r/   s                       r+   rB   rB   m   s   YY^,F&&M((N&&M""K
=Qyyb00
=Q""&q)!,({S		&9wm6I6I6O6OPwm6I6I6O6OP%%Z0%%Z0%%0=0C0C0I0IJ0I1A0IIJie<%%0=0C0C0I0IJ0I1A0IIJie<Z MW ]##m*<4^b
 	V$	%m4LC )- 8Wg%$$RZZ\sQwC!G$L 4&s+C0-!I (lG'lGNNYN7 $)	$$W#'sQw$G$$W#'sQw$G&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#m,q00''7aSSTW'UG !9 5L Mc K KF !E !Es   =R2R7R<%Sc                   | j                   j                  }| j                  j                  }t        |      dk  st        |      dk  r;t	        j
                         t	        j                         t	        j                         fS t        | j                        dk(  rut        d| j                   j                   d| j                  j                   d       t	        j
                         t	        j                         t	        j                         fS t        g g       }t        g g       }t        | j                   j                  | j                  j                  | j                        D ]{  \  }}}	|
||	r7|j                  j                  |       |j                   j                  |       F|j                  j                  |       |j                   j                  |       } t#        j$                  t        |      t        |      ft"        j&                        }
t#        j(                  t+        | j                  j-                                     }t#        j(                  t+        | j                  j                                     }||
|d d df   |d d df   f<   t	        j
                  |||
d|it.        dd	d
d|
      }|t1        |j                  |j                   d      t1        |j                  |j                   d      fS )NrL   r   z,Contour plot will not be displayed because `z` and `z$` cannot co-exist in `trial.params`.rI   rH   Theatmapnoneg?)
r;   r<   zcolorbar
colorscaleconnectgapscontours_coloring	hoverinfoline_smoothingreversescale)is_feasibleF)r.   r"   r/   rY   r   r   r   r0   r   r   r9   zipr#   r1   r;   appendr<   npfullnanarraylistkeysr   _create_scatter)rE   r6   r7   	x_indices	y_indicesfeasible
infeasiblex_valuey_valuecr0   xyszsrm   s                 r+   r[   r[      sL   
 

""I

""I
9~S^a/zz|RZZ\2::<77
4==Q:4::??:K L

  DF	
 zz|RZZ\2::<772r"HR$J"4::#4#4djj6G6GIYIYZ!7#6

!!'*

!!'*##G,##G,  [ wwII7@H
((4**,-
.C	$t}}++-.	/B%'HSAYAqD	!"jj


;'#"G 	

HJJDA
jllF r*   c                `    d}|rdnd}|rdnd}t        j                  | |d|d|dd	|d
      S )NGrayblackz#cccccczFeasible TrialzInfeasible Trialg       @)widthcolor)liner   markersF)r;   r<   markermoder   
showlegend)r   r   )r;   r<   rz   
edge_colormarker_colorr   s         r+   r   r      sM    J)7yL*0BD::

!J7!
 
 
r*   c           	        t        | ||       t        | j                  dt        j                  f      |      }|D ch c]#  }|j
                  j                         D ]  }| % }}}t        |      dk(  rt        j                  d       g }n_|t        |      }nQt        |      dk  rt        j                  d       |D ]  }	|	|vst        d|	 d	       t        t        |            }t        |      d
k(  r|d   }
|d   }t        | ||
||      }|gg}nPg }t        |      D ]@  \  }}|j                  g        |D ]%  }
t        | ||
||      }||   j                  |       ' B t!        | |      }t#        ||||      S c c}}w )NF)deepcopystates)r>   r   z.Your study does not have any completed trials.rI   z,The length of params must be greater than 1.z
Parameter z does not exist in your study.rL   )r4   r5   r6   r7   )r   r   
get_trialsr   COMPLETErD   r   rY   _loggerwarningsorted
ValueErrorset_get_contour_subplot_infora   r|   r   r3   )rC   rD   r>   r7   trialstp_name
all_paramsr4   input_p_namerd   re   rf   r5   ir6   s                   r+   rA   rA     s    UFK0%1D1D0FGPVF #)G&Qqxx}}V&&&JG
6{aHI	z*v;!OOJK"L:- :l^;Y!Z[[ # s6{+ =Q""1%'SYZ(/*#M2JAw!!"%( 9%RY[a bq!((7 ) 3 &eV4M#%#	 ? Hs    (Fc                   t        ||      }t        ||      }||k(  rt        ||i       S t        |j                        dk  r't        j                  d| d       t        ||i       S t        |j                        dk  r't        j                  d| d       t        ||i       S i }t        |      D ]  \  }}	||	j                  vs||	j                  vr#|j                  |   }
|j                  |   }|
J |J |j                  j                  |
      }|j                  j                  |      }||	j                  }n ||	      }|J |j                  ||f      }||||||f<   | j                  t        j                  u rt        ||      nt!        ||      |||f<    t        ||||D cg c]  }t#        |       c}      S c c}w )N)r.   r/   r0   rL   zParam z$ unique value length is less than 2.)r.   r/   r0   r1   )_get_axis_infor-   rY   r"   r   r   ra   rD   r#   indexvalueget	directionr   MINIMIZEminmax_satisfy_constraints)rC   r   rd   re   r>   r.   r/   r0   r   trialr   r   rk   rl   r   existingr   s                    r+   r   r   7  s    67+E67+E'U%"EE
5==A&	)MNOU%"EE
5==A&	)MNOU%"EE-/Hf%5%,,&'*E,,q/,,q/""""""mm!!'*mm!!'*>KKE5ME   <<c
+v1 $)Hc3Z  ??n&=&== He$5) c3Z - &8 6<=f)!,f=	  >s   7Gc                    | j                   j                  t              }|d u xs t        |D cg c]  }|dk  	 c}      S c c}w )Ng        )system_attrsr   r	   all)r   r1   r;   s      r+   r   r   p  sD    $$(()9:K$F#&EAqCx&E"FF&Es   A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}	ntt        | |      r1t        |      }t        |      }||z
  t        z  }||z
  }||z   }d}d}	n7t        |      }
t        |
      dz
  }d |
v r|dz  }|t        z  }| }||z   }d}d}	t        t        |D cg c]  }||	 c}            }t        |      dk  rt        |||f||	||      S t        | |      r#|j!                  d|       |j#                  |       t        |||f||	||      S c c}w c c}w c c}w c c}w c c}w )N
   TFrI   rL   )r   r   r    r!   r"   r#   r   )r   rD   r   r   r   r   r   floatr^   r_   PADDING_RATIOpowr   rY   r   r   insertr|   )r   
param_namer   r#   v	min_value	max_valuepaddingr    r!   unique_valuesspanr"   s                r+   r   r   u  s   VZ(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		vz	*)$	)$	y(M9'	'	 F=!A%= AID&H	7N	SV=Vq}!V=>?G
7|ai(
 	
 VZ(q)$y!)$ m <
 98> >s.   "I;I! I&I&I+$I+"I0*I0)N)
rC   r
   rD   list[str] | Noner>   %Callable[[FrozenTrial], float] | Noner7   r   return'go.Figure')rE   r3   r   r   )r=   )rE   r-   r6   r   r7   r   r   z&tuple['Contour', 'Scatter', 'Scatter'])r;   r:   r<   r:   rz   r   r   r   )NNr=   )
rC   r
   rD   r   r>   r   r7   r   r   r3   )rC   r
   r   list[FrozenTrial]rd   r   re   r   r>   r   r   r-   )r   r   r   r   )r   r   r   r   r   r   )4
__future__r   r^   typingr   r   r   numpyr}   optuna._warningsr   optuna.loggingr   optuna.samplers._baser	   optuna.studyr
   r   optuna.trialr   r   $optuna.visualization._plotly_importsr   collections.abcr   optuna.visualization._utilsr   r   r   r   r   is_successfulr   r   r   r   r   r%   r   r   r   r-   r3   r9   rF   rB   r[   r   rA   r   r   r   r)   r*   r+   <module>r      s   "       ( % 2  ' $ # 9 ( 8 9 5 5 9 8<7B<7
X
 %
 %!j !: *   $## 59(###### 2	##
 ## ##LKb )5
55 5 ,	5p&  $48(	000 20 	0
 0f666 6 	6
 26 6rG
@r*   