
    Di:                    L   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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 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.	 	 	 	 	 	 	 d/d%Z-d0d&Z.	 	 	 d1	 	 	 	 	 	 	 	 	 d2d'Z/	 	 	 	 	 	 	 	 	 	 	 	 d3d(Z0d4d)Z1d5d*Z2y)6    )annotations)CallableN)Any)
NamedTuple)optuna_warn)
get_logger)_CONSTRAINTS_KEY)Study)StudyDirection)FrozenTrial)
TrialState)_imports)_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__     c/home/ubuntu/crypto_trading_bot/.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'   r0   r(   r)   r*   r,   r,   /   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*   r2   r2   6   s    //r)   r2   c                  "    e Zd ZU ded<   ded<   y)_PlotValues	list[Any]xyNr#   r(   r)   r*   r8   r8   =   s    LLr)   r8   Objective Value)targetr6   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=   r6   infos        r*   plot_contourrE   B   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   rN   T)rowscolsshared_xaxesshared_yaxes)rowcol)	showscaleF)r   rT   rU   )rN   rT   rU   )r   rN   rT   rU   )rL   rT   rU   )r   Layoutr3   r4   r5   r6   lenFigure_get_contour_subplotupdate_xaxesr-   r   update_yaxesr.   r    r   mathlog10r   update_layout	enumerate	add_tracer   update)rD   rJ   r3   r4   r5   r6   x_paramy_paramsub_plot_info	sub_plotsfigurep	log_rangerV   x_iy_icontourscatterr-   r.   s                       r*   rA   rA   h   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J1AJIJie<%%0=0C0C0I0IJ1AJIJie<Z MW ]##m*<4^b
 	V$	%m4 $	VLC )- 8 #V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= D1A DI D''ieqVY\]V]'^<<8= D1A DI D''ieqVY\]V]'^!8''7aSSTW'U#m,q00''7aSSTW'UG#V$	VL 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 )NrK   r   z,Contour plot will not be displayed because `z` and `z$` cannot co-exist in `trial.params`.rH   rG   Theatmapnoneg?)
r:   r;   zcolorbar
colorscaleconnectgapscontours_coloring	hoverinfoline_smoothingreversescale)is_feasibleF)r-   r!   r.   rX   r   r   r   r/   r   r   r8   zipr"   r0   r:   appendr;   npfullnanarraylistkeysr   _create_scatter)rD   r5   r6   	x_indices	y_indicesfeasible
infeasiblex_valuey_valuecr/   xyszsrl   s                 r*   rZ   rZ      sP   
 

""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;   ry   
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.rH   z,The length of params must be greater than 1.z
Parameter z does not exist in your study.rK   )r3   r4   r5   r6   )r   r   
get_trialsr   COMPLETErC   r   rX   _loggerwarningsorted
ValueErrorset_get_contour_subplot_infor`   r{   r   r2   )rB   rC   r=   r6   trialstp_name
all_paramsr3   input_p_namerc   rd   re   r4   ir5   s                   r*   r@   r@      s    UFK0%1D1D0FGPVF #)GQqxx}}GV&G&GJG
6{aHI	z*v;!OOJK" 	\L:- :l^;Y!Z[[	\ s6{+ =Q""1%'SYZ(/*#M2 	8JAw!!"%( 8 9%RY[a bq!((78	8 &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.   r/   rK   zParam z$ unique value length is less than 2.)r-   r.   r/   r0   )_get_axis_infor,   rX   r!   r   r   r`   rC   r"   indexvalueget	directionr   MINIMIZEminmax_satisfy_constraints)rB   r   rc   rd   r=   r-   r.   r/   r   trialr   r   rj   rk   r   existingr   s                    r*   r   r   2  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<=)!,=	  >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   r0   r:   s      r*   r   r   k  s@    $$(()9:K$F#&EAqCx&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
   TFrH   rK   )r   r   r   r    r!   r"   r   )r   rC   r   r   r   r   r   floatr]   r^   PADDING_RATIOpowr   rX   r   r   insertr{   )r   
param_namer   r"   v	min_value	max_valuepaddingr   r    unique_valuesspanr!   s                r*   r   r   p  so   VZ(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		vz	*)$	)$	y(M9'	'	 F=!A%= AID&H	7N	SV=q}!=>?G
7|ai(
 	
 VZ(q)$y!)$ m <
 98> >s.   "I;I! I&I&I+$I+"I0*I0)N)
rB   r
   rC   list[str] | Noner=   %Callable[[FrozenTrial], float] | Noner6   r   return'go.Figure')rD   r2   r   r   )r<   )rD   r,   r5   r   r6   r   r   z&tuple['Contour', 'Scatter', 'Scatter'])r:   r9   r;   r9   ry   r   r   r   )NNr<   )
rB   r
   rC   r   r=   r   r6   r   r   r2   )rB   r
   r   list[FrozenTrial]rc   r   rd   r   r=   r   r   r,   )r   r   r   r   )r   r   r   r   r   r   )3
__future__r   collections.abcr   r]   typingr   r   numpyr|   optuna._warningsr   optuna.loggingr   optuna.samplers._baser	   optuna.studyr
   r   optuna.trialr   r   $optuna.visualization._plotly_importsr   optuna.visualization._utilsr   r   r   r   r   is_successfulr   r   r   r   r   r$   r   r   r   r,   r2   r8   rE   rA   rZ   r   r@   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)   