
    e!h                       d Z ddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZmZmZ ddlZddlmZ ddlZddlmZ ddlmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 ejp                  jr                  Z9d Z: G d d      Z; G d de;      Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCejp                  j                  d        ZEejp                  j                  d        ZFd  ZG G d! d"e<      ZH G d# d$e<      ZI G d% d&e<      ZJ G d' d(e<      ZK G d) d*e;      ZLejp                  j                  d+g d,      d-        ZN G d. d/      ZO G d0 d1      ZP G d2 d3      ZQd4 ZR G d5 d6      ZSd7 ZTd8 ZUd9 ZVd: ZWd; ZXe4 G d< d=             ZYd> ZZd? Z[d@ Z\dAdBgZ]dCdDgZ^dEZ_dF Z` G dG dH      ZadI ZbdJ ZcdK ZddL Ze G dM dN      Zfejp                  j                  ejp                  j                  dO      dP               Zh G dQ dR      ZidS Zj G dT dU      Zkej                  dV        ZmdW ZndX ZodY ZpdZ Zqd[ Zr er       Zsejp                  j                  d\      ejp                  j                   ej                  d]^      d_   d`   da   dbk(  d\c      ejp                  j                  d+esdd         ejp                  j                  deesde         ejp                  j                  dfesdg         ejp                  j                  dhesdh         ejp                  j                  diesdj         dk                                                  Zwejp                  j                  d+esdd         dl        Zxdm Zydn Zzdo Z{dp Z| G dq dr      Z}ds Z~dt Zejp                  j                  d+dudvg      ejp                  j                  dwe-e.e/e0e1e2g      dx               Zy)yzx
Unit tests for optimization routines from optimize.py

Authors:
   Ed Schofield, Nov 2005
   Andrew Straw, April 2008

    N)assert_allcloseassert_equalassert_almost_equalassert_no_warningsassert_warnsassert_array_lesssuppress_warnings)raises)optimize)BoundsNonlinearConstraint)MINIMIZE_METHODSMINIMIZE_METHODS_NEW_CBMINIMIZE_SCALAR_METHODS)LINPROG_METHODS)ROOT_METHODS)ROOT_SCALAR_METHODS)QUADRATIC_ASSIGNMENT_METHODS)ScalarFunction
FD_METHODS)
MemoizeJacshow_optionsOptimizeResult)rosen	rosen_der
rosen_hess)
coo_matrix
csc_matrix
csr_matrix	coo_array	csr_array	csc_array)array_api_compatible)xp_assert_equalarray_namespacec            
      B   d } d }t        j                  dg      }t        j                  | ||      }t	        |d       t        j                  | ||dd      }t	        |d       t        j                  | ||d	      }t	        |d       t        j                  | ||ddd
      }t	        |d       t        t        j                  | ||d	      dz
        }|dkD  sJ t        t        j                  | ||ddd
      dz
        }|dkD  sJ d }d }t        j                  ddd      }t        j                  |||dd      }t	        |d       t        t        t        j                  |||dd       t        j                  t        t        t        dd      }|dk  sJ y )Nc                 :    ddt        j                  |        z   z  S N   npexpxs    j/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/optimize/tests/test_optimize.pyexpitztest_check_grad.<locals>.expit.   s    Ar
N##    c                 h    t        j                  |        dt        j                  |        z   dz  z  S Nr)      r*   r-   s    r/   	der_expitz"test_check_grad.<locals>.der_expit1   s*    vvqbzQ^a///r1         ?r   random  )	directionseedư>)epsilon)r<   r9   rng皙?Hz>c                 N    | t        j                  |       z  j                         S N)r+   sinsumr-   s    r/   x_sinxztest_check_grad.<locals>.x_sinxJ   s    "&&)  ""r1   c                 ^    t        j                  |       | t        j                  |       z  z   S rA   r+   rB   cosr-   s    r/   
der_x_sinxz#test_check_grad.<locals>.der_x_sinxM   s!    vvay1RVVAY;&&r1   r4   皙?)r9   r=   random_projectionallgƠ>)r+   arrayr   
check_gradr   absarangeassert_raises
ValueErrorhimmelblau_gradhimmelblau_hesshimmelblau_x0)r0   r5   x0rrD   rH   s         r/   test_check_gradrW   *   s   $0 
3%BE9b1A1E9b&.T	;A1E9b$?A1E9b$&.D	:A1 	Hy"dCaGHAt8O8Hy"d*2>@AB 	CAt8O8#' 
1a	BFJ&.D	:A1*h11*b/T;
 	O_m&+	7At8O8r1   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)CheckOptimizez Base test case for a simple constrained entropy maximization problem
    (the machine translation example of Berger et al in
    Computational Linguistics, vol 22, num 1, pp 39--72, 1996.)
    c                    t        j                  g dg dg dg dg dg      | _        t        j                  g d      | _        t        j                  dt         j
                        | _        t        j                  g d      | _        d| _        t        j                         | _        t        j                         | _        t        j                         | _        y )	Nr)   r)   r)   )r)   r)   r   )r)   r   r)   )r)   r   r   )      ?333333?      ?   )        g\g)3?  )r+   rL   FKzerosfloat64startparamssolutionmaxiter	threadinglocal	funccalls	gradcallstraceselfs    r/   setup_methodzCheckOptimize.setup_methodf   s    9$$$$	& '
 .)88Arzz2!@A"*"*__&
r1   c                    t        | j                  d      sd| j                  _        t        | j                  d      sd| j                  _        | j                  xj                  dz  c_        | j                  j                  dkD  rt	        d      t        j                  | j                  |      }t        j                  t        t        j                  |                  }|t        j                  | j                  |      z
  }t        | j                  d      sg | j                  _        | j                  j                  j                  t        j                  |             |S )Ncr   r)   ip  z+too many iterations in optimization routinet)hasattrrk   rr   rl   RuntimeErrorr+   dotrb   logrC   r,   rc   rm   rs   appendcopy)ro   r.   log_pdotlogZfs        r/   funczCheckOptimize.funct   s    t~~s+ DNNt~~s+ DNNA>>d"LMM66$&&!$vvc"&&*+,266$&&!$$tzz3'DJJL

BGGAJ'r1   c                    t        | j                  d      sd| j                  _        | j                  xj                  dz  c_        t        j                  | j
                  |      }t        j                  t        t        j                  |                  }t        j                  ||z
        }t        j                  | j
                  j                         |      | j                  z
  S )Nrr   r   r)   )rt   rl   rr   r+   rv   rb   rw   rC   r,   	transposerc   ro   r.   rz   r{   ps        r/   gradzCheckOptimize.grad   s    t~~s+ DNNA66$&&!$vvc"&&*+,FF8d?#vvdff&&(!,tvv55r1   c                    t        j                  | j                  |      }t        j                  t	        t        j
                  |                  }t        j
                  ||z
        }t        j                  | j                  j                  t        j                  t        j                  |      | j                  t        j                  | j                  j                  |      z
              S rA   )r+   rv   rb   rw   rC   r,   Tdiagr   s        r/   hesszCheckOptimize.hess   s    66$&&!$vvc"&&*+,FF8d?#vvdffhhffRWWQZ"&&12E)EFH 	Hr1   c                 L    t        j                  | j                  |      |      S rA   )r+   rv   r   ro   r.   r   s      r/   hesspzCheckOptimize.hessp   s    vvdiilA&&r1   N)	__name__
__module____qualname____doc__rp   r}   r   r   r    r1   r/   rY   rY   `   s!    
'$6H'r1   rY   c                   j   e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  d      d        Zd	 Zd
 Zd Ze	j                  j!                  ddgddgddgddgg      d        Zd Ze	j                  j'                  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Zd" Zy#)$CheckOptimizeParameterizedc           
      >   | j                   rp| j                  | j                  dd}t        j                  | j
                  | j                  dd| j                  |      }|d   |d   |d   |d	   |d
   f\  }}}}}nWt        j                  | j
                  | j                  | j                  d| j                  d| j                  d      }|\  }}}}}t        | j                  |      | j                  | j                        d       | j                  j                  dk(  sJ | j                  j                         | j                  j                  dk(  sJ | j                  j                         t        | j                  j                  dd g dg dgdd       y )NFrh   disp
return_allr   CG)argsmethodjacoptionsr.   funnfevnjevstatusT)rh   full_outputr   retallr;   atol	      r4      )r         r^   )r   g;ӱ.g)`$|;?+=r?   r   rtol)use_wrapperrh   r   r   minimizer}   rf   r   fmin_cgr   rg   rk   rr   rl   rm   rs   )	ro   optsresparamsfopt
func_calls
grad_callswarnflagretvals	            r/   test_cgz"CheckOptimizeParameterized.test_cg   sp   #||TYY"')D##DIIt/?/?b+/TYY,02C C#e*c&k3v;HM ;FD*j( %%dii1A1A&*iiT\\26TYY-24F @F<VT:z8		&)499T]]+C!	#
 ~~1$6dnn&6&66$~~1$6dnn&6&66$ 	

Qq)'=?"	/r1   c                     d }t        j                  ddd      D ]B  }t        j                  ||gd      }|j                  sJ t        |j                  dgd	       D y )
Nc                 J    ddt        j                  d| dz
  z        z
  dz  z  S )Ng      @r)         r^   r4   r*   )rV   s    r/   r|   z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.f   s(    !bffT1s7^44q888r1   g      r_   G   r   r   r^   h㈵>r   )r+   linspacer   r   successr   r.   )ro   r|   rU   sols       r/   test_cg_cornercasez-CheckOptimizeParameterized.test_cg_cornercase   sY    	9
 ++eQ+ 	5B##AtD9C;;;CEEC5t4	5r1   c           
      V   | j                   rz| j                  | j                  dd}t        j                  | j
                  | j                  | j                  dd|      }|d   |d   |d   |d	   |d
   |d   |d   f\  }}}}}}}	nYt        j                  | j
                  | j                  | j                  d| j                  d| j                  d      }
|
\  }}}}}}}	t        | j                  |      | j                  | j                        d       | j                  j                  dk(  sJ | j                  j                         | j                  j                  dk(  sJ | j                  j                         t        | j                  j                  dd g dg dgdd       y )NFr   BFGSr   r   r   r   r   r.   r   r   hess_invr   r   r   Tr   rh   r   r   r   r;   r   
         )r   g&/LgB__E7?)r   g$g
|3?r   r?   r   )r   rh   r   r   r   r}   rf   r   	fmin_bfgsr   rg   rk   rr   rl   rm   rs   )ro   r   r   r   r   goptHoptr   r   r   r   s              r/   	test_bfgsz$CheckOptimizeParameterized.test_bfgs   s   #||TYY"')D##DIIt/?/?(,		&r,02C
 Hc%j#e*c*oKVc(mJ=FFD$j*h ''		43C3CTYY-/48tyy/46F
 28/VT4X		&)499T]]+C!	#
 ~~2%7t~~'7'77%~~1$6dnn&6&66$ 	

Qq)==?"	/r1   c                 (   t        j                  t        d      5  t        j                  g d      }| j
                  t        j                  d       d}t        j                  t        j                  |dd|       d d d        y # 1 sw Y   y xY w)	N+'hess_inv0' matrix isn't positive definite.matchg?ffffff?皙?ffffff?333333?   r   	hess_inv0r   r   rU   r   r   r   )
pytestr
   rQ   r+   rL   r   eyer   r   r   )ro   rU   r   s      r/   test_bfgs_hess_inv0_negz2CheckOptimizeParameterized.test_bfgs_hess_inv0_neg   sp     ]]: .0 1 	,34B IIRVVAYJ?DhnnF&*,		, 	, 	,s   A#BBc                 4   t        j                  t        d      5  t        j                  g d      }t        j
                  d      }d|d<   | j                  |d}t        j                  t        j                  |dd	|
       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   r   r   r   r   r   r   )
