Ë
    þÍ:j\B  ã                  ó’  — 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mZ d dlmZ erd dlZd d	lmZ d d
lmZ nd dlmZ  ed«      Z ej,                  d«      Zd ej,                  dej0                  z  «      z  Z ej,                  dej0                  z  «      Z ej6                   ej,                  dej0                  z  «      «      ZdZd%d„Z	 	 	 	 	 	 	 	 d&d„Zd'd„Z d(d„Z! G d„ de«      Z" G d„ de"«      Z# G d„ de"«      Z$ G d„ de"«      Z% G d„ de"«      Z& G d„ d e"«      Z' G d!„ d"e"«      Z( G d#„ d$e"«      Z)y))é    )Úannotations)ÚABC)ÚabstractmethodN)Úcast)ÚTYPE_CHECKING)Úget_non_dominated_box_bounds)Ú_is_pareto_front)ÚGPRegressor)ÚSearchSpace)Ú_LazyImportÚtorchç      à?é   é   çê-�™—q=c                óü   — t         j                  j                  | d|¬«      j                  |t         j                  ¬«      }d|dz
  z  }t        j
                  |«      t        t        j                  d«      «      z  S )NT)Ú	dimensionÚscrambleÚseed©Údtypeg       @r   r   )	r   ÚquasirandomÚSobolEngineÚdrawÚfloat64ÚerfinvÚfloatÚnpÚsqrt)ÚdimÚ	n_samplesr   Úsobol_samplesÚsampless        úd/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/optuna/_gp/acqf.pyÚ_sample_from_normal_sobolr%   !   sm   € ô ×%Ñ%×1Ñ1Ø ¨4ð 2ó ç
�dˆ9œEŸM™M€dÓ*ð ð �] SÑ(Ñ)€Gä�<‰<˜Ó ¤5¬¯©°«Ó#4Ñ4Ð4ó    c                óx  — t        t        j                  | j                  d   «      «      }| j	                  d«      |z
  }|j                  t        j                  t        t        j                  ¬«      |¬«       t        j                  j                  |j                  «       j                  d¬«      d¬«      |z
  S )Néþÿÿÿr   )ÚminÚmaxéÿÿÿÿ©r    )r(   r+   )r   r   ÚlogÚshapeÚ	unsqueezeÚclamp_r   ÚtensorÚ_EPSr   ÚspecialÚ	logsumexpÚsum)ÚY_postÚnon_dominated_box_lower_boundsÚnon_dominated_box_intervalsÚlog_n_qmc_samplesÚdiffs        r$   Úlogehvir;   -   sŒ   € ô
 œbŸf™f V§\¡\°"Ñ%5Ó6Ó7Ðð ×Ñ˜BÓÐ"@Ñ@€DØ‡K�K”E—L‘L¤¬U¯]©]Ô;ÐA\€KÔ]ô �=‰=×"Ñ" 4§8¡8£:§>¡>°b >Ó#9¸xÐ"ÓHÐK\Ñ\Ð\r&   c                ó–  — d| z  x}t         j                  j                  t         | z  «      z  | | z  j	                  «       t
        z  z   j                  «       }| | dk  x}   x}j                  «       rUd|dz  z  t        z
  dt        |z  t         j                  j                  t         |z  «      z  z   j                  «       z   ||<   |S )aH  
    Return E_{x ~ N(0, 1)}[max(0, x+z)]
    The calculation depends on the value of z for numerical stability.
    Please refer to Eq. (9) in the following paper for more details:
        https://arxiv.org/pdf/2310.20708.pdf

    NOTE: We do not use the third condition because [-10**100, 10**100] is an overly high range.
    r   içÿÿÿg      à¿r   r   )r   r3   ÚerfcÚ
