ó
    -j†i"  ã                  óÌ  • S SK Jr  S SKJr  S SKrS SKrS SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  \R0                  " 5       (       a  S SKJr  \	" \5      rSrSr " S S\5      r\" S5      SSS\4           SS jj5       r   S         SS jjr   S         S S jjr!      S!S jr"S"S jr#S#S jr$g)$é    )Úannotations)Ú
NamedTupleN)Úexperimental_func)Ú
get_logger)ÚStudy)ÚBaseErrorEvaluator)ÚBaseImprovementEvaluator)ÚCrossValidationErrorEvaluator)ÚRegretBoundEvaluator)ÚStaticErrorEvaluator)ÚBestValueStagnationEvaluator)ÚDEFAULT_MIN_N_TRIALS)Ú_imports)Úgogš™™™™™©?g      Ð?c                  ó4   • \ rS rSr% S\S'   S\S'   S\S'   Srg	)
Ú_ImprovementInfoé   ú	list[int]Útrial_numbersúlist[float]Úimprovementsúlist[float] | NoneÚerrors© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    Úf/home/james-whalen/.local/lib/python3.13/site-packages/optuna/visualization/_terminator_improvement.pyr   r      s   ‡ ØÓØÓØÖr!   r   z3.2.0Fc                óZ   • [         R                  " 5         [        XX#5      n[        XT5      $ )aV  Plot the potentials for future objective improvement.

This function visualizes the objective improvement potentials, evaluated
with ``improvement_evaluator``.
It helps to determine whether we should continue the optimization or not.
You can also plot the error evaluated with
``error_evaluator`` if the ``plot_error`` argument is set to :obj:`True`.
Note that this function may take some time to compute
the improvement potentials.

Args:
    study:
        A :class:`~optuna.study.Study` object whose trials are plotted
        for their improvement.
    plot_error:
        A flag to show the error. If it is set to :obj:`True`, errors
        evaluated by ``error_evaluator`` are also plotted as line graph.
        Defaults to :obj:`False`.
    improvement_evaluator:
        An object that evaluates the improvement of the objective function.
        Defaults to :class:`~optuna.terminator.RegretBoundEvaluator`.
    error_evaluator:
        An object that evaluates the error inherent in the objective function.
        Defaults to :class:`~optuna.terminator.CrossValidationErrorEvaluator`.
    min_n_trials:
        The minimum number of trials before termination is considered.
        Terminator improvements for trials below this value are
        shown in a lighter color. Defaults to ``20``.

Returns:
    A :class:`plotly.graph_objects.Figure` object.
)r   ÚcheckÚ_get_improvement_infoÚ_get_improvement_plot)ÚstudyÚ
plot_errorÚimprovement_evaluatorÚerror_evaluatorÚmin_n_trialsÚinfos         r"   Úplot_terminator_improvementr-   %   s'   € ôP ‡N‚NÔä  Ð4IÓ[€DÜ  Ó4Ð4r!   c                óð  • U R                  5       (       a  [        S5      eUc
  [        5       nUc)  [        U[        5      (       a
  [        SS9nO
[        5       n/ n/ n/ n/ n[        R                  " U R                  5       HÏ  nUR                  [        R                  R                  R                  :X  a  UR                  U5        [        U5      S:X  a  MW  UR                  UR                   5        UR#                  XPR$                  S9n	UR                  U	5        U(       d  M¥  UR#                  XPR$                  S9n
UR                  U
5        MÑ     [        U5      S:X  a
  ['        XFS S9$ ['        XFUS9$ )NzBThis function does not support multi-objective optimization study.r   )Úconstant)ÚtrialsÚstudy_direction)r   r   r   )Ú_is_multi_objectiveÚ
ValueErrorr   Ú
isinstancer   r   r
   Útqdmr0   ÚstateÚoptunaÚtrialÚ
TrialStateÚCOMPLETEÚappendÚlenÚnumberÚevaluateÚ	directionr   )r'   Ú	get_errorr)   r*   r   Úcompleted_trialsr   r   r8   ÚimprovementÚerrors              r"   r%   r%   S   s]  € ð × Ñ ×"Ñ"ÜÐ]Ó^Ð^àÑ$Ü 4Ó 6ÐØÑÜÐ+Ô-I×JÑJÜ2¸AÑ>‰Oä;Ó=ˆOà€MØÐØ€LØ€Fä—’˜5Ÿ<™<Ö(ˆØ;‰;œ&Ÿ,™,×1Ñ1×:Ñ:Ó:Ø×#Ñ# EÔ*äÐÓ  AÓ%Ùà×Ñ˜UŸ\™\Ô*à+×4Ñ4Ø#·_±_ð 5ð 
ˆð 	×Ñ˜KÔ(çˆ9Ø#×,Ñ,Ø'¿¹ð -ð ˆEð M‰M˜%Ö ñ% )ô( ˆ6ƒ{aÓÜØ'È4ñ
ð 	
ô  Ø'È6ñ
ð 	
r!   c                ó`   • SU S3n[         R                  " U US[        US9[        US9SUSS9$ )Nzrgba(99, 110, 250, Ú)úmarkers+lines©ÚcolorúTerminator ImprovementrB   )ÚxÚyÚmodeÚmarkerÚlineÚnameÚ
showlegendÚlegendgroup©r   ÚScatterÚdict)r   r   ÚopacityrP   Úplotly_blue_with_opacitys        r"   Ú_get_improvement_scatterrW   ‡   sH   € ð "5°W°I¸QÐ?ÐÜ:Š:Ø
Ø
ØÜÐ2Ñ3ÜÐ0Ñ1Ø%ØØ!ñ	ð 	r!   c                ó„   • Uc  [         R                  " 5       $ Sn[         R                  " U USS[        US9[        US9S9$ )Nzrgb(239, 85, 59)rF   ÚErrorrG   )rJ   rK   rL   rO   rM   rN   rR   )r   r   Ú
plotly_reds      r"   Ú_get_error_scatterr[   š   sG   € ð ~ÜzŠz‹|Ðà#€JÜ:Š:Ø
Ø
ØØÜ˜*Ñ%Ü˜
Ñ#ñð r!   c                ó  • [        U R                  5      nU R                  b  [        U[        U R                  5      5      n[        U R                  5      U:”  a  [        U R                  US  5      nO[        U R                  5      nU R                  b  [        U[        U R                  5      5      nX2-
  [        -  nX$-
  X4-   4$ )N)Úminr   r   r<   r   ÚmaxÚPADDING_RATIO_Y)r,   r+   Ú	min_valueÚ	max_valueÚpaddings        r"   Ú_get_y_rangerc   ¬   s¬   € ÜD×%Ñ%Ó&€IØ‡{{ÑÜ˜	¤3 t§{¡{Ó#3Ó4ˆ	ô ˆ4×ÑÓ Ó-Ü˜×)Ñ)¨,¨-Ð8Ó9‰	ô ˜×)Ñ)Ó*ˆ	à‡{{ÑÜ˜	¤3 t§{¡{Ó#3Ó4ˆ	àÑ$¬Ñ7€GØÑ 	Ñ 3Ð3Ð3r!   c           
     ó^  • [        U R                  5      n[        R                  " [        R                  " S[        SS9[        SS9S9S9nUS:X  a  [        R                  S5        U$ UR                  [        U R                  S US	-    U R                  S US	-    [        X!:*  5      5        X!:”  a5  UR                  [        U R                  US  U R                  US  5      5        UR                  [        U R                  U R                  5      5        UR                  [        X5      S
9  U$ )NzTerminator Improvement PlotÚTrial)ÚtitlerI   )rf   ÚxaxisÚyaxis)Úlayoutr   zThere are no complete trials.é   )Úrange)r<   r   r   ÚFigureÚLayoutrT   Ú_loggerÚwarningÚ	add_tracerW   r   ÚOPACITYr[   r   Úupdate_yaxesrc   )r,   r+   Ún_trialsÚfigs       r"   r&   r&   ¿   s  € Ü4×%Ñ%Ó&€Hä
)Š)ÜyŠyØ/Ü˜WÑ%ÜÐ5Ñ6ñ
ñ€Cð 1ƒ}Ü‰Ð7Ô8Øˆ
à‡MMÜ Ø×ÑÐ1 °Ñ!1Ð2Ø×ÑÐ0 ¨qÑ 0Ð1äØÑ$ó	
ôð ÓØ‰Ü$Ø×"Ñ" < =Ð1Ø×!Ñ! , -Ð0óô	
ð ‡MMÔ$ T×%7Ñ%7¸¿¹ÓEÔFà×Ñœ<¨Ó;ÐÑ<Ø€Jr!   )r'   r   r(   Úboolr)   úBaseImprovementEvaluator | Noner*   úBaseErrorEvaluator | Noner+   ÚintÚreturnú'go.Figure')FNN)
r'   r   r@   ru   r)   rv   r*   rw   ry   r   )g      ð?T)
r   r   r   r   rU   ÚfloatrP   ru   ry   ú'go.Scatter')r   r   r   r   ry   r|   )r,   r   r+   rx   ry   ztuple[float, float])r,   r   r+   rx   ry   rz   )%Ú
__future__r   Útypingr   r5   r7   Úoptuna._experimentalr   Úoptuna.loggingr   Úoptuna.study.studyr   Úoptuna.terminatorr   r	   r
   r   Úoptuna.terminator.errorevalr   Ú'optuna.terminator.improvement.evaluatorr   r   Ú$optuna.visualization._plotly_importsr   Úis_successfulr   r   rn   r_   rq   r   r-   r%   rW   r[   rc   r&   r   r!   r"   Ú<module>r‡      sk  ðÝ "å ã ã Ý 2Ý %Ý $Ý 0Ý 6Ý ;Ý 2Ý <Ý PÝ HÝ 9ð ×Ò×ÑÝ7á
XÓ
€ð €Ø
€ôzô ñ 7Óð Ø=AØ15Ø,ð*5Øð*5àð*5ð ;ð*5ð /ð	*5ð
 ð*5ð ô*5ó ð*5ð^ Ø=AØ15ð	1
Øð1
àð1
ð ;ð1
ð /ð	1
ð
 õ1
ðn Øð	Øðàðð ðð ð	ð
 õð&Øðàðð ôô$4õ&#r!   