r   r
   rQ   r+   rL   r   r   r   r   r   )ro   rU   r   r   s       r/   test_bfgs_hess_inv0_semiposz6CheckOptimizeParameterized.test_bfgs_hess_inv0_semipos   s|     ]]: .0 1 	,34Bq	IIdO III>DhnnF&*,	, 	, 	,s   A)BBc                 `   t         j                  }t        j                  g d      }| j                  dt        j
                  d      z  d}t        j                  ||dd|      }t        j                  ||ddd| j                  i      }t        |j                  |j                  d	
       y )Nr   {Gz?r   r   r   r   r   r   r;   r   )	r   r   r+   rL   r   r   r   r   r   )ro   r   rU   r   r   res_trues         r/   test_bfgs_hess_inv0_sanityz5CheckOptimizeParameterized.test_bfgs_hess_inv0_sanity   s    nnXX/0		rvvay0@A6(,.$$SRR.4dii-@BD9r1   ignore::UserWarningc           	      f   d fd}dg}t        j                  d      5  | j                  r-d| j                  i}t	        j
                  ||dd|	      d
   }n#t	        j                  ||| j                        }t        j                   |            rJ 	 d d d        y # 1 sw Y   y xY w)Nc                 ,    t         j                  |  z   S rA   )r+   er-   s    r/   r}   z;CheckOptimizeParameterized.test_bfgs_infinite.<locals>.func  s    DDaRL= r1   c                      |        S rA   r   )r.   r}   s    r/   fprimez=CheckOptimizeParameterized.test_bfgs_infinite.<locals>.fprime  s    G8Or1   r   ignore)overr   r   r   r   r.   r   )r+   errstater   r   r   r   r   isfinite)ro   r   rU   r   r.   r}   s        @r/   test_bfgs_infinitez-CheckOptimizeParameterized.test_bfgs_infinite	  s    	!	S[[h' 	,		*%%dBF6+-t==@B &&tRdiiH{{47++++	, 	, 	,s   A:B''B0c                     g d}t        j                  t         j                  |dddi      }t        j                  t         j                  |dddi      }|j                  |j                  k7  sJ y )Nr   bfgsxrtolMbP?r   r   gtolr   r   r   nit)ro   rU   r   refs       r/   test_bfgs_xrtolz*CheckOptimizeParameterized.test_bfgs_xrtol  sa    & "6GT?L "6FD>Kww#''!!!r1   c                     g d}t        j                  t         j                  |dddi      }t        j                  t         j                  |dddi      }|j                  |j                  kD  sJ y )Ng$@g333334@g%@r   333333r   c1:0yE>r   r>   )r   r   r   r   )ro   rU   res_c1_small
res_c1_bigs       r/   test_bfgs_c1z'CheckOptimizeParameterized.test_bfgs_c1#  sg     +(()+FT4LR&&x~~')&4,P
   :??222r1   c                     g d}t        j                  t         j                  |dddi      }t        j                  t         j                  |dddi      }|j                  |j                  kD  sJ y )Nr   r   c2?r   r   r   )ro   rU   res_defaultres_mods       r/   test_bfgs_c2z'CheckOptimizeParameterized.test_bfgs_c2.  sc     '''(*6D":O##HNN$&vd|M,,,r1   r   r  r^   r4   皙r>   rI   c           	          t        j                  t        d      5  g d}t        j                  t        j
                  |d||d       d d d        y # 1 sw Y   y xY w)Nz'c1' and 'c2'r   r   cg)r   r  r   )r   r
   rQ   r   r   r   )ro   r   r  rU   s       r/   test_invalid_c1_c2z-CheckOptimizeParameterized.test_invalid_c1_c28  sL     ]]:_= 	<.Bhnnb-/r&:<	< 	< 	<s   /AAc           	         | j                   rj| j                  | j                  dd}t        j                  | j
                  | j                  dd|      }|d   |d   |d   |d	   |d
   |d   f\  }}}}}}nMt        j                  | j
                  | j                  d| j                  d| j                  d      }	|	\  }}}}}}t        | j                  |      | j                  | j                        d       t        |dd  | j                  dd  d       | j                  j                  dk  sJ | j                  j                         | j                  j                  dk(  sJ | j                  j                         y )NFr   r   Powellr   r   r   r.   r   direcr   r   r   Tr   r;   r   r)   h㈵>   r   )r   rh   r   r   r   r}   rf   fmin_powellr   rg   rk   rr   rl   
ro   r   r   r   r   r  numiterr   r   r   s
             r/   test_powellz&CheckOptimizeParameterized.test_powellA  sd   #||TYY"')D##DIIt/?/?b+3TCC Hc%j#g,E
KXB0>FD%*h ))$))T5E5E/14<<6:168F DJ@VT5':x		&)499T]]+C!	# 	qr
DMM!"$5DA ~~8+=T^^-=-==+~~1$6dnn&6&66$r1   zeThis part of test_powell fails on some platforms, but the solution returned by powell is still valid.reasonc           	         | j                   rj| j                  | j                  dd}t        j                  | j
                  | j                  dd|      }|d   |d   |d   |d	   |d
   |d   f\  }}}}}}nMt        j                  | j
                  | j                  d| j                  d| j                  d      }	|	\  }}}}}}t        | j                  dd g dg dg dg dg dgdd       y )NFr   r   r  r  r.   r   r  r   r   r   Tr   "   '   )病~W?f"Bܿg%?)r  r  g:&?)gSϼW?gf"Bg{år?)r  r  {år?)gB?r  r  r   r?   r   )
r   rh   r   r   r   r}   rf   r  r   rm   r  s
             r/   test_powell_gh14014z.CheckOptimizeParameterized.test_powell_gh14014c  s    #||TYY"')D##DIIt/?/?b+3TCC Hc%j#g,E
KXB0>FD%*h ))$))T5E5E/14<<6:168F DJ@VT5':x 	

2b)>>>>>	@
 #	/r1   c                 N   | j                   D cg c]#  }t        j                   t        j                  f% }}| j                  r| j                  | j
                  dd}t        j                  | j                  | j                   d|d|      }|d   |d   }}|| j                  j                  k(  sJ t        | j                  |      | j                  | j                        dd	
       | j                  j                  dk  sJ | j                  j                  dk(  sJ y y c c}w )NFr   r   r  )r   boundsr   r   r.   r   r;   r   r      r   )rf   r+   pir   rh   r   r   r   r}   rk   rr   r   rg   rl   )ro   _r  r   r   r   r   s          r/   test_powell_boundedz.CheckOptimizeParameterized.test_powell_bounded  s    ,0+;+;<aBEE6255/<<#||TYY"')D##DIIt/?/?b+1+3TCC #&c(CKJF!1!1111DIIf-tyy/G!%D2 >>##x///>>##q((('  =s   (D"c           	         | j                   re| j                  | j                  dd}t        j                  | j
                  | j                  dd|      }|d   |d   |d   |d	   |d
   f\  }}}}}nLt        j                  | j
                  | j                  d| j                  d| j                  d      }|\  }}}}}t        | j                  |      | j                  | j                        d       | j                  j                  dk(  sJ | j                  j                         | j                  j                  dk(  sJ | j                  j                         t        | j                  j                  dd g dg dgdd       y )NFr   r   Nelder-meadr  r.   r   r   r   r   Tr   r;   r      r   L   N   )g	dװ?g]fgt䝁?)gә ?g#=^goT?r   r?   r   )r   rh   r   r   r   r}   rf   fminr   rg   rk   rr   rl   rm   rs   )	ro   r   r   r   r   r  r   r   r   s	            r/   test_neldermeadz*CheckOptimizeParameterized.test_neldermead  sc   #||TYY"')D##DIIt/?/?b+8$HC Hc%j#e*c&kM;#7FD':x ]]499d.>.>(*DLL/3$))*/1F =C9VT7J		&)499T]]+C!	#
 ~~3&8(8(88&~~1$6dnn&6&66$ 	

R+=>@"	/r1   c           
         t        j                  d      }| j                  |d<   t        d      D ]  }||dz   |fxx   dz  cc<    | j                  rq| j
                  dd|d}t        j                  | j                  | j                  d	d
|      }|d   |d   |d   |d   |d   f\  }}}}}	t        |d   d   |d          nCt        j                  | j                  | j                  d	| j
                  ddd|      }
|
\  }}}}}	t        | j                  |      | j                  | j                        d       | j                  j                  dk(  sJ | j                  j                         | j                  j                  dk(  sJ | j                  j                         t        | j                  j                   dd g dg dgdd       y )N)r   r_   .r_   r)   r>   FTrh   r   r   initial_simplexr   r%  r  r.   r   r   r   r   allvecsr   r   rh   r   r   r   r-  r;   r   d   2   4   )gIt?g?'ΛTgx8?)gҢ_׆?goMg囎|52?r   r?   r   )r+   rd   rf   ranger   rh   r   r   r}   r   r)  rg   rk   rr   rl   rm   rs   )ro   simplexjr   r   r   r   r  r   r   r   s              r/   test_neldermead_initial_simplexz:CheckOptimizeParameterized.test_neldermead_initial_simplex  s   ((6"''q 	#AAaCFOs"O	# #||U"&7DD##DIIt/?/?b+8$HC;>s8;>u:;>u:;>v;;>x=	;J7FD':x
 C	N1-wqz:]]499d.>.>(*DLL/3%3:<F
 =C9VT7J		&)499T]]+C!	#
 ~~3&8(8(88&~~1$6dnn&6&66$ 	

R+==?"	/r1   c                 L   g }t        j                  d      }| j                  d d |d<   t        d      D ]  }||dz   |fxx   dz  cc<    |j	                  |       t        j                  d      }|j	                  |       |D ]  }| j
                  rJ| j                  dd|d}t        t        t        j                  | j                  | j                  d	d
|       Yt        t        t        j                  | j                  | j                  d	| j                  ddd|
        y )N)r_   r4   r4   .r)   r>   )r_   r_   Fr,  r   r%  r  Tr/  )r+   rd   rf   r3  rx   r   rh   rP   rQ   r   r   r}   r)  )ro   bad_simplicesr4  r5  r   s        r/   #test_neldermead_initial_simplex_badz>CheckOptimizeParameterized.test_neldermead_initial_simplex_bad  s   ((6"''+q 	#AAaCFOs"O	#W%((6"W%$ 	7G#'<<&+Ij&//"ii"..#%%2&*, j(--"ii)9)9#%t||*.U5.5	7	7r1   c                     d }t        j                  |dgdgd      }t        |j                  dg       t        j                  |ddgddgd      }t        |j                  ddg       y )	Nc                 2    t        j                  | dz        S Nr4   r+   rC   r-   s    r/   quadz>CheckOptimizeParameterized.test_neldermead_x0_ub.<locals>.quad	      66!Q$<r1   r)   )r   r\   nelder-meadr  r   r   r4   )r)         @r   r   r   r.   )ro   r>  r   s      r/   test_neldermead_x0_ubz0CheckOptimizeParameterized.test_neldermead_x0_ub  st    	  C9 	
 	s#FW% 	
 	1v&r1   c                     ddi}t        j                  | j                  | j                  d| j                  d|      }|j
                  dk(  sJ y )Nrh   	Newton-CGr   r   r   r   r   r)   )r   r   r}   rf   r   r   )ro   r   results      r/   test_ncg_negative_maxiterz4CheckOptimizeParameterized.test_ncg_negative_maxiter  sK    2""499d.>.>*5499(*D: }}!!!r1   c           	          d }d }dg}d}t        j                  |||dt        |            }|j                  dk(  sJ t	        |j
                  d   t        j                         y )Nc                 2    t        j                  | d         S Nr   )r+   rG   r-   s    r/   cosinez=CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.cosine&  s    66!A$<r1   c                 4    t        j                  | d          S rM  )r+   rB   r-   s    r/   r   z:CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.jac)  s    FF1Q4L= r1   r>   r   	newton-cg)xtol)rU   r   r   r   )r   r   dictr   r   r.   r+   r!  )ro   rN  r   rU   rQ  rI  s         r/   test_ncg_zero_xtolz-CheckOptimizeParameterized.test_ncg_zero_xtol$  sf    	 	! U""6&('**5+/T?	<
 }}!!!FHHQK/r1   c           
          | j                   rW| j                  | j                  dd}t        j                  | j
                  | j                  d| j                  d|      d   }nOt        j                  | j
                  | j                  | j                  d| j                  d| j                  d      }|}t        | j                  |      | j                  | j                        d	       | j                  j                  d
k(  sJ | j                  j                         | j                  j                  dk  sJ | j                  j                         t        | j                  j                  dd g dg dgdd       y )NFr   rG  r   rH  r.   r   r;   r   r      r_   r   (6-H=g?g4u3?rW  g_g/N3?r?   r   )r   rh   r   r   r   r}   rf   r   fmin_ncgr   rg   rk   rr   rl   rm   rs   ro   r   r   r   s       r/   test_ncgz#CheckOptimizeParameterized.test_ncg6  s:   #||TYY"')D&&tyy$2B2B.9tyy,.>>ACF &&tyy$2B2BDII,.38tyy.35F
 		&)499T]]+C!	#
 ~~1$6dnn&6&66$~~2%7t~~'7'77% 	

Qq)KKM!	.r1   c                 ,   | j                   rb| j                  | j                  dd}t        j                  | j
                  | j                  d| j                  | j                  d|      d   }nZt        j                  | j
                  | j                  | j                  | j                  d| j                  d| j                  d	      }|}t        | j                  |      | j                  | j                        d	       | j                  j                  d
k  sJ | j                  j                         | j                  j                  dk  sJ | j                  j                         t        | j                  j                   dd g dg dgdd       y )NFr   rG  r   )r   r   r   r   r   r.   )fhessr   rh   r   r   r   r;   r   r      r_   r   rV  rX  r?   r   )r   rh   r   r   r   r}   rf   r   r   rY  r   rg   rk   rr   rl   rm   rs   rZ  s       r/   test_ncg_hessz(CheckOptimizeParameterized.test_ncg_hessW  sK   #||TYY"')D&&tyy$2B2B.9tyy,0II,.> ?BCF
 &&tyy$2B2BDII-1YY,.38tyy.3	5F 		&)499T]]+C!	#
 ~~1$6dnn&6&66$~~2%7t~~'7'77%
 	

Qq)KKM!	.r1   c                 ,   | j                   rb| j                  | j                  dd}t        j                  | j
                  | j                  d| j                  | j                  d|      d   }nZt        j                  | j
                  | j                  | j                  | j                  d| j                  d| j                  d	      }|}t        | j                  |      | j                  | j                        d	       | j                  j                  d
k  sJ | j                  j                         | j                  j                  dk  sJ | j                  j                         t        | j                  j                   dd g dg dgdd       y )NFr   rG  r   )r   r   r   r   r   r.   )fhess_pr   rh   r   r   r   r;   r   r   r^  r_   r   rV  rX  r?   r   )r   rh   r   r   r   r}   rf   r   r   rY  r   rg   rk   rr   rl   rm   rs   rZ  s       r/   test_ncg_hesspz)CheckOptimizeParameterized.test_ncg_hesspy  sK   #||TYY"')D&&tyy$2B2B.9tyy-1ZZ,.> ?BCF
 &&tyy$2B2BDII/3zz,.38tyy.3	5F 		&)499T]]+C!	#
 ~~1$6dnn&6&66$~~2%7t~~'7'77%
 	

Qq)KKM!	.r1   c                 p   | j                   rt        j                  | j                  | j                  d| j
                  | j                  d      }t        |j                  | j                  | j                        d       | j                  j                  dk  sJ | j                  j                         y y )Ncobyqarh   r   r   r;   r   A   )r   r   r   r}   rf   rh   r   r   r   rg   rk   rr   ro   r   s     r/   test_cobyqaz&CheckOptimizeParameterized.test_cobyqa  s    ##		  $(LL$))D	C CGGTYYt}}%=DI >>##w.@0@0@@. r1   N) r   r   r   r   r   r   r   r   r   r   markfilterwarningsr   r   r   r  parametrizer
  r  xfailr  r#  r*  r6  r9  rD  rJ  rS  r[  r_  rb  rh  r   r1   r/   r   r      s   />	5 /D,
,	: [[ 56, 7, "	3- [[dD\S!H-13K-0#J,8 9<9< 7D [[ & '/'/@)2/>&/P7>'."0$.B .D .DAr1   r   c            	          t         j                  j                  d      fd} dD ]=  }dD ]6  }t        j                  | j                  d      |d|i      }|d   |k(  r6J  ? y )	Nl	   <vgRI*q4 c                 ,    j                  d      dz  S Nr)   ra   r7   )r.   r=   s    r/   costztest_maxfev_test.<locals>.cost  s    zz!}t##r1   )r)   r   r1  )r  Nelder-Meadr   maxfevr   r   )r+   r7   default_rngr   r   )rq  imaxfevr   rI  r=   s       @r/   test_maxfev_testrv    s{    
))

 G
HC$  - 0 	-F&&tSZZ^.408'/BDF &>W,,,		-	-r1   c                     d } t         j                  j                  | t        j                  d      d      \  }}t        d      D ]*  } |t        j                  |             |d   |dz   k(  r*J  d}t        t         j                  j                  |      5   |t        j                               d d d        t         j                  j                  | t        j                  d      d      \  }}d}t        t        |      5   |t        j                  ddg             d d d        y # 1 sw Y   zxY w# 1 sw Y   y xY w)Nc                     | S rA   r   r-   s    r/   func_z8test_wrap_scalar_function_with_validation.<locals>.func_  s    r1   r)   r   r   zToo many function callsr   @The user-provided objective function must return a scalar value.)
r   	_optimize'_wrap_scalar_function_maxfun_validationr+   asarrayr3  rP   _MaxFuncCallErrorrQ   rL   )ry  fcallsr}   imsgs        r/   )test_wrap_scalar_function_with_validationr    s    %%//rzz!}aH FD 1X  RZZ]ayAaC  $C	x));;3	G RZZ] %%//rzz!}aH FD MC	z	- RXXq!f   s   D/D;/D8;Ec                      d} t        t        |       5  t        j                  d t	        j
                  ddg      d       d d d        y # 1 sw Y   y xY w)Nrz  r   c                     | S rA   r   r-   s    r/   <lambda>z.test_obj_func_returns_scalar.<locals>.<lambda>  s    A r1   r)   r   r   )rP   rQ   r   r   r+   rL   r   s    r/   test_obj_func_returns_scalarr    sM    &E 
z	/ H+rxxA'7GH H Hs   /AAc                      t        j                  g d      } t        j                  j	                  t        j
                  | d      }|j                  dk  sJ y )Nr   r   )xatoliS  )r+   rL   r   	_minimize_minimize_neldermeadr   r   )rU   r   s     r/   test_neldermead_iteration_numr    sG    	+	,B



1
1(.."8< 2 >C77c>>r1   c                      t        j                  ddg      j                  t         j                        } d }t	        j
                  || d       y )N      @      @c                 j    | j                   t        j                  k(  sJ t        j                  |       S rA   )dtyper+   float32r   r   r-   s    r/   rosen_z*test_neldermead_respect_fp.<locals>.rosen_  s'    ww"**$$$~~a  r1   rr  r   )r+   rL   astyper  r   r   )rU   r  s     r/   test_neldermead_respect_fpr    s<    	3*		$	$RZZ	0B! fb7r1   c                  V    d } t         j                  j                  | ddgddd       y )Nc                 $    | d   dz  | d   dz  z   S Nr   r4   r)   r   r-   s    r/   r}   z)test_neldermead_xatol_fatol.<locals>.func  s    tqy1Q419$$r1   r)   r4   r   )rh   r  fatol)r   r  r  )r}   s    r/   test_neldermead_xatol_fatolr    s2    % ++D1a&!26d , Dr1   c                      d } g d}t        j                  | |d      }t        |j                  d       t        j                  | |dddi      }t        |j                  d       y )	Nc                 2    t        j                  | dz        S r<  r=  r-   s    r/   r}   z&test_neldermead_adaptive.<locals>.func      vva1f~r1   )gM@'?gOC?g~?g -?g?g#j?g ?g~^g?gܠr#?g^cǽ?g)i	?g'?g?g1?g[VΤ?rr  r   FadaptiveTr   )r   r   r   r   )r}   p0r   s      r/   test_neldermead_adaptiver    s_    
FB 

D"]
;Ce$


D"]%/$68Cd#r1   c            	         d } d}g d}t        t        j                        5  t        j                  | ||d      }d d d        t	        j
                  t        j                  dgt        |      z        d       t        |j                  d	       t        |j                  d
       g dg dg dg}t        t        j                        5  t        j                  | ||dd|i      }d d d        t	        |j
                  t        j                  g d      d       t        |j                  d       t        |j                  d       y # 1 sw Y   xY w# 1 sw Y   pxY w)Nc                 2    t        j                  | dz        S r<  r=  r-   s    r/   r}   z/test_bounded_powell_outsidebounds.<locals>.func  r  r1   )rF  r)   r  r  )r^   gr  rA  r`   r;   r   Tr   r   r   r   )r   r)   r   )r   r   r)   r  )r  r   r   )g      r   r   Fr   )r   r   OptimizeWarningr   r   r.   r+   rL   lenr   r   r   )r}   r  rU   r   r  s        r/   !test_bounded_powell_outsideboundsr  
  s   
&F	B 
h..	/ JbIJCEE288RD3r7N3$?d#Q 	9-E	h..	/ :b'-h)0%(8:: CEE288K0t<e$Q%J J: :s   EEEE"c                     d } d}g d}ddd}t        j                  | |d|      }t        |j                  dd	
       t        |j                  dd	
       t        j                  | |||d      }t        j                  g d      }t        |j                  |d	
       t        |j                   | |      d	
       dt
        j                   dfdt
        j                  fddf}t        j                  | |||d      }t        j                  g d      }t        |j                  |d	
       t        |j                   | |      d	
       d } dgdz  }g d}t        j                  | |d      }t        j                  | ||d      }t        |j                  dd	
       t        |j                  dd	
       t
        j                   t
        j                  fgdz  }t        j                  | ||d      }t        |j                  |j                  d	
       t        |j                  |j                  d	
       t        |j                  |j                  d	
       g d}dgdz  }t        t         j                        5  t        j                  | ||d      }d d d        t        |j                  dd	
       y # 1 sw Y   "xY w)Nc                 2    t        j                  | dz        S r<  r=  r-   s    r/   r}   z+test_bounded_powell_vs_powell.<locals>.func3  r  r1   ))rF  )r  )r)   gffffff"@)r  gffffff@g/)g gr   r   r  绽|=ftolrQ  r  r   r`   r;   r   )r   r  r   )rF  r  r)   r   r  )NrF  r  r)   )r  Nr  c                 |   t        j                  | d          t        j                  | d         z  t        j                  | d    | d   z        z  t        j                  | d         z  }|t        j                  t        j                  | d   | d   z        t        j                  | d         z        z  }|dz  S Nr   r)   r4   rF   r.   rs   s     r/   r}   z+test_bounded_powell_vs_powell.<locals>.funcQ  s    FFAaD5MBFF1Q4L(2661Q4%!A$,+??"&&1,N	RVVBFF1Q4!A$;'"&&1,677!tr1   )r  r   r_   )r   r   r   r   rA  g8:}?r   )gb4F@g:gW?@)r   r   r   r.   r   r+   rL   infr   r   r  )r}   r  rU   r   
