
    tKg             
          d 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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.m/Z/m0Z0m1Z1 d Z2 G d d      Z3 G d de3      Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;d Z<d Z=d Z> G d d e4      Z? G d! d"e4      Z@ G d# d$e4      ZA G d% d&e4      ZB G d' d(e3      ZCej                  j                  d)g d*      d+        ZF G d, d-      ZG G d. d/      ZH G d0 d1      ZId2 ZJ G d3 d4      ZKd5 ZLd6 ZMd7 ZNd8 ZO G d9 d:      ZPd; ZQd< ZRd= ZSd>d?gZTd@dAgZUdBZVdC ZW G dD dE      ZXdF ZYdG ZZdH Z[dI Z\ G dJ dK      Z]ej                  j                  dL      dM        Z_ G dN dO      Z`dP Za G dQ dR      Zbej                  dS        ZddT ZedU ZfdV ZgdW ZhdX Zi ei       Zjej                  j                  dY      ej                  j                  d)ejdZ         ej                  j                  d[ejd[         ej                  j                  d\ejd]         ej                  j                  d^ejd^         ej                  j                  d_ejd`         da                                           Zlej                  j                  d)ejdZ         db        Zmdc Zndd Zode Zpdf Zq G dg dh      Zrdi Zsdj Ztej                  j                  d)dkdlg      ej                  j                  dme,e-e.e/e0e1g      dn               Zuy)oz
Unit tests for optimization routines from optimize.py

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

To run it in its simplest form::
  nosetests test_optimize.py

    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_arrayc            
      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    f/home/alanp/www/video.onchill/myenv/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_expit-   s*    vvqbzQ^a///r.         ?r   random  )	directionseedư>)epsilon)r9   r6   r7   皙?Hz>c                 N    | t        j                  |       z  j                         S N)r(   sinsumr*   s    r,   x_sinxztest_check_grad.<locals>.x_sinxE   s    "&&)  ""r.   c                 ^    t        j                  |       | t        j                  |       z  z   S r=   r(   r>   cosr*   s    r,   
der_x_sinxz#test_check_grad.<locals>.der_x_sinxH   s!    vvay1RVVAY;&&r.   r1   皙?random_projectionallgƠ>)r(   arrayr   
check_gradr   absarangeassert_raises
ValueErrorhimmelblau_gradhimmelblau_hesshimmelblau_x0)r-   r2   x0rr@   rD   s         r,   test_check_gradrS   &   s   $0 
3%BE9b1A1E9b&.T	;A1E9b$?A1E9b$&.T	;A1 	Hy"dCaGHAt8O8Hy"d*2?ABC 	DAt8O8#' 
1a	BFJ&.T	;A1*h11*b/d<
 	O_m&+$	8At8O8r.   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                 P   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| _        d	| _	        d	| _
        g | _        y )
Nr&   r&   r&   )r&   r&   r   )r&   r   r&   )r&   r   r   )      ?333333?      ?   )        g\g)3?  r   )r(   rH   FKzerosfloat64startparamssolutionmaxiter	funccalls	gradcallstraceselfs    r,   setup_methodzCheckOptimize.setup_methoda   s{    9$$$$	& '
 .)88Arzz2!@A
r.   c                    | xj                   dz  c_         | j                   dkD  rt        d      t        j                  | j                  |      }t        j
                  t        t        j                  |                  }|t        j                  | j                  |      z
  }| j                  j                  t        j                  |             |S )Nr&   ip  z+too many iterations in optimization routine)re   RuntimeErrorr(   dotr^   logr?   r)   r_   rg   appendcopy)ri   r+   log_pdotlogZfs        r,   funczCheckOptimize.funco   s    !>>D LMM66$&&!$vvc"&&*+,266$&&!$$

"''!*%r.   c                 t   | xj                   dz  c_         t        j                  | j                  |      }t        j                  t        t        j                  |                  }t        j                  ||z
        }t        j                  | j                  j                         |      | j                  z
  S r%   )	rf   r(   rm   r^   rn   r?   r)   	transposer_   ri   r+   rq   rr   ps        r,   gradzCheckOptimize.grady   sy    !66$&&!$vvc"&&*+,FF8d?#vvdff&&(!,tvv55r.   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 r=   )r(   rm   r^   rn   r?   r)   Tdiagrw   s        r,   hesszCheckOptimize.hess   s    66$&&!$vvc"&&*+,FF8d?#vvdffhhffRWWQZ"&&12E)EFH 	Hr.   c                 L    t        j                  | j                  |      |      S r=   )r(   rm   r}   ri   r+   rx   s      r,   hesspzCheckOptimize.hessp   s    vvdiilA&&r.   N)	__name__
__module____qualname____doc__rj   rt   ry   r}   r    r.   r,   rU   rU   [   s!    
6H'r.   rU   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                  dk(  sJ | j                         | j                  dk(  sJ | j                         t        | j                  dd g dg dgdd       y )NFrd   disp
return_allr   CG)argsmethodjacoptionsr+   funnfevnjevstatusT)rd   full_outputr   retallr8   atol	      r1      )r         rZ   )r   g;ӱ.g)`$|;?+=r;   r   rtol)use_wrapperrd   r   r   minimizert   rb   ry   fmin_cgr   rc   re   rf   rg   )	ri   optsresparamsfopt
func_calls
grad_callswarnflagretvals	            r,   test_cgz"CheckOptimizeParameterized.test_cg   sS   #||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!	#
 ~~"2DNN2"~~"2DNN2" 	

1Q'=?"	/r.   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&         rZ   r1   r'   )rR   s    r,   rs   z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.f   s(    !bffT1s7^44q888r.   g      r[   G   r   r   rZ   h㈵>r   )r(   linspacer   r   successr   r+   )ri   rs   rQ   sols       r,   test_cg_cornercasez-CheckOptimizeParameterized.test_cg_cornercase   sT    	9
 ++eQ+B##AtD9C;;;CEEC5t4 ,r.   c           
         | 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                  dk(  sJ | j                         | j                  dk(  sJ | j                         t        | 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   rd   r   r   r   r8   r   
         )r   g&/LgB__E7?)r   g$g
|3?r   r;   r   )r   rd   r   r   r   rt   rb   ry   	fmin_bfgsr   rc   re   rf   rg   )ri   r   r   r   r   goptHoptr   r   r   r   s              r,   	test_bfgsz$CheckOptimizeParameterized.test_bfgs   sj   #||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!	#
 ~~#3T^^3#~~"2DNN2" 	

1Q==?"	/r.   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   rQ   r   r   r   )
pytestr
   rM   r(   rH   r   eyer   r   r   )ri   rQ   r   s      r,   test_bfgs_hess_inv0_negz2CheckOptimizeParameterized.test_bfgs_hess_inv0_neg   sk     ]]: .0 134B IIRVVAYJ?DhnnF&*,	1 1 1s   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
   rM   r(   rH   r   r   r   r   r   )ri   rQ   r   r   s       r,   test_bfgs_hess_inv0_semiposz6CheckOptimizeParameterized.test_bfgs_hess_inv0_semipos   sw     ]]: .0 134Bq	IIdO III>DhnnF&*,1 1 1s   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   r8   r   )	r   r   r(   rH   r   r   r   r   r   )ri   r   rQ   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9r.   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 r=   )r(   er*   s    r,   rt   z;CheckOptimizeParameterized.test_bfgs_infinite.<locals>.func   s    DDaRL= r.   c                      |        S r=   r   )r+   rt   s    r,   fprimez=CheckOptimizeParameterized.test_bfgs_infinite.<locals>.fprime   s    G8Or.   r   ignore)overr   r   r   r   r+   r   )r(   errstater   r   r   r   r   isfinite)ri   r   rQ   r   r+   rt   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)ri   rQ   r   refs       r,   test_bfgs_xrtolz*CheckOptimizeParameterized.test_bfgs_xrtol  sa    & "6GT?L "6FD>Kww#''!!!r.   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   )ri   rQ   res_c1_small
res_c1_bigs       r,   test_bfgs_c1z'CheckOptimizeParameterized.test_bfgs_c1  sg     +(()+FT4LR&&x~~')&4,P
   :??222r.   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   )ri   rQ   res_defaultres_mods       r,   test_bfgs_c2z'CheckOptimizeParameterized.test_bfgs_c2  sc     '''(*6D":O##HNN$&vd|M,,,r.   r   r   rZ   r1   皙r:   rE   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
   rM   r   r   r   )ri   r   r   rQ   s       r,   test_invalid_c1_c2z-CheckOptimizeParameterized.test_invalid_c1_c2)  sC     ]]:_=.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                  dk  sJ | j                         | j                  dk(  sJ | j                         y )NFr   r   Powellr   r   r   r+   r   direcr   r   r   Tr   r8   r   r&   h㈵>   r   )r   rd   r   r   r   rt   rb   fmin_powellr   rc   re   rf   
ri   r   r   r   r   r  numiterr   r   r   s
             r,   test_powellz&CheckOptimizeParameterized.test_powell2  sL   #||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 ~~)94>>9)~~"2DNN2"r.   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   rd   r   r   r   rt   rb   r  r   rg   r	  s
             r,   test_powell_gh14014z.CheckOptimizeParameterized.test_powell_gh14014T  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)>>>>>	@
 #	/r.   c                    | 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                  k(  sJ t        | j                  |      | j                  | j                        dd	
       | j                  dk  sJ | j                  dk(  sJ y y c c}w )NFr   r   r  )r   boundsr   r   r+   r   r8   r   r      r   )rb   r(   pir   rd   r   r   r   rt   re   r   rc   rf   )ri   _r  r   r   r   r   s          r,   test_powell_boundedz.CheckOptimizeParameterized.test_powell_boundedw  s     ,0+;+;<+;aBEE6255/+;<#||TYY"')D##DIIt/?/?b+1+3TCC #&c(CKJF///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                  dk(  sJ | j                         | j                  dk(  sJ | j                         t        | j                  dd g dg dgdd       y )NFr   r   Nelder-meadr  r+   r   r   r   r   Tr   r8   r      r   L   N   )g	dװ?g]fgt䝁?)gә ?g#=^goT?r   r;   r   )r   rd   r   r   r   rt   rb   fminr   rc   re   rf   rg   )	ri   r   r   r   r   r
  r   r   r   s	            r,   test_neldermeadz*CheckOptimizeParameterized.test_neldermead  sG   #||TYY"')D##DIIt/?/?b+8$HC Hc%j#e*c&kM;#7FD':x ]]499d.>.>(*DLL/3$))*/1F =C9VT7J		&)499T]]+C!	#
 ~~$4dnn4$~~"2DNN2" 	

2b)=>@"	/r.   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                  dk(  sJ | j                         | j                  dk(  sJ | j                         t        | j                  dd g dg dgdd       y )N)r   r[   .r[   r&   r:   FTrd   r   r   initial_simplexr   r  r  r+   r   r   r   r   allvecsr   r   rd   r   r   r   r#  r8   r   d   2   4   )gIt?g?'ΛTgx8?)gҢ_׆?goMg囎|52?r   r;   r   )r(   r`   rb   ranger   rd   r   r   rt   r   r  rc   re   rf   rg   )ri   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!	#
 ~~$4dnn4$~~"2DNN2" 	

