
    -ji1                       S SK Jr  S SKJr  S SKrS SKJr  S SKJ	r	  \" 5        r
S SKJr  SSS5        \(       a  S SKJr  S SKJr  S SKJr  OS S	KJr  \" S
5      r\
R)                  5       (       d  \	" \5      r\R/                  S5                              SS jr        S                     SS jjrg! , (       d  f       N= f)    )annotations)TYPE_CHECKINGN)
try_import)
get_logger)greenlet)Callable)Any)_LazyImportzscipy.optimizez}The 'greenlet' package is unavailable, falling back to sequential L-BFGS-B optimization. This may lead to slower suggestions.c
                  ^^^^^^^^^	^^^ TR                   S:X  d   e[        T5      n
[        R                  " T5      m[        R                  " U
[
        S9m[        R                  " U
[        S9mSUUUUUUUU	UUUU4S jjn[        U
5       Vs/ s H  n[        U5      PM     nn[        U5       VVs/ s H  u  pUR                  U5      PM     nnn[        R                  " U VVs/ s H  u  nnUc  M  UPM     snn5      n[        [        U VVs/ s H  u  nnUc  M  UPM     snn6 5      mUR                  (       a  U " U/TQ76 u  nn[        U5       VVs/ s H  u  pUR                  UU   UU   5      PM     nnn[        R                  " U VVs/ s H  u  nnUc  M  UPM     snn5      n[        [        U VVs/ s H  u  nnUc  M  UPM     snn6 5      m[        UU5       VVVs/ s H  u  u  npUc  M  UPM     nnnnUR                  (       a  M  TTT4$ s  snf s  snnf s  snnf s  snnf s  snnf s  snnf s  snnf s  snnnf )N   dtypec                   >^  SS jn[         R                  " UTT    [        U 4S jT 5       5      TT	TTT
TTS9
u  p#nUTT '   UTT '   US   TT '   [        R                  " 5       R
                  R                  S S 5        g )Nc                    [         R                  " 5       R                  R                  X5      u  p#[	        U5      UR                  5       4$ N)r   
getcurrentparentswitchfloatcopy)xargsfvalgrads       S/home/james-whalen/.local/lib/python3.13/site-packages/optuna/_gp/batched_lbfgsb.py_func_and_grad4_batched_lbfgsb.<locals>.run.<locals>._func_and_grad5   s8    !,,.55<<QEJD;		++    c              3  ,   >#    U  H	  oT   v   M     g 7fr    .0argis     r   	<genexpr>/_batched_lbfgsb.<locals>.run.<locals>.<genexpr>=   s     6#1v   
funcx0r   boundsmfactrpgtolmaxfunmaxitermaxlsnit)r   
np.ndarrayr   r	   returntuple[float, np.ndarray])sofmin_l_bfgs_btupler   r   r   r   )r$   r   x_optfval_optinfobatched_argsr+   r-   	fvals_optr,   	max_evals	max_itersmax_line_searchn_iterationsr.   
x0_batchedxs_opts   `    r   run_batched_lbfgsb.<locals>.run4   s    	,
 !# 0 0!}666!!
 q		!u+Q$$++D$7r   )r$   intr4   None)ndimlennp
empty_likeemptyr   rF   ranger   	enumerater   arrayr8   zipsize)func_and_gradrB   r<   r+   r,   r-   r.   r>   r?   r@   
batch_sizerD   _	greenletsr$   glx_and_args_listr   	x_batchedr   fvalsgradsr=   rA   rC   s    `````````            @@@r   _batched_lbfgsbr[   "   s    ??aZJ]]:&F51I88Jc2L8 8 8. ).j(9:(91#(9I:1:91EF1Eryy|1EOFI11!IJI?W?4dt?WXYL
..$Y>>uFOPYFZ[FZUQ299U1XuQx8FZ[HHOMODAqqaOMN	S"[GAt$4"[\]*-oy*I[*IJFQQR*I	[ ... 9l** ;FIW \M"[[sN   H%7H*,
H0
:H0

H6%H6$H<
I
)I

II3IIc
                &  ^ ^ UR                   u  p[        U5       H.  u  p[        U5      U
:X  a  M   SU SU
 S[        U5       S35       e   Ub?  [        R                   " U5      US4:X  d#   SU< S[        R                   " U5       S35       e[        R                  5       (       a%  [        U5      S:  a  [        T UUUUUUUUU	S	9
u  pnOSU 4S
 jjn[        R                  " U5      n[        R                  " UR                   S   [        S9n[        R                  " UR                   S   [        S9n[        U5       HH  u  mn[        R                  " UU[        U4S jU 5       5      UUUUUUU	S9
u  UT'   UT'   nUS   UT'   MJ     XU4$ )a  
Batched L-BFGS-B optimization with/without greenlet.
- `func_and_grad` is expected to take a 2D array as the first argument and return a tuple of
  a 1D array of function values and a 2D array of gradients.
- `x0_batched` is a 2D array where each row is an initial point for optimization.
- `batched_args` is a tuple of additional arguments to pass to `func_and_grad`. e.g., if
  `batched_args` is `([alpha1, ..., alphaB], [beta1, ..., betaB])`, then
  `func_and_grad` is called by
  `func_and_grad(x0_batched, [alpha1, ..., alphaB], [beta1, ..., betaB])`. Note that each
  argument in `batched_args` is expected to be a list of length `B` (batch size).
zbatched_args[z] must have length z
, but got .r   z!The shape of bounds must be (dim=z, 2), but got    )
rR   rB   r<   r+   r,   r-   r.   r>   r?   r@   c                   > U R                   S:X  d   eS U 5       nU S S S 24   nT" U/UQ76 u  pEUR                  5       US   R                  5       4$ )Nr^   c              3  &   #    U  H  o/v   M	     g 7fr   r    )r"   r#   s     r   r%   Abatched_lbfgsb.<locals>._func_and_grad_wrapper.<locals>.<genexpr>   s     0us   r   )rH   itemr   )x_1dargs_1dargs_2dx_2dr   r   rR   s         r   _func_and_grad_wrapper.batched_lbfgsb.<locals>._func_and_grad_wrapper   sV    99>!>00Ga=D&t6g6JD99;Q..r   r   r   c              3  ,   >#    U  H	  oT   v   M     g 7fr   r    r!   s     r   r%   !batched_lbfgsb.<locals>.<genexpr>   s     :\cq6\r'   r(   r2   )rc   r3   rd   r	   r4   r5   )shaperN   rI   rJ   _greenlet_importsis_successfulr[   rK   rL   r   rF   r6   r7   r8   )rR   rB   r<   r+   r,   r-   r.   r>   r?   r@   rS   dimjr#   rC   r=   rA   rg   r*   r;   r$   s   `                   @r   batched_lbfgsbrp   Y   s   . !&&OJL)3x:% 	
A31*ZCzQRS	
% * >RXXf-	2  O 
,sfN288F;K:LANO 
 &&((S_q-@*9'!%++
'< 	/ z*HHZ--a0>	xx
 0 0 33?z*EAr,.,<,<+:\:: !%-)F1Iy|T #5kLO + l**r   )rR   ,Callable[..., tuple[np.ndarray, np.ndarray]]rB   r3   r<   ztuple[Any, ...]r+    list[tuple[float, float]] | Noner,   rF   r-   r   r.   r   r>   rF   r?   rF   r@   rF   r4   )tuple[np.ndarray, np.ndarray, np.ndarray])r    N
   g    cAgh㈵>:  ru      )rR   rq   rB   r3   r<   ztuple[list[Any], ...]r+   rr   r,   rF   r-   r   r.   r   r>   rF   r?   rF   r@   rF   r4   rs   )
__future__r   typingr   numpyrJ   optuna._importsr   optuna.loggingr   rl   r   collections.abcr   r	   scipy.optimizeoptimizer6   optunar
   rm   __name___loggerwarningr[   rp   r    r   r   <module>r      s~   "    & % \&!  ( #	%	&B &&(("GOO	/4+?4+4+ "4+ -	4+
 4+ 4+ 4+ 4+ 4+ 4+ /4+t +-/3O+?O+O+ (O+ -	O+
 O+ O+ O+ O+ O+ O+ /O+] \s   C		
C