res_powellres_bounded_powellr   s          r/   test_bounded_powell_vs_powellr  *  s{   DF	!Be,G""4HgNJJLL"40JNNBT2!**4W282:< 	%&A&((!$7&**DG$? 266'3!RVVj+MF!**4W282:< 	%&A&((!$7&**DG$?

 Y]F	B""4H=J!**4282:< JNN$8tD&**AD9
 w 1$F!**4282:< JNN$6$:$:FJOO%7%<%<4HJLL"4"6"6TB 
2BY]F	h..	/ @%..tR6<6>@@ &**AD9	@ @s   J>>Kc                     dt         j                   dfgdz  dddd} g d}d }t        j                  ||fi | }t	        |j
                  d	d
       d }t        j                  ||fi | }t	        |j
                  d       d }t        j                  ||fi | }t	        |j
                  dd       d }t         j                   dfgdz  | d<   t        j                  ||fi | }t	        |j
                  dd       y )Nr  g    .Ar_   r   r  )r   r  r   r[   c                 .    t        j                  |        S rA   r=  r-   s    r/   r|   z1test_onesided_bounded_powell_stability.<locals>.f  s    q	zr1   g    `F-C6?r   c                     t        j                  t        j                  |             dz   t        j                  | dkD        rdz  S dz  S )Nr>   r   r)   rF  r+   rN   rC   rK   r-   s    r/   r|   z1test_onesided_bounded_powell_stability.<locals>.f  s<    rvvay!c**266!a%=aIIbIIr1   gwc                     t        j                  t        j                  |             dz   t        j                  | dkD        rdz  S dz  S )Nr   r   r)   rF  r  r-   s    r/   r|   z1test_onesided_bounded_powell_stability.<locals>.f  s<    rvvay!R''q1u1FF2FFr1   gB+Iar?   r   c                    t        j                  t        j                  | d d             dz   t        j                  t        j                  | dd              dz  z
  }|t        j                  | dkD        rdz  }|S dz  }|S )Nr4   r   r>   r   r)   rF  r  r  s     r/   r|   z1test_onesided_bounded_powell_stability.<locals>.f  ss    VVBFF1Ra5M"a''"&&!"*?C*HH	266!a%=a) '))r1   g     @@r  g 4&k\)r+   r  r   r   r   r   )kwargsrU   r|   r   s       r/   &test_onesided_bounded_powell_stabilityr  w  s    !66'3(1,"&57F 
B


Ar
,V
,CCGGT-J 

Ar
,V
,CCGG_-G 

Ar
,V
,CCGG\5
 &&#'!+F8


Ar
,V
,CCGG9Er1   c                       e Zd ZdZdZy)TestOptimizeWrapperDispTNr   r   r   r   r   r   r1   r/   r  r    s    KDr1   r  c                       e Zd ZdZdZy)TestOptimizeWrapperNoDispTFNr  r   r1   r/   r  r    s    KDr1   r  c                       e Zd ZdZdZy)TestOptimizeNoWrapperDispFTNr  r   r1   r/   r  r    s    KDr1   r  c                       e Zd ZdZdZy)TestOptimizeNoWrapperNoDispFNr  r   r1   r/   r  r    s    KDr1   r  c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zej,                  j/                  d      ej,                  j1                  d      ej,                  j1                  d      ej,                  j3                  dg dez         d                             Zej,                  j3                  dg d      d        Zd Zej,                  j3                  dg d      d        Zej,                  j>                  ej,                  j3                  dg d      d               Z d  Z!d! Z"d" Z#d# Z$ej,                  j3                  dg d$      d%        Z%ej,                  j3                  dg d&      d'        Z&ej,                  j1                  d      ej,                  j3                  de'      ej,                  j3                  d(g d)      d*                      Z(d+ Z)ej,                  j3                  dd,      d-        Z*ej,                  j>                  ej,                  j3                  dg d.      d/               Z+y0)1TestOptimizeSimplec                     d }d }t         j                  g}t        j                  dd      5  t        j                  |||d      }t        j
                   ||            sJ 	 d d d        y # 1 sw Y   y xY w)Nc                     | S rA   r   r-   s    r/   r}   z.TestOptimizeSimple.test_bfgs_nan.<locals>.func  s    Hr1   c                 ,    t        j                  |       S rA   r+   	ones_liker-   s    r/   r   z0TestOptimizeSimple.test_bfgs_nan.<locals>.fprime      <<?"r1   r   )r   invalidFr   )r+   nanr   r   r   isnan)ro   r}   r   rU   r.   s        r/   test_bfgs_nanz TestOptimizeSimple.test_bfgs_nan  sf    		#ffX[[h9 	%""4V%@A88DG$$$	% 	% 	%s   7A00A9c                    d }t        j                  d      5  t        j                  |d      }d d d        t        j                  d         sJ |d   du sJ d }d	 }t        j                  d      5  t        j                  |d|
      }d d d        t        j                  |d         sJ |d   du sJ y # 1 sw Y   xY w# 1 sw Y   9xY w)Nc                 "    t         j                  S rA   r+   r  r-   s    r/   r}   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.func      66Mr1   r   r  r   r   r   Fc                 0    | dk(  rdS t         j                  S rM  r  r-   s    r/   r}   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.func  s    Q1*BFF*r1   c                 ,    t        j                  |       S rA   r  r-   s    r/   r   z7TestOptimizeSimple.test_bfgs_nan_return.<locals>.fprime  r  r1   )r   )r+   r   r   r   r  )ro   r}   rI  r   s       r/   test_bfgs_nan_returnz'TestOptimizeSimple.test_bfgs_nan_return  s    	[[* 	0&&tQ/F	0 xxu&&&i E)))	+	#[[* 	<&&tQF;F	< xxu&&&i E)))	0 	0	< 	<s   B=8C	=C	Cc                    t        j                  t        j                  d            t         j                  j	                  t        | j                              z  }t        j                  | j                  | j                  |d| j                  d      }t        | j                  |      | j                  | j                        d       y )Nr\   r   F)r<   r   rh   r   r;   r   )r+   sqrtspacingr7   randr  rg   r   r   r}   rf   rh   r   )ro   r<   r   s      r/   test_bfgs_numerical_jacobianz/TestOptimizeSimple.test_bfgs_numerical_jacobian  s     ''"**R.)BIINN3t}};M,NN##DIIt/?/?,3",0LLuF 			&)499T]]+C!	#r1   c                 *   g d}g d}t        j                  ||      D ]r  \  }}t        j                  | j                  | j
                  ||      }t        | j	                  |j                        | j	                  | j                        d       t y )N)r   r   TNC2-point3-pointN)r   r   r;   r   )		itertoolsproductr   r   r}   rf   r   r.   rg   )ro   methodsjacsr   r   rI  s         r/   test_finite_differences_jacz.TestOptimizeSimple.test_finite_differences_jac  sx    '+$,,Wd; 	'KFC&&tyy$2B2B.4#?FDIIfhh/4==1I!%'	'r1   c           	         g d}t         t        j                  fz   }t        j                  ||      D ]d  \  }}|t        j                  u r |       }t        j
                  | j                  | j                  || j                  |      }|j                  rdJ  g d}|D ]\  }t        j                  t              5  t        j
                  | j                  | j                  || j                  d        d d d        ^ y # 1 sw Y   ixY w)N)trust-constrrG  	trust-ncgtrust-krylovr   r   r   )r  r  doglegtrust-exact)r   r   r   r  r  r   r}   rf   r   r   r   r
   rQ   )ro   r  hessesr   r   rI  s         r/   test_finite_differences_hessz/TestOptimizeSimple.test_finite_differences_hess  s     Mx}}..%--gv> 	"LFDx}}$v&&tyy$2B2B.4$)),02F >>!>	" I 	-Fz* -!!$))T-=-=)/TYY'+-- -	-- -s   <9D  D		c                 Z    d }t        j                  |dgd      }t        |ddd       y )Nc                     | dk  ry| d| z  z   S )Nr   gBr\   r   r-   s    r/   r|   z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.f	  s    1u&2a4xr1         $@Fr   r\   r  r   r   )r   r   r   )ro   r|   xss      r/   test_bfgs_gh_2169z$TestOptimizeSimple.test_bfgs_gh_2169  s-    	 
 C5u5Cd6r1   c                 X    fd}t               t        j                  |dddd       y )Nc                 V    | d   }|vsJ j                  |       d| dz  z  d| z  fS )Nr   r   r4      )add)r.   xpseens     r/   r|   z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.f  s9    1BT>!>HHRLad7BqD= r1   r   Tr?   )r   r   tol)setr   r   )ro   r|   r  s     @r/   test_bfgs_double_evaluationsz/TestOptimizeSimple.test_bfgs_double_evaluations  s'    	! u!T&dEr1   c                 (   t        j                  | j                  | j                  | j                  d| j
                        }|\  }}}t        | j                  |      | j                  | j                        d       | j                  j                  dk(  sJ | j                  j                         | j                  j                  dk(  sJ | j                  j                         t        | j                  j                  dd g dg d	gd
d       y )Nr   )r   rh   r;   r   r   r   r_   )g><gwT볹gUuAX?)r`   gHg!mʲ3?r   r?   r   )r   fmin_l_bfgs_br}   rf   r   rh   r   rg   rk   rr   rl   rm   rs   ro   r   r   r   ds        r/   test_l_bfgs_bz TestOptimizeSimple.test_l_bfgs_b  s    ''		43C3C(,		04> #q		&)499T]]+C!	#
 ~~1$6dnn&6&66$~~1$6dnn&6&66$ 	

Qq)D68"	/r1   c                     t        j                  | j                  | j                  d| j                        }|\  }}}t        | j                  |      | j                  | j                        d       y )NT)approx_gradrh   r;   r   )r   r  r}   rf   rh   r   rg   r  s        r/   test_l_bfgs_b_numjacz'TestOptimizeSimple.test_l_bfgs_b_numjac3  s]    ''		43C3C4804> #q		&)499T]]+C!	#r1   c                       fd}t        j                  | j                   j                        }|\  }}}t	         j                  |       j                   j                        d       y )Nc                 H    j                  |       j                  |       fS rA   )r}   r   )r.   ro   s    r/   r   z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.fun@  s    99Q<1--r1   rh   r;   r   )r   r  rf   rh   r   r}   rg   )ro   r   r   r   r   r	  s   `     r/   test_l_bfgs_b_funjacz'TestOptimizeSimple.test_l_bfgs_b_funjac>  s^    	. ''T-=-=04> #q		&)499T]]+C!	#r1   c                     G d d      } |       }t        j                  t         j                  ddgd|ddi      }t        |j                  d       t        |j                  |j                         t        |j                  |j                         t        |j                  d       |j                  d	u sJ t        |j                  d
       y )Nc                       e Zd Zd Zd Zy):TestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callbackc                 .    d| _         d | _        d | _        y rM  )r   r   r.   rn   s    r/   __init__zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__init__O  s    r1   c                 p    || _         t        j                  |      | _        | xj                  dz  c_        y r(   )r.   r   r   r   r   ro   r.   s     r/   __call__zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__T  s&    #>>!,Ar1   Nr   r   r   r  r  r   r1   r/   Callbackr  N  s    
r1   r  r`   l-bfgs-brh   r   )r   callbackr   r)   Fz+STOP: TOTAL NO. OF ITERATIONS REACHED LIMIT)r   r   r   r   r   r   r.   r   r   r   message)ro   r  rr   r   s       r/   test_l_bfgs_b_maxiterz(TestOptimizeSimple.test_l_bfgs_b_maxiterK  s    		 		 JR)*YND 	SWWa CEE133'CGGQUU+SZZ#{{e###S[[B	Dr1   c                 .   d| j                   d}t        j                  | j                  | j                  d| j
                  |      }t        | j                  |j                        | j                  | j                        d       | j                  j                  |j                  k(  sJ dx| j                  _
        | j                  _
        t        j                  | j                  | j                  d|      }| j                  j                  |j                  k(  sJ t        | j                  |j                        | j                  | j                        d       dx| j                  _
        | j                  _
        t        j                  | j                  | j                  d	d|
      }| j                  j                  |j                  k(  sJ t        | j                  |j                        | j                  | j                        d       y )NFr   rh   L-BFGS-Br   r   r   r;   r   r   r   r  r   r   r   )rh   r   r   r}   rf   r   r   r.   rg   rl   rr   r   rk   r   )ro   r   rV   ras       r/   test_minimize_l_bfgs_bz)TestOptimizeSimple.test_minimize_l_bfgs_be  s   $,,7dii)9)9%/TYY&*, 			!##		$--(@!	#~~166))).//4>>+tyy$*:*:&0$@ ~~277***		"$$4==)A!	# /0/4>>+tyy$*:*:	&0$@~~277***		"$$4==)A!	#r1   c                 B   d }dD ]  }d| j                   |d}t        j                  | j                  | j                  d| j
                  |      }| j                  |j                        }||}n||k  sJ t        || j                  | j                        |        y )N)r>   r  r?   r  F)r   rh   r  r"  r#  r   )	rh   r   r   r}   rf   r   r.   r   rg   )ro   v0r  r   r   vs         r/   test_minimize_l_bfgs_b_ftolz.TestOptimizeSimple.test_minimize_l_bfgs_b_ftol  s    , 	CC!dllCHD##DIIt/?/?+5499,02C 		#%% Az2vvAtyy7cB	Cr1   c           	          t        j                  t         j                  t        j                  ddg      dt         j
                  ddd      }|j                  rJ y )Nr   r\   r"  Fr)   )r   maxlsr#  )r   r   r   r+   rL   r   r   )ro   r   s     r/   test_minimize_l_bfgs_maxlsz-TestOptimizeSimple.test_minimize_l_bfgs_maxls  sK    $0E'1x7I7I16(CE ;;;r1   c                 |   t         j                  t         j                  }g t        j                  dd      }fd}d\  }}}t        j
                  ||||       t        d t        |d        D              \  }}||z   }	t        d |       }
t        j
                  |||	      \  }}}t        ||
       y )Nr   ra   c                 :     |       }j                  |       |S rA   )rx   )r.   valuer|   valuess     r/   objfunzMTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.objfun  s    aDEMM% Lr1   )   r0  i,  )r   maxfunc              3   *   K   | ]  \  }}||f  y wrA   r   ).0r  ys      r/   	<genexpr>zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>  s     AdaAq6As   )
r   r   r   r+   fullr  max	enumerateminr   )ro   grU   r2  lowmediumhighr)  kr4  targetxminr)  r	  r|   r1  s                 @@r/   *test_minimize_l_bfgs_b_maxfun_interruptionz=TestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption  s    NNWWQ	 )VTvr!DAAivw&@AA1! VDS\" ..q"QvNdA$'r1   c                     	 	 d	d}g d}t        j                  t         j                  ||t        d            }t	        |j
                  ddd       y )
Nc                    |} | |      }	d}
d}d}d}|r|s||k  rd}|dz  }t        t        j                  |            D ]a  }||   |z
  ||   |z   fD ]6  }t        j                  |      }|||<    | |g| }|
dz  }
||	k  s1|}	|}d}8 | ||       |Y|
|k\  s_d} n |r|s||k  rt	        j
                  |	|||
|dkD        S )Nr)   r   TFr   r.   r   r   r   )r3  r+   sizery   r   r   )r   rU   r   rs  stepsizerh   r  r   bestxbestyfuncallsniterimprovedstopdimstestxtestys                     r/   custminz/TestOptimizeSimple.test_custom.<locals>.custmin  s   EGEHEHD4EGO 
 - C#Cj83U3Z(5JK , "%&c
 #E 1D 1 A 5=$)E$)E'+H,  + )h&.@# 4EGO& **u508519O Or1   )g?r  r   皙?r   皙?rI  r   r\   r  r  r   Nr>   r0  N)r   r   r   rR  r   r.   )ro   rT  rU   r   s       r/   test_customzTestOptimizeSimple.test_custom  sI    <?*.	O> (7(,d(;=sD9r1   c                 x    ddgdfd}ddg}t        j                  t         j                  ||       y )N)r  r4   )r   r_   constraintsc                 P    |d   u sJ |d   u sJ t        j                         S )Nr  r[  r   r   )r   rU   r   r  r[  s      r/   rT  z0TestOptimizeSimple.test_gh10771.<locals>.custmin  s8    8$...=)[888**,,r1   r)   )r   r  r[  )r   r   r   )ro   rT  rU   r  r[  s      @@r/   test_gh10771zTestOptimizeSimple.test_gh10771  sB     6"#	-
 V(.."W!'[	Br1   c           	      H   d }d }dD ]  }|dv rd }n|}t        j                  |ddg|d|      }t        j                  |ddg|d|      } ||j                         ||j                        k  rjJ | d	 ||j                         d
 ||j                                 y )Nc                 4    | \  }}|dz  |dz  z  |dz  z   dz   S )Nr4   r   r)   r   zr.   r7  s      r/   r}   z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.func  s+    DAqa419q!t#a''r1   c                 p    | \  }}t        j                  d|z  |dz  z  d|dz  z  z   d|dz  z  |z  g      S )Nr4   r   r_   r+   rL   ra  s      r/   dfuncz=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc  sD    DAq88QqSAX!Q$.!Q$q9::r1   
r@  powellr	  r   rP  r  tnccobylard  slsqpr@  rg  ri  rd  r4   r  )r   r  r   r\   : z vs. )r   r   r.   )ro   r}   re  r   r   sol1sol2s          r/   test_minimize_tol_parameterz.TestOptimizeSimple.test_minimize_tol_parameter  s    	(	;4 	BF FF$$TAq6s,24D$$TAq6s,24D<$tvv,. BXRTVV~U4<.AB.	Br1   r   r   ignore::RuntimeWarningr   )r)  r  r   r   rY  r  fmin_tnc
fmin_slsqpc                   
 dv rd }n0t         j                  }t         j                  }t         j                  }t	        j
                  d      }i }j                  d      r6t        t               }dk(  rd|d<   nDdk(  rd	|d
<   n9dv rd|d<   n/d|d<   n)fd}dk(  rt        d	      |d<   nt        d      |d<   dv r|d<   ndv r|d<   ndv r
|d<   |d<   g 

fd} |||fd|i| t        
      dkD  sJ t        d 
D              sJ t        j                  
d      }	t        d |	D              rJ y )N)rq  r  c                 V    t        j                  |       t        j                  |       fS rA   )r   r   r   r-   s    r/   r}   zDTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.func  s!    ~~a((*<*<Q*???r1   r   r)  rr  r   iterrq  r0  r4  )r)  r  i  rh   c                  8    |d<   t        j                  | i |S )Nr   r   r   )akwr   s     r/   routinezGTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.routine#  s"    %8((!2r22r1   rh  r4  r   r  )rY  r   )rP  r   r  r  r  r  r  r   c                     t        | t        j                        rJ j                  | t	        j
                  |       f       y rA   )
isinstancer   r   rx   r+   ry   )r.   r   r  resultss      r/   r  zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callback8  s1    !!X%<%<===NNArwwqz?+r1   r  r4   c              3   R   K   | ]  \  }}t        j                  ||k(         ! y wrA   )r+   rK   r6  r.   r7  s      r/   r8  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>A  s      6da266!q&>6s   %'c              3   Z   K   | ]#  \  }}t        j                  |d    |d           % yw)r   N)r+   may_share_memoryr  s      r/   r8  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>C  s)     P41ar**1Q416Ps   )+)r   r   r   r   r+   rd   
startswithgetattrrR  r  rK   r  combinationsany)ro   r   r}   r   r   rU   r  rz  r  r  r  s    `        @r/   #test_minimize_callback_copies_arrayz6TestOptimizeSimple.test_minimize_callback_copies_array  s    22@ >>D$$C&&DXXb\ V$h/G%!"v:%#&x 22$(y!$%y!3 $($4y!$(Oy!]""F8~%F5M ( (F5M!F6N 	, 	b686v6 7|a6g6666 --gq9P<PPPPPr1   rf  c                 x   d }d }t        j                  dg      } ||      }|}|dk(  rt        d      nt        d      }|dv rd }t        j                  |||||	      }t         ||j                        |j                         |d
k(  rt        j                  d        ||j                        |k  sJ y )Nc                     | dz
  dz  S r3   r   r-   s    r/   r}   z1TestOptimizeSimple.test_no_increase.<locals>.funcL      EA:r1   c                     d| dz
  z  dz  dz
  S )Nr4   r)   rF  r   r-   s    r/   bad_gradz5TestOptimizeSimple.test_no_increase.<locals>.bad_gradO  s     a!e9#a''r1          @rh  r  r{  r  rk  r$  rj  zSLSQP returns slightly worse)