2b)==?"	/r.   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[   r1   r1   .r&   r:   )r[   r[   Fr"  r   r  r  Tr%  )r(   r`   rb   r)  ro   r   rd   rL   rM   r   r   rt   r  )ri   bad_simplicesr*  r+  r   s        r,   #test_neldermead_initial_simplex_badz>CheckOptimizeParameterized.test_neldermead_initial_simplex_bad  s   ((6"''+qAAaCFOs"O W%((6"W%$G#'<<&+Ij&//"ii"..#%%2&*, j(--"ii)9)9#%t||*.U5.5	7 %r.   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 Nr1   r(   r?   r*   s    r,   quadz>CheckOptimizeParameterized.test_neldermead_x0_ub.<locals>.quad      66!Q$<r.   r&   )r   rX   nelder-meadr  r   r   r1   )r&         @r   r   r   r+   )ri   r4  r   s      r,   test_neldermead_x0_ubz0CheckOptimizeParameterized.test_neldermead_x0_ub  st    	  C9 	
 	s#FW% 	
 	1v&r.   c                     ddi}t        j                  | j                  | j                  d| j                  d|      }|j
                  dk(  sJ y )Nrd   	Newton-CGr   r   r   r   r   r&   )r   r   rt   rb   ry   r   )ri   r   results      r,   test_ncg_negative_maxiterz4CheckOptimizeParameterized.test_ncg_negative_maxiter  sK    2""499d.>.>*5499(*D: }}!!!r.   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(   rC   r*   s    r,   cosinez=CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.cosine  s    66!A$<r.   c                 4    t        j                  | d          S rC  )r(   r>   r*   s    r,   r   z:CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.jac  s    FF1Q4L= r.   r:   r   	newton-cg)xtol)rQ   r   r   r   )r   r   dictr   r   r+   r(   r  )ri   rD  r   rQ   rG  r?  s         r,   test_ncg_zero_xtolz-CheckOptimizeParameterized.test_ncg_zero_xtol  sf    	 	! U""6&('**5+/T?	<
 }}!!!FHHQK/r.   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                  d
k(  sJ | j                         | j                  dk  sJ | j                         t        | j                  dd g dg dgdd       y )NFr   r=  r   r>  r+   r   r8   r   r      r[   r   (6-H=g?g4u3?rM  g_g/N3?r;   r   )r   rd   r   r   r   rt   rb   ry   fmin_ncgr   rc   re   rf   rg   ri   r   r   r   s       r,   test_ncgz#CheckOptimizeParameterized.test_ncg'  s   #||TYY"')D&&tyy$2B2B.9tyy,.>>ACF &&tyy$2B2BDII,.38tyy.35F
 		&)499T]]+C!	#
 ~~"2DNN2"~~#3T^^3# 	

1QKKM!	.r.   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                  d
k  sJ | j                         | j                  dk  sJ | j                         t        | j                  dd g dg dgdd       y )NFr   r=  r   )r   r   r}   r   r   r+   )fhessr   rd   r   r   r   r8   r   r      r[   r   rL  rN  r;   r   )r   rd   r   r   r   rt   rb   ry   r}   rO  r   rc   re   rf   rg   rP  s       r,   test_ncg_hessz(CheckOptimizeParameterized.test_ncg_hessH  s.   #||TYY"')D&&tyy$2B2B.9tyy,0II,.> ?BCF
 &&tyy$2B2BDII-1YY,.38tyy.3	5F 		&)499T]]+C!	#
 ~~"2DNN2"~~#3T^^3#
 	

1QKKM!	.r.   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                  d
k  sJ | j                         | j                  dk  sJ | j                         t        | j                  dd g dg dgdd       y )NFr   r=  r   )r   r   r   r   r   r+   )fhess_pr   rd   r   r   r   r8   r   r   rT  r[   r   rL  rN  r;   r   )r   rd   r   r   r   rt   rb   ry   r   rO  r   rc   re   rf   rg   rP  s       r,   test_ncg_hesspz)CheckOptimizeParameterized.test_ncg_hesspj  s.   #||TYY"')D&&tyy$2B2B.9tyy-1ZZ,.> ?BCF
 &&tyy$2B2BDII/3zz,.38tyy.3	5F 		&)499T]]+C!	#
 ~~"2DNN2"~~#3T^^3#
 	

1QKKM!	.r.   c                 H   | j                   rt        j                  | j                  | j                  d| j
                  | j                  d      }t        |j                  | j                  | j                        d       | j                  dk  sJ | j                         y y )Ncobyqard   r   r   r8   r   A   )r   r   r   rt   rb   rd   r   r   r   rc   re   ri   r   s     r,   test_cobyqaz&CheckOptimizeParameterized.test_cobyqa  s    ##		  $(LL$))D	C CGGTYYt}}%=DI >>W,<dnn<, r.   N) r   r   r   r   r   r   r   r   r   r   markfilterwarningsr   r   r   r   parametrizer  r  xfailr  r  r   r,  r/  r:  r@  rI  rQ  rU  rX  r^  r   r.   r,   r   r      s   />	5 /D,
,	: [[ 56, 7, "	3- [[dD\S!H-13K-0#J,8 9<9< 3D [[ & '/'/@'2/>&/P7>'."0$.B .D .D=r.   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&   r]   r4   )r+   rngs    r,   costztest_maxfev_test.<locals>.cost  s    zz!}t##r.   )r&   r   r'  )r  Nelder-Meadr   maxfevr   r   )r(   r4   default_rngr   r   )rh  imaxfevr   r?  rg  s       @r,   test_maxfev_testrm    sq    
))

 G
HC$  0F&&tSZZ^.408'/BDF &>W,,,	 0	 r.   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 r=   r   r*   s    r,   func_z8test_wrap_scalar_function_with_validation.<locals>.func_  s    r.   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(   asarrayr)  rL   _MaxFuncCallErrorrM   rH   )rp  fcallsrt   imsgs        r,   )test_wrap_scalar_function_with_validationry    s    %%//rzz!}aH FD 1XRZZ]ayAaC  $C	x));;3	GRZZ] 
H %%//rzz!}aH FD MC	z	-RXXq!f 
.	- 
H	G 
.	-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)Nrq  r   c                     | S r=   r   r*   s    r,   <lambda>z.test_obj_func_returns_scalar.<locals>.<lambda>  s    Ar.   r&   r   r   )rL   rM   r   r   r(   rH   r   s    r,   test_obj_func_returns_scalarr}    s@    &E 
z	/+rxxA'7G 
0	/	/s   /AAc                      t        j                  g d      } t        j                  j	                  t        j
                  | d      }|j                  dk  sJ y )Nr   r   )xatoliS  )r(   rH   r   	_minimize_minimize_neldermeadr   r   )rQ   r   s     r,   test_neldermead_iteration_numr    sG    	+	,B



1
1(.."8< 2 >C77c>>r.   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 r=   )dtyper(   float32r   r   r*   s    r,   rosen_z*test_neldermead_respect_fp.<locals>.rosen_  s'    ww"**$$$~~a  r.   ri  r   )r(   rH   astyper  r   r   )rQ   r  s     r,   test_neldermead_respect_fpr    s<    	3*		$	$RZZ	0B! fb7r.   c                  V    d } t         j                  j                  | ddgddd       y )Nc                 $    | d   dz  | d   dz  z   S Nr   r1   r&   r   r*   s    r,   rt   z)test_neldermead_xatol_fatol.<locals>.func  s    tqy1Q419$$r.   r&   r1   r   )rd   r  fatol)r   r  r  )rt   s    r,   test_neldermead_xatol_fatolr    s2    % ++D1a&!26d , Dr.   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 r2  r3  r*   s    r,   rt   z&test_neldermead_adaptive.<locals>.func      vva1f~r.   )gM@'?gOC?g~?g -?g?g#j?g ?g~^g?gܠr#?g^cǽ?g)i	?g'?g?g1?g[VΤ?ri  r   FadaptiveTr   )r   r   r   r   )rt   p0r   s      r,   test_neldermead_adaptiver    s_    
FB 

D"]
;Ce$


D"]%/$68Cd#r.   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 r2  r3  r*   s    r,   rt   z/test_bounded_powell_outsidebounds.<locals>.func  r  r.   )r<  r&   r  r  )rZ   gr  r7  r\   r8   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(   rH   lenr   r   r   )rt   r  rQ   r   r  s        r,   !test_bounded_powell_outsideboundsr    s   &F	B 
h..	/bI 
0CEE288RD3r7N3$?d#Q 	9-E	h..	/b'-h)0%(8: 
0 CEE288K0t<e$Q% 
0	/ 
0	/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 r2  r3  r*   s    r,   rt   z+test_bounded_powell_vs_powell.<locals>.func"  r  r.   ))r<  )r   )r&   gffffff"@)r  gffffff@g/)g gr   r   r  绽|=ftolrG  r  r   r\   r8   r   )r   r  r   )r<  r   r&   r   r  )Nr<  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&   r1   rB   r+   ts     r,   rt   z+test_bounded_powell_vs_powell.<locals>.func@  s    FFAaD5MBFF1Q4L(2661Q4%!A$,+??"&&1,N	RVVBFF1Q4!A$;'"&&1,677!tr.   )r  r   r[   )r   r   r   r   r7  g8:}?r   )gb4F@g:gW?@)r   r   r   r+   r   r(   rH   infr   r   r  )rt   r  rQ   r   
res_powellres_bounded_powellrx   s          r,   test_bounded_powell_vs_powellr    sp   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>@ 
0 &**AD9	 
0	/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   rW   c                 .    t        j                  |        S r=   r3  r*   s    r,   rs   z1test_onesided_bounded_powell_stability.<locals>.fr  s    q	zr.   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&   r<  r(   rJ   r?   rG   r*   s    r,   rs   z1test_onesided_bounded_powell_stability.<locals>.fx  s<    rvvay!c**266!a%=aIIbIIr.   gwc                     t        j                  t        j                  |             dz   t        j                  | dkD        rdz  S dz  S )Nr   r   r&   r<  r  r*   s    r,   rs   z1test_onesided_bounded_powell_stability.<locals>.f  s<    rvvay!R''q1u1FF2FFr.   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 )Nr1   r   r:   r   r&   r<  r  r  s     r,   rs   z1test_onesided_bounded_powell_stability.<locals>.f  ss    VVBFF1Ra5M"a''"&&!"*?C*HH	266!a%=a) '))r.   g     @@r  g 4&k\)r(   r  r   r   r   r   )kwargsrQ   rs   r   s       r,   &test_onesided_bounded_powell_stabilityr  f  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Er.   c                       e Zd ZdZdZy)TestOptimizeWrapperDispTNr   r   r   r   r   r   r.   r,   r  r    s    KDr.   r  c                       e Zd ZdZdZy)TestOptimizeWrapperNoDispTFNr  r   r.   r,   r  r    s    KDr.   r  c                       e Zd ZdZdZy)TestOptimizeNoWrapperDispFTNr  r   r.   r,   r  r    s    KDr.   r  c                       e Zd ZdZdZy)TestOptimizeNoWrapperNoDispFNr  r   r.   r,   r  r    s    KDr.   r  c                   T   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,                  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,                  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 r=   r   r*   s    r,   rt   z.TestOptimizeSimple.test_bfgs_nan.<locals>.func  s    Hr.   c                 ,    t        j                  |       S r=   r(   	ones_liker*   s    r,   r   z0TestOptimizeSimple.test_bfgs_nan.<locals>.fprime      <<?"r.   r   )r   invalidFr   )r(   nanr   r   r   isnan)ri   rt   r   rQ   r+   s        r,   test_bfgs_nanz TestOptimizeSimple.test_bfgs_nan  s]    		#ffX[[h9""4V%@A88DG$$$ :99s   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 r=   r(   r  r*   s    r,   rt   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.func      66Mr.   r   r  r   r   r   Fc                 0    | dk(  rdS t         j                  S rC  r  r*   s    r,   rt   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.func  s    Q1*BFF*r.   c                 ,    t        j                  |       S r=   r  r*   s    r,   r   z7TestOptimizeSimple.test_bfgs_nan_return.<locals>.fprime  r  r.   )r   )r(   r   r   r   r  )ri   rt   r?  r   s       r,   test_bfgs_nan_returnz'TestOptimizeSimple.test_bfgs_nan_return  s    	[[*&&tQ/F + xxu&&&i E)))	+	#[[*&&tQF;F + xxu&&&i E))) +* +*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 )NrX   r   F)r9   r   rd   r   r8   r   )r(   sqrtspacingr4   randr  rc   r   r   rt   rb   rd   r   )ri   r9   r   s      r,   test_bfgs_numerical_jacobianz/TestOptimizeSimple.test_bfgs_numerical_jacobian  s     ''"**R.)BIINN3t}};M,NN##DIIt/?/?,3",0LLuF 			&)499T]]+C!	#r.   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   r8   r   )		itertoolsproductr   r   rt   rb   r   r+   rc   )ri   methodsjacsr   r   r?  s         r,   test_finite_differences_jacz.TestOptimizeSimple.test_finite_differences_jac  ss    '+$,,Wd;KFC&&tyy$2B2B.4#?FDIIfhh/4==1I!%' <r.   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-constrr=  	trust-ncgtrust-krylovr   r   r}   )r  r  doglegtrust-exact)r   r   r   r  r  r   rt   rb   ry   r   r   r
   rM   )ri   r  hessesr   r}   r?  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rX   r   r*   s    r,   rs   z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.f  s    1u&2a4xr.         $@Fr   rX   r  r   r   )r   r   r   )ri   rs   xss      r,   test_bfgs_gh_2169z$TestOptimizeSimple.test_bfgs_gh_2169  s-    	 
 C5u5Cd6r.   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   r1      )add)r+   xpseens     r,   rs   z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.f  s9    1BT>!>HHRLad7BqD= r.   r   Tr;   )r   r   tol)setr   r   )ri   rs   r  s     @r,   test_bfgs_double_evaluationsz/TestOptimizeSimple.test_bfgs_double_evaluations   s'    	! u!T&dEr.   c                    t        j                  | j                  | j                  | j                  d| j
                        }|\  }}}t        | j                  |      | j                  | j                        d       | j                  dk(  sJ | j                         | j                  dk(  sJ | j                         t        | j                  dd g dg d	gd
d       y )Nr   )r   rd   r8   r   r   r   r[   )g><gwT볹gUuAX?)r\   gHg!mʲ3?r   r;   r   )r   fmin_l_bfgs_brt   rb   ry   rd   r   rc   re   rf   rg   ri   r   r   r   ds        r,   test_l_bfgs_bz TestOptimizeSimple.test_l_bfgs_b  s    ''		43C3C(,		04> #q		&)499T]]+C!	#
 ~~"2DNN2"~~"2DNN2" 	

1QD68"	/r.   c                     t        j                  | j                  | j                  d| j                        }|\  }}}t        | j                  |      | j                  | j                        d       y )NT)approx_gradrd   r8   r   )r   r  rt   rb   rd   r   rc   r   s        r,   test_l_bfgs_b_numjacz'TestOptimizeSimple.test_l_bfgs_b_numjac"  s]    ''		43C3C4804> #q		&)499T]]+C!	#r.   c                       fd}t        j                  | j                   j                        }|\  }}}t	         j                  |       j                   j                        d       y )Nc                 H    j                  |       j                  |       fS r=   )rt   ry   )r+   ri   s    r,   r   z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.fun/  s    99Q<1--r.   rd   r8   r   )r   r  rb   rd   r   rt   rc   )ri   r   r   r   r   r  s   `     r,   test_l_bfgs_b_funjacz'TestOptimizeSimple.test_l_bfgs_b_funjac-  s^    	. ''T-=-=04> #q		&)499T]]+C!	#r.   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 rC  )r   r   r+   rh   s    r,   __init__zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__init__>  s    r.   c                 p    || _         t        j                  |      | _        | xj                  dz  c_        y r%   )r+   r   r   r   r   ri   r+   s     r,   __call__zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__C  s&    #>>!,Ar.   Nr   r   r   r  r  r   r.   r,   Callbackr  =  s    
r.   r  r\   l-bfgs-brd   r   )r   callbackr   r&   Fz+STOP: TOTAL NO. of ITERATIONS REACHED LIMIT)r   r   r   r   r   r   r+   r   r   r   message)ri   r  cr   s       r,   test_l_bfgs_b_maxiterz(TestOptimizeSimple.test_l_bfgs_b_maxiter:  s    		 		 JR)*YND 	SWWa CEE133'CGGQUU+SZZ#{{e###S[[B	Dr.   c                    d| j                   d}t        j                  | j                  | j                  d| j
                  |      }t        | j                  |j                        | j                  | j                        d       | j                  |j                  k(  sJ dx| _        | _	        t        j                  | j                  | j                  d|      }| j                  |j                  k(  sJ t        | j                  |j                        | j                  | j                        d       dx| _        | _	        t        j                  | j                  | j                  d	d|
      }| j                  |j                  k(  sJ t        | j                  |j                        | j                  | j                        d       y )NFr   rd   L-BFGS-Br   r   r   r8   r   r   r   r  r   r   r   )rd   r   r   rt   rb   ry   r   r+   rc   rf   r   re   r   )ri   r   rR   ras       r,   test_minimize_l_bfgs_bz)TestOptimizeSimple.test_minimize_l_bfgs_bT  s`   $,,7dii)9)9%/TYY&*, 			!##		$--(@!	#~~'''*++tyy$*:*:&0$@ ~~(((		"$$4==)A!	# +,+tyy$*:*:	&0$@~~(((		"$$4==)A!	#r.   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   rd   r  r  r  r   )	rd   r   r   rt   rb   ry   r+   r   rc   )ri   v0r  r   r   vs         r,   test_minimize_l_bfgs_b_ftolz.TestOptimizeSimple.test_minimize_l_bfgs_b_ftolp  s    ,C!dllCHD##DIIt/?/?+5499,02C 		#%% Az2vvAtyy7cB -r.   c           	          t        j                  t         j                  t        j                  ddg      dt         j
                  ddd      }|j                  rJ y )Nr   rX   r  Fr&   )r   maxlsr  )r   r   r   r(   rH   r   r   )ri   r   s     r,   test_minimize_l_bfgs_maxlsz-TestOptimizeSimple.test_minimize_l_bfgs_maxls  sK    $0E'1x7I7I16(CE ;;;r.   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   r]   c                 :     |       }j                  |       |S r=   )ro   )r+   valuers   valuess     r,   objfunzMTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.objfun  s    aDEMM% Lr.   )   r&  i,  )r   maxfunc              3   *   K   | ]  \  }}||f  y wr=   r   ).0rw  ys      r,   	<genexpr>zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>  s     A&@daAq6&@s   )
r   r   r   r(   fullr  max	enumerateminr   )ri   grQ   r+  lowmediumhighr"  kr-  targetxminr  r  rs   r*  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$'r.   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   )r)  r(   sizerp   r   r   )r   rQ   r   rj  stepsizerd   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 L  + )h&.@# . 4EGO& **u508519O Or.   )g?r   r   皙?r   皙?rB  r   rX   r  r  r   Nr:   r&  N)r   r   r   rH  r   r+   )ri   rM  rQ   r   s       r,   test_customzTestOptimizeSimple.test_custom  sI    <?*.	O> (7(,d(;=sD9r.   c                 x    ddgdfd}ddg}t        j                  t         j                  ||       y )N)r  r1   )r   r[   constraintsc                 P    |d   u sJ |d   u sJ t        j                         S )Nr  rT  r   r   )r   rQ   r   r  rT  s      r,   rM  z0TestOptimizeSimple.test_gh10771.<locals>.custmin  s8    8$...=)[888**,,r.   r&   )r   r  rT  )r   r   r   )ri   rM  rQ   r  rT  s      @@r,   test_gh10771zTestOptimizeSimple.test_gh10771  sB     6"#	-
 V(.."W!'[	Br.   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 )Nr1   r   r&   r   zr+   r0  s      r,   rt   z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.func  s+    DAqa419q!t#a''r.   c                 p    | \  }}t        j                  d|z  |dz  z  d|dz  z  z   d|dz  z  |z  g      S )Nr1   r   r[   r(   rH   rZ  s      r,   dfuncz=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc  sD    DAq88QqSAX!Q$.!Q$q9::r.   
r6  powellr   r   rF  r  tnccobylarZ  slsqpr6  r`  rb  rZ  r1   r  )r   r  r   rX   : z vs. )r   r   r+   )ri   rt   r^  r   r   sol1sol2s          r,   test_minimize_tol_parameterz.TestOptimizeSimple.test_minimize_tol_parameter  s    	(	;4F FF$$TAq6s,24D$$TAq6s,24D<$tvv,. BXRTVV~U4<.AB.4r.   r   r   ignore::RuntimeWarningr   )r  r  r   r   rO  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)rj  r  c                 V    t        j                  |       t        j                  |       fS r=   )r   r   r   r*   s    r,   rt   zDTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.func  s!    ~~a((*<*<Q*???r.   r   r  rk  r   iterrj  r&  r-  )r  r  i  rd   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2r.   ra  r-  r   r  )rO  r   )rF  r   r  r  r  r  r  r}   c                     t        | t        j                        rJ j                  | t	        j
                  |       f       y r=   )
