o
    }oi                     @  sL  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	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gZejeZd;ddZe rtd dl Z!e!j"j#j$Z%d<ddZ&d=dd Z'd=d!d"Z(d>d%d&Z)d?d*d+Z*		,d@dAd.d/Z+dBd1d2Z,dCd5d6Z-dDd9d:Z.dS )E    )annotations)Callable)SequenceN)Any)cast)optuna_warn)CategoricalDistribution)FloatDistribution)IntDistribution)Study)StudyDirection)FrozenTrial)_plotly_importsis_availablereturnboolc                   C  s
   t j S )a  Returns whether visualization with plotly is available or not.

    .. note::

        :mod:`~optuna.visualization` module depends on plotly version 4.0.0 or higher. If a
        supported version of plotly isn't installed in your environment, this function will return
        :obj:`False`. In such case, please execute ``$ pip install -U plotly>=4.0.0`` to install
        plotly.

    Returns:
        :obj:`True` if visualization with plotly is available, :obj:`False` otherwise.
    )r   _importsis_successful r   r   O/home/ubuntu/.local/lib/python3.10/site-packages/optuna/visualization/_utils.pyr      s   
studyStudy | Sequence[Study]target%Callable[[FrozenTrial], float] | Nonetarget_namestrNonec                 C  s\   t | tr	| g}n| }|d u rtdd |D rtd|d ur*|dkr,td d S d S d S )Nc                 s  s    | ]}|  V  qd S N)_is_multi_objective).0r   r   r   r   	<genexpr><   s    z#_check_plot_args.<locals>.<genexpr>z[If the `study` is being used for multi-objective optimization, please specify the `target`.zObjective ValuezQ`target` is specified, but `target_name` is the default value, 'Objective Value'.)
isinstancer   any
ValueErrorr   )r   r   r   studiesr   r   r   _check_plot_args1   s   
r%   trialslist[FrozenTrial]paramc                 C  s:   | D ]}||j vr
q|j| }t|ttfo|j  S dS )NF)paramsdistributionsr!   r	   r
   logr&   r(   trialdistr   r   r   _is_log_scaleH   s   

r/   c                 C  s`   | D ]+}||j vr
q|j| }t|ttfr dS t|tr*tdd |jD   S J ddS )NTc                 s  s*    | ]}t |ttfot |t V  qd S r   )r!   intfloatr   )r   vr   r   r   r    Z   s    
z _is_numerical.<locals>.<genexpr>FzShould not reach.)r)   r*   r!   r
   r	   r   allchoicesr,   r   r   r   _is_numericalQ   s   


r5   p_name	list[Any]c                   s.    fdd| D }t |  r|S ttt|S )Nc                   s    g | ]} |j v r|j   qS r   )r)   )r   tr6   r   r   
<listcomp>c   s     z%_get_param_values.<locals>.<listcomp>)r5   listmapr   )r&   r6   valuesr   r9   r   _get_param_valuesb   s   
r>   used_param_namesSequence[str]set[int]c                 C  s<   t  }| D ]}|D ]}||j vr||j  nq	q|S )a  Utility function for ``plot_parallel_coordinate``.

    If trial's parameters do not contain a parameter in ``used_param_names``,
    ``plot_parallel_coordinate`` methods do not use such trials.

    Args:
        trials:
            List of ``FrozenTrial``s.
        used_param_names:
            The parameter names used in ``plot_parallel_coordinate``.

    Returns:
        A set of invalid trial numbers.
    )setr)   keysaddnumber)r&   r?   skipped_trial_numbersr-   
used_paramr   r   r   _get_skipped_trial_numbersi   s   rH   Twith_messagec              
   C  s   |d u rddd}|}g }| D ]<}||}zt |}W n ttfy3   td|j dt| d	  w t|sF|rEt	d
|j d q|
| q|S )Nr8   r   r   r1   c                 S  s   t t| jS r   )r   r1   value)r8   r   r   r   _target   s   z"_filter_nonfinite.<locals>._targetTrialz's target value z could not be cast to float.zTrial zG is omitted in visualization because its objective value is inf or nan.)r8   r   r   r1   )r1   r#   	TypeErrorr   rE   reprnpisfinite_loggerwarningappend)r&   r   rI   rK   filtered_trialsr-   rJ   r   r   r   _filter_nonfinite   s2   	



rU   r   c                 C  s   |d up	| j tjkS r   )	directionr   MINIMIZE)r   r   r   r   r   _is_reverse_scale   s   rX   rJ   r   c                 C  s,   zt |  | W S  ty   t|  Y S w r   )jsondumpsrM   r   )rJ   r   r   r   _make_json_compatible   s   
r[   r-   r   c                 C  sP   dd | j  D }|rd|ini }tj| j| j| jd|dd}|ddS )	Nc                 S  s   i | ]	\}}|t |qS r   )r[   )r   keyrJ   r   r   r   
<dictcomp>   s    z#_make_hovertext.<locals>.<dictcomp>
user_attrs)rE   r=   r)      )indent
z<br>)r^   itemsrY   rZ   rE   r=   r)   replace)r-   r^   user_attrs_dicttextr   r   r   _make_hovertext   s   	rf   )r   r   )r   r   r   r   r   r   r   r   )r&   r'   r(   r   r   r   )r&   r'   r6   r   r   r7   )r&   r'   r?   r@   r   rA   )NT)r&   r'   r   r   rI   r   r   r'   )r   r   r   r   r   r   )rJ   r   r   r   )r-   r   r   r   )/
__future__r   collections.abcr   r   rY   typingr   r   numpyrO   optunaoptuna._warningsr   optuna.distributionsr   r	   r
   optuna.studyr   optuna.study._study_directionr   optuna.trialr   optuna.visualizationr   __all__logging
get_logger__name__rQ   r   plotly.colorsplotlycolors
sequentialBluesCOLOR_SCALEr%   r/   r5   r>   rH   rU   rX   r[   rf   r   r   r   r   <module>   sB    




	


,
	