r+   rL   rR  r   r   r   r.   r   r   rl  )	ro   r   r}   r  rU   f0r   r   r   s	            r/   test_no_increasez#TestOptimizeSimple.test_no_increaseE  s    		(
 XXse_"X%+u_$b/$r:JBBCbc&(/1T#%%[#''*WLL78CEE{b   r1   c                     d }d }t        j                  g d      }t        j                  ||dd|d      }t	        |j
                  t        j                  g d      d	z  d
       y )Nc                 N    t        | t        j                  g d      z
  dz        S )N)r\   r  rB  r  r4   )rC   r+   rL   r-   s    r/   r|   z7TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.fd  s!    BHH%566:;;r1   c                     t        j                  g dg dg      }t        j                  t        j                  ||       t        j                  ddg      z   | g      S )N)rF  rF  rF  rF  )r  r  rF  r   r   )r+   rL   concatenaterv   r.   rx  s     r/   consz:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.consg  sG    *,<=>A>>266!Q<"((Ar72C#CQ"GHHr1   )r^   r\   r6   r  rj  ineqtyper   r   r[  )r`   r4   r   r   r_   g-q=r   )r+   rL   r   r   r   r.   )ro   r|   r  rU   r   s        r/   test_slsqp_respect_boundsz,TestOptimizeSimple.test_slsqp_respect_boundsb  s[    	<	I XX()2g5;D,IKrxx6q8uEr1   )rr  r  r   r   rG  r"  SLSQPr  r  r  r  r  rd  c           	      v   d}t        j                  d      }t        t        j                  |dt        j
                  t        j                  d d       }|t        |      d}|dv r|j                  |d<   n"|dv r|j                  |d<   |j                  |d	<   t        j                  |j                  |fi |}|j                  |k(  sJ |j                  |j                  k\  sJ t        |d
      r|j                  |j                   k\  sJ |dk(  r|j"                  dk(  sJ y |dk(  r|j"                  dk(  sJ y y )Nr   r   r   r  r   )rG  r   r|  r   r   r  r   rd  r   )r+   rd   r   r   r   r   r   rR  r   r   r   r   r   r   rt   r   ngevr   )ro   r   MAXITERrU   sfr  r   s          r/   test_respect_maxiterz'TestOptimizeSimple.test_respect_maxiterp  s&    XXb\HNNBH4F4F$//t= #tG/DE^#GGF5M ( (GGF5MWWF6N5f5ww'!!!xx277"""388rww&&& W::?"?x::?"?  r1   )rr  r  r)  r  c           	         t        j                  d      }t        t        j                  |dt        j
                  t        j                  d d       }ddd}t        j                  t        d      5  |j                  d      r%t        t        |      } ||j                  |fi | n#t        j                  |j                  |||	       d d d        y # 1 sw Y   y xY w)
Nr   r   r)   Tre  zMaximum number of iterationsr   r)  r   )r+   rd   r   r   r   r   r   r   warnsRuntimeWarningr  r  r   r   )ro   r   rU   r  r   rz  s         r/   test_runtime_warningz'TestOptimizeSimple.test_runtime_warning  s     XXb\HNNBH4F4F$//t=.\\. ?A 	N  (!(F3.g.!!"&&"VWM	N 	N 	Ns   1ACCc                    d}t         j                  }t         j                  }t         j                  }d }d|df}t	        j
                  d      }t        j                  |||||dt        |            }|j                  |k(  sJ y )	Nr   c                 ^    t        j                  d| d   z  d| d   z  z
  d| d   z  z
  g      S )NrI   r   皙?r)   Q?r4   rd  r-   s    r/   r   zRTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.fun  s6    88S1Q4Z#!*4tad{BCDDr1   r  r  r   r  r  )r[  r   r   r   r   )	r   r   r   r   r+   rd   r   rR  r   )	ro   r  r|   r   r   r   r  rU   r   s	            r/   2test_respect_maxiter_trust_constr_ineq_constraintszETestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints  s     NN  ""	E  XXb\24St'5(,W(=? ww'!!!r1   c                 n   d }d }t        j                  dg      }t        j                  ||      }t        j                  ||d|dg      }t        j                  ||dg      }t        j                  ||d|dgdg	      }t        j                  ||d|dgd
g	      }|||||fD ]  }	|	j                  rJ  t        |j                  dd       t        |j                  dd       t        |j                  dd       t        |j                  dd       t        |j                  dd       y )Nc                     | dz  S r<  r   r-   s    r/   r|   z6TestOptimizeSimple.test_minimize_automethod.<locals>.f      a4Kr1   c                     | dz
  S r<  r   r-   s    r/   r  z9TestOptimizeSimple.test_minimize_automethod.<locals>.cons  s    q5Lr1   r  r  r  )r[  )r   r   r  )r[  r  r)   r   r   r?   r   r4   r   )r+   rL   r   r   r   r   r.   )
ro   r|   r  rU   sol_0sol_1sol_2sol_3sol_4r   s
             r/   test_minimize_automethodz+TestOptimizeSimple.test_minimize_automethod  s-   		 XXse_!!!R(!!!Rv>B7D 6E F!!!R	:!!!R8>t/L.M*14 !!!R8>t/L.M*14 5%6 	C;;;	.....r1   c                     d }dd}t        j                  g d      }t         j                  j                  t	        |            }t        j                  ||||d       y )Nc                 8    t        j                  | |z
  dz        S r<  r=  r.   rr   s     r/   Yz=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Y  s    661Q3(##r1   c                     d| |z
  z  S r<  r   r  s     r/   dY_dxzATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dx  s    ac7Nr1   )r_   r)   r   r)   r   r   r4   r   r   r_   r   r   )r   r   r   rA   )r+   rL   r7   randnr  r   r   )ro   r  r  rr   xinits        r/   test_minimize_coerce_args_paramz2TestOptimizeSimple.test_minimize_coerce_args_param  sI    	$	 HH67		A'!UQGr1   c                   	
 g d}g d}	
fd}
fd}t        j                  ||      D ]  \  
}|dv rt        
dz        }n
t               }
dk  r|d	v r.d
gd g	t        j                  ||||      }| d
 d	 d| }|j
                  sJ |       t        |j                  dg|       |j                  dk  sJ |       
dkD  r.|dv rt        	d   d|       	d   dkD  r		d   dk  rJ |        y )N)gJz5r)   gd~QJ)r   r   r"  rG  c                     d   "| d   d   k7  rt        | d   d   z
        d<   t        |       j                         dkD  rt        d      | d   dz
  dz  z  S )Nr   g     @zOptimization stepped far away!r)   r4   )rN   r:  AssertionError)r.   first_step_sizescalerU   s    r/   r|   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.f  sl    q!)adbem%(11%6"1vzz|c!$%EFF!A$(Q&&r1   c                 B    t        j                  | d   dz
  z  g      S Nr   r)   rd  )r.   r  s    r/   r=  z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g  s"    88UAaD1H-.//r1   )r   r   r   )r   r  )r"  rG        r$   rl  r\   err_msgr_   r   g)\(?r^   )	r  r  rR  r   r   r   r   r.   r   )ro   scalesr  r|   r=  r   r   r   r  r  r  rU   s            @@@r/   test_initial_step_scalingz,TestOptimizeSimple.test_initial_step_scaling  s6    "9	'	0 '..vw? 	ME6'E$J/&u}+D!DB#fO##Arq,35C  %?*;2cUCG;;'';CEEC5':77a<((<u}^+#OA$6gN +1-38JQ8NWPWWN ?	r1   )r@  rg  r	  r   rP  r  rh  ri  rd  rj  r  r  r  r  r  c                    |dkD  r|dk(  rt        j                  d       t        j                  j	                  d      dgd }fd}d }d	 }t        j
                  d
g      }|dv }|dv }	||g}
|r|gn|d g}|	r|gn|d g}|dk(  rt        d      nt        d      }t        j                  d      5  t               5 }|j                  t        d       |j                  t        d       |j                  t        d       t        j                  |
||      D ]:  \  }}}dgt        j                  ||||||      }t!        |j"                  d       < 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr)   rd  z,COBYQA does not support concurrent executionr8   r   c                 "    t         j                  S rA   r  r-   s    r/   r}   z0TestOptimizeSimple.test_nan_values.<locals>.func  r  r1   c                 n    dxx   dz  cc<   d   dkD  rt         j                  S j                         S r  )r+   r  r  )r.   countr=   s    r/   func2z1TestOptimizeSimple.test_nan_values.<locals>.func2"  s0    !HMHQx!|vvxxz!r1   c                 .    t        j                  dg      S Nr\   rd  r-   s    r/   r   z0TestOptimizeSimple.test_nan_values.<locals>.grad)  s    88SE?"r1   c                 0    t        j                  dgg      S r  rd  r-   s    r/   r   z0TestOptimizeSimple.test_nan_values.<locals>.hess,  s    88cUG$$r1   r\   rP  r  r  r  r  r  r  r  r  rh  r  r{  r  r   r  delta_grad == 0.*.*does not use Hessian.*.*does not use gradient.*)r   r   r   r   F)r   skipr+   r7   RandomStaterL   rR  r   r	   filterUserWarningr  r  r  r   r   r   r   )ro   r   num_parallel_threadsr}   r  r   r   rU   
needs_grad
needs_hessfuncsgradshesssr   supr|   r=  hr   r  r=   s                      @@r/   test_nan_valuesz"TestOptimizeSimple.test_nan_values  s     !#((:KKFG ii##D)		"	#	% XXse_  7 7
  * *
 u$4,$4,%+u_$b/$r:J[[* 		1,=,? 		13JJ{$78JJ~'ABJJ~'BC$,,UE5A 11a''211V079S[[%0	1		1 		1 		1 		1 		1 		1s%   :E:BE.E:.E7	3E::F)r@  r	  r   r  rh  ri  rd  rj  r  r  r  r  r  c           	      n   d x}}|dv r| j                   }|dv r| j                  }t        j                  d      5  t	               5 }|j                  t        d       t        j                  | j                  | j                  |||       d d d        d d d        t        dt        | j                  j                              D ]W  }t        j                  | j                  j                  |dz
     | j                  j                  |         sKt!        d|        y # 1 sw Y   xY w# 1 sw Y   xY w)	Nr  r  r   r  r  r  r)   zDuplicate evaluations made by )r   r   r+   r   r	   r  r  r   r   r}   rf   r3  r  rm   rs   array_equalru   )ro   r   r   r   r  r  s         r/   test_duplicate_evaluationsz-TestOptimizeSimple.test_duplicate_evaluationsF  s    d - -))C    99D[[* 	A,=,? 	A3JJ{$78dii)9)9%+4A	A 	A q#djjll+, 	?A~~djjll1q514::<<?C"4VH=? ?	?	A 	A 	A 	As$   D+ADD+D(	$D++D4new_cb_interface)r   r)   r4   c                   
 fdd_         fd}fd}d|dk(  r
fd}n|dk(  r G 
fd	d
      } |       }n
fd}
fd
d
_        d
_         dgdz  |||d}t        j                  di |d|i}|dk(  rdz   |dk(  r?t        j                  di |ddii}	|j                  |	j                  cxk(  rk(  sDJ  J t        j                  di |ddii}	|j
                  |	j
                  cxk(  rk(  sJ  J |j                  |	j                  k(  sJ t        |j                  |	j                         |j                  |dv rdndk(  sJ y )Nc                 <    d_         t        j                  |       S NF)flagr   r   r.   r|   s    r/   r|   z9TestOptimizeSimple.test_callback_stopiteration.<locals>.fg  s    AF>>!$$r1   Fc                 <    d_         t        j                  |       S r  )r  r   r   r  s    r/   r=  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.gl  s    AF%%a((r1   c                 <    d_         t        j                  |       S r  )r  r   r   r  s    r/   r  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.hp  s    AF&&q))r1   r   r)   c                 V    | j                    | j                        k(  sJ          y rA   r   r.   )intermediate_resultr  r|   s    r/   callback_interfacezJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfacew  s(    *..!4G4I4I2JJJJ
r1   r4   c                        e Zd Zdef fdZy)@TestOptimizeSimple.test_callback_stopiteration.<locals>.Callbackr  c                 V    |j                    |j                        k(  sJ          y rA   r  )ro   r  r  r|   s     r/   r  zITestOptimizeSimple.test_callback_stopiteration.<locals>.Callback.__call__|  s(    .22a8K8M8M6NNNNJr1   N)r   r   r   r   r  )r  r|   s   r/   r  r  {  s     r1   r  c                              y rA   r   )xkr   r  s     r/   r  zJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interface  s    
r1   c                  ~     xj                   dz  c_         d _         j                   k(  rd _        t               y )Nr)   FT)r  r  StopIteration)r  rh   s   r/   r  z@TestOptimizeSimple.test_callback_stopiteration.<locals>.callback  s7    JJ!OJ!HMzzW$ $#o% %r1   r   rU  )rU   r   r   r   r   r  r@  rd  r   rs  rh   )r  rd  r_   c   r   )
r  r  r   r   r   r   r   r   r.   r   )ro   r   r  r=  r  r  r  r  r   r   r  r|   rh   s             @@@r/   test_callback_stopiterationz.TestOptimizeSimple.test_callback_stopiteration`  s   	% 	)	* q  "  "*	& 
a61a1 F&F3EF]"kGX##JfJx6IJC88sxx2722222##KfKy'6JKC77cgg000000ww#''!!!SUUCEE"zz6 .
 $
