
    (^i1                       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       5 Z
d dlmZ ddd       erd dlmZ d dlmZ d dlmZ nd d	lmZ  ed
      Ze
j)                         s e	e      Zej/                  d       	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZy# 1 sw Y   xY w)    )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
                R  	 j                   dk(  sJ t              }
t        j                        t        j                  |
t
              t        j                  |
t              d	fd}t        |
      D cg c]  }t        |       }}t        |      D cg c]  \  }}|j                  |       }}}t        j                  |D cg c]
  \  }}|	| c}}      }t        t        |D cg c]
  \  }}|	| c}}       |j                  r | |g \  }}t        |      D cg c]  \  }}|j                  ||   ||          }}}t        j                  |D cg c]
  \  }}|	| c}}      }t        t        |D cg c]
  \  }}|	| c}}       t        ||      D cg c]  \  \  }}}|| }}}}|j                  rĉfS c c}w c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w c c}}}w )N   dtypec                     dd}t        j                  |    t         fdD              	

      \  }}}| <   | <   |d    <   t        j                         j
                  j                  d d        y )Nc                    t        j                         j                  j                  | |      \  }}t	        |      |j                         fS N)r   
getcurrentparentswitchfloatcopy)xargsfvalgrads       Z/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/optuna/_gp/batched_lbfgsb.py_func_and_gradz4_batched_lbfgsb.<locals>.run.<locals>._func_and_grad5   s<    !,,.55<<QEJD$;		++    c              3  (   K   | ]	  }|     y wr    .0argis     r   	<genexpr>z/_batched_lbfgsb.<locals>.run.<locals>.<genexpr>=   s     6#s1v6   
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   runz_batched_lbfgsb.<locals>.run4   s    	,
 !# 0 0!}666!!
x q		!u+Q$$++D$7r   )r#   intr2   None)ndimlennp
empty_likeemptyr   rC   ranger   	enumerater   arrayr6   zipsize)func_and_gradr@   r:   r)   r*   r+   r,   r<   r=   r>   
batch_sizerB   _	greenletsr#   glx_and_args_listr   	x_batchedr   fvalsgradsr;   r?   rA   s    `````````            @@@r   _batched_lbfgsbrX   "   s    ??aZJ]]:&F51I88Jc2L8 8 8. ).j(9:1#:I:1:91EF2ryy|FOFI11=!IJI?W4dFVtWXYL
..$Y>>uFOPYFZ[UQ299U1XuQx8[[HHOMDAqq}aMN	S"[GAt$JZ4"[\]*-oy*I[[JFQBQ]R[	[ .. 9l** ;FIW \M"[[sN   G94G>&
H
1H

H
H

"H
H
H
)
H4HH"H"c
                    |j                   \  }
}t        |      D ]-  \  }}t        |      |
k(  rJ d| d|
 dt        |       d        |;t        j                   |      |dfk(  s!J d|dt        j                   |       d       t        j                         r(t        |      dkD  rt         |||||||||		
      \  }}}nd fd
}t        j                  |      }t        j                  |j                   d   t              }t        j                  |j                   d   t              }t        |      D ]H  \  }t        j                  ||t        fd|D              |||||||	
      \  |<   |<   }|d   |<   J |||fS )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    )
rO   r@   r:   r)   r*   r+   r,   r<   r=   r>   c                    | j                   dk(  sJ d |D        }| d d d f   } |g| \  }}|j                         |d   j                         fS )Nr[   c              3  "   K   | ]  }|g 	 y wr   r   )r!   r"   s     r   r$   zAbatched_lbfgsb.<locals>._func_and_grad_wrapper.<locals>.<genexpr>   s     0u0s   r   )rE   itemr   )x_1dargs_1dargs_2dx_2dr   r   rO   s         r   _func_and_grad_wrapperz.batched_lbfgsb.<locals>._func_and_grad_wrapper   sX    99>!>00Ga=D&t6g6JD$99;Q..r   r   r   c              3  (   K   | ]	  }|     y wr   r   r    s     r   r$   z!batched_lbfgsb.<locals>.<genexpr>   s     :c3q6:r%   r&   r0   )r_   r1   r`   r	   r2   r3   )shaperK   rF   rG   _greenlet_importsis_successfulrX   rH   rI   r   rC   r4   r5   r6   )rO   r@   r:   r)   r*   r+   r,   r<   r=   r>   rP   dimjr"   rA   r;   r?   rc   r(   r9   r#   s   `                   @r   batched_lbfgsbrj   Y   s   . !&&OJL) S3H
"	S1#0Js3xjPQR	S"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	* 9l**r   )rO   ,Callable[..., tuple[np.ndarray, np.ndarray]]r@   r1   r:   ztuple[Any, ...]r)    list[tuple[float, float]] | Noner*   rC   r+   r   r,   r   r<   rC   r=   rC   r>   rC   r2   )tuple[np.ndarray, np.ndarray, np.ndarray])r   N
   g    cAgh㈵>:  ro      )rO   rk   r@   r1   r:   ztuple[list[Any], ...]r)   rl   r*   rC   r+   r   r,   r   r<   rC   r=   rC   r>   rC   r2   rm   )
__future__r   typingr   numpyrG   optuna._importsr   optuna.loggingr   rf   r   collections.abcr   r	   scipy.optimizeoptimizer4   optunar
   rg   __name___loggerwarningrX   rj   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   B<<C