
    (^i2                       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        P/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/optuna/_gp/acqf.py_sample_from_normal_sobolr%   !   sm     %%114 2 
d9EMMd*  ]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 )Nr   )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    
 bffV\\"%567 B"@@DKKELLU]];A\K] ==""488:>>b>#9x"HK\\\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   ig      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	emm00*qAA7Q;



-	.	ce  q3w&e((//1 7A:=7*U]]-@-@*wAV-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"21"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    vv{{##A&55d;nnX&xxz8==//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                  >     e Zd Z	 d	 	 	 	 	 	 	 	 	 d fdZddZ xZS )LogEIc                d    || _         || _        || _        t        |   |j
                  |       y rL   _gpr_stabilizing_noise
_thresholdsuperrY   rV   rX   gprrW   	thresholdstabilizing_noise	__class__s        r$   rY   zLogEI.__init__u   0     	"3#**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    II''*	c
 ;;t/ tt'>'>!>4??S	
 QWWSb\?	
r&   r   
r   r
   rW   r   r   r   r   r   ro   rp   rq   rs   rt   ru   rY   r^   __classcell__r   s   @r$   rx   rx   t   sB     $)
:
: "
: 	
:
 !
: 

:
r&   rx   c                  >     e Zd Z	 d	 	 	 	 	 	 	 	 	 d fdZddZ xZS )LogPIc                d    || _         || _        || _        t        |   |j
                  |       y rL   rz   r   s        r$   rY   zLogPI.__init__   r   r&   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     II''*	c

3!8!889}}%%tdoo'=&FGGr&   r   r   rq   r   r   s   @r$   r   r      sC     $)
:
: "
: 	
:
 !
: 

: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    II''*	cejj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                  F     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   s
            r$   rY   zConstrainedLogEI.__init__   s     $%-G)HHMa	
a3i9JK
 %((<>X$Y'
 j $j2CD'
# 	**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      -
"&DNN1-
   )r   r^   r5   r   r\   s    `r$   r^   zConstrainedLogEI.eval_acqf   s;     zz##A& -
*.*E*E-
 *
 
 	
r&   r   )r   r
   rW   r   r   r   r   list[GPRegressor]r   list[float]r   r   ro   rp   rq   r   r   s   @r$   r   r      sV     $):: ": 	:
 0: %0: !: 
:&
r&   r   c                  F     e Zd Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZddZ xZS )LogEHVIc                `   dfd}|| _         || _        t        j                  d   ||      | _         |       \  | _        }|| j
                  z
  j                  t              | _        t        
| )  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#$4YX]$^_Kyq1IRZZiy%QSUSYSYZI3KKHC##SD)5+;+;SD+AAAr&   r+   )r    r!   r   r   r   )ro   z!tuple[torch.Tensor, torch.Tensor])r|   	_gpr_listr%   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   non_dominated_box_upper_boundsr   r   s      `      r$   rY   zLogEHVI.__init__   s    	B #4!7b!]
 *+ 	M,.L +T-Q-QQ
*T
 	) 	x!H#"3"3!HqQS_`!Hs   	B+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_acqf  s    / 	\FAsa(ID#JJsT%<%<<=E
 MM$y/E),<t?R?RSVXYSY?Z,ZZ[	\ ;;v2.+/+O+O(,(I(I
 	
r&   r   )r   r   rW   r   r   rr   r   intr   
int | Noner   r   ro   rp   rq   r   r   s   @r$   r   r      s_     $)"a#"a ""a 	"a
 "a "a !"a 
"aH
r&   r   c                  N     e Zd Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZddZ xZS )ConstrainedLogEHVIc	           
     ^   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   s               r$   rY   zConstrainedLogEHVI.__init__  s     $%-G)HHMa	
a % HlJxQbc 	
 %((<>X$Y'
 j $j2CD'
# 	x!H#"3"3!HqQS_`'
 "Is   B$B*c                    t        fd| j                  D              }| j                  t        t        j
                  |      S || j                  j                        z   S )Nc              3  @   K   | ]  }|j                          y wrL   r   r   s     r$   r   z/ConstrainedLogEHVI.eval_acqf.<locals>.<genexpr>8  s     %`DdnnQ&7%`r   )r5   r   r   r   r   Tensorr^   )rX   r]   constraints_acqf_valuess    ` r$   r^   zConstrainedLogEHVI.eval_acqf7  sP    "%%`DD_D_%`"`::&=>>&)=)=a)@@@r&   r   )r   r   rW   r   r   ztorch.Tensor | Noner   r   r   r   r   r   r   r   r   r   ro   rp   rq   r   r   s   @r$   r   r     su     $)a#a "a (	a
 a a 0a %0a !a 
a: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      sS   "        < : )3+ E TYYs^
IDIIa$''k**		#-(1tww;/0	5]]$0] ".] 	](2N
:# :*
 
0H H.3
 3 3
 3 
* 
87
! 7
t"A, "Ar&   