a  	 r1   c                     d}t        t        |      5  t        j                  d t	        j
                  d             d d d        y # 1 sw Y   y xY w)Nz"'x0' must only have one dimension.r   c                     | S rA   r   r-   s    r/   r  z4TestOptimizeSimple.test_ndim_error.<locals>.<lambda>  s     r1   )r4   r)   )rP   rQ   r   r   r+   onesro   r  s     r/   test_ndim_errorz"TestOptimizeSimple.test_ndim_error  s>    2:S1 	<k2776?;	< 	< 	<s   +AA)r@  r  rh  rg  ri  rd  r  c                 ~   d }t        ddgddg      }d}t        j                  t        |      5  t	        j
                  |g d||	       d d d        t        g d
g d      }d}t        j                  t        |      5  t	        j
                  |g d||	       d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY w)Nc                 2    t        j                  | dz        S r<  r=  r-   s    r/   r|   z:TestOptimizeSimple.test_minimize_invalid_bounds.<locals>.f  r?  r1   r)   r4   r_   r   z?The number of bounds is not compatible with the length of `x0`.r   )r)   r4   r_   rU   r   r  )r)   r   r)   )r_   r   r4   z:An upper bound is less than the corresponding lower bound.)r   r   r
   rQ   r   r   )ro   r   r|   r  r  s        r/   test_minimize_invalid_boundsz/TestOptimizeSimple.test_minimize_invalid_bounds  s    	  AA'O]]:S1 	MaIfVL	M 	9-J]]:S1 	MaIfVL	M 	M	M 	M
	M 	Ms   B'B3'B03B<)r   r	  rP  rg  c                 L   |dk(  ri ndt         j                  i}|dk(  rt        nt         j                  }ddd}t	        j
                  |d      5  t        j                  d d	d	gf||d
| d d d        d|d<   t        j                  d d	d	gf||d
| y # 1 sw Y   ,xY w)Nrg  r   Tr   r!  Maximum numberr   c                 ,    t        j                  |       S rA   r   r   r-   s    r/   r  zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>  s    q(9 r1   r   r   Fr   c                 ,    t        j                  |       S rA   r  r-   s    r/   r  zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>  s    HNN1$5 r1   )r   r   r  r  r   r  r   )ro   r   r  warning_typer   s        r/   test_minimize_warnings_gh1953z0TestOptimizeSimple.test_minimize_warnings_gh1953  s    
 x'eX5G5G-H*0(*:%55 	  B/\\,.>? 	H9Aq6 H%+WH@FH	H  51v 	D!'	D<B	D	H 	Hs   BB#N),r   r   r   r  r  r  r  r  r  r  r
  r  r  r  r&  r*  r-  rD  rY  r^  ro  r   ri  	fail_slowrj  rk  r   r  r  r  r  thread_unsafer  r  r  r  r  r  r  r   r  r  r  r  r   r1   r/   r  r    s   	%*.
#'-47	F/.	##D4#8C"(4$:LBB2 [[2[[ 56[[ 89[[X,.>?@;Q	@ : 7 ;Qz [[X (L M!M!4F [[X (2 3
#3
#@ [[[[X (? @N@ N"(/4
H0d [[X (G H
.1H
.1` [[X (G H
?H
?* [[ 89[[X'>?[[/;; < @ :;z<
 [[X (8 9M9M [[[[X'LMD N Dr1   r  r   )r  rh  r  rr  rd  c                     d }t        j                  |ddg|       }|j                  sJ t        |j                  dgd       y )Nc                 2    t        j                  | dz        S r<  r=  r-   s    r/   r|   z$test_minimize_with_scalar.<locals>.f  r  r1      )r  r0  rA  r`   r   r   )r   r   r   r   r.   )r   r|   r   s      r/   test_minimize_with_scalarr    s?     

Ar;-
GC;;;CEEC5t,r1   c                       e Zd Zd ZddZddZddZd Zd Zd Z	e
j                  j                  dd	d
gd
d	gd	d	gg      d        Zd Zy)TestLBFGSBBoundsc                      d| _         d| _        y )N))r)   NNN)r)   r   )r  rg   rn   s    r/   rp   zTestLBFGSBBounds.setup_method  s    /r1   c                 0    d|z  |d   |z  |d   |z  z   z  S )Nr\   r   r)   r   r   s      r/   r   zTestLBFGSBBounds.fun  s&    Qw!A$'AaD!G+,,r1   c                     ||dz
  z  S r(   r   r   s      r/   r   zTestLBFGSBBounds.jac  s    1q5zr1   c                 J    | j                  ||      | j                  ||      fS rA   r   r   r   s      r/   fjzTestLBFGSBBounds.fj  s!    xx1~txx1~--r1   c                     t        j                  | j                  ddg| j                  | j                        \  }}}|d   dk(  s
J |d          t        || j                  d       y )Nr   rF  )r   r  r   taskr;   r   )r   r  r   r   r  r   rg   ro   r.   r|   r	  s       r/   test_l_bfgs_b_boundsz%TestLBFGSBBounds.test_l_bfgs_b_bounds  s_    ((Ar70404=1a }!,1V9,!4==t4r1   c                     t        j                  | j                  ddgd| j                        \  }}}|d   dk(  s
J |d          t	        || j
                  d       y )	Nr   rF  r  )r   r  r   r   r;   r   )r   r  r  r  r   rg   r!  s       r/   r  z%TestLBFGSBBounds.test_l_bfgs_b_funjac  sX    ((1b'04=1a}!,1V9,!4==t4r1   c                     t        j                  | j                  ddgd| j                  | j                        }|d   s
J |d          t        |j                  | j                  d       y )	Nr   rF  r"  r   r   r  r   r  r;   r   )r   r   r   r   r  r   r.   rg   rg  s     r/   test_minimize_l_bfgs_b_boundsz.TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds  sW    1b'*$(HHT[[B9~-s9~-~t}}48r1   r  )r   r)   r  c                     t        j                  t        d      5  t        j                  | j
                  ddgd| j                  |       d d d        y # 1 sw Y   y xY w)Nz	.*bound.*r   r   rF  r"  r&  )r   r
   rQ   r   r   r   r   )ro   r  s     r/   'test_minimize_l_bfgs_b_incorrect_boundsz8TestLBFGSBBounds.test_minimize_l_bfgs_b_incorrect_bounds  sL     ]]:[9 	;dhhB
"&((6;	; 	; 	;s   1AAc                    g d}ddg}t        j                  ||      D ]j  \  }}t        j                  | j                  ddg|d|| j
                  dd i      }|d	   s
J |d
          t        |j                  | j                  d       l y )Nr  r$  r   r   rF  r"  finite_diff_rel_step)r   r   r   r  r   r   r  r;   r   )	r  r  r   r   r   r  r   r.   rg   )ro   r  argssr   r   r   s         r/    test_minimize_l_bfgs_b_bounds_FDz1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FD  s    
 ,"**47 	=IC##DHHq"gD+5(+DKK-CT,JLC y>13y>1>CEE4==t<	=r1   Nr$  )r   r   r   rp   r   r   r  r"  r  r'  r   ri  rk  r)  r-  r   r1   r/   r  r    sl    -.559 [[X
7	
7	
7	( 
;
;
=r1   r  c                   l   e Zd Zd Zd dZd Zej                  j                  d      d        Z	d Z
d Zd Zd	 Zd
 Zd Zej                  j!                  dg d      d        Zej                  j!                  dg d      d        Zej                  j                  d      ej                  j!                  dg d      d               Zd Zd Zej                  j!                  dddg      d        Zej                  j                  d      ej                  j!                  de      ej                  j!                  dddg      ej                  j!                  dg d      d                             Zej                  j2                  ej                  j!                  dg d      d               Zy)!TestOptimizeScalarc                     d| _         y )Nr6   )rg   rn   s    r/   rp   zTestOptimizeScalar.setup_method  s	    r1   c                     ||z
  dz  dz
  S )zObjective functionr4   r   r   )ro   r.   rx  s      r/   r   zTestOptimizeScalar.fun  s    AzCr1   c                    t        j                  | j                        }t        || j                  d       t        j                  | j                  d      }t        || j                  d       t        j                  | j                  d      }t        |d   | j                  d       t        j                  | j                  d      }t        || j                  d       d	}t        j                  t        |
      5  t        j                  | j                  d       d d d        d}t        j                  t        |
      5  t        j                  | j                  d       d d d        y # 1 sw Y   QxY w# 1 sw Y   y xY w)Nr;   r   r  r  brackTr   r   irF     /\(f\(xb\) < f\(xa\)\) and \(f\(xb\) < f\(xc\)\)r   rF  r   r)   \(xa < xb\) and \(xb < xc\)r   rF  r)   )r   brentr   r   rg   r   r
   rQ   )ro   r.   r  s      r/   
test_brentzTestOptimizeScalar.test_brent  s   NN488$4==t4NN488844==t4NN4886!dmm$7NN488=94==t4D]]:W5 	7NN488:6	7 1]]:W5 	7NN488:6	7 	7		7 	7	7 	7s   "E5
"F5E>F
r   c                 X   t        j                  | j                        }t        || j                  d       t        j                  | j                  d      }t        || j                  d       t        j                  | j                  d      }t        |d   | j                  d       t        j                  | j                  d      }t        || j                  d       t        j                  | j                  d	      }t        || j                         g d
}|D ]_  }t        j                  | j                  dd      }t        j                  | j                  |d      }|d   |d   }}t        ||z
  |       a d}t        j                  t        |      5  t        j                  | j                  d       d d d        d}t        j                  t        |      5  t        j                  | j                  d       d d d        y # 1 sw Y   QxY w# 1 sw Y   y xY w)Nr;   r   r3  r4  Tr6  r   r7  r  )r   r)   r   )rh   r   r4   r9  r   r:  r;  r<  )	r   goldenr   r   rg   r   r   r
   rQ   )ro   r.   maxiter_test_casesrh   rU   nfev0r   r  s           r/   test_goldenzTestOptimizeScalar.test_golden1  s   OODHH%4==t4OODHHH54==t4OODHH$7!dmm$7OODHHM:4==t4OODHH!,4==)&) 	0G1$GB'tLAQ%14Ew/		0 E]]:W5 	8OODHHJ7	8 1]]:W5 	8OODHHJ7	8 	8		8 	8	8 	8s   ""H)"H H H)c                    t        j                  | j                  dd      }t        |dd       t        j                  | j                  dd      }t        || j                  d       t        j                  | j                  t        j                  dg      t        j                  dg            }t        || j                  d       t        t        t         j                  | j                  dd       y )Nr   r)   r  r   r   r;   )	r   	fminboundr   r   rg   r+   rL   rP   rQ   r  s     r/   test_fminboundz!TestOptimizeScalar.test_fminboundQ  s    txxA.14(txxA.4==t4txx1#!F4==t4j("4"4dhh1Er1   c                 d   t        j                  t        d      5  t        j                  | j
                  t        j                  d      d       d d d        t        j                  | j
                  dt        j                  d            }t        || j                  d       y # 1 sw Y   VxY w)Nz.*must be finite scalars.*r   r)   r4   r)   r   r;   r   )r   r
   rQ   r   rF  r   r+   rd   rL   r   rg   r  s     r/   test_fminbound_scalarz(TestOptimizeScalar.test_fminbound_scalar\  sw    ]]:-IJ 	>txx&)91=	> txxBHHQK84==t4		> 	>s   5B&&B/c                 8    d }t        j                  |dd       y )Nc                     | dz  S r<  r   r-   s    r/   r   z,TestOptimizeScalar.test_gh11207.<locals>.fund  r  r1   r   )r   rF  )ro   r   s     r/   test_gh11207zTestOptimizeScalar.test_gh11207c  s    	31%r1   c                 (   t        j                  | j                        j                  }t	        || j
                  d       t        j                  | j                  d      }|j                  sJ t        j                  | j                  dt        d            }|j                  rJ t        j                  | j                  dd	d
      j                  }t	        || j
                  d       t        j                  | j                  dd	      j                  }t	        || j
                  d       t        j                  | j                  dd	d
      j                  }t	        || j
                  d       t        j                  | j                  dd	d
      j                  }t	        || j
                  d       t        j                  | j                  dd	      j                  }t	        || j
                  d       t        j                  | j                  dd	d
      j                  }t	        || j
                  d       t        j                  | j                  dd	d      j                  }t	        |dd       t        j                  | j                  dd	d      j                  }t	        || j
                  d       t        j                  | j                  t        j                  dg      t        j                  dg      ft        j                  dg      fd      j                  }t	        || j
                  d       t        t        t         j                  | j                  ddd	       t        t        t         j                  | j                  t        j                  d      dfdd	       t        j                  | j                  dt        j                  d      fd      j                  }t	        || j
                  d       y )Nr;   r   Brentr   r_   r  r   r3  r6   )bracketr   r   )r   r   r7  rA  )r   r)   Bounded)r  r   r   r)   r  )r)   r   boundedr   r6   )r   r)   r  r   r   r4   rA  )r   minimize_scalarr   r.   r   rg   r   rR  r+   rL   rP   rQ   rd   r  s     r/   test_minimize_scalarz'TestOptimizeScalar.test_minimize_scalarh  s   $$TXX.004==t4$$TXXg>yyy$$TXXg-1!_>99}$$TXXx*1'CCD1 	
4==t4$$TXXg*0223! 	
4==t4$$TXX}*1'CCD1 	
4==t4$$TXXx*1(DDEA 	
4==t4$$TXXh*0223! 	
4==t4$$TXX}*1(DDEA 	
4==t4$$TXXf6,5778q 	
14($$TXXf7,5778q 	
4==t4$$TXXrxx}79xx}7F+-88SE?*=,57 89q 	
 	4==t4j(":":DHH#IG	E 	j(":":DHH hhqk1-ig	O $$TXXq"((1+6F,5778q 	
4==t4r1   c                     	 	 dd}t        j                  | j                  d|t        d            }t	        |j
                  | j                  d       y )	Nc                 &   |d   |d   z   dz  } | |      }	d}
d}d}d}|rU|sS||k  rNd}|dz  }||z
  ||z   fD ]  } | |g| }|
dz  }
||	k  s|}	|}d} | ||       ||
|k\  rd}n
|r|s||k  rNt        j                  |	|||
|dkD        S )Nr)   r   r  TFrG  r]  )r   rQ  r   rs  rI  rh   r  r   rJ  rK  rL  rM  rN  rO  rR  rS  s                   r/   rT  z?TestOptimizeScalar.test_minimize_scalar_custom.<locals>.custmin  s    QZ'!*,3EJEHEHD4EGO 
#h.0@A (E--EMHu} % %#'( 'UO%(f*<D 4EGO  **u508519O Or1   )r   r   rV  rW  )rQ  r   r   r;   r   rX  )r   rU  r   rR  r   r.   rg   )ro   rT  r   s      r/   test_minimize_scalar_customz.TestOptimizeScalar.test_minimize_scalar_custom  sJ    AD*.	O8 &&txx.5/3T/BD 	t}}48r1   c                 F    t        j                  | j                  d       y )Nr6   r   r   rU  r   rn   s    r/   &test_minimize_scalar_coerce_args_paramz9TestOptimizeScalar.test_minimize_scalar_coerce_args_param  s      4r1   r   )r=  rS  rA  c                 X    dD ]%  }t        j                  | j                  d|i       ' y )N)r   r)   r4   r_   r   )r   r\  )ro   r   r   s      r/   	test_dispzTestOptimizeScalar.test_disp  s-     ! 	GD$$TXX~F	Gr1   c                 
   |dk(  rdddgini }t        j                  | j                  fd|i|}t        |d      sJ t        |d      sJ t        |d      sJ t        |d	      sJ t        |d
      sJ t        |d      sJ y )NrS  r  r  r   r   r.   r   r  r   r   r   )r   rU  r   rt   )ro   r   r  rI  s       r/   test_result_attributesz)TestOptimizeScalar.test_result_attributes  s    *0I*=(S"I&2))$((L6LVLvs###vy)))vy)))vu%%%vv&&&vu%%%r1   c           
      
   t         j                  j                  d       dgfd}d}d}t        j                  d      5  t	               5 }|j                  t        d       |j                  t        d	       |j                  t        d
       dg|dk(  rd|ini }t        j                  |fd|i||t        d      d}t        |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr8   r   c                     dxx   dz  cc<   d   dkD  rt         j                  S | dz  dt        j                  |       z  z   S )Nr   r)   r   r4   r>   )r+   r  rB   )r.   r  s    r/   r}   z0TestOptimizeScalar.test_nan_values.<locals>.func  s?    !HMHQx!|vv!tcBFF1Io--r1   r:  r  r   r  r  r  r  rS  r  rQ  r  r  r   F)r+   r7   r:   r   r	   r  r  r  r   rU  rR  r   r   )	ro   r   r}   rQ  r  r  r  r   r  s	           @r/   r  z"TestOptimizeScalar.test_nan_values  s     			t	. [[* 	-,=,? 	-3JJ{$78JJ~'ABJJ~'BCCE+1Y+>h'BF**4 E E-3E<B373CEC e,	- 	- 	- 	- 	- 	-s%   C9BC-C9-C6	2C99Dc                     d }t        j                  |      }t        |j                  dd       t        j                  |dddi      }t        |j                  d	       y )
