Ë
    ÿÿæià'  ã                  ó¶  — 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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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# n6d dl$m%Z%  e%d«      Z e%d«      Z e%d«      Z e%d«      Z  e%d«      Z" e%d«      ZdZ& e
d«       G d„ de«      «       Z'dd„Z(	 	 	 	 	 	 	 	 	 	 d d„Z)y)!é    )ÚannotationsN)Úcast)ÚTYPE_CHECKING)Úexperimental_class)Úoptuna_warn)ÚLazyRandomState)Úintersection_search_space)ÚStudyDirection)Ú"_compute_standardized_regret_bound)ÚBaseImprovementEvaluator)Ú
TrialState)Úacqf)Úgp)Úprior)Úsearch_space)ÚFrozenTrial)Ú_LazyImportÚtorchzoptuna._gp.gpzoptuna._gp.acqfzoptuna._gp.priorzoptuna._gp.search_spacezscipy.statsçš™™™™™¹?z4.0.0c                  ó<   — e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Zy)ÚEMMREvaluatoraú	  Evaluates a kind of regrets, called the Expected Minimum Model Regret(EMMR).

    EMMR is an upper bound of "expected minimum simple regret" in the optimization process.

    Expected minimum simple regret is a quantity that converges to zero only if the
    optimization process has found the global optima.

    For further information about expected minimum simple regret and the algorithm,
    please refer to the following paper:

    - `A stopping criterion for Bayesian optimization by the gap of expected minimum simple
      regrets <https://proceedings.mlr.press/v206/ishibashi23a.html>`__

    Also, there is our blog post explaining this evaluator:

    - `Introducing A New Terminator: Early Termination of Black-box Optimization Based on
      Expected Minimum Model Regret
      <https://medium.com/optuna/introducing-a-new-terminator-early-termination-of-black-box-optimization-based-on-expected-9a660774fcdb>`__

    Args:
        deterministic_objective:
            A boolean value which indicates whether the objective function is deterministic.
            Default is :obj:`False`.
        delta:
            A float number related to the criterion for termination. Default to 0.1.
            For further information about this parameter, please see the aforementioned paper.
        min_n_trials:
            A minimum number of complete trials to compute the criterion. Default to 2.
        seed:
            A random seed for EMMREvaluator.

    Example:

        .. testcode::

            import optuna
            from optuna.terminator import EMMREvaluator
            from optuna.terminator import MedianErrorEvaluator
            from optuna.terminator import Terminator

            sampler = optuna.samplers.TPESampler(seed=0)
            study = optuna.create_study(sampler=sampler, direction="minimize")
            emmr_improvement_evaluator = EMMREvaluator()
            median_error_evaluator = MedianErrorEvaluator(emmr_improvement_evaluator)
            terminator = Terminator(
                improvement_evaluator=emmr_improvement_evaluator,
                error_evaluator=median_error_evaluator,
            )


            for i in range(1000):
                trial = study.ask()

                ys = [trial.suggest_float(f"x{i}", -10.0, 10.0) for i in range(5)]
                value = sum(ys[i] ** 2 for i in range(5))

                study.tell(trial, value)

                if terminator.should_terminate(study):
                    # Terminated by Optuna Terminator!
                    break

    Nc                ó˜   — |dk  st        j                  |«      st        d«      ‚|| _        || _        || _        t        |«      | _        y )Né   z@`min_n_trials` is expected to be a finite integer more than one.)ÚnpÚisfiniteÚ
ValueErrorÚ_deterministicÚ_deltaÚmin_n_trialsr   Ú_rng)ÚselfÚdeterministic_objectiveÚdeltar   Úseeds        úw/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/optuna/terminator/improvement/emmr.pyÚ__init__zEMMREvaluator.__init__l   sF   € ð ˜1Ò¤B§K¡K°Ô$=ÜÐ_Ó`Ð`à5ˆÔØˆŒØ(ˆÔÜ# DÓ)ˆ�	ó    c           	     ó"	  — t        |«      }|D �cg c]"  }|j                  t        j                  k(  sŒ!|‘Œ$ }}t	        |«      | j
                  k  r!t        j                  j                  t        z  S t        j                  |«      }|j                  |«      }|j                  sCt        | j                  j                   › d�«       t        j                  j                  t        z  S t	        |«      }|j"                  ||j                  fk(  sJ ‚|t$        j&                  k(  rdnd}	t)        j*                  |D �cg c]  }t-        t.        |j0                  «      ‘Œ c}«      |	z  }
t3        j4                  |
«      }
|
|
j7                  «       z
  t        t        j                  j8                  |