isinstancer   r   ro   r(   rp   )r+   r   r  resultss      r,   r  zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callback'  s1    !!X%<%<===NNArwwqz?+r.   r  r1   c              3   R   K   | ]  \  }}t        j                  ||k(         ! y wr=   )r(   rG   r/  r+   r0  s      r,   r1  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>0  s!     6gda266!q&>gs   %'c              3   Z   K   | ]#  \  }}t        j                  |d    |d           % yw)r   N)r(   may_share_memoryrz  s      r,   r1  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>2  s*     P<41ar**1Q416<s   )+)r   r   r   r   r(   r`   
startswithgetattrrH  r  rG   r  combinationsany)ri   r   rt   r   r}   rQ   r  rs  r  r  rx  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Pr.   r_  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 r0   r   r*   s    r,   rt   z1TestOptimizeSimple.test_no_increase.<locals>.func;      EA:r.   c                     d| dz
  z  dz  dz
  S )Nr1   r&   r<  r   r*   s    r,   bad_gradz5TestOptimizeSimple.test_no_increase.<locals>.bad_grad>  s     a!e9#a''r.          @ra  r  rt  r  rd  r  rc  zSLSQP returns slightly worse)
r(   rH   rH  r   r   r   r+   r   r   rb  )	ri   r   rt   r  rQ   f0r   r   r   s	            r,   test_no_increasez#TestOptimizeSimple.test_no_increase4  s    		(
 XXse_"X%+u_$b/$r:JBBCbc&(/1T#%%[#''*WLL78CEE{b   r.   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)rX   r  r8  r  r1   )r?   r(   rH   r*   s    r,   rs   z7TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.fS  s!    BHH%566:;;r.   c                     t        j                  g dg dg      }t        j                  t        j                  ||       t        j                  ddg      z   | g      S )N)r<  r<  r<  r<  )r  r  r<  r   r   )r(   rH   concatenaterm   r+   rq  s     r,   consz:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.consV  sG    *,<=>A>>266!Q<"((Ar72C#CQ"GHHr.   )rZ   rX   r3   r  rc  ineqtyper   r   rT  )r\   r1   r   r   r[   g-q=r   )r(   rH   r   r   r   r+   )ri   rs   r  rQ   r   s        r,   test_slsqp_respect_boundsz,TestOptimizeSimple.test_slsqp_respect_boundsQ  s[    	<	I XX()2g5;D,IKrxx6q8uEr.   )ri  r  r   r   r=  r  SLSQPr  r  r  r  r  rZ  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   )r=  r   ru  r}   r   r  r   rZ  r   )r(   r`   r   r   r   r   r   rH  ry   r}   r   r   r   r   hasattrr   ngevr   )ri   r   MAXITERrQ   sfr  r   s          r,   test_respect_maxiterz'TestOptimizeSimple.test_respect_maxiter_  s&    XXb\HNNBH4F4F$//t= #tG/DE^#GGF5M ( (GGF5MWWF6N5f5ww'!!!xx277"""388rww&&& W::?"?x::?"?  r.   )ri  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&   Tr[  zMaximum number of iterationsr   r  r   )r(   r`   r   r   r   r   r   r   warnsRuntimeWarningr}  r~  r   r   )ri   r   rQ   r  r   rs  s         r,   test_runtime_warningz'TestOptimizeSimple.test_runtime_warning  s     XXb\HNNBH4F4F$//t=.\\. ?A  (!(F3.g.!!"&&"VWMA A A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 )NrE   r   皙?r&   Q?r1   r]  r*   s    r,   r   zRTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.fun  s6    88S1Q4Z#!*4tad{BCDDr.   r  r  r   r  r  )rT  r   r}   r   r   )	r   r   r   r   r(   r`   r   rH  r   )	ri   r  rs   r   r}   r   r  rQ   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'!!!r.   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 r2  r   r*   s    r,   rs   z6TestOptimizeSimple.test_minimize_automethod.<locals>.f      a4Kr.   c                     | dz
  S r2  r   r*   s    r,   r  z9TestOptimizeSimple.test_minimize_automethod.<locals>.cons  s    q5Lr.   r  r  r  )rT  )r   r   r  )rT  r  r&   r   r   r;   r   r1   r   )r(   rH   r   r   r   r   r+   )