Nc                     | dz  S r<  r   r-   s    r/   r|   zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.f  r  r1   r   r   r   )r)   r0  r  r  )r  r   r)   )r   rU  r   r.   )ro   r|   r   s      r/   %test_minimize_scalar_defaults_gh10911z8TestOptimizeScalar.test_minimize_scalar_defaults_gh10911  sT    	 &&q)qt,&&q07/?Aq!r1   c                    d}t        j                  t        |      5  t        j                  t
        j                  dt
        j                  f       d d d        t        j                  t        |      5  t        j                  t
        j                  t
        j                  df       d d d        y # 1 sw Y   cxY w# 1 sw Y   y xY w)Nz+Optimization bounds must be finite scalars.r   r)   r  )	r   r
   rQ   r   rU  r+   rB   r  r  r  s     r/   'test_minimize_non_finite_bounds_gh10911z:TestOptimizeScalar.test_minimize_non_finite_bounds_gh10911  s     <]]:S1 	A$$RVVQK@	A]]:S1 	A$$RVVRVVQK@	A 	A	A 	A	A 	As   6B676C6B?Cr=  rA  c                     d}t        j                  t        |      5  t        j                  t
        j                  |d       d d d        y # 1 sw Y   y xY w)Nz'Use of `bounds` is incompatible with...r   rI  r   r  )r   r
   rQ   r   rU  r+   rB   )ro   r   r  s      r/   2test_minimize_unbounded_method_with_bounds_gh10911zETestOptimizeScalar.test_minimize_unbounded_method_with_bounds_gh10911  sF     8]]:S1 	K$$RVVF6J	K 	K 	Ks   'AArp  r  r)   r;   fshape)r   r)   r)   r)   c                 p   fd}d\  }}|dk7  rt        ||f      nt        ||f      }|j                  t        ||             t        j                  |fi |}|j                  j
                  |j                  j
                  cxk(  r& ||j                        j
                  cxk(  rk(  sJ  J y )Nc                 R    t        j                  | dz        j                        S Nr   )r+   rL   reshape)r.   rl  s    r/   r|   zITestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196.<locals>.f!  s     88AqD>))&11r1   )r  rI   rS  )rQ  r  )r   r  )rR  updater   rU  r.   shaper   )	ro   r   r  rl  r|   rx  br  r   s	      `     r/   +test_minimize_scalar_dimensionality_gh16196z>TestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196  s    	2 1*0I*=$1v&Aq6* 	d&c23&&q3F3uu{{cggmmGqx~~GGGGGGr1   )rS  r=  rA  c                    d }i }|dk(  rdnd}ddg||<   ddd	}t        j                  t        j                  d
      5  t        j                  |f||d| d d d        d|d<   t        j                  |f||d| y # 1 sw Y   (xY w)Nc                     | dz
  dz  S r3   r   r-   s    r/   r|   zBTestOptimizeScalar.test_minimize_scalar_warnings_gh1953.<locals>.f1  r  r1   rS  r  rQ  r  r   Tr_   r!  r
  r   r   Fr   )r   r  r   r  rU  )ro   r   r|   r  kwdr   s         r/   $test_minimize_scalar_warnings_gh1953z7TestOptimizeScalar.test_minimize_scalar_warnings_gh1953,  s    
	  I-h92hsA.\\(22:JK 	/$$Q /vw /'-/	/    M67MfM	/ 	/s    BB
NrP  )r   r   r   rp   r   r>  r   ri  rj  rD  rG  rJ  rM  rV  rY  r]  rk  r_  ra  r  rf  rh  rk  r   rv  r  rz  r   r1   r/   r/  r/    s    7* [[ 568 78>	F5&
:5x!9F5 [[X'EFG GG
 [[X'EF& G& [[ 56[[X'EF- G 7-:"A [[X':;K <K [[ 89[[X'>?[[UQI.[[X'9:H ; / @ :H [[[[X'EFN G Nr1   r/  c                       e Zd Zej                  j                  d      d        Zej                  j                  dd      d        Zy)TestBracketrp  c                     d }d}t        j                  t        |      5  t        j                  |dd       d d d        t        j                  t        |      5  t        j                  |dt
        j                         d d d        t        j                  t        |      5  t        j                  |d       d d d        t        j                  t        |      5  t        j                  |d       d d d        d }d	}t        j                  t        |      5  t        j                  |d
dd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   y xY w)Nc                 &    d| k  | dk  z  r| dz  S dS NrF  r)   r4   g      Y@r   r-   s    r/   r|   z3TestBracket.test_errors_and_status_false.<locals>.fF       !VA.1a4:U:r1   9The algorithm terminated without finding a valid bracket.r   rF  r)   r  r4  c                 Z    d| dz  z  d| dz  z  z   d| dz  z  z
  d| dz  z  z   d| z  z
  dz   S )	Nr  r   r      r_      r4   r)   r   r-   s    r/   r|   z3TestBracket.test_errors_and_status_false.<locals>.fS  sE    19q1a4x'"q!t)3b1a4i?!a%G!KKr1   z8No valid bracket was found before the iteration limit...r   r^   r   r  )	r   r
   ru   r   rQ  r+   r  r=  rA  )ro   r|   r  s      r/   test_errors_and_status_falsez(TestBracket.test_errors_and_status_falseC  s)   	; N]]<w7 	'QA&	']]<w7 	,QBFF+	,]]<w7 	-NN1G,	-]]<w7 	.OOAW-	.	L M]]<w7 	7Qc26	7 	7	' 	'	, 	,	- 	-	. 	.	7 	7s;   E&E%E E( E4EEE%(E14E=r   )r=  rA  c                     d }d}t        j                  |d|      }|j                  rJ ||j                  v sJ |j                  dk(  sJ |j
                  dk(  sJ |j                  dk(  sJ y )Nc                 &    d| k  | dk  z  r| dz  S dS r  r   r-   s    r/   r|   z9TestBracket.test_minimize_scalar_success_false.<locals>.f]  r  r1   r  r  )rQ  r   r_   r   r0  )r   rU  r   r  r   r   r   )ro   r   r|   r  r   s        r/   "test_minimize_scalar_success_falsez.TestBracket.test_minimize_scalar_success_falseZ  sq    	; N&&q'&I;;#++%%%xx1}}ww!||ww#~~r1   N)	r   r   r   r   ri  rj  r  rk  r  r   r1   r/   r|  r|  A  sJ    [[ 897 :7, [[X':; <r1   r|  c                  b    t        t        t        j                  t        j
                  d       y )Ng{Gzr@  )rP   rQ   r   r=  r+   rG   r   r1   r/   test_brent_negative_tolerancer  j  s    *hnnbff$?r1   c                   $    e Zd Zd Zd Zd Zd Zy)TestNewtonCgc                 P   t        j                  ddg      }t        j                  t        j                  |t        j
                  t        j                  dd      }|j                  sJ |j                         t        |j                  t        j                  ddg      d       y 	Nr   r\   r   rG  r   r   r  r   r)   r  r   )r+   rL   r   r   r   r   r   r   r  r   r.   ro   rU   r   s      r/   test_rosenbrockzTestNewtonCg.test_rosenbrocko  sx    XXtSk"$,$6$6%-%8%8$('2	4
 {{'CKK'{rxxA/d;r1   c                 .   t        j                  t              }t        j                  t
        |t        t        dd      }|j                  sJ |j                         t        |j                  t        d       t        |j                  t        d       y )NrG  r;   )r   r   r   r  r  r   r   )r+   rL   rT   r   r   
himmelblaurR   rS   r   r  r   r.   himmelblau_xoptr   himmelblau_minr  s      r/   test_himmelblauzTestNewtonCg.test_himmelblauy  sh    XXm$
 "$3%4'2$(* {{'CKK'{T:d;r1   c                 4   t        j                  ddg      }t        j                  t        j                  |t        j
                  ddd      }|j                  sJ |j                         t        |j                  t        j                  ddg      d	       y )
Nr   r\   r  r   rG  r  r)   r  r   )
r+   rL   r   r   r   r   r   r  r   r.   r  s      r/   test_finite_differencez#TestNewtonCg.test_finite_difference  sr    XXtSk"$,$6$6%.$('2	4
 {{'CKK'{rxxA/d;r1   c                 X   t        j                  ddg      }t        j                  t        j                  |t        j
                  t        j                         dd      }|j                  sJ |j                         t        |j                  t        j                  ddg      d       y r  )r+   rL   r   r   r   r   r   r   r  r   r.   r  s      r/   test_hessian_update_strategyz)TestNewtonCg.test_hessian_update_strategy  sx    XXtSk"$,$6$6%-]]_$('2	4
 {{'CKK'{rxxA/d;r1   N)r   r   r   r  r  r  r  r   r1   r/   r  r  n  s    <
<<<r1   r  c                     t         j                  j                  } t        j                  g d      }t        j                  g d      }t        j                  g d      }t        j                  g d      }|t        j                  g d      ddf|t        j                  g d      d	d
f|t        j                  g d      ddf|t        j                  g d      ddf|t        j                  g d      d	d
f|t        j                  g d      ddf|t        j                  g d      ddf|t        j                  g d      ddf|t        j                  g d      dd	f|t        j                  g d      ddf|t        j                  g d      ddf|t        j                  g d      dd	f|t        j                  g d      ddff}|D ]1  \  }}}}	 | ||||      \  }
}t        |
|d       t        ||	d       3 t        j                  t        j                   d	t        j                   dg      }t        j                  t        j                  d
dt        j                  g      }|t        j                  g d      t        j                   t        j                  f|t        j                  g d      d	d
f|t        j                  g d      t        j                   df|t        j                  g d      dt        j                  f|t        j                  g d      d	d
f|t        j                  g d      dt        j                  f|t        j                  g d      t        j                   t        j                  f|t        j                  g d      dd	f|t        j                  g d      t        j                   df|t        j                  g d      dt        j                  f|t        j                  g d      dd	f|t        j                  g d      dt        j                  ff}|D ]1  \  }}}}	 | ||||      \  }
}t        |
|d       t        ||	d       3 y )N)333333rF  r   r  )r   r)   ffffff@r_   r`   r   r   r   )r`   r4   r  r   r\   r   r   r   r  r   r`   r)   r   r   rF  r)   r`   r   r)   r   r   r  r`   r   r   r)   r  r_   )r\   r)   r   r   )r\   r   rF  r4   r6   )r  r   rF  r4   gffffff?g333333@)r\   r   rF  r   r;   r   g333333)r   r{  _line_for_searchr+   rL   r   r  )line_for_searchlower_boundupper_boundrU   x1	all_testsr.   alphalminlmaxmimas               r/   test_line_for_searchr    sr   
 ((99O ((/0K((+,K 
-	 B	.	!B 
RXXm$dC0	RXXm$b!,	RXXm$dC0	RXXm$b!,	RXXm$b!,	RXXn%tS1	RXXn%tT2	RXXm$dC0	RXXm$b"-	RXXm$c3/	RXXm$b!,	RXXm$b"-	RXXn%tT2I  !* -5$ E;DBDt,Dt,- ((RVVGR"&&"56K((BFFAsBFF34K 
RXXm$rvvgrvv6	RXXm$b!,	RXXm$rvvgs3	RXXm$b"&&1	RXXm$b!,	RXXn%tRVV4	RXXm$rvvgrvv6	RXXm$b"-	RXXm$rvvgs3	RXXm$b"&&1	RXXm$b"-	RXXn%tRVV4I !* -5$ E;DBDt,Dt,-r1   c            
         t         j                  j                  } d }t        j                  g d      } ||      }t        j                  t        j
                   gdz        }t        j                  t        j
                  gdz        }t        j                  g d      dft        j                  g d      dft        j                  g d      d	ft        j                  g d
      dft        j                  g d      dft        j                  g d      dft        j                  g d      dff}|D ]  \  }} | ||||d      \  }	}
}t        |	 |||z        d       t        |
||z  d       t        |||z  d        | |||d|||      \  }	}
}t        |	 |||z        d       t        |
||z  d       t        |||z  d        y )Nc                 b    t        j                  | t        j                  g d      z
  dz        S N)r  r  r6   皙ٿr4   r+   rC   rL   r-   s    r/   r}   z$test_linesearch_powell.<locals>.func  %    vvq288$:;;ABBr1   r  r   r  rF  r  r4   r  r6   r  r  r  r   r)   r         ?r`   r   r)   r)   皙?r  r   rF  r)   r   )fvalr  r;   r   r  r  r  r  )r   r{  _linesearch_powellr+   rL   r  r   linesearch_powellr}   r  r  r  r  r  xilr|   r   r9   s               r/   test_linesearch_powellr    s    **==C	-	 B8D((RVVG9q=)K((BFF8a<(K 
-	 "%	-	 !$	-	 #&	-	 #&	.	!4(	-	 #&	.	!4(I  6A+D"b154A1i4B<d31r6-	1r65+D"bd8C8C1571i 	4B<d31r6-	1r656r1   c            
         t         j                  j                  } d }t        j                  g d      } ||      }t        j                  dgdz        }t        j                  dgdz        }t        j                  g d      dft        j                  g d      d	ft        j                  g d
      dft        j                  g d      dft        j                  g d      dft        j                  g d      dft        j                  g d      dff}|D ]Q  \  }} | |||d|||      \  }	}
}t        |	 |||z        d       t        |
||z  d       t        |||z  d       S t        j                  dgdz  dgz         }t        j                  dgdz  dgz         }t        j                  g d      dft        j                  g d      dft        j                  g d
      dft        j                  g d      dft        j                  g d      dft        j                  g d      dft        j                  g d      dff}|D ]Q  \  }} | |||d|||      \  }	}
}t        |	 |||z        d       t        |
||z  d       t        |||z  d       S t        j                  g d      } ||      }t        j                  g d      dft        j                  g d      dft        j                  g d
      dft        j                  g d      d ff}|D ]W  \  }} | |||d|||      \  }	}
}t        |	 ||||z  z         d       t        |
|||z  z   d       t        |||z  d       Y t        j                  g d      } ||      }t        j                  dt        j                   t        j                   dg      }t        j                  t        j                  dt        j                  dg      }t        j                  g d      dft        j                  g d      dft        j                  g d
      dft        j                  g d      dft        j                  g d      dft        j                  g d      dft        j                  g d      dff}|D ]Q  \  }} | |||d|||      \  }	}
}t        |	 |||z        d       t        |
||z  d       t        |||z  d       S t        j                  g d      } ||      }t        j                  g d      dft        j                  g d      dft        j                  g d
      dft        j                  g d      d ff}|D ]W  \  }} | |||d|||      \  }	}
}t        |	 ||||z  z         d       t        |
|||z  z   d       t        |||z  d       Y y )!Nc                 b    t        j                  | t        j                  g d      z
  dz        S r  r  r-   s    r/   r}   z,test_linesearch_powell_bounded.<locals>.func	  r  r1   r  g       r   r  r  rF  r  r4   r  r6   r  r  r  r  r  r  r  r  r   r  r;   r   g333333ӿr_   g?r  r]   g333333ÿ)r  r   r   r4   r   g333333)r   r{  r  r+   rL   r   r  r  s               r/   test_linesearch_powell_boundedr    sh    **==C	-	 B8D ((C57#K((B46"K 
-	 "%	-	 !$	-	 #&	-	 #&	.	!4(	-	 #&	.	!4(I  6A+D"bd8C8C1571i 	4B<d31r6-	1r656 ((C57bT>*K((C57bT>*K 
-	 #&	-	 #&	-	 #&	-	 #&	.	!2&	-	 #&	.	!4(I  6A+D"bd8C8C1571i 	4B<d31r6-	1r656 
.	!B8D 
-	 "%	-	 #&	-	 #&	-	 $'	I  6A+D"bd8C8C1571i 	4QV,482B;T2	1r656 
-	 B8D ((C"&&266'267K((BFFC45K 
-	 #&	-	 #&	-	 #&	-	 #&	.	!2&	-	 #&	.	!4(I  6A+D"bd8C8C1571i 	4B<d31r6-	1r656 
.	!B8D 
-	 "%	-	 #&	-	 #&	-	 $'	I  6A+D"bd8C8C1571i 	4QV,482B;T2	1r656r1   c                      t        j                  ddgddg      fd} t        j                  | ddgd       t        j                  dgdgdg	      d
 }t        j                  |dgd       y )Nr   333333?r  c                     | \  }}| j                   k\  j                         r| j                  k  j                         sJ |dz  |dz  z   S r<  )lbrK   ub)r.   rx  ru  r  s      r/   r   ztest_powell_limits.<locals>.fun	  sK    1VYY##%1		>*>*>*@@@AvQr1   r  r  r)   T)r  r  keep_feasiblec                 D    | dk\  r| dk  sJ t        j                  |       S r  r*   r-   s    r/   r}   z test_powell_limits.<locals>.func	  s#    Av!q&  vvayr1   r^   rg  )r   rU   r   r  )r   r   r   )r   r}   r  s     @r/   test_powell_limitsr  |	  sq    __aVc2Y/F
 csBiH __!dWEF $C5&Ir1   c                      t         d d g} | D ]=  }t        j                  |ddgd      }t        j                  |j
                        r=J  y )Nc                 >    t        j                  t        |             S rA   r+   rL   r   r-   s    r/   r  z$test_powell_output.<locals>.<lambda>	  s    RXXeAh/ r1   c                 @    t        j                  t        |       g      S rA   r  r-   s    r/   r  z$test_powell_output.<locals>.<lambda>	  s    288U1XJ;O r1   r  r  r  )rU   r   )r   r   r   r+   isscalarr   )funsr   r   s      r/   test_powell_outputr  	  sM    /1OPD $b	(C{{377###$r1   c                       e Zd Zd Z eddg      ej                  j                  d      d               Z eddg      ej                  j                  d      d               Z	y)		TestRosenc                     |j                  g d      }t        t        j                  |      |j                  d             y )Nr[   r`   )r}  r$   r   r   ro   r   r.   s      r/   
