
    !#h-                       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 e	rd dlmZ d dlZnd dlmZ  ed	      Z ed
      Z ee      ZddZ G d dej0                  j2                        ZddZ ed       G d d             Z	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZ 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ!	 	 d 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d!dZ"y)"    )annotations)Callable)	dataclassN)Any)TYPE_CHECKING)
get_logger)_LazyImportzscipy.optimizetorchc                   t        j                  |       }t        j                  |      r| S t        j                  d       t        j
                  |d      }t        j                  | t        j                  |t        j                  t        j                  || t         j                        d      d      t        j                  |t        j                  t        j                  || t         j                         d      d            S )NzDClip non-finite values to the min/max finite values for GP fittings.r   )axis        )npisfiniteallwarningswarnanyclipwheremininfmax)valuesis_values_finiteis_any_finites      J/var/www/html/sandstorm/venv/lib/python3.12/site-packages/optuna/_gp/gp.pywarn_and_convert_infr   (   s    {{6*	vvMMXYFF+!4M 77
rxx0@&"&&'QXY Z\_`
rxx0@&266''RYZ []`a     c                  0    e Zd Zedd       Zedd       Zy)Matern52Kernelc                    t        j                  d|z        }t        j                  |       }|d|z  |z   dz   z  }d|dz   z  |z  }| j                  |       |S )N   g?   g)r
   sqrtexpsave_for_backward)ctxsquared_distancesqrt5dexp_partvalderivs         r   forwardzMatern52Kernel.forward9   sf    A 00199fW%5$44v=ABFQJ'(2e$
r   c                (    | j                   \  }||z  S N)saved_tensors)r'   gradr,   s      r   backwardzMatern52Kernel.backwardC   s     $$t|r   N)r'   r   r(   torch.Tensorreturnr3   )r'   r   r1   r3   r4   r3   )__name__
__module____qualname__staticmethodr-   r2    r   r   r    r    8   s(       r   r    c                ,    t         j                  |       S r/   )r    apply)r(   s    r   %matern52_kernel_from_squared_distancer<   K   s      011r   T)frozenc                  ,    e Zd ZU ded<   ded<   ded<   y)KernelParamsTensorr3   inverse_squared_lengthscaleskernel_scale	noise_varN)r5   r6   r7   __annotations__r9   r   r   r?   r?   T   s     #/.r   r?   c                   |dd d d d d f   |dd d d d d f   z
  dz  }|d| f   dkD  j                  t        j                        |d| f<   ||j                  z  j	                  d      }t        |      |j                  z  S )N.   r   dim)typer
   float64r@   sumr<   rA   )is_categoricalkernel_paramsX1X2d2s        r   kernelrQ   \   s     S!T1_
3a? 3
3	9B  "#~"56<BB5==QBsN
}99
9	>	>2	>	FB04}7Q7QQQr   c                    | j                   S r/   )rA   )rM   s    r   kernel_at_zero_distancerS   p   s     %%%r   c           	         t        || |dd d d f   |      ddd d f   }t        |       }||z  }||||z  z  j                  d      z
  }	|t        j                  |	d      fS )N.r   rF   rG   r   )r   )rQ   rS   rK   r
   clamp)
rM   XrL   cov_Y_Y_invcov_Y_Y_inv_Yx	cov_fx_fX	cov_fx_fxmeanvars
             r   	posteriorr^   w   sx     ~}aT1oqI#qRS)TI'6I }$D
yI$;<AAbAI
IC%++cs+,,r   c                2   t        ||| |       }t        j                  j                  ||j                  t        j
                  | j                  d   t        j                        z  z         }dt        j                  t        j                  |            j                         z  }t        j                  j                  ||d d d f   d      d d df   }d|| j                  d   t        j                  dt        j                  z        z  z   ||z  z   z  S )Nr   dtyperE   F)upperg      )rQ   r
   linalgcholeskyrB   eyeshaperJ   logdiagrK   solve_triangularmathpi)rV   YrL   rM   	cov_fX_fXcov_Y_Y_chollogdetcov_Y_Y_chol_inv_Ys           r   marginal_log_likelihoodrq      s     ~}a;I<<((M++eii
%--.XXXL 5::l3488::F66|Qq$wZW\6]^_ab^bc
''!*txxDGG,
,	-  22	4 r   c           
     ^     j                   d   t        j                  t        j                  |j                  j                         j                               t        j                  |j                  j                               t        j                  |j                  j                         dz  z
        gg      }d fd}	t        j                  |	|ddd|i      }
|
j                  st        d|
j                         t        j                   |
j"                        }t%        t        j&                  |d        t        j&                  |         r%t        j(                  t        j*                  	      nt        j&                  |dz            z   
      }
|
S )Nr#   gGz?c           
        t        j                  |       }|j                  d       t        j                         5  t	        t        j
                  |d        t        j
                  |         r%t        j                  
t         j                        nt        j
                  |dz            
z         }t        t        j                        t        j                        t        j                        |        	|      z
  }|j                          |j                  dz      }r|dk(  sJ d d d        j                         |j                  j                         j                         fS # 1 sw Y   AxY w)NTr`   r#   r@   rA   rB   r   )r
   
from_numpyrequires_grad_enable_gradr?   r%   tensorrJ   rq   r2   r1   itemdetachnumpy)
raw_paramsraw_params_tensorparamslossraw_noise_var_gradrV   rl   deterministic_objectiverL   	log_priorminimum_noisen_paramss        r   	loss_funcz%_fit_kernel_params.<locals>.loss_func   sQ   !,,Z8((.  	J'-2YY7H(7S-T"YY'8'BC / LLemmD#4X\#BCmSF ,  #U%5%5a%8%:J:J>:Z\b &!"D MMO!2!7!71!E.2D2III!	J" yy{-2299;AACCC#	J 	Js   C:E66E?Tzl-bfgs-bgtol)jacmethodoptionszOptimization failed: r`   rt   )r|   
np.ndarrayr4   ztuple[float, np.ndarray])rf   r   concatenaterg   r@   rz   r{   rA   ry   rB   sominimizesuccessRuntimeErrormessager
   ru   rY   r?   r%   rx   rJ   )rV   rl   rL   r   r   r   initial_kernel_paramsr   initial_raw_paramsr   resraw_params_opt_tensorr   s   ``````      @r   _fit_kernel_paramsr      sc    wwqzH FF(EELLNTTVW,99>>@A,66;;=}@TTU	
	D D. ++C ;;23;;-@AA!,,SUU3
%*YY/DYh/O%PYY4X>? ' LLemm<+@A+N!OOC Jr   c                   t        t        j                  | j                  d   t        j                        t        j
                  dt        j                        t        j
                  dt        j                              }||}d }	||fD ]  }
	 t        | |||||