ri   rs   r  rQ   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%6C;;; 7.....r.   c                     d }dd}t        j                  g d      }t         j                  j                  t	        |            }t        j                  ||||d       y )Nc                 8    t        j                  | |z
  dz        S r2  r3  r+   r  s     r,   Yz=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Y  s    661Q3(##r.   c                     d| |z
  z  S r2  r   r  s     r,   dY_dxzATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dx  s    ac7Nr.   )r[   r&   r   r&   r   r   r1   r   r   r[   r   r   )r   r   r   r=   )r(   rH   r4   randnr  r   r   )ri   r  r  r  xinits        r,   test_minimize_coerce_args_paramz2TestOptimizeSimple.test_minimize_coerce_args_param  sI    	$	 HH67		A'!UQGr.   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  r=  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&   r1   )rJ   r3  AssertionError)r+   first_step_sizescalerQ   s    r,   rs   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.f  sl    q!)adbem%(11%6"1vzz|c!$%EFF!A$(Q&&r.   c                 B    t        j                  | d   dz
  z  g      S Nr   r&   r]  )r+   r  s    r,   r6  z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g  s"    88UAaD1H-.//r.   )r   r   r   )r   r  )r  r=        r   re  rX   err_msgr[   r   g)\(?rZ   )	r  r  rH  r   r   r   r   r+   r   )ri   scalesr  rs   r6  r   r   r   r  r  r  rQ   s            @@@r,   test_initial_step_scalingz,TestOptimizeSimple.test_initial_step_scaling  s2    "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 ? @r.   )r6  r`  r   r   rF  r  ra  rb  rZ  rc  r  r  r  r  r  c                    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)Nr5   r   c                 "    t         j                  S r=   r  r*   s    r,   rt   z0TestOptimizeSimple.test_nan_values.<locals>.func
  r  r.   c                     dxx   dz  cc<   d   dkD  rt         j                  S t         j                  j                         S r  )r(   r  r4   r  r+   counts    r,   func2z1TestOptimizeSimple.test_nan_values.<locals>.func2  s5    !HMHQx!|vvyy~~''r.   c                 .    t        j                  dg      S NrX   r]  r*   s    r,   ry   z0TestOptimizeSimple.test_nan_values.<locals>.grad  s    88SE?"r.   c                 0    t        j                  dgg      S r  r]  r*   s    r,   r}   z0TestOptimizeSimple.test_nan_values.<locals>.hess  s    88cUG$$r.   rX   rF  r  r  r  r  r  r  r  r  ra  r  rt  r  r   r  delta_grad == 0.*.*does not use Hessian.*.*does not use gradient.*)r   r}   r   r   F)r(   r4   r7   rH   rH  r   r	   filterUserWarningr  r  r  r   r   r   r   )ri   r   rt   r  ry   r}   rQ   
needs_grad
needs_hessfuncsgradshesssr   suprs   r6  hr   r  s                     @r,   test_nan_valuesz"TestOptimizeSimple.test_nan_values  sK    			t		(	#	% XXse_  7 7
  * *
 u$4,$4,%+u_$b/$r:J[[*,=,?3JJ{$78JJ~'ABJJ~'BC$,,UE5A1a''211V079S[[%0	 B -@**,?,?**s%   E$BE<EE	EE")r6  r   r   r  ra  rb  rZ  rc  r  r  r  r  r  c           	      2   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                              D ]C  }t        j                  | j                  |dz
     | j                  |         s7t        d|        y # 1 sw Y   wxY w# 1 sw Y   {xY w)	Nr  r  r   r  r  r  r&   zDuplicate evaluations made by )ry   r}   r(   r   r	   r  r  r   r   rt   rb   r)  r  rg   array_equalrl   )ri   r   r   r}   r  rw  s         r,   test_duplicate_evaluationsz-TestOptimizeSimple.test_duplicate_evaluations1  s     d - -))C    99D[[*,=,?3JJ{$78dii)9)9%+4A -@* q#djj/*A~~djjQ/A?"4VH=? ? + -@,?**s$   DADDD
	DDnew_cb_interface)r   r&   r1   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+   rs   s    r,   rs   z9TestOptimizeSimple.test_callback_stopiteration.<locals>.fR  s    AF>>!$$r.   Fc                 <    d_         t        j                  |       S r  )r  r   r   r  s    r,   r6  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.gW  s    AF%%a((r.   c                 <    d_         t        j                  |       S r  )r  r   r   r  s    r,   r  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.h[  s    AF&&q))r.   r   r&   c                 V    | j                    | j                        k(  sJ          y r=   r   r+   )intermediate_resultr  rs   s    r,   callback_interfacezJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfaceb  s(    *..!4G4I4I2JJJJ
r.   r1   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 r=   r  )ri   r  r  rs   s     r,   r  zITestOptimizeSimple.test_callback_stopiteration.<locals>.Callback.__call__g  s(    .22a8K8M8M6NNNNJr.   N)r   r   r   r   r  )r  rs   s   r,   r  r  f  s     r.   r  c                              y r=   r   )xkr   r  s     r,   r  zJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfacel  s    
r.   c                  ~     xj                   dz  c_         d _         j                   k(  rd _        t               y )Nr&   FT)rw  r  StopIteration)r  rd   s   r,   r  z@TestOptimizeSimple.test_callback_stopiteration.<locals>.callbacko  s7    JJ!OJ!HMzzW$ $#o% %r.   r   rN  )rQ   r   r   r   r}   r  r6  rZ  r   rj  rd   )r  rZ  r[   c   r   )
r  rw  r   r   r   r   r   r   r+   r   )ri   r   r  r6  r  r  r  r  r   r   r  rs   rd   s             @@@r,   test_callback_stopiterationz.TestOptimizeSimple.test_callback_stopiterationK  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  	 r.   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 r=   r   r*   s    r,   r|  z4TestOptimizeSimple.test_ndim_error.<locals>.<lambda>  s    r.   )r1   r&   )rL   rM   r   r   r(   onesri   rx  s     r,   test_ndim_errorz"TestOptimizeSimple.test_ndim_error  s5    2:S1k2776?; 211s   +AA)r6  r  ra  r`  rb  rZ  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 r2  r3  r*   s    r,   rs   z:TestOptimizeSimple.test_minimize_invalid_bounds.<locals>.f  r5  r.   r&   r1   r[   r   z?The number of bounds is not compatible with the length of `x0`.r   )r&   r1   r[   rQ   r   r  )r&   r   r&   )r[   r   r1   z:An upper bound is less than the corresponding lower bound.)r   r   r
   rM   r   r   )ri   r   rs   r  rx  s        r,   test_minimize_invalid_boundsz/TestOptimizeSimple.test_minimize_invalid_bounds  s    	  AA'O]]:S1aIfVL 2 	9-J]]:S1aIfVL 21 21
 21s   B'B3'B03B<)r   r   rF  r`  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)Nr`  r   Tr   r  Maximum numberr   c                 ,    t        j                  |       S r=   r   r   r*   s    r,   r|  zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>  s    q(9r.   r   r   Fr   c                 ,    t        j                  |       S r=   r  r*   s    r,   r|  zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>  s    HNN1$5r.   )r   r   r  r  r   r  r   )ri   r   r  warning_typer   s        r,   test_minimize_warnings_gh1953z0TestOptimizeSimple.test_minimize_warnings_gh1953  s     x'eX5G5G-H*0(*:%55 	  B/\\,.>?9Aq6 H%+WH@FH @  51v 	D!'	D<B	D @?s   BB#N)+r   r   r   r  r  r  r  r  r  r  r  r  r	  r  r  r#  r&  r=  rR  rW  rh  r   r_  	fail_slowr`  ra  r   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r  r   r.   r,   r  r    s   	%*.