_SQRT_HALFÚexpÚ_INV_SQRT_2PIr-   ÚnumelÚ_LOG_SQRT_2PIÚ_SQRT_HALF_PIÚerfcx)ÚzÚz_halfÚoutÚsmallÚz_smalls        r$   Ústandard_logeirJ   A   sÐ   € ð ˜‘7Ð	ˆœeŸm™m×0Ñ0´*°¸q±ÓAÑAØˆ7�Q‰;×
Ñ
Ó
¤Ñ
-ñ	.ç	�cƒeð ð ˜q 3™wÐ&�eÑ(Ð(ˆ×/Ñ/Ô1ð �7˜A‘:ÑÜñà”= 7Ñ*¬U¯]©]×-@Ñ-@Ä*ÀÈwÑAVÓ-WÑWÑW×\Ñ\Ó^ñ_ð 	ˆE‰
ð
 €Jr&   c                óf   — t        | |z
  |j                  «       x}z  «      |j                  «       z   S ©N)rJ   Úsqrt_r-   )ÚmeanÚvarÚf0Úsigmas       r$   ÚlogeirR   Z   s,   € ä˜4 "™9°#·)±)³+Ð)=¨Ñ>Ó?À%Ç)Á)Ã+ÑMÐMr&   c                  ó6   — e Zd Zdd„Zedd„«       Zdd„Zd	d„Zy)