||      c S  t        j                  d|	 d       |S # t        $ r}|}	Y d }~Ed }~ww xY w)Nr#   r`   g      ?rt   )rV   rl   rL   r   r   r   r   r   z+The optimization of kernel_params failed: 
z8
The default initial kernel params will be used instead.)
r?   r
   onesrf   rJ   rx   r   r   loggerwarning)rV   rl   rL   r   r   r   r   r   default_initial_kernel_paramserrorinit_kernel_paramses               r   fit_kernel_paramsr      s     %7%*ZZ
%--%P\\#U]];,,s%--8%!
 $ =E  56ST 	%-#+&8(?	 	 NN
6ug >B 	B )(  	E	s   C	CCC)r   r   r4   r   )r(   r3   r4   r3   )
rL   r3   rM   r?   rN   r3   rO   r3   r4   r3   )rM   r?   r4   r3   )rM   r?   rV   r3   rL   r3   rW   r3   rX   r3   rY   r3   r4   z!tuple[torch.Tensor, torch.Tensor])
rV   r3   rl   r3   rL   r3   rM   r?   r4   r3   )rV   r   rl   r   rL   r   r   ,Callable[[KernelParamsTensor], torch.Tensor]r   floatr   boolr   r?   r   r   r4   r?   )Ng{Gz?)rV   r   rl   r   rL   r   r   r   r   r   r   r   r   zKernelParamsTensor | Noner   r   r4   r?   )#
__future__r   collections.abcr   dataclassesr   rj   typingr   r   r   r{   r   optuna.loggingr   scipy.optimizeoptimizer   r
   optuna._importsr	   r5   r   r   autogradFunctionr    r<   r?   rQ   rS   r^   rq   r   r   r9   r   r   <module>r      s   " $ !       % +	%	&B E	H	  U^^,, &2 $  R R%R 	R 		R
 R(&%&&-%-- !- 	-
  - - '-& ! &	
 4III I <	I
 I "I .I I If 8<)))))) )) <	))
 )) ")) 5)) )) ))r   