test_rosenzTestRosen.test_rosen	  s.    JJy!q)

2	(r1   z	jax.numpyz)JAX arrays do not support item assignment)reasonsskip_xp_backendsc           	          |j                  g d      }t        t        j                  |      |j	                  ||j                  d      j
                               y )N)r)   r)   r)   r)   r\   )r  )r}  r$   r   r   
zeros_liker  r  s      r/   test_rosen_derzTestRosen.test_rosen_der	  sF     JJ|$**1-arzz"~/C/CD	Fr1   c                 4   |j                  d      }t        |      }|j                  g d      }|j                  g d      }t        j                  ||      }|j	                  ||j
                        }t        j                  |      |z  }t        ||       y )Nr\   )r_   r   r   )r4   r4   r4   )r}  r%   r   rosen_hess_prodr  r  r   r$   )ro   r   onexp_testr.   r   hpdothps           r/   test_hess_prodzTestRosen.test_hess_prod	  s|     jjn!#&JJy!JJy!%%a+NN1cii(##A&*E"r1   N)
r   r   r   r  r  r   ri  usefixturesr  r  r   r1   r/   r  r  	  s    ( kJKM[[/0F 1MF
 kJKM[[/0	# 1M	#r1   r  c                 N    | \  }}||z  |z   dz
  }|||z  z   dz
  }||z  ||z  z   S )zx
    R^2 -> R^1 test function for optimization. The function has four local
    minima where himmelblau(xopt) == 0.
    r  r   r   )r   r.   r7  rx  ru  s        r/   r  r  	  sA    
 DAq	!a"A	AaC!AQ319r1   c                     | \  }}t        j                  d|dz  z  d|z  |z  z   d|z  z
  d|dz  z  z   dz
  d|dz  z  d|z  |z  z   d|dz  z  z   d|z  z
  dz
  g      S )Nr   r_   *   r4         rU  rd  r   r.   r7  s      r/   rR   rR   	  s    DAq88Qq!tVac!e^bd*Qq!tV3b8q!tVac!e^a1f,r!t3b8: ; ;r1   c                     | \  }}t        j                  d|dz  z  d|z  z   dz
  d|z  d|z  z   gd|z  d|z  z   d|z  d|dz  z  z   dz
  gg      S )Nr  r4   r   r  r  rd  r  s      r/   rS   rS   	  sr    DAq88bAg!mb(!A#!)4cAaCi1r!Q$w!346 7 7r1   gHzGѿgr_   r4   r`   c                      d } d }d }d| dd|dd|df}d }t        j                  |g dd|	      }t        |j                  g d
d       y )Nc                 d    t        j                  dd| d   z  z
  d| d   z  z
  d| d   z  z
  g      S )N   rI   r   r  r)   r  r4   rd  r-   s    r/   r}   z0test_minimize_multiple_constraints.<locals>.func	  s:    xxcAaDj31:5qtCDEEr1   c                 4    t        j                  | d   g      S r(   rd  r-   s    r/   func1z1test_minimize_multiple_constraints.<locals>.func1	      xx1r1   c                 4    t        j                  | d   g      S r<  rd  r-   s    r/   r  z1test_minimize_multiple_constraints.<locals>.func2	  r  r1   r  r  c                 *    d| d   | d   z   | d   z   z  S )NrF  r   r)   r4   r   r-   s    r/   r|   z-test_minimize_multiple_constraints.<locals>.f	  s"    QqTAaD[1Q4'((r1   r  r  r  )}   r   r   r  r   rC  )r}   r  r  r  r|   r   s         r/   "test_minimize_multiple_constraintsr  	  s`    F   D)E*E*,D) 

Ayd
KCCEE;U3r1   c                   T    e Zd Zd Zej
                  j                  d      d        Zy)TestOptimizeResultAttributesc                     ddg| _         t        j                  | _        t        j                  | _        t        j                  | _        t        j                  | _	        ddg| _
        y )Nr   )r`   r  )rU   r   r   r}   r   r   r   r   r  r   r  rn   s    r/   rp   z)TestOptimizeResultAttributes.setup_method	  sK    a&NN	%%''	--
 ),r1   r4   c           
         g d}ddgi}t         D ]  }t               5 }|j                  t        d       t	        j
                  | j                  | j                  || j                  | j                  | j                        }d d d        |D ]+  }||v r|||   v rt        |      sJ |t        |      v r+J  t        j                  t              rJ  y # 1 sw Y   XxY w)N)r   r   r.   r   r   r   r  ri  r   z7Method .+ does not use (gradient|Hessian.*) information)r   r   r   r   )r   r	   r  r  r   r   r}   rU   r   r   r   rt   dirr~  r  str)ro   
attributesr  r   r  r   	attributes          r/   test_attributes_presentz4TestOptimizeResultAttributes.test_attributes_present	  s    !
5'"& 	0F"$ :

>+- ''		4776,0HH499.2jj:	: ( -	T>i4<&?sI... CH,,,- ckk3///!	0: :s   A$CC!	N)r   r   r   rp   r   ri  r  r   r   r1   r/   r  r  	  s*    - [[10 0r1   r  c                 ~    | \  }}|\  }}}}}}	}
}}}}}}||dz  z  ||z  |z  z   ||dz  z  z   ||z  z   ||z  z   |	z   S r<  r   rb  r   r.   r7  rx  ru  rr   r	  r   r|   r=  r  r  r5  rA  r  r  s                    r/   f1r  
  sj    DAq06-Aq!Q1aAq!Q1Hq1uqy 1q!t8+ac1AaC7!;<r1   c                     | \  }}|\  }}}}}}	}
}}}}}}|
 t        j                  ||z
  dz  ||z
  dz  z    |z        z  S r<  r*   r  s                    r/   f2r  
  ^    DAq06-Aq!Q1aAq!QBrvv1qAaC!8+,u4556r1   c                     | \  }}|\  }}}}}}	}
}}}}}}| t        j                  ||z
  dz  ||z
  dz  z    |z        z  S r<  r*   r  s                    r/   f3r  
  r  r1   c                 N    t        | g| t        | g| z   t        | g| z   S rA   )r  r  r  )rb  r   s     r/   
brute_funcr
  
  s*    a>&>BqN6N*R^F^;;r1   c                       e Zd Zd Zd Zd Zd Zej                  j                  d      d        Z
ej                  j                  d        Zd Zy	)
	TestBrutec                     d| _         t        ddd      t        ddd      f| _        t        j                  ddg      | _        y )N)r4   r_   r   r   r   r   ,   rF  r4   r  r)   r  r^   r  r         ?g_}gi?)r   slicerrangesr+   rL   rg   rn   s    r/   rp   zTestBrute.setup_method$
  s<    Db!T*E"a,>?+z!:;r1   c                     t        |g| S rA   )r
  )ro   rb  r   s      r/   r
  zTestBrute.brute_func)
  s    !%f%%r1   c                    t        j                  t        | j                  | j                  dt         j
                        }t        |d   | j                  d       t        |d   t        | j                  g| j                   d       t        j                  t        | j                  | j                  dt         j                        }t        |d   | j                  d       t        |d   t        | j                  g| j                   d       t        j                  | j                  | j                  | j                  dt         j                        }t        |d   | j                  d       y )NTr   r   finishr   r   r   r)   )	r   bruter
  r  r   r)  r   rg   r   )ro   resbrutes     r/   
test_brutezTestBrute.test_brute-
  s
   >>*dll.28==JT]]>Z%L%L!	# >>*dll.2)1):):< 	T]]>Z%L%L!	#
 >>$//4<<'+{{)1):):< 	T]]>r1   c                 >    d }t        j                  |dgdd        y )Nc                 h    t        | j                        dk(  sJ | j                  d   dk(  sJ | dz  S )Nr)   r   r4   )r  rt  r-   s    r/   r|   zTestBrute.test_1D.<locals>.fG
  s5    qww<1$$$771:?"?6Mr1   r  r_   )Nsr  )r   r  )ro   r|   s     r/   test_1DzTestBrute.test_1DD
  s    	
 	q7)$7r1   r   c                    t        j                  t        | j                  | j                  dd       }t        j                  t        | j                  | j                  dd d      }t        |d   |d          t        |d   |d          y )NTr  r4   )r   r   r  workersrF  r   )r   r  r
  r  r   r   )ro   r  	resbrute1s      r/   test_workerszTestBrute.test_workersN
  sr     >>*dll.24A NN:t||$++/3D!M	 		"x|4	!hqk2r1   c                    t         j                  j                  d      fd}d}t        j                  t
        |      5  t        j                  || j                  | j                  d       d d d        y # 1 sw Y   y xY w)Nr8   c                 ,    j                  d      dz  S ro  rp  )rb  r   r=   s     r/   r}   z,TestBrute.test_runtime_warning.<locals>.func^
  s    ::a=4''r1   zFfinal optimization did not succeed.*|Maximum number of function eval.*r   T)r   r   )
r+   r7   rt  r   r  r  r   r  r  r   )ro   capsysr}   r  r=   s       @r/   r  zTestBrute.test_runtime_warningZ
  se    ii##D)	( W\\.4 	LNN4DKKdK	L 	L 	Ls   .A::Bc                 j    d }t        j                  |t        ddd      fd      }t        |d       y )Nc                     | |d   z  S rM  r   )r.   r   s     r/   r|   z+TestBrute.test_coerce_args_param.<locals>.fg
  s    Q<r1   r  r   r  r4   r[  r   )r   r  r  r   )ro   r|   r  s      r/   test_coerce_args_paramz TestBrute.test_coerce_args_parame
  s1    	  >>!eB3&7%9B!$r1   N)r   r   r   rp   r
  r  r  r   ri  r  r   r  r  r&  r   r1   r/   r  r  "
  s^    <
&?.8 [[2	3 	3 [[L L%r1   r  r  c                  ^  	 dd l } dd l		fd	fddfd}fd}| j                  j                         5 }g }|j	                  |j                  |             |j	                  |j                  |             |D ]  }|j                           	 d d d        y # 1 sw Y   y xY w)Nr   c                 6    j                  d       | d   dz  S )Nr>   r   r4   sleepr.   times    r/   
objective1z*test_cobyla_threadsafe.<locals>.objective1w
  s    

3tQwr1   c                 <    j                  d       | d   dz
  dz  S )Nr>   r   r)   r4   r)  r+  s    r/   
objective2z*test_cobyla_threadsafe.<locals>.objective2{
  s     

3!Q{r1   COBYLAc                  6    t        j                  dg       S Nr`   r   rw  )
min_methodr-  s   r/   
minimizer1z*test_cobyla_threadsafe.<locals>.minimizer1
         '*e-79 	9r1   c                  6    t        j                  dg       S r2  rw  )r3  r/  s   r/   
minimizer2z*test_cobyla_threadsafe.<locals>.minimizer2
  r5  r1   )concurrent.futuresr,  futuresThreadPoolExecutorrx   submitrI  )

concurrentr4  r7  pooltasksrs   r3  r-  r/  r,  s
         @@@@r/   test_cobyla_threadsafer?  n
  s      J9
9
 
			.	.	0 DT[[,-T[[,- 	AHHJ		  s   AB##B,c                   f    e Zd Zd Zd Zej                  j                  d      d        Zd Z	d Z
y)TestIterationLimitsc                 6    t        j                         | _        y rA   )ri   rj   rL  rn   s    r/   rp   z TestIterationLimits.setup_method
  s    !)r1   c                 P   t        | j                  d      sd| j                  _        | j                  xj                  dz  c_        t        j                  |d   dz  |d   dz  z         t        j
                  |d   |d         }}t        j                  |dz  |z         |dz  z   S )Nrr   r   r)   r4   r  r^   )rt   rL  rr   r+   r  arctan2rB   )ro   r)  rV   rs   s       r/   	slow_funczTestIterationLimits.slow_func
  s    t}}c*DMMO1wwqtQwqtQw'AaD!A$)?1vvadQh#%%r1   r   c                 (    | j                  dd       y )Nrr     check_limitsrn   s    r/   test_neldermead_limitz)TestIterationLimits.test_neldermead_limit
  s    --r1   c                 (    | j                  dd       y )Nrg  ra   rH  rn   s    r/   test_powell_limitz%TestIterationLimits.test_powell_limit
  s    (D)r1   c           
      Z   ddgddgddgfD ]  }dD ]p  }d| j                   _        t        j                  | j                  ||d|i      }| j                   j                  |d   k(  sJ |d	   r|d   |k  reJ |d   |k\  rpJ  dD ]A  }t        j                  | j                  ||d
|i      }|d	   r|d   |k  r6J |d   |k\  rAJ  ddgddgdt
        j                  gfD ]  \  }}d| j                   _        t        j                  | j                  ||||d      }| j                   j                  |d   k(  sJ |d	   r|d   |k  r	|d   |k  rqJ |d   |k\  r||d   |k\  rJ  t
        j                  d gd t
        j                  gfD ]  \  }}d| j                   _        t        j                  | j                  ||||d      }| j                   j                  |d   k(  sJ |d	   r||d   |dz  k  rnJ |d   |dz  k  r|J |d   |dz  k\  r|d   |dz  k\  rJ   y )Nr>   r)   r4   )r1  i    r   rs  r   r   r   rh   r   r1  rN  )rh   rs  )rL  rr   r   r   rE  r+   r  )ro   r   default_itersstart_vmfevr   mits          r/   rI  z TestIterationLimits.check_limits
  s   c
QFQF3 ,	>G' 	/"#''/51940@B }}#f+555y>v;---v;$...	/ ' -''/51:C0@B y>u:,,,u:,,,-  "2httRVVnE 
D	c"#''/5<?;?1AB }}#f+555y>v;-#e*2CCCv;$.#e*2CCC
D  "vvtntRVVn= >	c"#''/5<?;?1AB }}#f+555y>|"6{]1_<<<"5z]1_<<<K=?:"5z]1_<> =>=,	>r1   N)r   r   r   rp   rE  r   ri  r  rJ  rL  rI  r   r1   r/   rA  rA  
  s9    *& [[2. .*->r1   rA  c                  b   d } d }d }g d}|D ]I  }t        j                  | t        j                  dg      |      }|j                  j
                  dk(  rIJ  g d}|D ]K  }t        j                  | t        j                  dg      |||	      }|j                  j
                  dk(  rKJ  y )
Nc                     | | z  S rA   r   r-   s    r/   r   z2test_result_x_shape_when_len_x_is_one.<locals>.fun
  s    1ur1   c                     d| z  S Nr  r   r-   s    r/   r   z2test_result_x_shape_when_len_x_is_one.<locals>.jac
  s    Avr1   c                 0    t        j                  dgg      S rV  rd  r-   s    r/   r   z3test_result_x_shape_when_len_x_is_one.<locals>.hess
  s    xx"r1   )	rr  r  r   r   r"  r  r0  COBYQAr  r>   r   rm  )r  r  r  r  r  rG  r  )r   r   r+   rL   r.   rt  )r   r   r   r  r   r   s         r/   %test_result_x_shape_when_len_x_is_onerY  
  s     ,G #RXXse_VDuu{{d"""#
,G #RXXse_V%)+uu{{d"""#r1   c                       e Zd Zd Zd Zy)FunctionWithGradientc                 6    t        j                         | _        y rA   )ri   rj   number_of_callsrn   s    r/   r  zFunctionWithGradient.__init__
  s    (0r1   c                     t        | j                  d      sd| j                  _        | j                  xj                  dz  c_        t        j                  |dz        d|z  fS )Nrr   r   r)   r4   )rt   r]  rr   r+   rC   r  s     r/   r  zFunctionWithGradient.__call__
  sR    t++S1%&D  "!#vvad|QU""r1   Nr  r   r1   r/   r[  r[  
  s    1#r1   r[  c                      t               S rA   )r[  r   r1   r/   function_with_gradientr`  
  s    !!r1   c                    t        |       }t        j                  ddg      }t         ||      d       | j                  j
                  dk(  sJ t        |j                  |      d|z         | j                  j
                  dk(  sJ d       t         |d|z        dd	       | j                  j
                  dk(  sJ d       y )
Nr\   r  r  r)   r4   zHfunction is not recomputed if gradient is requested after function valueg      4@(different input triggers new computationr  )r   r+   rL   r   r]  rr   
derivativer`  memoized_functionrU   s      r/   )test_memoize_jac_function_before_gradientrf    s    "#9:	3*	B%b)3/!1133q888%004a"f=!1133q8 8	888 !b&!4:< "1133q8 3238r1   c                    t        |       }t        j                  ddg      }t        |j	                  |      d|z         | j
                  j                  dk(  sJ t         ||      d       | j
                  j                  dk(  sJ d       t        |j	                  d|z        d|z  d	       | j
                  j                  dk(  sJ d       y )
Nr\   r  r4   r)   r  zHfunction is not recomputed if function value is requested after gradientr   rb  r  )r   r+   rL   r   rc  r]  rr   rd  s      r/   )test_memoize_jac_gradient_before_functionrh    s    "#9:	3*	B%004a"f=!1133q888%b)3/!1133q8 8	888 $$QV,a"f:< "1133q8 3238r1   c           	         t        |       }|j                  }t        j                         }t	        j
                  ddg      }t        ||d||dd      }| j                  j                  dk(  sJ |j                  |dz          | j                  j                  dk(  sJ |j                  |dz          | j                  j                  d	k(  sJ y)
z Tests that using MemoizedJac in combination with ScalarFunction
        and BFGS does not lead to repeated function evaluations.
        Tests changes made in response to GH11868.
    r\   r^   r   Nr)   r>   r4   rI   r_   )
r   rc  r   r   r+   rL   r   r]  rr   r   )r`  re  r   r   rU   scalar_functions         r/   test_memoize_jac_with_bfgsrk  '  s    
 ##9:

&
&C==?D	3*	B$2r3dD:O!1133q888S!!1133q888S!!1133q888r1   c                      t               5  t        j                  d t        j                   t        j                  d       d d d        y # 1 sw Y   y xY w)Nc                 4    t        j                  | dz  g      S r<  rd  r-   s    r/   r  ztest_gh12696.<locals>.<lambda>@  s    bhh1v& r1   Fr   )r   r   rF  r+   r!  r   r1   r/   test_gh12696rn  <  sC    		 C&E	CC C Cs   8AAc                     t         j                  j                  d      } | j                  d      }t        j                  g d      t        j                  g d      }|k(  dfd	fdfdfd	}fd
}fd}fd}fd}t        |t         j                   d      }t        |t         j                   d|      }	t        |t         j                   d      }
t        |t         j                   d|      }d}dddfdddf}d t        f}dg g f||	f||f|	g|	gf|
g|gf||
g|	|gf||g|	|gf|	|g|	|gff	}d |f}|||||||d	}|S )Nr   r   )r   r4   rF  r  )r_   r4   r4   r  Tc                 V    |r| j                   dk(  sJ |rt        |              y y rq  )rH  r   )r.   
check_sizecheck_valuesi_ebr  s      r/   check_xz(setup_test_equal_bounds.<locals>.check_xM  s0    66Q;;AdGRX. r1   c                 >     |        t        j                  |       S rA   r  r.   rt  s    r/   r}   z%setup_test_equal_bounds.<locals>.funcS  s    
~~a  r1   c                 >     |        t        j                  |       S rA   )r   r   rv  s    r/   r   z%setup_test_equal_bounds.<locals>.gradW  s    
!!!$$r1   c                      |        y rA   r   )r.   r   rt  s     r/   r  z)setup_test_equal_bounds.<locals>.callback[  s
    
r1   c                 (     | d       | dd dz
  S )NFrr  r   r)   r   rv  s    r/   constraint1z,setup_test_equal_bounds.<locals>.constraint1^  s    &1vzr1   c                 P     | d       t        j                  |       }d|d<   |S )NFrz  r)   r   r+   r  r.   dcrt  s     r/   	jacobian1z*setup_test_equal_bounds.<locals>.jacobian1b  )    &]]11	r1   c                 (     | d       | dd dz
  S )NFrz  r4   r_   r^   r   rv  s    r/   constraint2z,setup_test_equal_bounds.<locals>.constraint2h  s    &1v|r1   c                 P     | d       t        j                  |       }d|d<   |S )NFrz  r)   r4   r}  r~  s     r/   	jacobian2z*setup_test_equal_bounds.<locals>.jacobian2l  r  r1   )r"  r  r  Fr  c                 $     |        |       fS rA   r   )r.   r}   r   s    r/   r  z)setup_test_equal_bounds.<locals>.<lambda>~  s    Qa1 r1   c                 ,    t        t        | |            S rA   )listzipr  r  s     r/   r  z)setup_test_equal_bounds.<locals>.<lambda>  s    $s2r{"3 r1   r  )	r  kwdsbound_typesr[  	callbacksr  r  rU   rs  )TT)r+   r7   r  r  rL   r   r  r   )r=   rU   r  r  r{  r  r  r  c1ac1bc2ac2br  r  r  r[  r  datart  r}   r   rs  r  s                     @@@@@r/   setup_test_equal_boundsr  E  s   
))


"C	!B	"	#B	/	"B"HD/!% kBFF7A
6C
kBFF7Ay
AC
kBFF7A
6C
kBFF7Ay
AC +G '&1D 4K  "b:SzEC5>SEC5>#Jc
+#Jc
+#Jc
+-K x I[&YBb$8D Kr1   z0Failures due to floating point issues, not logicdicts)mode	Compilersfortrannamez
intel-llvmr  r  r  
bound_typer  r[  r  r  c           	      p   t        j                         dk(  r#| dk(  r|d   du r|t        j                  d       t        d   t        d   }}t        d	   t        d
   }}|\  }	}
|	r| dk(  st        j                  d       |	|
k7  } |||      }|j                  || ||	|d       t        j                  di |}t        j                  t        j                  || t        j                  ||
      }|j                  sJ t        |j                  |j                  d       t        |j                  |j                  d       |s|d   du rt        j                  |j                   |<   |j                   j"                  d   dk(  sJ t        |j                   |   |j                   |   d       |d   s|	st%        |t&              sod }t        j                  ||ddg   | |ddd         }t        |j                  |j                         t        |j                  ddg   |j                  d       yyyy)z
    Tests that minimizers still work if (bounds.lb == bounds.ub).any()
    gh12502 - Divide by zero in Jacobian numerical differentiation when
    equality bounds constraints are used
    aarch64r  r   FNzTolerance violation on aarchr  r  rU   rs  r  z)Only SLSQP supports nonlinear constraints)rU   r   r  r[  r  )r   r   r  r[  gTqs*>r   gMb@?r   r   r;   c                     t        j                  t         j                  dt         j                  dg      }| |ddg<   t        j                  |      S )Nr4   rF  r   )r+   rL   r  r   r   )r.   new_xs     r/   r   ztest_equal_bounds.<locals>.fun  s=    HHbffa45EE1a&M>>%((r1   r4   rj  g>r   )platformmachiner   r  eb_datars  r   r   r   r   r   r   r   r.   r+   r  r   rt  r~  r   )r   r  r  r[  r  r  r  rU   rs  test_constraintsreference_constraints	fd_neededr  r   expectedr   fd_ress                    r/   test_equal_boundsr    s     	i'FeOUu$)=23T]GDMBt}gfoB.9++' 1?@ "%::IBFKKrVv 0hH I



#d
#C  F%-%7%7-BDH
 ;;;CGGX\\7CEE8::D1DK5(VVT77==q   CGGDM8<<#5DAK+z&&/I	)
 ""3#%q!f:*0*01+7 	, 	q!fvxxd;% 0J+Kr1   c                    dd}ddg}d}t        j                  ||||       }|j                  sJ t        |j                   |ddg             |j
                  dk(  sJ |j                  d	k(  sJ d
}t        j                  |||| |      }|j                  sJ t        |j                   |ddgd             | j                         dk(  r.d }t        |t        j                   d      }t        j                  |||| |g      }|j                  du sJ t        |j                   |ddg             |j
                  dk(  sJ d}|j                  j                  |      sJ t        |t        j                   d      }t        j                  |||| |g      }|j                  du sJ t        |j                   |ddg             |j
                  dk(  sJ d}|j                  j                  |      sJ y y )Nr)   c                 F    t         j                  j                  |       |z   S rA   )r+   linalgnorm)r.   p1s     r/   r|   z test_all_bounds_equal.<locals>.f  s    yy~~a 2%%r1   rn  )r4   r4   )r\   rB  rA  r\   r  z/All independent variables were fixed by bounds.)r4   rT  r4   r  c                 ,    t        j                  |       S rA   r=  r-   s    r/   conz"test_all_bounds_equal.<locals>.con  s    66!9r1   r`   )r  r   r[  Fz3All independent variables were fixed by bounds, butr   Tz8All independent variables were fixed by bounds at valuesrm  )r   r   r   r   r   r   r  upperr   r+   r  r  )	r   r|   r  rU   r   r   r  nlcr  s	            r/   test_all_bounds_equalr    s   & fF	B


Ar&
@C;;;CGGQSz]+88q==;;KKKKD


Ar&d
KC;;;CGGQSz1-.||~ 	!#w4r&cU
 {{e###C:/xx1}}G{{%%g...!#w2r&cU
 {{d"""C:/xx1}}L{{%%g...+ !r1   c                      d } d }d|dg}dgdz  }d|d<   t        j                  | g d	d
||       |d   d   |k(  sJ y )Nc                 <    | d   dz  | d   dz  z   | d   | d   z  z   S )Nr   r_   r)   r4   r   r-   s    r/   r|   ztest_eb_constraints.<locals>.f  s.    tQw1q 1Q4!9,,r1   c                 6    | d   | d   z   | d   z   | d   z   dz
  S )Nr   r)   r4   r_   (   r   r-   s    r/   cfunz!test_eb_constraints.<locals>.cfun  s+    tad{QqT!AaD(2--r1   r  r  )r   r  r   )r   r   r)   )r)   r4   r_   r   r  )rU   r   r  r[  r   r   rw  )r|   r  r[  r  s       r/   test_eb_constraintsr    se    -. #401KY]FF1I	 q>% D(((r1   c                     t         t        t        t        t        t
        d} | j                         D ]  \  }}|D ]  }t        ||         dddd}|j                         D ]  \  }}t        t        t        ||        y )N)r   rU  rootroot_scalarlinprogquadratic_assignmentekkir	  )r   maximizemaximize_scalar)
r   r   r   r   r   r   itemsr   rP   rQ   )solver_methodssolverr  r   unknown_solver_methods        r/   test_show_optionsr  '  s    $2*" <N *//1 ) 	)F(	)) !
 0557 @j,?@r1   c                      t        j                  ddgddg      } t        j                  t         j                  t	        j
                  ddg      d|        y )Nr  r  r  r   r  r  )r   r   r   r   r+   rL   r  s    r/   test_bounds_with_listr  ?  sB    __Rc3Z8F288QF+HVr1   c            	      <   d } d }d }g d}g d}t        j                  d      dz  }t        D ]j  }d }d }||v r|}||v r|}t        j                  | ||||      }	t        |	j                  t        j                  t        j                  |            d	
       l y )Nc                     t        j                  t        j                  |             }| |z  } | | z  } t        j                  |       S rA   )r+   rO   rH  rC   r  s     r/   fquadz/test_x_overwritten_user_function.<locals>.fquadK  s8    IIbggaj!	Q	Qvvayr1   c                 p    t        j                  t        j                  |             }| dz  } | d|z  z  } | S r<  )r+   rO   rH  r  s     r/   	fquad_jacz3test_x_overwritten_user_function.<locals>.fquad_jacQ  s3    IIbggaj!	Q	QU
r1   c                 X    t        j                  t        j                  |             dz  S rV  )r+   r   rH  r-   s    r/   
fquad_hessz4test_x_overwritten_user_function.<locals>.fquad_hessW  s    vvbggaj!C''r1   )rP  r  r  r  r  r  )r  r  r  r  r  r   r6   r  g-C6*?r   )	r+   r  r   r   r   r   r.   rO   rH  )
r  r  r  meth_jac	meth_hessrU   methr   r   r   s
             r/    test_x_overwritten_user_functionr  G  s    (HI 
c	B  B8C9Dr$CdKryy5DABr1   c                       e Zd Zd Zy)TestGlobalOptimizationc                    d }t        j                  |d      t        j                  |dg      t        j                  |dg      t        j                  |dg      t        j
                  |dg      g}|D ]r  }t        |t         j                        sJ t        |d      sJ t        |d      sJ t        |d      sJ t        |d      sJ t        |d	      sJ t        |d
      rrJ  y )Nc                     | dz  S r<  r   r-   s    r/   r}   zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.funcr  s    6Mr1   r)   )rU   )r  r   r.   r   r  r   r   r   )	r   basinhoppingdifferential_evolutionshgodual_annealingdirectr~  r   rt   )ro   r}   r  rI  s       r/   test_optimize_result_attributesz6TestGlobalOptimization.test_optimize_result_attributesq  s    	 ((!4224'C==y1**4';??4'3	  	*Ffh&=&=>>>63'''69---69---65)))66***65)))	*r1   N)r   r   r   r  r   r1   r/   r  r  o  s    *r1   r  c                      t        j                  t        t              } t	        | t        t              d       t        j                  t        t
              }t	        |t        t              d       y )Nr  r   )r   approx_fprimerT   r  r   rR   rS   )r=  r  s     r/   test_approx_fprimer    sJ     	}j9AA}5DA}o>AA}5DAr1   c                  ~   d } t        ddgddg      }t        j                  | dd|      }t        t        j                  ddg      t        j                  ddg            }t        j                  | dd|      }t        |j                  |j                         t        |j                  |j                         y )Nc                 *    | d   dz  | d   dz
  dz  z   S r  r   r-   s    r/   r|   ztest_gh12594.<locals>.f  s!    tQw!A$(Q&&r1   r  r   r  r   r  r  )r   r   r   r+   rL   r   r   r.   )r|   r  r   r   s       r/   test_gh12594r    s    
' Szr2h/F


A&&
ICrxxc
+"b0BCF


A&&
ICCGGSWW%CEE355!r1   rG  r  sparse_typec                    fd}ddg}t        j                  t        || t        |      }t        j                  t        || t        t              }t        |j                  |j                         t        |j                  |j                         |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ y )Nc                 &     t        |             S rA   )r   )r.   r  s    r/   sparse_rosen_hessz.test_sparse_hessian.<locals>.sparse_rosen_hess  s    :a=))r1   r  r  )r   r   r   r   r   r   r   r.   r   r   nhev)r   r  r  rU   
res_sparse	res_denses    `    r/   test_sparse_hessianr    s    * bB""5"V'07HJJ!!%F&/jBI IMM:>>2IKK.>>Z__,,,>>Z__,,,>>Z__,,,r1   )r   r  r  ri   numpyr+   numpy.testingr   r   r   r   r   r   r	   r   r
   rP   scipyr   scipy.optimize._minimizer   r   r   r   r   scipy.optimize._linprogr   scipy.optimize._rootr   scipy.optimize._root_scalarr   scipy.optimize._qapr   (scipy.optimize._differentiable_functionsr   r   scipy.optimize._optimizer   r   r   scipy.optimizer   r   r   scipy.sparser   r   r   r    r!   r"   scipy.conftestr#   scipy._lib._array_api_no_0dr$   r%   ri  r  rW   rY   r   rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rk  r  r  r/  r|  r  r  r  r  r  r  r  r  r  rR   rS   rT   r  r  r  r  r  r  r  r
  r  r  r?  rA  rY  r[  fixturer`  rf  rh  rk  rn  r  r  xfail_on_32bitrl  show_configr  r  r  r  r  r  r  r  r  r  r   r1   r/   <module>r     s      A A A  *   @? ? 4 - ; < O M M 7 70 0 / H;;// 3l7' 7'tRA RAj-"0H8D$    > I: I:X'FT8 
 : 
 : 
"< 
QD QDh :-	-:= :=zjN jNZ	& &R@)< )<X<-~#6Lz6zJ*$ # # #<;7 a&4, 0  0F=77<I% I%X r    FB> B>J#2# # " "3&3&9*CQh "
# NO$5$$'2;?	J6R L  N 79#561w}'=>(>?W[%9:;< ; @ ? 2 7N P;<| 79#56(/ 7(/V).@0%BP* *0B"" K#@AZ)2Iy)J K-K B-r1   