#'-47	F/.	##D4#8C"(4$:LBB2 [[1[[ 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
+1Z [[X (G H
?H
?* [[ 89[[X'>?[[/;; < @ :;z<
 [[X (8 9M9M [[X'LMD NDr.   r  r   )r  ra  r  ri  rZ  c                     d }t        j                  |ddg|       }|j                  sJ t        |j                  dgd       y )Nc                 2    t        j                  | dz        S r2  r3  r*   s    r,   rs   z$test_minimize_with_scalar.<locals>.f  r  r.      )r  r&  r7  r\   r   r   )r   r   r   r   r+   )r   rs   r   s      r,   test_minimize_with_scalarr    s?     

Ar;-
GC;;;CEEC5t,r.   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  rc   rh   s    r,   rj   zTestLBFGSBBounds.setup_method  s    /r.   c                 0    d|z  |d   |z  |d   |z  z   z  S )NrX   r   r&   r   r   s      r,   r   zTestLBFGSBBounds.fun  s&    Qw!A$'AaD!G+,,r.   c                     ||dz
  z  S r%   r   r   s      r,   r   zTestLBFGSBBounds.jac  s    1q5zr.   c                 J    | j                  ||      | j                  ||      fS r=   r   r   r   s      r,   fjzTestLBFGSBBounds.fj  s!    xx1~txx1~--r.   c                     t        j                  | j                  ddg| j                  | j                        \  }}}|d   dk(  s
J |d          t        || j                  d       y )Nr   r<  )r   r  r   taskr8   r   )r   r  r   r   r  r   rc   ri   r+   rs   r  s       r,   test_l_bfgs_b_boundsz%TestLBFGSBBounds.test_l_bfgs_b_bounds  s_    ((Ar70404=1a }!,1V9,!4==t4r.   c                     t        j                  | j                  ddgd| j                        \  }}}|d   dk(  s
J |d          t	        || j
                  d       y )	Nr   r<  r  )r   r  r   r  r8   r   )r   r  r  r  r   rc   r  s       r,   r	  z%TestLBFGSBBounds.test_l_bfgs_b_funjac  sX    ((1b'04=1a}!,1V9,!4==t4r.   c                     t        j                  | j                  ddgd| j                  | j                        }|d   s
J |d          t        |j                  | j                  d       y )	Nr   r<  r  r   r   r  r   r  r8   r   )r   r   r   r   r  r   r+   rc   r]  s     r,   test_minimize_l_bfgs_b_boundsz.TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds  sW    1b'*$(HHT[[B9~-s9~-~t}}48r.   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   r<  r  r  )r   r
   rM   r   r   r   r   )ri   r  s     r,   'test_minimize_l_bfgs_b_incorrect_boundsz8TestLBFGSBBounds.test_minimize_l_bfgs_b_incorrect_bounds  sC     ]]:[9dhhB
"&((6; :99s   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   r<  r  finite_diff_rel_step)r   r   r   r  r   r   r  r8   r   )	r  r  r   r   r   r  r   r+   rc   )ri   r  argssr   r   r   s         r,    test_minimize_l_bfgs_b_bounds_FDz1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FD  s    
 ,"**47IC##DHHq"gD+5(+DKK-CT,JLC y>13y>1>CEE4==t< 8r.   Nr  )r   r   r   rj   r   r   r  r  r	  r  r   r_  ra  r   r$  r   r.   r,   r  r    sl    -.559 [[X
7	
7	
7	( 
;
;
=r.   r  c                   :   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                  j!                  dg d      d        Zy)!TestOptimizeScalarc                     d| _         y )Nr3   )rc   rh   s    r,   rj   zTestOptimizeScalar.setup_method  s	    r.   c                     ||z
  dz  dz
  S )zObjective functionr1   r   r   )ri   r+   rq  s      r,   r   zTestOptimizeScalar.fun  s    AzCr.   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)Nr8   r   r  r  brackTr   r   ir<     /\(f\(xb\) < f\(xa\)\) and \(f\(xb\) < f\(xc\)\)r   r<  r   r&   \(xa < xb\) and \(xb < xc\)r   r<  r&   )r   brentr   r   rc   r   r
   rM   )ri   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NN488:6 6 1]]:W5NN488:6 65	 65 65s   "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)Nr8   r   r*  r+  Tr-  r   r.  r  )r   r&   r   )rd   r   r1   r0  r   r1  r2  r3  )	r   goldenr   r   rc   r   r   r
   rM   )ri   r+   maxiter_test_casesrd   rQ   nfev0r   r  s           r,   test_goldenzTestOptimizeScalar.test_golden  s   OODHH%4==t4OODHHH54==t4OODHH$7!dmm$7OODHHM:4==t4OODHH!,4==)&)G1$GB'tLAQ%14Ew/	 * E]]:W5OODHHJ7 6 1]]:W5OODHHJ7 65	 65 65s   ""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   r8   )	r   	fminboundr   r   rc   r(   rH   rL   rM   r  s     r,   test_fminboundz!TestOptimizeScalar.test_fminbound;  s    txxA.14(txxA.4==t4txx1#!F4==t4j("4"4dhh1Er.   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&   r1   r&   r   r8   r   )r   r
   rM   r   r=  r   r(   r`   rH   r   rc   r  s     r,   test_fminbound_scalarz(TestOptimizeScalar.test_fminbound_scalarF  sr    ]]:-IJtxx&)91= K txxBHHQK84==t4	 KJs   5B&&B/c                 8    d }t        j                  |dd       y )Nc                     | dz  S r2  r   r*   s    r,   r   z,TestOptimizeScalar.test_gh11207.<locals>.funN  r  r.   r   )r   r=  )ri   r   s     r,   test_gh11207zTestOptimizeScalar.test_gh11207M  s    	31%r.   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 )Nr8   r   Brentr   r[   r  r   r*  r3   )bracketr   r   )r   r   r.  r8  )r   r&   Bounded)r  r   r   r&   r  )r&   r   boundedr   r3   )r   r&   r  r   r   r1   r7  )r   minimize_scalarr   r+   r   rc   r   rH  r(   rH   rL   rM   r`   r  s     r,   test_minimize_scalarz'TestOptimizeScalar.test_minimize_scalarR  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4r.   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  TFr@  rV  )r   rH  r   rj  rB  rd   r  r   rC  rD  rE  rF  rG  rH  rK  rL  s                   r,   rM  z?TestOptimizeScalar.test_minimize_scalar_custom.<locals>.custmin  s    QZ'!*,3EJEHEHD4EGO 
#h.0@AE--EMHu} % %#' B 'UO%(f*<D 4EGO  **u508519O Or.   )r   r   rO  rP  )rH  r   r   r8   r   rQ  )r   rL  r   rH  r   r+   rc   )ri   rM  r   s      r,   test_minimize_scalar_customz.TestOptimizeScalar.test_minimize_scalar_custom  sJ    AD*.	O8 &&txx.5/3T/BD 	t}}48r.   c                 F    t        j                  | j                  d       y )Nr3   r   r   rL  r   rh   s    r,   &test_minimize_scalar_coerce_args_paramz9TestOptimizeScalar.test_minimize_scalar_coerce_args_param  s      4r.   r   )r4  rJ  r8  c                 X    dD ]%  }t        j                  | j                  d|i       ' y )N)r   r&   r1   r[   r   )r   rS  )ri   r   r   s      r,   	test_dispzTestOptimizeScalar.test_disp  s&     !D$$TXX~F !r.   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 )NrJ  r  r  r   r   r+   r   r  r   r   r   )r   rL  r   r  )ri   r   r  r?  s       r,   test_result_attributesz)TestOptimizeScalar.test_result_attributes  s    *0I*=(S"I&2))$((L6LVLvs###vy)))vy)))vu%%%vv&&&vu%%%r.   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)Nr5   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   r1   r:   )r(   r  r>   r  s    r,   rt   z0TestOptimizeScalar.test_nan_values.<locals>.func  s?    !HMHQx!|vv!tcBFF1Io--r.   r1  r  r   r  r  r  r  rJ  r  rH  r  r  r   F)r(   r4   r7   r   r	   r  r  r  r   rL  rH  r   r   )	ri   r   rt   rH  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 r2  r   r*   s    r,   rs   zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.f  r  r.   r   r   r   )r&   r&  r  r  )r  r   r&   )r   rL  r   r+   )ri   rs   r   s      r,   %test_minimize_scalar_defaults_gh10911z8TestOptimizeScalar.test_minimize_scalar_defaults_gh10911  sT    	 &&q)qt,&&q07/?Aq!r.   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
   rM   r   rL  r(   r>   r  r  r  s     r,   'test_minimize_non_finite_bounds_gh10911z:TestOptimizeScalar.test_minimize_non_finite_bounds_gh10911  sz     <]]:S1$$RVVQK@ 2]]:S1$$RVVRVVQK@ 21 2111s   6B676C6B?Cr4  r8  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   r@  r   r  )r   r
   rM   r   rL  r(   r>   )ri   r   rx  s      r,   2test_minimize_unbounded_method_with_bounds_gh10911zETestOptimizeScalar.test_minimize_unbounded_method_with_bounds_gh10911  s9     8]]:S1$$RVVF6J 211s   'AAri  r  r&   r8   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(   rH   reshape)r+   rc  s    r,   rs   zITestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196.<locals>.f  s     88AqD>))&11r.   )r   rE   rJ  )rH  r  )r   r  )rH  updater   rL  r+   shaper   )	ri   r   r  rc  rs   rq  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Gr.   )rJ  r4  r8  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 r0   r   r*   s    r,   rs   zBTestOptimizeScalar.test_minimize_scalar_warnings_gh1953.<locals>.f  r  r.   rJ  r  rH  r  r   Tr[   r  r  r   r   Fr   )r   r  r   r  rL  )ri   r   rs   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 /'-/ L    M67MfM LKs    BB