ÚBaseAcquisitionFuncc                ó    — || _         || _        y rL   )Úlength_scalesÚsearch_space)ÚselfrV   rW   s      r$   Ú__init__zBaseAcquisitionFunc.__init__`   s   € Ø*ˆÔØ(ˆÕr&   c                ó   — t         ‚rL   )ÚNotImplementedError©rX   Úxs     r$   Ú	eval_acqfzBaseAcquisitionFunc.eval_acqfd   s   € ä!Ð!r&   c                óÖ   — t        j                  «       5  | j                  t        j                  |«      «      j	                  «       j                  «       cd d d «       S # 1 sw Y   y xY wrL   )r   Úno_gradr^   Ú
from_numpyÚdetachÚnumpyr\   s     r$   Úeval_acqf_no_gradz%BaseAcquisitionFunc.eval_acqf_no_gradh   sM   € Ü�]‰]‹_ñ 	HØ—>‘>¤%×"2Ñ"2°1Ó"5Ó6×=Ñ=Ó?×EÑEÓG÷	H÷ 	Hò 	Hús   •A AÁA(c                ó  — |j                   dk(  sJ ‚t        j                  |«      j                  d«      }| j	                  |«      }|j                  «        |j                  «       |j                  j                  «       j                  «       fS )Nr   T)
Úndimr   ra   Úrequires_grad_r^   ÚbackwardÚitemÚgradrb   rc   )rX   r]   Úx_tensorÚvals       r$   Úeval_acqf_with_gradz'BaseAcquisitionFunc.eval_acqf_with_gradl   sk   € Ø�v‰v˜Š{Ðˆ{Ü×#Ñ# AÓ&×5Ñ5°dÓ;ˆØ�n‰n˜XÓ&ˆØ�‰ŒØ�x‰x‹z˜8Ÿ=™=×/Ñ/Ó1×7Ñ7Ó9Ð9Ð9r&   N)rV   ú
np.ndarrayrW   r   ÚreturnÚNone©r]   útorch.Tensorro   rr   )r]   rn   ro   rn   )r]   rn   ro   ztuple[float, np.ndarray])Ú__name__Ú
__module__Ú__qualname__rY   r   r^   rd   rm   © r&   r$   rT   rT   _   s&   „ ó)ð ò"ó ð"óHô:r&   rT   c                  óD   ‡ — e Zd Z	 	 d	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚLogEIc                óN  •— || _         || _        || _        |�st        j                  |«      }| j                   j
                  j                  «       }|j                  |j                  d   «      }| j                   j                  ||«       t        ‰	| �-  |j                  |«       y ©Nr   )Ú_gprÚ_stabilizing_noiseÚ
_thresholdr   ra   Ú_y_trainr*   Úexpandr.   Úappend_running_dataÚsuperrY   rV   )
rX   ÚgprrW   Ú	thresholdÚ#normalized_params_of_running_trialsÚstabilizing_noiseÚ*normalized_params_of_running_trials_tensorÚconstant_liar_valueÚconstant_liar_yÚ	__class__s
            €r$   rY   zLogEI.__init__u   sŸ   ø€ ð ˆŒ	Ø"3ˆÔØ#ˆŒà.Ð:Ü9>×9IÑ9IØ3ó:Ð6ð #'§)¡)×"4Ñ"4×"8Ñ"8Ó":ÐØ1×8Ñ8Ø:×@Ñ@ÀÑCóˆOð �I‰I×)Ñ)Ø:Øôô
 	‰Ñ˜×*Ñ*¨LÕ9r&   c                ó*  — | j                   j                  |«      \  }}t        j                  | j                  «      s%t        ||| j                  z   | j                  ¬«      S t        j                  |j                  d d t        j                  ¬«      S )N)rN   rO   rP   r+   r   )r{   Ú	posteriorr   Úisneginfr}   rR   r|   r   Úzerosr.   r   ©rX   r]   rN   rO   s       r$   r^   zLogEI.eval_acqf™   sq   € Ø—I‘I×'Ñ'¨Ó*‰	ˆˆcô
 —;‘;˜tŸ™Ô/ô �t  t×'>Ñ'>Ñ!>À4Ç?Á?ÔSð	
ô —‘˜QŸW™W S b˜\´·±Ô?ð	
r&   ©Nr   ©r‚   r
   rW   r   rƒ   r   r„   únp.ndarray | Noner…   r   ro   rp   rq   ©rs   rt   ru   rY   r^   Ú__classcell__©r‰   s   @r$   rx   rx   t   sR   ø„ ð BFØ#(ð":àð":ð "ð":ð ð	":ð
 .?ð":ð !ð":ð 
õ":÷H
r&   rx   c                  óD   ‡ — e Zd Z	 	 d	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚLogPIc                óî   •— || _         || _        || _        |�Ct        j                  |«      }| j                   j                  ||j                  |«      d   «       t        ‰| �!  |j                  |«       y rz   )
r{   r|   r}   r   ra   r€   r‹   r�   rY   rV   )rX   r‚   rW   rƒ   r„   r…   r†   r‰   s          €r$   rY   zLogPI.__init__¥   su   ø€ ð ˆŒ	Ø"3ˆÔØ#ˆŒà.Ð:Ü9>×9IÑ9IØ3ó:Ð6ð �I‰I×)Ñ)Ø:Ø—‘ÐHÓIÈ!ÑLôô 	‰Ñ˜×*Ñ*¨LÕ9r&   c                óà   — | j                   j                  |«      \  }}t        j                  || j                  z   «      }t        j
                  j                  || j                  z
  |z  «      S rL   )r{   r‹   r   r   r|   r3   Úlog_ndtrr}   )rX   r]   rN   rO   rQ   s        r$   r^   zLogPI.eval_acqfÄ   sX   € ð —I‘I×'Ñ'¨Ó*‰	ˆˆcÜ—
‘
˜3 ×!8Ñ!8Ñ8Ó9ˆä�}‰}×%Ñ% t¨d¯o©oÑ'=ÀÑ&FÓGÐGr&   r�   r�   rq   r’   r”   s   @r$   r–   r–   ¤   sR   ø„ ð BFØ#(ð:àð:ð "ð:ð ð	:ð
 .?ð:ð !ð:ð 
õ:÷>Hr&   r–   c                  ó8   ‡ — e Zd Z	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚUCBc                óV   •— || _         || _        t        ‰| �  |j                  |«       y rL   ©r{   Ú_betar�   rY   rV   ©rX   r‚   rW   Úbetar‰   s       €r$   rY   zUCB.__init__Ï   ó(   ø€ ð ˆŒ	ØˆŒ
Ü‰Ñ˜×*Ñ*¨LÕ9r&   c                óˆ   — | j                   j                  |«      \  }}|t        j                  | j                  |z  «      z   S rL   ©r{   r‹   r   r   rž   rŽ   s       r$   r^   zUCB.eval_acqfÙ   ó7   € Ø—I‘I×'Ñ'¨Ó*‰	ˆˆcØ”e—j‘j §¡¨cÑ!1Ó2Ñ2Ð2r&   ©r‚   r
   rW   r   r    r   ro   rp   rq   r’   r”   s   @r$   r›   r›   Î   ó3   ø„ ð:àð:ð "ð:ð ð	:ð
 
õ:÷3r&   r›   c                  ó8   ‡ — e Zd Z	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚLCBc                óV   •— || _         || _        t        ‰| �  |j                  |«       y rL   r�   rŸ   s       €r$   rY   zLCB.__init__ß   r¡   r&   c                óˆ   — | j                   j                  |«      \  }}|t        j                  | j                  |z  «      z
  S rL   r£   rŽ   s       r$   r^   zLCB.eval_acqfé   r¤   r&   r¥   rq   r’   r”   s   @r$   r¨   r¨   Þ   r¦   r&   r¨   c                  óL   ‡ — e Zd Z	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚConstrainedLogEIc                ó  •— t        |«      t        |«      k(  r|sJ ‚t        |||||«      | _        t        ||«      D ��	cg c]  \  }}	t	        |||	||«      ‘Œ c}	}| _        t        ‰
| �  |j                  |«       y c c}	}w rL   )	Úlenrx   Ú_acqfÚzipr–   Ú_constraints_acqf_listr�   rY   rV   )rX   r‚   rW   rƒ   Úconstraints_gpr_listÚconstraints_threshold_listr„   r…   r{   r}   r‰   s             €r$   rY   zConstrainedLogEI.__init__ï   s™   ø€ ô Ð$Ó%¬Ð-GÓ)HÒHÑMað	
ØaäØ�˜yÐ*MÐO`ó
ˆŒ
ô %(Ð(<Ð>XÓ$Y÷	'
ñ !��jô ØØØØ3Ø!õó	'
ˆÔ#ô 	‰Ñ˜×*Ñ*¨LÕ9ùó	'
s   Á A=c                óx   ‡— | j                   j                  ‰«      t        ˆfd„| j                  D «       «      z   S )Nc              3  ó@   •K  — | ]  }|j                  ‰«      –— Œ y ­wrL   ©r^   ©Ú.0Úacqfr]   s     €r$   ú	<genexpr>z-ConstrainedLogEI.eval_acqf.<locals>.<genexpr>  s   øè ø€ ò -
Ø"&ˆD�N‰N˜1×ñ-
ùó   ƒ)r¯   r^   r5   r±   r\   s    `r$   r^   zConstrainedLogEI.eval_acqf  s;   ø€ ð �z‰z×#Ñ# AÓ&¬ó -
Ø*.×*EÑ*Eô-
ó *
ñ 
ð 	
r&   r�   )r‚   r
   rW   r   rƒ   r   r²   úlist[GPRegressor]r³   úlist[float]r„   r‘   r…   r   ro   rp   rq   r’   r”   s   @r$   r¬   r¬   î   se   ø„ ð BFØ#(ð:àð:ð "ð:ð ð	:ð
 0ð:ð %0ð:ð .?ð:ð !ð:ð 
õ:÷8
r&   r¬   c                  óL   ‡ — e Zd Z	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚLogEHVIc                óø  •‡— dˆfd„}|| _         || _        |�Jt        j                  |«      }	| j                  D ]&  }
|
j	                  |	|
j                  |	«      d   «       Œ( t        ‰j                  d   ||¬«      | _         |«       \  | _	        }|| j                  z
  j                  t        «      | _        t        ‰| �9  t        j                   |D �
cg c]  }
|
j"                  ‘Œ c}
d¬«      |«       y c c}
w )Nc                 óf  •— ‰j                  «        } | t        | d¬«         }t        j                  | d¬«      }t        j                  t        j
                  d|z  d|z  «      t        j                  «      }t        ||«      \  }}t        j                  | «      t        j                  | «      fS )NF)Úassume_unique_lexsortedr   ©Úaxisgš™™™™™ñ?gÍÌÌÌÌÌì?)
rc   r	   r   r*   Ú	nextafterÚmaximumÚinfr   r   ra   )Ú	loss_valsÚpareto_solsÚ	ref_pointÚlbsÚubsÚY_trains        €r$   Ú_get_non_dominated_box_boundsz7LogEHVI.__init__.<locals>._get_non_dominated_box_bounds  s“   ø€ à Ÿ™›Ð(ˆIØ#Ô$4°YÐX]Ô$^Ñ_ˆKÜŸ™˜y¨qÔ1ˆIÜŸ™¤R§Z¡Z°°i±ÀÀyÁÓ%QÔSU×SYÑSYÓZˆIÜ3°KÀÓK‰HˆC�ä×#Ñ# S DÓ)¬5×+;Ñ+;¸S¸DÓ+AÐAÐAr&   r   r+   )r    r!   r   rÃ   )ro   z!tuple[torch.Tensor, torch.Tensor])r|   Ú	_gpr_listr   ra   r€   r‹   r%   r.   Ú_fixed_samplesÚ_non_dominated_box_lower_boundsÚ
clamp_min_r2   Ú_non_dominated_box_intervalsr�   rY   r   rN   rV   )rX   Úgpr_listrW   rÍ   Ún_qmc_samplesÚqmc_seedr„   r…   rÎ   r†   r‚   Únon_dominated_box_upper_boundsr‰   s      `        €r$   rY   zLogEHVI.__init__  sô   ù€ õ	Bð #4ˆÔØ!ˆŒØ.Ð:Ü9>×9IÑ9IØ3ó:Ð6ð —~‘~ò �Ø×'Ñ'Ø>Ø—M‘MÐ"LÓMÈaÑPõðô 8Ø—‘˜bÑ!¨]Àô
ˆÔñ *Ó+ñ 	MˆÔ,Ð.Lð +¨T×-QÑ-QÑQß
‰*”TÓ
ð 	Ô)ô 	‰ÑœŸ™¸xÖ!H¸ #×"3Ó"3Ò!HÈqÔQÐS_Õ`ùÒ!Hs   ÃC7c                ór  — g }t        | j                  «      D ]g  \  }}|j                  |«      \  }}t        j                  || j
                  z   «      }|j                  |d   |d   | j                  d|f   z  z   «       Œi t        t        j                  |d¬«      | j                  | j                  ¬«      S )N).N.r+   r,   )r6   r7   r8   )Ú	enumeraterÏ   r‹   r   r   r|   ÚappendrÐ   r;   ÚstackrÑ   rÓ   )rX   r]   r6   Úir‚   rN   rO   Ústdevs           r$   r^   zLogEHVI.eval_acqfL  s²   € ØˆÜ §¡Ó/ò 	\‰FˆAˆsØŸ™ aÓ(‰IˆD�#Ü—J‘J˜s T×%<Ñ%<Ñ<Ó=ˆEð
 �M‰M˜$˜y™/¨E°)Ñ,<¸t×?RÑ?RÐSVÐXYÐSYÑ?ZÑ,ZÑZÕ[ð	\ô Ü—;‘;˜v¨2Ô.Ø+/×+OÑ+OØ(,×(IÑ(Iô
ð 	
r&   r�   )rÔ   r¼   rW   r   rÍ   rr   rÕ   ÚintrÖ   ú
int | Noner„   r‘   r…   r   ro   rp   rq   r’   r”   s   @r$   r¿   r¿     so   ø„ ð BFØ#(ð6aà#ð6að "ð6að ð	6að
 ð6að ð6að .?ð6að !ð6að 
õ6a÷p
r&   r¿   c                  óT   ‡ — e Zd Z	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚConstrainedLogEHVIc
                ób  •— t        |«      t        |«      k(  r|sJ ‚|�t        |||||||	«      nd | _        t        ||«      D �
�cg c]  \  }
}t	        |
||||	«      ‘Œ c}}
| _        t        ‰| �  t        j                  |D �cg c]  }|j                  ‘Œ c}d¬«      |«       y c c}}
w c c}w )Nr   rÃ   )r®   r¿   r¯   r°   r–   r±   r�   rY   r   rN   rV   )rX   rÔ   rW   Ú
Y_feasiblerÕ   rÖ   r²   r³   r„   r…   r{   r}   r‚   r‰   s                €r$   rY   zConstrainedLogEHVI.__init__b  sÐ   ø€ ô Ð$Ó%¬Ð-GÓ)HÒHÑMað	
Øað Ð%ô ØØØØØØ3Ø!ôð ð 	Œ
ô* %(Ð(<Ð>XÓ$Y÷	'
ñ !��jô ØØØØ3Ø!õó	'
ˆÔ#ô 	‰ÑœŸ™¸xÖ!H¸ #×"3Ó"3Ò!HÈqÔQÐS_Õ`ùó	'
ùò "Is   ÁB&ÂB,c                ó¬   ‡— t        ˆfd„| j                  D «       «      }| j                  €t        d|«      S || j                  j	                  ‰«      z   S )Nc              3  ó@   •K  — | ]  }|j                  ‰«      –— Œ y ­wrL   r¶   r·   s     €r$   rº   z/ConstrainedLogEHVI.eval_acqf.<locals>.<genexpr>�  s   øè ø€ Ò%`¸D d§n¡n°Q×&7Ñ%`ùr»   rr   )r5   r±   r¯   r   r^   )rX   r]   Úconstraints_acqf_valuess    ` r$   r^   zConstrainedLogEHVI.eval_acqfŽ  sL   ø€ Ü"%Ó%`ÀD×D_ÑD_Ô%`Ó"`ÐØ�:‰:ÐÜ˜Ð(?Ó@Ð@Ø&¨¯©×)=Ñ)=¸aÓ)@Ñ@Ð@r&   r�   )rÔ   r¼   rW   r   rã   ztorch.Tensor | NonerÕ   rÞ   rÖ   rß   r²   r¼   r³   r½   r„   r‘   r…   r   ro   rp   rq   r’   r”   s   @r$   rá   rá   a  s†   ø„ ð BFØ#(ð*aà#ð*að "ð*að (ð	*að
 ð*að ð*að 0ð*að %0ð*að .?ð*að !ð*að 
õ*a÷XAr&   rá   )r    rÞ   r!   rÞ   r   rß   ro   rr   )r6   rr   r7   rr   r8   rr   ro   rr   )rE   rr   ro   rr   )rN   rr   rO   rr   rP   r   ro   rr   )*Ú
__future__r   Úabcr   r   ÚmathÚtypingr   r   rc   r   Úoptuna._hypervolumer   Úoptuna.study._multi_objectiver	   r   Úoptuna._gp.gpr
   Úoptuna._gp.search_spacer   Úoptuna._importsr   r   r>   Úpir@   rC   r-   rB   r2   r%   r;   rJ   rR   rT   rx   r–   r›   r¨   r¬   r¿   rá   rv   r&   r$   ú<module>rñ      sX  ðÝ "å Ý Û Ý Ý  ã å <Ý :ñ Ûå)Þ3å+á˜Ó €Eð ˆT�Y‰Y�s‹^€
Ø�I�D—I‘I˜a $§'¡'™kÓ*Ñ*€Ø�—	‘	˜# §¡™-Ó(€Ø�—‘˜˜Ÿ™ 1 t§w¡w¡;Ó/Ó0€Ø€ó	5ð]Øð]à$0ð]ð ".ð]ð ó	]ó(ó2Nô
:˜#ô :ô*-
Ðô -
ô`'HÐô 'HôT3Ð
ô 3ô 3Ð
ô 3ô "
Ð*ô "
ôJK
Ð!ô K
ô\1AÐ,õ 1Ar&   