j;                  «       «      z  }t	        |«      t	        |«      k(  sJ ‚t3        j<                  |dd d…d d …f   |d d |j>                  t@        jB                  t@        jD                  d | jF                  ¬«      }t3        j<                  |||j>                  t@        jB                  t@        jD                  || jF                  ¬«      }tI        t)        jJ                  |«      «      }tI        t)        jJ                  |d d «      «      }||d d …f   }||d d …f   }tM        ||||«      }tO        |dd d …f   |«      \  }}tO        ||«      \  }}tO        ||«      \  }}tO        ||«      \  }}|d   }tQ        |||d d…d d …f   |d d | jR                  | jT                  jV                  ¬«      }||z
  }|}tY        jZ                  t        d|d|z  z
  |z   «      «      }||z
  |z  }|t\        j^                  ja                  |«      z  } ||z  t\        j^                  jc                  |«      z  }!t@        jD                  dz  }"d	tY        jd                  d
|"|z  z   «      z  }#d|z  ||"dz  z   z  }$d	|z  ||z
  dz  z  ||"dz  z   dz  z  }%|tY        jZ                  d	|#|$z   |%z   z  «      z  }&t9        t        j                  j                  d	z  || z   |!z   |&z   «      S c c}w c c}w )NzM cannot consider any search space.Termination will never occur in this study.éÿÿÿÿr   .)ÚXÚYÚis_categoricalÚ	log_priorÚminimum_noiseÚ	gpr_cacher"   )Úrngg»½×Ùß|Û=g       @g      à?g      ð?g      à¿é   )3r	   Ústater   ÚCOMPLETEÚlenr   ÚsysÚ
float_infoÚmaxÚMARGIN_FOR_NUMARICAL_STABILITYÚgp_search_spaceÚSearchSpaceÚget_normalized_paramsÚdimr   Ú	__class__Ú__name__Úshaper
   ÚMINIMIZEr   Úarrayr   ÚfloatÚvaluer   Úwarn_and_convert_infÚmeanÚminÚstdÚfit_kernel_paramsr,   r   Údefault_log_priorÚDEFAULT_MINIMUM_NOISE_VARr   ÚintÚargmaxÚ$_compute_gp_posterior_cov_two_thetasÚ_compute_gp_posteriorr   r   r    r0   ÚmathÚsqrtÚscipy_statsÚnormÚpdfÚcdfÚlog)'r!   ÚtrialsÚstudy_directionÚoptuna_search_spaceÚtÚcomplete_trialsr   Únormalized_paramsÚ
len_trialsÚsignÚ
score_valsÚstandarized_score_valsÚgpr_t1Úgpr_tÚtheta_t_star_indexÚtheta_t1_star_indexÚtheta_t_starÚtheta_t1_starÚ,cov_t_between_theta_t_star_and_theta_t1_starÚmu_t1_theta_t_with_nu_tÚvariance_t1_theta_t_with_nu_tÚ_Úvariance_t_theta_t1_starÚmu_t_theta_t_starÚvariance_t_theta_t_starÚmu_t1_theta_t1_starÚy_tÚkappa_t1Útheorem1_delta_mu_t_starÚalg1_delta_r_tilde_t_term1Ú
theorem1_vÚ
theorem1_gÚalg1_delta_r_tilde_t_term2Úalg1_delta_r_tilde_t_term3Ú_lambdaÚeq4_rhs_term1Úeq4_rhs_term2Úeq4_rhs_term3Úalg1_delta_r_tilde_t_term4s'                                          r%   ÚevaluatezEMMREvaluator.evaluate{   sÅ  € Ü7¸Ó?ÐÙ&,ÓO¡f °·±¼:×;NÑ;NÓ0Nš1 fˆÐOäˆÓ $×"3Ñ"3Ò3Ü—>‘>×%Ñ%Ô(FÑFÐFä&×2Ñ2Ð3FÓGˆØ(×>Ñ>¸ÓOÐØ×ÒÜØ—>‘>×*Ñ*Ð+ð ,>ð >ôô —>‘>×%Ñ%Ô(FÑFÐFä˜Ó)ˆ
Ø ×&Ñ&¨:°|×7GÑ7GÐ*HÒHÐHÐHð %¬×(?Ñ(?Ò?‰rÀQˆÜ—X‘X¹_ÓM¹_¸œt¤E¨1¯7©7Õ3¸_ÑMÓNÐQUÑUˆ
Ü×,Ñ,¨ZÓ8ˆ
Ø",¨z¯©Ó/@Ñ"@ÄCÜ�N‰N×Ñ 
§¡Ó 0óE
ñ "
Ðô Ð)Ó*¬cÐ2CÓ.DÒDÐDÐDä×%Ñ%Ø  S b Sª! Ñ,Ø$ S bÐ)Ø'×6Ñ6Ü×-Ñ-Ü×9Ñ9ØØ$(×$7Ñ$7ô
ˆô ×$Ñ$ØØ$Ø'×6Ñ6Ü×-Ñ-Ü×9Ñ9ØØ$(×$7Ñ$7ô
ˆô !¤§¡Ð+AÓ!BÓCÐÜ!¤"§)¡)Ð,BÀ3ÀBÐ,GÓ"HÓIÐØ(Ð);ºQÐ)>Ñ?ˆØ)Ð*=ºqÐ*@ÑAˆÜ7[Ø˜uÐ&8Ð:Mó8
Ð4ô
 BWØ˜b¢!˜eÑ$ eóB
Ñ>ÐÐ!>ô '<¸MÈ5Ó&QÑ#ˆÐ#Ü5JÈ<ÐY^Ó5_Ñ2ÐÐ2Ü!6°}ÀfÓ!MÑÐ˜Qà$ RÑ(ˆÜ5ØØØ˜c˜r˜c¢1˜fÑ%Ø" 3 BÐ'Ø�K‰KØ—	‘	—‘ô
ˆð $7Ð9JÑ#JÐ à%=Ð"ä—Y‘YÜØØ'ØÐDÑDñEà*ñ+óó
ˆ
ð (Ð*=Ñ=ÀÑKˆ
à%/´+×2BÑ2B×2FÑ2FÀzÓ2RÑ%RÐ"Ø%/°*Ñ%<¼{×?OÑ?O×?SÑ?SÐT^Ó?_Ñ%_Ð"ä×1Ñ1°2Ñ5ˆØœdŸh™h s¨WÐ7TÑ-TÑ'TÓUÑUˆàÐ0Ñ0Ð4QÐT[Ð]_ÑT_Ñ4_Ñ`ð 	ð Ø+ñ,àÐ,Ñ,°Ñ2ñ3ð -¨w¸©{Ñ:¸qÑ@ñAð 	ð &.´·	±	Ø�= =Ñ0°=Ñ@ÑAó1
ñ &
Ð"ô Ü�N‰N×Ñ Ñ$Ø&Ø(ñ)à(ñ)ð )ñ)ó
ð 	
ùòU Pùò& Ns   �"R³RÄ9!R)Fr   r1   N)
r"   Úboolr#   rB   r   rK   r$   z
int | NoneÚreturnÚNone)rV   zlist[FrozenTrial]rW   r
   r}   rB   )r>   Ú