NrG  )r   r   r   rj   r   r5  r   r_  r`  r;  r>  rA  rD  rM  rP  rT  ra  rV  rX  r  r]  r_  rb  r   rm  rq  r   r.   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r.   r&  c                       e Zd Zej                  j                  d      d        Zej                  j                  dd      d        Zy)TestBracketri  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 Nr<  r&   r1   g      Y@r   r*   s    r,   rs   z3TestBracket.test_errors_and_status_false.<locals>.f/       !VA.1a4:U:r.   9The algorithm terminated without finding a valid bracket.r   r<  r&   r  r+  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[      r1   r&   r   r*   s    r,   rs   z3TestBracket.test_errors_and_status_false.<locals>.f<  sE    19q1a4x'"q!t)3b1a4i?!a%G!KKr.   z8No valid bracket was found before the iteration limit...r   rZ   r   r  )	r   r
   rl   r   rH  r(   r  r4  r8  )ri   rs   r  s      r,   test_errors_and_status_falsez(TestBracket.test_errors_and_status_false,  s    	; N]]<w7QA& 8]]<w7QBFF+ 8]]<w7NN1G, 8]]<w7OOAW- 8	L M]]<w7Qc26 87 87777777 87s;   E&E%E E( E4EEE%(E14E=r   )r4  r8  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 rv  r   r*   s    r,   rs   z9TestBracket.test_minimize_scalar_success_false.<locals>.fF  rw  r.   rx  r  )rH  r   r[   r   r&  )r   rL  r   r  r   r   r   )ri   r   rs   r  r   s        r,   "test_minimize_scalar_success_falsez.TestBracket.test_minimize_scalar_success_falseC  sq    	; N&&q'&I;;#++%%%xx1}}ww!||ww#~~r.   N)	r   r   r   r   r_  r`  r|  ra  r  r   r.   r,   rs  rs  *  sJ    [[ 897 :7, [[X':; <r.   rs  c                  b    t        t        t        j                  t        j
                  d       y )Ng{Gzr7  )rL   rM   r   r4  r(   rC   r   r.   r,   test_brent_negative_tolerancer  S  s    *hnnbff$?r.   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   rX   r   r=  r   r}   r  r   r&   r  r   )r(   rH   r   r   r   r   r   r   r  r   r+   ri   rQ   r   s      r,   test_rosenbrockzTestNewtonCg.test_rosenbrockX  sx    XXtSk"$,$6$6%-%8%8$('2	4
 {{'CKK'{rxxA/d;r.   c                 .   t        j                  t              }t        j                  t
        |t        t        dd      }|j                  sJ |j                         t        |j                  t        d       t        |j                  t        d       y )Nr=  r8   )r   r}   r   r  r  r   r   )r(   rH   rP   r   r   
himmelblaurN   rO   r   r  r   r+   himmelblau_xoptr   himmelblau_minr  s      r,   test_himmelblauzTestNewtonCg.test_himmelblaub  sh    XXm$
 "$3%4'2$(* {{'CKK'{T:d;r.   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   rX   r  r   r=  r  r&   r  r   )
r(   rH   r   r   r   r   r   r  r   r+   r  s      r,   test_finite_differencez#TestNewtonCg.test_finite_differencen  sr    XXtSk"$,$6$6%.$('2	4
 {{'CKK'{rxxA/d;r.   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(   rH   r   r   r   r   r   r   r  r   r+   r  s      r,   test_hessian_update_strategyz)TestNewtonCg.test_hessian_update_strategyx  sx    XXtSk"$,$6$6%-]]_$('2	4
 {{'CKK'{rxxA/d;r.   N)r   r   r   r  r  r  r  r   r.   r,   r  r  W  s    <
<<<r.   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r<  r   r  )r   r&   ffffff@r[   r\   r   r   r   )r\   r1   r  r   rX   r   r   r   r  r   r\   r&   r   r   r<  r&   r\   r   r&   r   r   r  r\   r   r   r&   r  r[   )rX   r&   r   r   )rX   r   r<  r1   r3   )r  r   r<  r1   gffffff?g333333@)rX   r   r<  r   r8   r   g333333)r   rr  _line_for_searchr(   rH   r   r  )line_for_searchlower_boundupper_boundrQ   x1	all_testsr+   alphalminlmaxmimas               r,   test_line_for_searchr    sh   
 ((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, !*r.   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  r3   皙ٿr1   r(   r?   rH   r*   s    r,   rt   z$test_linesearch_powell.<locals>.func  %    vvq288$:;;ABBr.   r  r   r  r<  r  r1   r  r3   r  r  r  r   r&   r         ?r\   r   r&   r&   皙?r  r   r<  r&   r   )fvalr  r8   r   r  r  r  r  )r   rr  _linesearch_powellr(   rH   r  r   linesearch_powellrt   r  r  r  r  r  xilrs   rx   r6   s               r,   test_linesearch_powellr    s    **==C	-	 B8D((RVVG9q=)K((BFF8a<(K 
-	 "%	-	 !$	-	 #&	-	 #&	.	!4(	-	 #&	.	!4(I A+D"b154A1i4B<d31r6-	1r65+D"bd8C8C1571i 	4B<d31r6-	1r65 r.   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,   rt   z,test_linesearch_powell_bounded.<locals>.func  r  r.   r  g       r   r  r  r<  r  r1   r  r3   r  r  r  r  r  r  r  r  r   r  r8   r   g333333ӿr[   g?r   rY   g333333ÿ)r  r   r   r1   r   g333333)r   rr  r  r(   rH   r   r  r  s               r,   test_linesearch_powell_boundedr    sO    **==C	-	 B8D ((C57#K((B46"K 
-	 "%	-	 !$	-	 #&	-	 #&	.	!4(	-	 #&	.	!4(I A+D"bd8C8C1571i 	4B<d31r6-	1r65  ((C57bT>*K((C57bT>*K 
-	 #&	-	 #&	-	 #&	-	 #&	.	!2&	-	 #&	.	!4(I A+D"bd8C8C1571i 	4B<d31r6-	1r65  
.	!B8D 
-	 "%	-	 #&	-	 #&	-	 $'	I A+D"bd8C8C1571i 	4QV,482B;T2	1r65  
-	 B8D ((C"&&266'267K((BFFC45K 
-	 #&	-	 #&	-	 #&	-	 #&	.	!2&	-	 #&	.	!4(I A+D"bd8C8C1571i 	4B<d31r6-	1r65  
.	!B8D 
-	 "%	-	 #&	-	 #&	-	 $'	I A+D"bd8C8C1571i 	4QV,482B;T2	1r65 r.   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   g333333?r  c                     | \  }}| j                   k\  j                         r| j                  k  j                         sJ |dz  |dz  z   S r2  )lbrG   ub)r+   rq  rl  r  s      r,   r   ztest_powell_limits.<locals>.funi	  sK    1VYY##%1		>*>*>*@@@AvQr.   r  r  r&   T)r  r  keep_feasiblec                 D    | dk\  r| dk  sJ t        j                  |       S r  r'   r*   s    r,   rt   z test_powell_limits.<locals>.funcs	  s#    Av!q&  vvayr.   rZ   r`  )r   rQ   r   r  )r   r   r   )r   rt   r  s     @r,   test_powell_limitsr  e	  sq    __aVc2Y/F
 csBiH __!dWEF $C5&Ir.   c                       e Zd Zd Zy)	TestRosenc                     t        j                  g d      }t        j                  g d      }t        j                  ||      }t        j                  t        j
                  |      |      }t        ||       y )N)r[   r   r   )r1   r1   r1   )r(   rH   r   rosen_hess_prodrm   r   r   )ri   r+   rx   hpdothps        r,   	test_hesszTestRosen.test_hess|	  sU    HHYHHY%%a+x**1-q1Rr.   N)r   r   r   r  r   r.   r,   r  r  z	  s     r.   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   )rx   r+   r0  rq  rl  s        r,   r  r  	  sA    
 DAq	!a"A	AaC!AQ319r.   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[   *   r1         rK  r]  rx   r+   r0  s      r,   rN   rN   	  s    DAq88Qq!tVac!e^bd*Qq!tV3b8q!tVac!e^a1f,r!t3b8: ; ;r.   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 )Nrz  r1   r   r  r  r]  r  s      r,   rO   rO   	  sr    DAq88bAg!mb(!A#!)4cAaCi1r!Q$w!346 7 7r.   gHzGѿgr[   r1   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   rE   r   r  r&   r  r1   r]  r*   s    r,   rt   z0test_minimize_multiple_constraints.<locals>.func	  s:    xxcAaDj31:5qtCDEEr.   c                 4    t        j                  | d   g      S r%   r]  r*   s    r,   func1z1test_minimize_multiple_constraints.<locals>.func1	      xx1r.   c                 4    t        j                  | d   g      S r2  r]  r*   s    r,   r  z1test_minimize_multiple_constraints.<locals>.func2	  r  r.   r  r  c                 *    d| d   | d   z   | d   z   z  S )Nr<  r   r&   r1   r   r*   s    r,   rs   z-test_minimize_multiple_constraints.<locals>.f	  s"    QqTAaD[1Q4'((r.   r  r  r  )}   r   r   r  r   r9  )rt   r  r  r  rs   r   s         r,   "test_minimize_multiple_constraintsr  	  s`    F   D)E*E*,D) 

Ayd
KCCEE;U3r.   c                       e Zd Zd Zd Zy)TestOptimizeResultAttributesc                     ddg| _         t        j                  | _        t        j                  | _        t        j                  | _        t        j                  | _	        ddg| _
        y )Nr   )r\   r  )rQ   r   r   rt   r   r   r   r}   r  r   r  rh   s    r,   rj   z)TestOptimizeResultAttributes.setup_method	  sK    a&NN	%%''	--
 ),r.   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  rb  r   z7Method .+ does not use (gradient|Hessian.*) information)r   r   r}   r   )r   r	   r  r  r   r   rt   rQ   r   r}   r   r  dirrw  r  str)ri   
attributesskipr   r  r   	attributes          r,   test_attributes_presentz4TestOptimizeResultAttributes.test_attributes_present	  s    !
5'"&F"$

>+- ''		4776,0HH499.2jj:	 % (	T>i4<&?sI... CH,,, ( ckk3///! '$$s   A$CC!	N)r   r   r   rj   r  r   r.   r,   r  r  	  s    -0r.   r  c                 ~    | \  }}|\  }}}}}}	}
}}}}}}||dz  z  ||z  |z  z   ||dz  z  z   ||z  z   ||z  z   |	z   S r2  r   r[  r   r+   r0  rq  rl  r  r  r   rs   r6  r  rw  r+  r:  r  r  s                    r,   f1r  	  sj    DAq06-Aq!Q1aAq!Q1Hq1uqy 1q!t8+ac1AaC7!;<r.   c                     | \  }}|\  }}}}}}	}
}}}}}}|
 t        j                  ||z
  dz  ||z
  dz  z    |z        z  S r2  r'   r  s                    r,   f2r  	  ^    DAq06-Aq!Q1aAq!QBrvv1qAaC!8+,u4556r.   c                     | \  }}|\  }}}}}}	}
}}}}}}| t        j                  ||z
  dz  ||z
  dz  z    |z        z  S r2  r'   r  s                    r,   f3r  	  r  r.   c                 N    t        | g| t        | g| z   t        | g| z   S r=   )r  r  r  )r[  r   s     r,   
brute_funcr  	  s*    a>&>BqN6N*R^F^;;r.   c                   r    e Zd Zd Zd Zd Zd Zej                  j                  d      d        Z
d Zd Zy	)
	TestBrutec                     d| _         t        ddd      t        ddd      f| _        t        j                  ddg      | _        y )N)r1   r[   r   r   r   r   ,   r<  r1   r  r&   r  rZ   r  r         ?g_}gi?)r   slicerrangesr(   rH   rc   rh   s    r,   rj   zTestBrute.setup_method	  s<    Db!T*E"a,>?+z!:;r.   c                     t        |g| S r=   )r  )ri   r[  r   s      r,   r  zTestBrute.brute_func	  s    !%f%%r.   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   rc   r   )ri   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]]>r.   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   r1   )r  rk  r*   s    r,   rs   zTestBrute.test_1D.<locals>.f
  s5    qww<1$$$771:?"?6Mr.   r  r[   )Nsr  )r   r  )ri   rs   s     r,   test_1DzTestBrute.test_1D
  s    	
 	q7)$7r.   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  r1   )r   r   r  workersr<  r   )r   r  r  r  r   r   )ri   r  	resbrute1s      r,   test_workerszTestBrute.test_workers
  sr     >>*dll.24A NN:t||$++/3D!M	 		"x|4	!hqk2r.   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)Nr5   c                 ,    j                  d      dz  S re  rf  )r[  r   rg  s     r,   rt   z,TestBrute.test_runtime_warning.<locals>.func*
  s    ::a=4''r.   zFfinal optimization did not succeed.*|Maximum number of function eval.*r   T)r   r   )
r(   r4   rk  r   r  r  r   r  r  r   )ri   capsysrt   rx  rg  s       @r,   r  zTestBrute.test_runtime_warning'
  sX    ii##D)	( W\\.4NN4DKKdK 544s   .A::Bc                 j    d }t        j                  |t        ddd      fd      }t        |d       y )Nc                     | |d   z  S rC  r   )r+   r   s     r,   rs   z+TestBrute.test_coerce_args_param.<locals>.f3
  s    Q<r.   r  r   r  r1   rR  r   )r   r  r  r   )ri   rs   r  s      r,   test_coerce_args_paramz TestBrute.test_coerce_args_param1
  s1    	  >>!eB3&7%9B!$r.   N)r   r   r   rj   r  r  r  r   r_  r  r  r  r  r   r.   r,   r  r  	  sD    <
&?.8 [[1	3 	3L%r.   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   r1   sleepr+   times    r,   
objective1z*test_cobyla_threadsafe.<locals>.objective1B
  s    

3tQwr.   c                 <    j                  d       | d   dz
  dz  S )Nr:   r   r&   r1   r  r  s    r,   
objective2z*test_cobyla_threadsafe.<locals>.objective2F
  s     

3!Q{r.   COBYLAc                  6    t        j                  dg       S Nr\   r   rp  )
min_methodr  s   r,   
minimizer1z*test_cobyla_threadsafe.<locals>.minimizer1L
         '*e-79 	9r.   c                  6    t        j                  dg       S r  rp  )r  r  s   r,   
minimizer2z*test_cobyla_threadsafe.<locals>.minimizer2Q
  r  r.   )concurrent.futuresr  futuresThreadPoolExecutorro   submitr?  )

concurrentr  r  pooltasksr  r  r  r  r  s
         @@@@r,   test_cobyla_threadsafer$  :
  s    
  J9
9
 
			.	.	0DT[[,-T[[,-AHHJ 	 
1	0	0s   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                     d| _         y rC  )rE  rh   s    r,   rj   z TestIterationLimits.setup_methodb
  s	    r.   c                     | 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 )Nr&   r   r1   r  rZ   )rE  r(   r  arctan2r>   )ri   r"  rR   r  s       r,   	slow_funczTestIterationLimits.slow_funce
  si    wwqtQwqtQw'AaD!A$)?1vvadQh#%%r.   r   c                 (    | j                  dd       y )Nri     check_limitsrh   s    r,   test_neldermead_limitz)TestIterationLimits.test_neldermead_limitj
  s    --r.   c                 (    | j                  dd       y )Nr`  r]   r-  rh   s    r,   test_powell_limitz%TestIterationLimits.test_powell_limitn
  s    (D)r.   c           
         ddgddgddgfD ]  }dD ]\  }d| _         t        j                  | j                  ||d|i      }| j                   |d   k(  sJ |d	   r|d   |k  rQJ |d   |k\  r\J  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 ]q  \  }}d| _         t        j                  | j                  ||||d      }| j                   |d   k(  sJ |d	   r|d   |k  r	|d   |k  r]J |d   |k\  rh|d   |k\  rqJ  t        j
                  d gd t        j
                  gfD ]  \  }}d| _         t        j                  | j                  ||||d      }| j                   |d   k(  sJ |d	   r||d   |dz  k  rZJ |d   |dz  k  rhJ |d   |dz  k\  rv|d   |dz  k\  rJ   y )Nr:   r&   r1   )r'  i    r   rj  r   r   r   rd   r   r'  r3  )rd   rj  )rE  r   r   r*  r(   r  )ri   r   default_itersstart_vmfevr   mits          r,   r.  z TestIterationLimits.check_limitsq
  sr   c
QFQF3G' !''/51940@B }}F333y>v;---v;$... ( '''/51:C0@B y>u:,,,u:,,, '  "2httRVVnE	c !''/5<?;?1AB }}F333y>v;-#e*2CCCv;$.#e*2CCC F  "vvtntRVVn=	c !''/5<?;?1AB }}F333y>|"6{]1_<<<"5z]1_<<<K=?:"5z]1_<> = >= 4r.   N)r   r   r   rj   r*  r   r_  r  r/  r1  r.  r   r.   r,   r&  r&  ^
  s9    &
 [[1. .*->r.   r&  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 r=   r   r*   s    r,   r   z2test_result_x_shape_when_len_x_is_one.<locals>.fun
  s    1ur.   c                     d| z  S Nr  r   r*   s    r,   r   z2test_result_x_shape_when_len_x_is_one.<locals>.jac
  s    Avr.   c                 0    t        j                  dgg      S r;  r]  r*   s    r,   r}   z3test_result_x_shape_when_len_x_is_one.<locals>.hess
  s    xx"r.   )	ri  r  r   r   r  r  r  COBYQAr  r:   r   rd  )r  r  r  r  r  r=  r  )r   r   r(   rH   r+   rk  )r   r   r}   r  r   r   s         r,   %test_result_x_shape_when_len_x_is_oner>  
  s     ,GRXXse_VDuu{{d""" 
,GRXXse_V%)+uu{{d""" r.   c                       e Zd Zd Zd Zy)FunctionWithGradientc                     d| _         y rC  )number_of_callsrh   s    r,   r  zFunctionWithGradient.__init__
  s
     r.   c                 f    | xj                   dz  c_         t        j                  |dz        d|z  fS r0   )rB  r(   r?   r  s     r,   r  zFunctionWithGradient.__call__
  s.    !vvad|QU""r.   Nr  r   r.   r,   r@  r@  
  s    !#r.   r@  c                      t               S r=   )r@  r   r.   r,   function_with_gradientrE  
  s    !!r.   c                 P   t        |       }t        j                  ddg      }t         ||      d       | j                  dk(  sJ t        |j                  |      d|z         | j                  dk(  sJ d       t         |d|z        dd	       | j                  dk(  sJ d       y )
NrX   r  r  r&   r1   zHfunction is not recomputed if gradient is requested after function valueg      4@(different input triggers new computationr  )r   r(   rH   r   rB  
derivativerE  memoized_functionrQ   s      r,   )test_memoize_jac_function_before_gradientrK  
  s    "#9:	3*	B%b)3/!11Q666%004a"f=!11Q6 8	886 !b&!4:< "11Q6 3236r.   c                 h   t        |       }t        j                  ddg      }t        |j	                  |      d|z         | j
                  dk(  sJ t         ||      d       | j
                  dk(  sJ d       t        |j	                  d|z        d|z  d	       | j
                  dk(  sJ d       y )
NrX   r  r1   r&   r  zHfunction is not recomputed if function value is requested after gradientr   rG  r  )r   r(   rH   r   rH  rB  rI  s      r,   )test_memoize_jac_gradient_before_functionrM  
  s    "#9:	3*	B%004a"f=!11Q666%b)3/!11Q6 8	886 $$QV,a"f:< "11Q6 3236r.   c           	      `   t        |       }|j                  }t        j                         }t	        j
                  ddg      }t        ||d||dd      }| j                  dk(  sJ |j                  |dz          | j                  dk(  sJ |j                  |dz          | 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.
    rX   rZ   r   Nr&   r:   r1   rE   r[   )	r   rH  r   r   r(   rH   r   rB  r   )rE  rJ  r   r}   rQ   scalar_functions         r,   test_memoize_jac_with_bfgsrP  
  s    
 ##9:

&
&C==?D	3*	B$2r3dD:O!11Q666S!!11Q666S!!11Q666r.   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 r2  r]  r*   s    r,   r|  ztest_gh12696.<locals>.<lambda>  s    bhh1v&r.   Fr   )r   r   r=  r(   r  r   r.   r,   test_gh12696rS    s6    		&E	C 
		s   8AAc                     t         j                  j                  d       t         j                  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   r1   r<  r  )r[   r1   r1   r  Tc                 V    |r| j                   dk(  sJ |rt        |              y y rh  )rA  r   )r+   