__module__Ú__qualname__Ú__doc__r&   r{   © r'   r%   r   r   *   sQ   „ ñ>ðD ).ØØØð*à!%ð*ð ð*ð ð	*ð
 ð*ð 
ó*ôr
r'   r   c                ó�   — |j                  t        j                  | «      «      \  }}|j                  «       |j                  «       fS )N)Ú	posteriorr   Ú
from_numpyÚitem)Úx_paramsÚgprrE   Úvars       r%   rN   rN   ð   s6   € à—‘œe×.Ñ.¨xÓ8Ó9�I€Dˆ#Ø�9‰9‹;˜Ÿ™›
Ð"Ð"r'   c                óÔ   — ||k(  rt        | |   |«      d   S |j                  t        j                  | ||g   «      d¬«      \  }}|j                  dk(  sJ ‚|d   j                  «       S )Nr   T)Újoint)r1   r1   )r   r   )rN   r„   r   r…   r?   r†   )r[   rˆ   Útheta1_indexÚtheta2_indexri   Úcovars         r%   rM   rM   ö   s~   € ð �|Ò#Ü$Ð%6°|Ñ%DÀcÓJÈ1ÑMÐMà�}‰}Ü×ÑÐ*¨L¸,Ð+GÑHÓIÐQUð ó �H€A€uð �;‰;˜&Ò Ð Ð Ø�‰;×ÑÓÐr'   )r‡   ú
np.ndarrayrˆ   úgp.GPRegressorr}   ztuple[float, float])
r[   r�   rˆ   r�   rŒ   rK   r�   rK   r}   rB   )*Ú
__future__r   rO   r5   Útypingr   r   Únumpyr   Úoptuna._experimentalr   Úoptuna._warningsr   Ú"optuna.samplers._lazy_random_stater   Úoptuna.search_spacer	   Úoptuna.studyr
   Ú'optuna.terminator.improvement.evaluatorr   r   Úoptuna.trialr   Úscipy.statsÚstatsrQ   r   Ú
optuna._gpr   Úacqf_moduler   r   r   r9   r   Úoptuna._importsr   r8   r   rN   rM   r‚   r'   r%   Ú<module>r       sè   ðÝ "ã Û 
Ý Ý  ã å 3Ý (Ý >Ý 9Ý 'Ý VÝ LÝ #ñ Ý%Ûå.ÝÝ Ý:Þ(å+á˜Ó €EÙ	�_Ó	%€BÙÐ/Ó0€KÙÐ*Ó+€EÙ!Ð";Ó<€OÙ˜mÓ,€Kà!$Ð ñ �GÓôB
Ð,ó B
ó ðB
óJ#ð
Ø!ð
Ø(6ð
ØFIð
ØY\ð
à
ô
r'   