check_sizecheck_valuesi_ebr  s      r,   check_xz(setup_test_equal_bounds.<locals>.check_x  s0    66Q;;AdGRX. r.   c                 >     |        t        j                  |       S r=   r  r+   rY  s    r,   rt   z%setup_test_equal_bounds.<locals>.func  s    
~~a  r.   c                 >     |        t        j                  |       S r=   )r   r   r[  s    r,   ry   z%setup_test_equal_bounds.<locals>.grad  s    
!!!$$r.   c                      |        y r=   r   )r+   r   rY  s     r,   r  z)setup_test_equal_bounds.<locals>.callback"  s
    
r.   c                 (     | d       | dd dz
  S )NFrW  r   r&   r   r[  s    r,   constraint1z,setup_test_equal_bounds.<locals>.constraint1%  s    &1vzr.   c                 P     | d       t        j                  |       }d|d<   |S )NFr_  r&   r   r(   
zeros_liker+   dcrY  s     r,   	jacobian1z*setup_test_equal_bounds.<locals>.jacobian1)  )    &]]11	r.   c                 (     | d       | dd dz
  S )NFr_  r1   r[   rZ   r   r[  s    r,   constraint2z,setup_test_equal_bounds.<locals>.constraint2/  s    &1v|r.   c                 P     | d       t        j                  |       }d|d<   |S )NFr_  r&   r1   rb  rd  s     r,   	jacobian2z*setup_test_equal_bounds.<locals>.jacobian23  rg  r.   )r  r  r  Fr  c                 $     |        |       fS r=   r   )r+   rt   ry   s    r,   r|  z)setup_test_equal_bounds.<locals>.<lambda>E  s    Qa1r.   c                 ,    t        t        | |            S r=   )listzipr  r  s     r,   r|  z)setup_test_equal_bounds.<locals>.<lambda>I  s    $s2r{"3r.   r  )	r  kwdsbound_typesrT  	callbacksr  r  rQ   rX  )TT)r(   r4   r7   r  rH   r   r  r   )rQ   r  r  r`  rf  ri  rk  c1ac1bc2ac2br  rq  rr  rT  rs  datarY  rt   ry   rX  r  s                    @@@@@r,   setup_test_equal_boundsry    s   IINN1		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 Kr.   z0Failures due to floating point issues, not logicr  rq  
bound_typerr  rT  r  rs  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  rQ   rX  r  z)Only SLSQP supports nonlinear constraints)rQ   r   r  rT  r  )r   r   r  rT  gTqs*>r   gMb@?r   r   r8   c                     t        j                  t         j                  dt         j                  dg      }| |ddg<   t        j                  |      S )Nr1   r<  r   )r(   rH   r  r   r   )r+   new_xs     r,   r   ztest_equal_bounds.<locals>.fun  s=    HHbffa45EE1a&M>>%((r.   r1   ra  g>r   )platformmachiner   r  eb_datarj  r   r   r   r   r   r   r   r+   r(   r  r   rk  rw  r   )r   rq  rz  rT  r  r  r  rQ   rX  test_constraintsreference_constraints	fd_neededr  r   expectedr   fd_ress                    r,   test_equal_boundsr  d  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+Kr.   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 r=   )r(   linalgnorm)r+   p1s     r,   rs   z test_all_bounds_equal.<locals>.f  s    yy~~a 2%%r.   re  )r1   r1   )rX   r8  r7  rX   r  z/All independent variables were fixed by bounds.)r1   rK  r1   r  c                 ,    t        j                  |       S r=   r3  r*   s    r,   conz"test_all_bounds_equal.<locals>.con  s    66!9r.   r\   )r  r   rT  Fz3All independent variables were fixed by bounds, butr   Tz8All independent variables were fixed by bounds at valuesrd  )r   r   r   r   r   r   r  upperr   r(   r  r}  )	r   rs   r  rQ   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...+ !r.   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&   r1   r   r*   s    r,   rs   ztest_eb_constraints.<locals>.f  s.    tQw1q 1Q4!9,,r.   c                 6    | d   | d   z   | d   z   | d   z   dz
  S )Nr   r&   r1   r[   (   r   r*   s    r,   cfunz!test_eb_constraints.<locals>.cfun  s+    tad{QqT!AaD(2--r.   r  r  )r   r  r   )r   r   r&   )r&   r1   r[   r   r  )rQ   r   r  rT  r   r   rp  )rs   r  rT  r  s       r,   test_eb_constraintsr    se    -. #401KY]FF1I	 q>% D(((r.   c                     t         t        t        t        t        t
        d} | j                         D ]  \  }}|D ]  }t        ||         dddd}|j                         D ]  \  }}t        t        t        ||        y )N)r   rL  rootroot_scalarlinprogquadratic_assignmentekkir   )r   maximizemaximize_scalar)
r   r   r   r   r   r   itemsr   rL   rM   )solver_methodssolverr  r   unknown_solver_methods        r,   test_show_optionsr    s    $2*" <N *//1F(  2 !
 0557j,? 8r.   c                      t        j                  ddgddg      } t        j                  t         j                  t	        j
                  ddg      d|        y )Nr  r  rp  r   r  r  )r   r   r   r   r(   rH   r  s    r,   test_bounds_with_listr    sB    __Rc3Z8F288QF+HVr.   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 r=   )r(   rK   rA  r?   r  s     r,   fquadz/test_x_overwritten_user_function.<locals>.fquad  s8    IIbggaj!	Q	Qvvayr.   c                 p    t        j                  t        j                  |             }| dz  } | d|z  z  } | S r2  )r(   rK   rA  r  s     r,   	fquad_jacz3test_x_overwritten_user_function.<locals>.fquad_jac  s3    IIbggaj!	Q	QU
r.   c                 X    t        j                  t        j                  |             dz  S r;  )r(   r   rA  r*   s    r,   
fquad_hessz4test_x_overwritten_user_function.<locals>.fquad_hess  s    vvbggaj!C''r.   )rF  r  r  r  r  r  )r  r  r  r  r  r   r3   r  g-C6*?r   )	r(   r  r   r   r   r   r+   rK   rA  )
r  r  r  meth_jac	meth_hessrQ   methr   r}   r   s
             r,    test_x_overwritten_user_functionr    s    (HI 
c	B 8C9Dr$CdKryy5DA !r.   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 r2  r   r*   s    r,   rt   zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.func6  s    6Mr.   r&   )rQ   )r  r   r+   r   r  r   r   r   )	r   basinhoppingdifferential_evolutionshgodual_annealingdirectrw  r   r  )ri   rt   rx  r?  s       r,   test_optimize_result_attributesz6TestGlobalOptimization.test_optimize_result_attributes5  s    	 ((!4224'C==y1**4';??4'3	 Ffh&=&=>>>63'''69---69---65)))66***65))) r.   N)r   r   r   r  r   r.   r,   r  r  3  s    *r.   r  c                      t        j                  t        t              } t	        | t        t              d       t        j                  t        t
              }t	        |t        t              d       y )Nr  r   )r   approx_fprimerP   r  r   rN   rO   )r6  r  s     r,   test_approx_fprimer  K  sJ     	}j9AA}5DA}o>AA}5DAr.   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,   rs   ztest_gh12594.<locals>.fZ  s!    tQw!A$(Q&&r.   r  r   rp  r   r  r  )r   r   r   r(   rH   r   r   r+   )rs   r  r   r   s       r,   test_gh12594r  U  s    
' Szr2h/F


A&&
ICrxxc
+"b0BCF


A&&
ICCGGSWW%CEE355!r.   r=  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 r=   )r   )r+   r  s    r,   sparse_rosen_hessz.test_sparse_hessian.<locals>.sparse_rosen_hesso  s    :a=))r.   r  r  )r   r   r   r   r   r   r   r+   r   r   nhev)r   r  r  rQ   
res_sparse	res_denses    `    r,   test_sparse_hessianr  f  s    * bB""5"V'07HJJ!!%F&/jBI IMM:>>2IKK.>>Z__,,,>>Z__,,,>>Z__,,,r.   )vr   r  r  numpyr(   numpy.testingr   r   r   r   r   r   r	   r   r
   rL   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"   rS   rU   r   rm  ry  r}  r  r  r  r  r  r  r  r  r  r  r  r  r_  ra  r  r  r&  rs  r  r  r  r  r  r  r  r  rN   rO   rP   r  r  r  r  r  r  r  r  r  r  r$  r&  r>  r@  fixturerE  rK  rM  rP  rS  ry  r  xfail_on_32bitr  r  r  r  r  r  r  r  r  r  r   r.   r,   <module>r     s  
   A A A  *  @? ? 4 - ; < O M M 7 70 02j-' -'`R= R=j-"0H8D$ >I:X'FT8 
 : 
 : 
"< 
LD LD^ :-	-:= :=ziN iNX	& &R@)< )<X<-~#6Lz6zJ*   ;7 a&4,0 0D=77<H% H%V r   F@> @>F#2# # " "3&3&7*CQh "
# NO79#561w}'=>(>?W[%9:;< ; @ ? 2 7 P;<| 79#56(/ 7(/V).@0%BP* *0B"" K#@AZ)2Iy)J K-K B-r.   