
    xfL             
          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 Z' G d d      Z( G d de(      Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3 G d de)      Z4 G d d e)      Z5 G d! d"e)      Z6 G d# d$e)      Z7 G d% d&e(      Z8ejr                  ju                  d'g d(      d)        Z; G d* d+      Z< G d, d-      Z= G d. d/      Z>d0 Z? G d1 d2      Z@d3 ZAd4 ZBd5 ZCd6 ZD G d7 d8      ZEd9 ZFd: ZGd; ZHd<d=gZId>d?gZJd@ZKdA ZL G dB dC      ZMdD ZNdE ZOdF ZPdG ZQ G dH dI      ZRdJ ZS G dK dL      ZTdM ZU G dN dO      ZVej                  dP        ZXdQ ZYdR ZZdS Z[dT Z\dU Z] e]       Z^ejr                  j                  dV      ejr                  ju                  d'e^dW         ejr                  ju                  dXe^dX         ejr                  ju                  dYe^dZ         ejr                  ju                  d[e^d[         ejr                  ju                  d\e^d]         d^                                           Z`ejr                  ju                  d'e^dW         d_        Zad` Zbda Zcdb Zddc Ze G dd de      Zfdf Zgdg Zhy)hz
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OptimizeResultc            
      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    D/usr/lib/python3/dist-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)r0   r-   r.   皙?Hz>c                 N    | t        j                  |       z  j                         S N)r   sinsumr!   s    r#   x_sinxztest_check_grad.<locals>.x_sinxB   s    "&&)  ""r%   c                 ^    t        j                  |       | t        j                  |       z  z   S r4   r   r5   cosr!   s    r#   
der_x_sinxz#test_check_grad.<locals>.der_x_sinxE   s!    vvay1RVVAY;&&r%   r(   皙?random_projectionallgƠ>)r   arrayr   
check_gradr   absarangeassert_raises
ValueErrorhimmelblau_gradhimmelblau_hesshimmelblau_x0)r$   r)   x0rr7   r;   s         r#   test_check_gradrJ   #   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   r?   FKzerosfloat64startparamssolutionmaxiter	funccalls	gradcallstraceselfs    r#   setup_methodzCheckOptimize.setup_method^   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)r\   RuntimeErrorr   dotrU   logr6   r    rV   r^   appendcopy)r`   r"   log_pdotlogZfs        r#   funczCheckOptimize.funcl   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   )	r]   r   rd   rU   re   r6   r    	transposerV   r`   r"   rh   ri   ps        r#   gradzCheckOptimize.gradv   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 r4   )r   rd   rU   re   r6   r    Tdiagrn   s        r#   hesszCheckOptimize.hess}   s    66$&&!$vvc"&&*+,FF8d?#vvdffhhffRWWQZ"&&12E)EFH 	Hr%   c                 L    t        j                  | j                  |      |      S r4   )r   rd   rt   r`   r"   ro   s      r#   hesspzCheckOptimize.hessp   s    vvdiilA&&r%   N)	__name__
__module____qualname____doc__ra   rk   rp   rt   rw    r%   r#   rL   rL   X   s!    
6H'r%   rL   c                       e Zd Zd Zd Zd Zej                  j                  d      d        Z	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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r[   disp
return_allr|   CG)argsmethodjacoptionsr"   funnfevnjevstatusT)r[   full_outputr   retallr/   atol	      r(      )r         rQ   )r   g;ӱ.g)`$|;?+=r2   r   rtol)use_wrapperr[   r   r   minimizerk   rY   rp   fmin_cgr   rZ   r\   r]   r^   )	r`   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         rQ   r(   r   )rI   s    r#   rj   z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.f   s(    !bffT1s7^44q888r%   g      rR   G   r   r   rQ   h㈵>r   )r   linspacer   r   successr   r"   )r`   rj   rH   sols       r#   test_cg_cornercasez-CheckOptimizeParameterized.test_cg_cornercase   sY    	9
 ++eQ+ 	5B##AtD9C;;;CEEC5t4	5r%   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   r[   r   r   r   r/   r   
         )r   g&/LgB__E7?)r   g$g
|3?r   r2   r   )r   r[   r   r   r   rk   rY   rp   	fmin_bfgsr   rZ   r\   r]   r^   )r`   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%   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 r4   )r   er!   s    r#   rk   z;CheckOptimizeParameterized.test_bfgs_infinite.<locals>.func   s    DDaRL= r%   c                      |        S r4   r|   )r"   rk   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)r`   r   rH   r   r"   rk   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 )Ng?ffffff?皙?ffffff?333333?bfgsxrtolMbP?r   r   gtol)r   r   rosennit)r`   rH   r   refs       r#   test_bfgs_xrtolz*CheckOptimizeParameterized.test_bfgs_xrtol   sa    & "6GT?L "6FD>Kww#''!!!r%   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   r/   r   r   h㈵>   r   )r   r[   r   r   r   rk   rY   fmin_powellr   rZ   r\   r]   
r`   r   r   r   r   r   numiterr   r   r   s
             r#   test_powellz&CheckOptimizeParameterized.test_powell   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   r2   r   )
r   r[   r   r   r   rk   rY   r   r   r^   r   s
             r#   test_powell_gh14014z.CheckOptimizeParameterized.test_powell_gh14014  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   r/   r   r      r   )rY   r   pir   r[   r   r   r   rk   r\   r   rZ   r]   )r`   _r   r   r   r   r   s          r#   test_powell_boundedz.CheckOptimizeParameterized.test_powell_bounded5  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   r/   r      r   L   N   )g	dװ?g]fgt䝁?)gә ?g#=^goT?r   r2   r   )r   r[   r   r   r   rk   rY   fminr   rZ   r\   r]   r^   )	r`   r   r   r   r   r   r   r   r   s	            r#   test_neldermeadz*CheckOptimizeParameterized.test_neldermeadN  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   rR   .rR   r   r1   FTr[   r   r   initial_simplexr|   r   r   r"   r   r   r   r   allvecsr   r   r[   r   r   r   r   r/   r   d   2   4   )gIt?g?'ΛTgx8?)gҢ_׆?goMg囎|52?r   r2   r   )r   rW   rY   ranger   r[   r   r   rk   r   r   rZ   r\   r]   r^   )r`   simplexjr   r   r   r   r   r   r   r   s              r#   test_neldermead_initial_simplexz:CheckOptimizeParameterized.test_neldermead_initial_simplexm  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)rR   r(   r(   .r   r1   )rR   rR   Fr   r|   r   r   Tr   )r   rW   rY   r   rf   r   r[   rC   rD   r   r   rk   r   )r`   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%$ 	7G#'<<&+Ij&//"ii"..#%%2&*, j(--"ii)9)9#%t||*.U5.5	7	7r%   c                     ddi}t        j                  | j                  | j                  d| j                  d|      }|j
                  dk(  sJ y )Nr[   	Newton-CGr|   r   r   r   r   r   )r   r   rk   rY   rp   r   )r`   r   results      r#   test_ncg_negative_maxiterz4CheckOptimizeParameterized.test_ncg_negative_maxiter  sK    2""499d.>.>*5499(*D: }}!!!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   r/   r   r      rR      (6-H=g?g4u3?r  g_g/N3?r2   r   )r   r[   r   r   r   rk   rY   rp   fmin_ncgr   rZ   r\   r]   r^   r`   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   rt   r   r   r"   )fhessr   r[   r   r   r   r/   r   r      rR   r  r  r  r2   r   )r   r[   r   r   r   rk   rY   rp   rt   r  r   rZ   r\   r]   r^   r  s       r#   test_ncg_hessz(CheckOptimizeParameterized.test_ncg_hess  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   rw   r   r   r"   )fhess_pr   r[   r   r   r   r/   r   r   r  rR   r  r  r  r2   r   )r   r[   r   r   r   rk   rY   rp   rw   r  r   rZ   r\   r]   r^   r  s       r#   test_ncg_hesspz)CheckOptimizeParameterized.test_ncg_hessp  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%   N)rx   ry   rz   r   r   r   pytestmarkfilterwarningsr   r   r   xfailr   r   r   r   r  r	  r  r  r  r|   r%   r#   r~   r~      s    />	5 /D [[ 56, 7, " 3D [[ & '/'/@'2/>&/P7>".B .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   rT   r+   )r"   rngs    r#   costztest_maxfev_test.<locals>.cost%  s    zz!}t##r%   )r   r   r   )r   Nelder-Meadr   maxfevr   r   )r   r+   default_rngr   r   )r#  imaxfevr   r  r"  s       @r#   test_maxfev_testr(  "  s{    
))

 G
HC$  - 0 	-F&&tSZZ^.408'/BDF &>W,,,		-	-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 r4   r|   r!   s    r#   func_z8test_wrap_scalar_function_with_validation.<locals>.func_5  s    r%   r   r  r   zToo many function callsmatch@The user-provided objective function must return a scalar value.)
r   	_optimize'_wrap_scalar_function_maxfun_validationr   asarrayr   rC   _MaxFuncCallErrorrD   r?   )r+  fcallsrk   imsgs        r#   )test_wrap_scalar_function_with_validationr6  3  s    %%//rzz!}aH FD 1X  RZZ]ayAaC  $C	x));;3	G RZZ] %%//rzz!}aH FD MC	z	- RXXq!f   s   D/D;/D8;Ec                      d} t        t        |       5  t        j                  d t	        j
                  ddg      d       d d d        y # 1 sw Y   y xY w)Nr.  r,  c                     | S r4   r|   r!   s    r#   <lambda>z.test_obj_func_returns_scalar.<locals>.<lambda>P  s    A r%   r   r   r   )rC   rD   r   r   r   r?   r,  s    r#   test_obj_func_returns_scalarr:  K  sM    &E 
z	/ H+rxxA'7GH H Hs   /AAc                      t        j                  g d      } t        j                  j	                  t        j
                  | d      }|j                  dk  sJ y )Nr   :0yE>)xatoliS  )r   r?   r   	_minimize_minimize_neldermeadr   r   )rH   r   s     r#   test_neldermead_iteration_numr@  S  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 r4   )dtyper   float32r   r   r!   s    r#   rosen_z*test_neldermead_respect_fp.<locals>.rosen_]  s'    ww"**$$$~~a  r%   r$  r   )r   r?   astyperF  r   r   )rH   rG  s     r#   test_neldermead_respect_fprI  Z  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   r(   r   r|   r!   s    r#   rk   z)test_neldermead_xatol_fatol.<locals>.funcg  s    tqy1Q419$$r%   r   r(   r   )r[   r=  fatol)r   r>  r?  )rk   s    r#   test_neldermead_xatol_fatolrN  d  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 Nr(   r   r6   r!   s    r#   rk   z&test_neldermead_adaptive.<locals>.funco      vva1f~r%   )gM@'?gOC?g~?g -?g?g#j?g ?g~^g?gܠr#?g^cǽ?g)i	?g'?g?g1?g[VΤ?r$  r   FadaptiveTr   )r   r   r   r   )rk   p0r   s      r#   test_neldermead_adaptiverV  n  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 rQ  rR  r!   s    r#   rk   z/test_bounded_powell_outsidebounds.<locals>.func  rS  r%   )r  r   rY  rY  )rQ   gr   r   r   rS   r/   r   Tr   r   r   r   )r   r   r   )r   r   r   r   )r   r   r   )g      r   r   Fr   )r   r   OptimizeWarningr   r   r"   r   r?   lenr   r   r   )rk   r   rH   r   r   s        r#   !test_bounded_powell_outsideboundsr_  }  s   &F	B 
h..	/ JbIJCEE288RD3r7N3$?d#Q 	9-E	h..	/ :b'-h)0%(8:: CEE288K0t<e$Q%J J: :s   EEEE"c                     d } d}g d}ddd}t        j                  | |d|      }t        |j                  dd	
       t        |j                  dd	
       t        j                  | |||d      }t        j                  g d      }t        |j                  |d	
       t        |j                   | |      d	
       dt
        j                   dfdt
        j                  fddf}t        j                  | |||d      }t        j                  g d      }t        |j                  |d	
       t        |j                   | |      d	
       d } dgdz  }g d}t        j                  | |d      }t        j                  | ||d      }t        |j                  dd	
       t        |j                  dd	
       t
        j                   t
        j                  fgdz  }t        j                  | ||d      }t        |j                  |j                  d	
       t        |j                  |j                  d	
       t        |j                  |j                  d	
       g d}dgdz  }t        t         j                        5  t        j                  | ||d      }d d d        t        |j                  dd	
       y # 1 sw Y   "xY w)Nc                 2    t        j                  | dz        S rQ  rR  r!   s    r#   rk   z+test_bounded_powell_vs_powell.<locals>.func  rS  r%   ))r  )皙)r   gffffff"@)rZ  gffffff@g/)g gr   r   rf  绽|=ftolxtolr   r   rS   r/   r   )r   r   r   )r  rd  r   r   rf  )Nr  rd  r   )rZ  Nre  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   r(   r9   r"   ts     r#   rk   z+test_bounded_powell_vs_powell.<locals>.func  s    FFAaD5MBFF1Q4L(2661Q4%!A$,+??"&&1,N	RVVBFF1Q4!A$;'"&&1,677!tr%   )rf  r  rR   )r   r   r   r   r[  g8:}?r   )gb4F@g:gW?@)r   r   r   r"   r   r   r?   infr   r   r]  )rk   r   rH   r   
res_powellres_bounded_powellro   s          r#   test_bounded_powell_vs_powellrr    s{   DF	!Be,G""4HgNJJLL"40JNNBT2!**4W282:< 	%&A&((!$7&**DG$? 266'3!RVVj+MF!**4W282:< 	%&A&((!$7&**DG$?

 Y]F	B""4H=J!**4282:< JNN$8tD&**AD9
 w 1$F!**4282:< JNN$6$:$:FJOO%7%<%<4HJLL"4"6"6TB 
2BY]F	h..	/ @%..tR6<6>@@ &**AD9	@ @s   J>>Kc                     dt         j                   dfgdz  dddd} g d}d }t        j                  ||fi | }t	        |j
                  d	d
       d }t        j                  ||fi | }t	        |j
                  d       d }t        j                  ||fi | }t	        |j
                  dd       d }t         j                   dfgdz  | d<   t        j                  ||fi | }t	        |j
                  dd       y )Nr   g    .ArR   r<  rh  )r   r   r   rN   c                 .    t        j                  |        S r4   rR  r!   s    r#   rj   z1test_onesided_bounded_powell_stability.<locals>.f  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 )Nr1   r   r   r  r   rA   r6   r>   r!   s    r#   rj   z1test_onesided_bounded_powell_stability.<locals>.f  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  rw  r!   s    r#   rj   z1test_onesided_bounded_powell_stability.<locals>.f  s<    rvvay!R''q1u1FF2FFr%   gB+Iar2   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 )Nr(   r  r1   r   r   r  rw  rm  s     r#   rj   z1test_onesided_bounded_powell_stability.<locals>.f  ss    VVBFF1Ra5M"a''"&&!"*?C*HH	266!a%=a) '))r%   g     @@r   g 4&k\)r   ro  r   r   r   r   )kwargsrH   rj   r   s       r#   &test_onesided_bounded_powell_stabilityr{    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rx   ry   rz   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                      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ej"                  j%                  d      d        Zd Zd Zej"                  j-                  d      d        Zd Zd Zej"                  j5                  d      ej"                  j5                  d      ej"                  j7                  dg dez         d                      Zej"                  j7                  dg d      d        Zd Zej"                  j7                  dg d      d         Z ej"                  j7                  dg d!      d"        Z!d# Z"d$ Z#d% Z$d& Z%ej"                  j7                  dg d'      d(        Z&ej"                  j7                  dg d)      d*        Z'ej"                  j5                  d      ej"                  j7                  de(      ej"                  j7                  d+g d,      d-                      Z)d. Z*ej"                  j7                  dd/      d0        Z+ej"                  j7                  dg d1      d2        Z,y3)4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 r4   r|   r!   s    r#   rk   z.TestOptimizeSimple.test_bfgs_nan.<locals>.func*  s    Hr%   c                 ,    t        j                  |       S r4   r   	ones_liker!   s    r#   r   z0TestOptimizeSimple.test_bfgs_nan.<locals>.fprime,      <<?"r%   r   )r   invalidFr   )r   nanr   r   r   isnan)r`   rk   r   rH   r"   s        r#   test_bfgs_nanz TestOptimizeSimple.test_bfgs_nan(  sf    		#ffX[[h9 	%""4V%@A88DG$$$	% 	% 	%s   7A00A9c                    d }t        j                  d      5  t        j                  |d      }d d d        t        j                  d         sJ |d   du sJ d }d	 }t        j                  d      5  t        j                  |d|
      }d d d        t        j                  |d         sJ |d   du sJ y # 1 sw Y   xY w# 1 sw Y   9xY w)Nc                 "    t         j                  S r4   r   r  r!   s    r#   rk   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.func7      66Mr%   r   r  r   r   r   Fc                 0    | dk(  rdS t         j                  S Nr   r  r!   s    r#   rk   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.func@  s    Q1*BFF*r%   c                 ,    t        j                  |       S r4   r  r!   s    r#   r   z7TestOptimizeSimple.test_bfgs_nan_return.<locals>.fprimeB  r  r%   )r   )r   r   r   r   r  )r`   rk   r  r   s       r#   test_bfgs_nan_returnz'TestOptimizeSimple.test_bfgs_nan_return3  s    	[[* 	0&&tQ/F	0 xxu&&&i E)))	+	#[[* 	<&&tQF;F	< xxu&&&i E)))	0 	0	< 	<s   B=8C	=C	Cc                    t        j                  t        j                  d            t         j                  j	                  t        | j                              z  }t        j                  | j                  | j                  |d| j                  d      }t        | j                  |      | j                  | j                        d       y )NrO   r|   F)r0   r   r[   r   r/   r   )r   sqrtspacingr+   randr^  rZ   r   r   rk   rY   r[   r   )r`   r0   r   s      r#   test_bfgs_numerical_jacobianz/TestOptimizeSimple.test_bfgs_numerical_jacobianJ  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   r/   r   )		itertoolsproductr   r   rk   rY   r   r"   rZ   )r`   methodsjacsr   r   r  s         r#   test_finite_differences_jacz.TestOptimizeSimple.test_finite_differences_jacV  sx    '+$,,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   rt   )r  r  doglegtrust-exact)r   r   r   r  r  r   rk   rY   rp   r   r  r
   rD   )r`   r  hessesr   rt   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rO   r|   r!   s    r#   rj   z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.fz  s    1u&2a4xr%         $@Fr   rO   ru  r   r   )r   r   r   )r`   rj   xss      r#   test_bfgs_gh_2169z$TestOptimizeSimple.test_bfgs_gh_2169y  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   r(      )add)r"   xpseens     r#   rj   z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.f  s9    1BT>!>HHRLad7BqD= r%   r   Tr2   )r   r   tol)setr   r   )r`   rj   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   r[   r/   r   r   r  rR   )g><gwT볹gUuAX?)rS   gHg!mʲ3?r   r2   r   )r   fmin_l_bfgs_brk   rY   rp   r[   r   rZ   r\   r]   r^   r`   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_gradr[   r/   r   )r   r  rk   rY   r[   r   rZ   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 r4   )rk   rp   )r"   r`   s    r#   r   z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.fun  s    99Q<1--r%   r[   r/   r   )r   r  rY   r[   r   rk   rZ   )r`   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 r  )r   r   r"   r_   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   r`   r"   s     r#   __call__zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__  s&    #>>!,Ar%   Nrx   ry   rz   r  r  r|   r%   r#   Callbackr    s    
r%   r  rS   l-bfgs-br[   r  )r   callbackr   r   Fz+STOP: TOTAL NO. of ITERATIONS REACHED LIMIT)r   r   r   r   r   r   r"   r   r   r   message)r`   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   r[   L-BFGS-Br   r   r   r/   r   r   r   r  r   r   r   )r[   r   r   rk   rY   rp   r   r"   rZ   r]   r   r\   r   )r`   r   rI   ras       r#   test_minimize_l_bfgs_bz)TestOptimizeSimple.test_minimize_l_bfgs_b  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)r1   ru  r2   rg  F)r   r[   ri  r  r  r   )	r[   r   r   rk   rY   rp   r"   r   rZ   )r`   v0r  r   r   vs         r#   test_minimize_l_bfgs_b_ftolz.TestOptimizeSimple.test_minimize_l_bfgs_b_ftol  s    , 	CC!dllCHD##DIIt/?/?+5499,02C 		#%% Az2vvAtyy7cB	Cr%   z,contradictory: expected to fail but succeedsr   c           	          t        j                  t         j                  t        j                  ddg      dt         j
                  ddd      }|j                  rJ y )N333333rO   r  Fr   )r   maxlsr  )r   r   r   r   r?   	rosen_derr   )r`   r   s     r#   test_minimize_l_bfgs_maxlsz-TestOptimizeSimple.test_minimize_l_bfgs_maxls  sM     $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   rT   c                 :     |       }j                  |       |S r4   )rf   )r"   valuerj   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r4   r|   ).0r4  ys      r#   	<genexpr>zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>  s     AdaAq6As   )
r   r   r  r   fullr  max	enumerateminr   )r`   grH   r  lowmediumhighr  kr  targetxminr   r  rj   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   sizerg   r   r   )r   rH   r   r%  stepsizer[   r  r   bestxbestyfuncallsniterimprovedstopdimstestxtestys                     r#   custminz/TestOptimizeSimple.test_custom.<locals>.custmin'  s   EGEHEHD4EGO 
 - C#Cj83U3Z(5JK , "%&c
 #E 1D 1 A 5=$)E$)E'+H,  + )h&.@# 4EGO& **u508519O Or%   )g??r   皙?r   皙?r  r   rO   ru  r  r|   Nr1   r   N)r   r   r   dictr   r"   )r`   r  rH   r   s       r#   test_customzTestOptimizeSimple.test_custom%  sI    <?*.	O> (7(,d(;=sD9r%   z$output not reliable on all platformsc                 n   t         j                  ddgt         j                  dd}t        j                  di |ddi |j	                         \  }}d|vrd|vsJ t        j                  di |dd	i |j	                         \  }}d|v rd|vsJ t        j                  di |dd
i |j	                         \  }}d|v rd|v sJ t        j                  di |d
dd |j	                         \  }}d|vrd|vsJ t        j                  di |ddd |j	                         \  }}d|v rd|v sJ y )Nr   rR   )rR   r  r  )rk   rH   r   r   iprintr  r  z
At iterater   r   F)r  r   Tr|   )r   r   r  r  
readouterr)r`   capfdrz  outr   s        r#   test_gh13321zTestOptimizeSimple.test_gh13321K  sa    #..A$..:JL 	333!!#Q$S)@@@222!!#QS \%<<<222!!#QS \S%888 	>>>!!#Q$S)@@@>>>!!#QS \S%888%8r%   c                 x    ddgdfd}ddg}t        j                  t         j                  ||       y )N)rf  r(   )r   rR   constraintsc                 P    |d   u sJ |d   u sJ t        j                         S )Nr   r#  r   r   )r   rH   r   r   r#  s      r#   r  z0TestOptimizeSimple.test_gh10771.<locals>.custmins  s8    8$...=)[888**,,r%   r   )r   r   r#  )r   r   r   )r`   r  rH   r   r#  s      @@r#   test_gh10771zTestOptimizeSimple.test_gh10771m  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 )Nr(   r   r   r|   zr"   r  s      r#   rk   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 )Nr(   r   rR   r   r?   r)  s      r#   dfuncz=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc  sD    DAq88QqSAX!Q$.!Q$q9::r%   	nelder-meadpowellcgr   	newton-cgr  tnccobylaslsqpr/  r0  r4  r   rg  )r   r  r   rO   z: z vs. )r   r   r"   )r`   rk   r-  r   r   sol1sol2s          r#   test_minimize_tol_parameterz.TestOptimizeSimple.test_minimize_tol_parameter|  s    	(	;* 	_F <<$$TAq6s,24D$$TAq6s,24D<$tvv,.^6("T$&&\N%PTUYU[U[P\~0^^.	_r%   r   ignore::RuntimeWarningr   )r   r   r   r   r  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        d t        j                  	d      D              rJ y )N)r;  r  c                 V    t        j                  |       t        j                  |       fS r4   )r   r   r  r!   s    r#   rk   zDTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.func  s!    ~~a((*<*<Q*???r%   r   r   r<  r  iterr;  r   r  )r   r   i  r[   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%   r3  r  r   r  )r  r   )r2  r   r  r  r  r  r  rt   c                     t        | t        j                        rJ j                  | t	        j
                  |       f       y r4   )
isinstancer   r   rf   r   rg   )r"   r   rz  resultss      r#   r  zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callback  s1    !!X%<%<===NNArwwqz?+r%   r  r(   c              3   R   K   | ]  \  }}t        j                  ||k(         ! y wr4   )r   r>   r  r"   r  s      r#   r  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>  s      6da266!q&>6s   %'c              3   Z   K   | ]#  \  }}t        j                  |d    |d           % yw)r   N)r   may_share_memoryrK  s      r#   r  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>  s)     f41ar**1Q416fs   )+)r   r   r  
rosen_hessr   rW   
startswithgetattrr  r^  r>   anyr  combinations)
r`   r   rk   r   rt   rH   rz  rD  r  rI  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f9CYCYZacdCefffffr%   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 r'   r|   r!   s    r#   rk   z1TestOptimizeSimple.test_no_increase.<locals>.func      EA:r%   c                     d| dz
  z  dz  dz
  S )Nr(   r   r  r|   r!   s    r#   bad_gradz5TestOptimizeSimple.test_no_increase.<locals>.bad_grad  s     a!e9#a''r%          @r3  r  rE  r  r6  r  r5  zSLSQP returns slightly worse)
r   r?   r  r   r   r   r"   r   r  r  )	r`   r   rk   rX  rH   f0r   r   r   s	            r#   test_no_increasez#TestOptimizeSimple.test_no_increase  s    		(
 XXse_"X%+u_$b/$r:J88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)rO   rY        @rC  r(   )r6   r   r?   r!   s    r#   rj   z7TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.f  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`  rf  r  r  r   )r   r?   concatenaterd   r"   rB  s     r#   consz:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.cons  sG    *,<=>A>>266!Q<"((Ar72C#CQ"GHHr%   )rQ   rO   r*   rY  r5  ineqtyper   r   r#  )rS   r(   r  r   rR   g-q=r   )r   r?   r   r   r   r"   )r`   rj   rc  rH   r   s        r#   test_slsqp_respect_boundsz,TestOptimizeSimple.test_slsqp_respect_bounds  s[    	<	I XX()2g5;D,IKrxx6q8uEr%   )r$  r   r   r   r  r  SLSQPr  r  r  r  r  c           	      H   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 y )Nr   r   r|   r  r   )r  r   rF  rt   r   ri  r   )r   rW   r   r   r   r  rN  r  rp   rt   r   r   r   r   hasattrr   ngevr   )r`   r   MAXITERrH   sfrz  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::?"? r%   )r$  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   T)r[   r   zMaximum number of iterationsr,  r   r   )r   rW   r   r   r   r  rN  r  warnsRuntimeWarningrO  rP  r   r   )r`   r   rH   rn  r   rD  s         r#   test_runtime_warningz'TestOptimizeSimple.test_runtime_warning#  s     XXb\HNNBH4F4F$//t=.\\. ?A 	N  (!(F3.g.!!"&&"VWM	N 	N 	Ns   1ACCc                    d}t         j                  }t         j                  }t         j                  }d }d|df}t	        j
                  d      }t        j                  |||||dt        |            }|j                  |k(  sJ y )	Nr   c                 ^    t        j                  d| d   z  d| d   z  z
  d| d   z  z
  g      S )Nr<   r   皙?r   Q?r(   r,  r!   s    r#   r   zRTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.fun;  s6    88S1Q4Z#!*4tad{BCDDr%   rd  re  r   r  r  )r#  r   rt   r   r   )	r   r   r  rN  r   rW   r   r  r   )	r`   rm  rj   r   rt   r   rc  rH   r   s	            r#   2test_respect_maxiter_trust_constr_ineq_constraintszETestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints2  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 rQ  r|   r!   s    r#   rj   z6TestOptimizeSimple.test_minimize_automethod.<locals>.fG      a4Kr%   c                     | dz
  S rQ  r|   r!   s    r#   rc  z9TestOptimizeSimple.test_minimize_automethod.<locals>.consJ  s    q5Lr%   r  rd  re  )r#  )r  r   r   )r#  r   r   r   r   r2   r   r(   r  )r   r?   r   r   r   r   r"   )
r`   rj   rc  rH   sol_0sol_1sol_2sol_3sol_4r   s
             r#   test_minimize_automethodz+TestOptimizeSimple.test_minimize_automethodF  s-   		 XXse_!!!R(!!!Rv>B7D 6E F!!!R	:!!!R8>t/L.M*14 !!!R8>t/L.M*14 5%6 	C;;;	.....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 rQ  rR  r"   r  s     r#   Yz=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Yb  s    661Q3(##r%   c                     d| |z
  z  S rQ  r|   r  s     r#   dY_dxzATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dxe  s    ac7Nr%   )rR   r   r   r   r  r   r(   r   r  rR   r  r   )r   r   r   r4   )r   r?   r+   randnr^  r   r   )r`   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j                  |
	|      }|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   r(   )rA   r  AssertionError)r"   first_step_sizescalerH   s    r#   rj   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.fs  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#   r  z7TestOptimizeSimple.test_initial_step_scaling.<locals>.gz  s"    88UAaD1H-.//r%   )r   r   r<  )r   rg  )r  r        r  z{} {}: {}: {}rO   err_msgrR   r   g)\(?rQ   )
r  r  r  r   r   formatr   r   r"   r   )r`   scalesr  rj   r  r   r   r   r  r  r  rH   s            @@@r#   test_initial_step_scalingz,TestOptimizeSimple.test_initial_step_scalingl  s6    "9	'	0 '..vw? !	ME6'E$J/&u}+D!DB#fO##Arq,35C &,,VU1@146G ;;'';CEEC5':77a<((<u}^+#OA$6gN +1-38JQ8NWPWWN C!	r%   )r/  r0  r1  r   r2  r  r3  r4  r5  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)Nr,   r   c                 "    t         j                  S r4   r  r!   s    r#   rk   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 rl  )r   r  r+   r  r"   counts    r#   func2z1TestOptimizeSimple.test_nan_values.<locals>.func2  s5    !HMHQx!|vvyy~~''r%   c                 .    t        j                  dg      S NrO   r,  r!   s    r#   rp   z0TestOptimizeSimple.test_nan_values.<locals>.grad  s    88SE?"r%   c                 0    t        j                  dgg      S r  r,  r!   s    r#   rt   z0TestOptimizeSimple.test_nan_values.<locals>.hess  s    88cUG$$r%   rO   r2  r  r  r  r  r  r  r  r  r3  r  rE  r  r   r  delta_grad == 0.*.*does not use Hessian.*.*does not use gradient.*)r   rt   r   r   F)r   r+   r.   r?   r  r   r	   filterUserWarningrr  r  r  r   r   r   r   )r`   r   rk   r  rp   rt   rH   
needs_grad
needs_hessfuncsgradshesssr   suprj   r  hr   r  s                     @r#   test_nan_valuesz"TestOptimizeSimple.test_nan_values  s_    			t		(	#	% XXse_  7 7
  * *
 u$4,$4,%+u_$b/$r:J[[* 		1,=,? 		13JJ{$78JJ~'ABJJ~'BC$,,UE5A 11a''211V079S[[%0	1		1 		1 		1 		1 		1 		1s%   E$BE<EE	EE")r/  r1  r   r  r3  r4  r5  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 )rp   rt   r   r   r	   r  r  r   r   rk   rY   r   r^  r^   array_equalrc   )r`   r   r   rt   r  r4  s         r#   test_duplicate_evaluationsz-TestOptimizeSimple.test_duplicate_evaluations  s    d - -))C    99D[[* 	A,=,? 	A3JJ{$78dii)9)9%+4A	A 	A q#djj/* 	?A~~djjQ/A?"4VH=? ?	?	A 	A 	A 	As$   DADDD
	DDnew_cb_interface)r   r   r(   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   t        j                  di |ddii}	|j                  |	j                  k(  sJ t        |j                  |	j                         |j                  |	j                  cxk(  rk(  sJ  J |j                  |dk(  rdndk(  sJ y )Nc                 <    d_         t        j                  |       S NF)flagr   r   r"   rj   s    r#   rj   z9TestOptimizeSimple.test_callback_stopiteration.<locals>.f  s    AF>>!$$r%   Fc                 <    d_         t        j                  |       S r  )r  r   r  r  s    r#   r  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.g  s    AF%%a((r%   c                 <    d_         t        j                  |       S r  )r  r   rN  r  s    r#   r  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.h  s    AF&&q))r%   r  r   c                 V    | j                    | j                        k(  sJ          y r4   r   r"   )intermediate_resultr  rj   s    r#   callback_interfacezJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interface  s(    *..!4G4I4I2JJJJ
r%   r(   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 r4   r  )r`   r  r  rj   s     r#   r  zITestOptimizeSimple.test_callback_stopiteration.<locals>.Callback.__call__  s(    .22a8K8M8M6NNNNJr%   N)rx   ry   rz   r   r  )r  rj   s   r#   r  r    s     r%   r  c                              y r4   r|   )xkr   r  s     r#   r  zJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interface  s    
r%   c                  ~     xj                   dz  c_         d _         j                   k(  rd _        t               y )Nr   FT)r4  r  StopIteration)r  r[   s   r#   r  z@TestOptimizeSimple.test_callback_stopiteration.<locals>.callback  s7    JJ!OJ!HMzzW$ $#o% %r%   r   r  )rH   r   r   r   rt   r  r/  r   r[   r  rR   c   r|   )	r  r4  r   r   r   r   r"   r   r   )r`   r   r  r  r  r  r  rz  r   r   r  rj   r[   s             @@@r#   test_callback_stopiterationz.TestOptimizeSimple.test_callback_stopiteration  s-   	% 	)	* q  "  "*	& 
a61a1 F&F3EF]"kGG&G9g2FGww#''!!!SUUCEE"ww#'',W,,,,,zz6^#;aDDDr%   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 r4   r|   r!   s    r#   r9  z4TestOptimizeSimple.test_ndim_error.<locals>.<lambda>(  s     r%   )r(   r   )rC   rD   r   r   r   onesr`   r5  s     r#   test_ndim_errorz"TestOptimizeSimple.test_ndim_error%  s>    2:S1 	<k2776?;	< 	< 	<s   +AA)r/  r  r3  r0  r4  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 rQ  rR  r!   s    r#   rj   z:TestOptimizeSimple.test_minimize_invalid_bounds.<locals>.f-  s    66!Q$<r%   r   r(   rR   r   z?The number of bounds is not compatible with the length of `x0`.r,  )r   r(   rR   rH   r   r   )r   r   r   )rR   r   r(   z:An upper bound is less than the corresponding lower bound.)r   r  r
   rD   r   r   )r`   r   rj   r   r5  s        r#   test_minimize_invalid_boundsz/TestOptimizeSimple.test_minimize_invalid_bounds*  s    	  AA'O]]:S1 	MaIfVL	M 	9-J]]:S1 	MaIfVL	M 	M	M 	M
	M 	Ms   B'B3'B03B<)r   r1  r2  r0  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)Nr0  r   Tr   r  Maximum numberr,  c                 ,    t        j                  |       S r4   r   r   r!   s    r#   r9  zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>D  s    q(9 r%   r   r   Fr   c                 ,    t        j                  |       S r4   r  r!   s    r#   r9  zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>H  s    HNN1$5 r%   )r   r  rr  r]  r  rq  r   )r`   r   rz  warning_typer   s        r#   test_minimize_warnings_gh1953z0TestOptimizeSimple.test_minimize_warnings_gh1953:  s     x'eX5G5G-H*0(*:%55 	  B/\\,.>? 	H9Aq6 H%+WH@FH	H  51v 	D!'	D<B	D	H 	Hs   BB#N)-rx   ry   rz   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  skipr  r  r  r  r!  r&  r9  r  parametrizer   rS  r[  rh  ro  rs  rx  r  r  r  r  r  r   r  r  r  r  r|   r%   r#   r  r  &  s   	%*.
#'-47	F/.	##D4#8C" [[KL M(4$:L [[DE9 F9BB_0 [[ 56[[ 89[[X,.>?@:g	@ : 7:gx [[X (B C!C!4F [[X (G H#	H#< [[X (? @N@N"(/4
H2h [[X (8 9
+19
+1Z [[X (8 9
?9
?* [[ 89[[X'>?[[/;4E < @ :4El<
 [[X (L MMMM [[X'LMD NDr%   r  r   )r  r3  r   r$  c                     d }t        j                  |ddg|       }|j                  sJ t        |j                  dgd       y )Nc                 2    t        j                  | dz        S rQ  rR  r!   s    r#   rj   z$test_minimize_with_scalar.<locals>.fR  rS  r%      )r  r   r[  rS   r   r   )r   r   r   r   r"   )r   rj   r   s      r#   test_minimize_with_scalarr  L  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   rZ   r_   s    r#   ra   zTestLBFGSBBounds.setup_method[  s    /r%   c                 0    d|z  |d   |z  |d   |z  z   z  S )NrO   r   r   r|   rv   s      r#   r   zTestLBFGSBBounds.fun_  s&    Qw!A$'AaD!G+,,r%   c                     ||dz
  z  S r   r|   rv   s      r#   r   zTestLBFGSBBounds.jacb  s    1q5zr%   c                 J    | j                  ||      | j                  ||      fS r4   r   r   rv   s      r#   fjzTestLBFGSBBounds.fje  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   taskr/   r   )r   r  r   r   r   r   rZ   r`   r"   rj   r  s       r#   test_l_bfgs_b_boundsz%TestLBFGSBBounds.test_l_bfgs_b_boundsh  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  rY  )r   r   r   r  r/   r   )r   r  r  r   r   rZ   r  s       r#   r  z%TestLBFGSBBounds.test_l_bfgs_b_funjaco  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  r/   r   )r   r   r   r   r   r   r"   rZ   )r`   r   s     r#   test_minimize_l_bfgs_b_boundsz.TestLBFGSBBounds.test_minimize_l_bfgs_b_boundsv  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
   rD   r   r   r   r   )r`   r   s     r#   'test_minimize_l_bfgs_b_incorrect_boundsz8TestLBFGSBBounds.test_minimize_l_bfgs_b_incorrect_bounds}  sL     ]]:[9 	;dhhB
"&((6;	; 	; 	;s   1AAc                    g d}ddg}t        j                  ||      D ]j  \  }}t        j                  | j                  ddg|d|| j
                  dd i      }|d	   s
J |d
          t        |j                  | j                  d       l y )Nr  r  r|   r   r  r  finite_diff_rel_step)r   r   r   r   r   r   r  r/   r   )	r  r  r   r   r   r   r   r"   rZ   )r`   r  argssr   r   r   s         r#    test_minimize_l_bfgs_b_bounds_FDz1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FD  s    
 ,"**47 	=IC##DHHq"gD+5(+DKK-CT,JLC y>13y>1>CEE4==t<	=r%   Nr  )rx   ry   rz   ra   r   r   r  r  r  r  r  r  r  r  r  r|   r%   r#   r  r  Z  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 )Nr*   )rZ   r_   s    r#   ra   zTestOptimizeScalar.setup_method  s	    r%   c                     ||z
  dz  dz
  S )zObjective functionr(   r   r|   )r`   r"   rB  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)Nr/   r   r`  rf  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   rZ   r  r
   rD   )r`   r"   r  s      r#   
test_brentzTestOptimizeScalar.test_brent  s   NN488$4==t4NN488844==t4NN4886!dmm$7NN488=94==t4D]]:W5 	7NN488:6	7 1]]:W5 	7NN488:6	7 	7		7 	7	7 	7s   "E5
"F5E>F
r   c                 X   t        j                  | j                        }t        || j                  d       t        j                  | j                  d      }t        || j                  d       t        j                  | j                  d      }t        |d   | j                  d       t        j                  | j                  d      }t        || j                  d       t        j                  | j                  d	      }t        || j                         g d
}|D ]_  }t        j                  | j                  dd      }t        j                  | j                  |d      }|d   |d   }}t        ||z
  |       a d}t        j                  t        |      5  t        j                  | j                  d       d d d        d}t        j                  t        |      5  t        j                  | j                  d       d d d        y # 1 sw Y   QxY w# 1 sw Y   y xY w)Nr/   r   r  r  Tr  r   r  r  )r   r   r  )r[   r   r(   r  r,  r  r  r  )	r   goldenr   r   rZ   r   r  r
   rD   )r`   r"   maxiter_test_casesr[   rH   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==)&) 	0G1$GB'tLAQ%14Ew/		0 E]]:W5 	8OODHHJ7	8 1]]:W5 	8OODHHJ7	8 	8		8 	8	8 	8s   ""H)"H H H)c                    t        j                  | j                  dd      }t        |dd       t        j                  | j                  dd      }t        || j                  d       t        j                  | j                  t        j                  dg      t        j                  dg            }t        || j                  d       t        t        t         j                  | j                  dd       y )Nr   r   ru  r   r  r/   )	r   	fminboundr   r   rZ   r   r?   rC   rD   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   r(   r   r  r/   r   )r  r
   rD   r   r  r   r   rW   r?   r   rZ   r  s     r#   test_fminbound_scalarz(TestOptimizeScalar.test_fminbound_scalar  sw    ]]:-IJ 	>txx&)91=	> txxBHHQK84==t4		> 	>s   5B&&B/c                 8    d }t        j                  |dd       y )Nc                     | dz  S rQ  r|   r!   s    r#   r   z,TestOptimizeScalar.test_gh11207.<locals>.fun  r{  r%   r   )r   r  )r`   r   s     r#   test_gh11207zTestOptimizeScalar.test_gh11207  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 )Nr/   r   Brentr   rR   r  r   r  r*   )bracketr   r   )r   r   r  r  )r   r   Bounded)r   r   r   r   ru  )r   r  boundedr  r*   )r  r   r   r   r   r(   r[  )r   minimize_scalarr   r"   r   rZ   r   r  r   r?   rC   rD   rW   r  s     r#   test_minimize_scalarz'TestOptimizeScalar.test_minimize_scalar  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   rY  TFr  r%  )r   r  r   r%  r  r[   r  r   r	  r
  r  r  r  r  r  r  s                   r#   r  z?TestOptimizeScalar.test_minimize_scalar_custom.<locals>.custmin)  s    QZ'!*,3EJEHEHD4EGO 
#h.0@A (E--EMHu} % %#'( 'UO%(f*<D 4EGO  **u508519O Or%   )r   r   r  r  )r  r   r   r/   r   r  )r   r   r   r  r   r"   rZ   )r`   r  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 )Nr*   r   r   r   r   r_   s    r#   &test_minimize_scalar_coerce_args_paramz9TestOptimizeScalar.test_minimize_scalar_coerce_args_paramJ  s      4r%   r   )r  r  r  c                 X    dD ]%  }t        j                  | j                  d|i       ' y )N)r   r   r(   rR   r   )r   r'  )r`   r   r   s      r#   	test_dispzTestOptimizeScalar.test_dispN  s-     ! 	GD$$TXX~F	G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 )Nr  r   rc  r   r   r"   r   r  r   r   r   )r   r   r   rk  )r`   r   rz  r  s       r#   test_result_attributesz)TestOptimizeScalar.test_result_attributesT  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)Nr,   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   r(   r1   )r   r  r5   r  s    r#   rk   z0TestOptimizeScalar.test_nan_values.<locals>.funcg  s?    !HMHQx!|vv!tcBFF1Io--r%   r  rY  r   r  r  r  r  r  r   r  r  r  r   F)r   r+   r.   r   r	   r  r  rr  r   r   r  r   r   )	r`   r   rk   r  r   r  rz  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 rQ  r|   r!   s    r#   rj   zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.f  r{  r%   r   r<  r   )r   r   r=  rg  )r   r   r   )r   r   r   r"   )r`   rj   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
   rD   r   r   r   r5   ro  r  r  s     r#   'test_minimize_non_finite_bounds_gh10911z:TestOptimizeScalar.test_minimize_non_finite_bounds_gh10911  s     <]]:S1 	A$$RVVQK@	A]]:S1 	A$$RVVRVVQK@	A 	A	A 	A	A 	As   6B676C6B?Cr  r  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
   rD   r   r   r   r5   )r`   r   r5  s      r#   2test_minimize_unbounded_method_with_bounds_gh10911zETestOptimizeScalar.test_minimize_unbounded_method_with_bounds_gh10911  sF     8]]:S1 	K$$RVVF6J	K 	K 	Ks   'AAr:  r  r   r/   fshape)r|   r   r   r   c                 p   fd}d\  }}|dk7  rt        ||f      nt        ||f      }|j                  t        ||             t        j                  |fi |}|j                  j
                  |j                  j
                  cxk(  r& ||j                        j
                  cxk(  rk(  sJ  J y )Nc                 R    t        j                  | dz        j                        S Nr   )r   r?   reshape)r"   r7  s    r#   rj   zITestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196.<locals>.f  s     88AqD>))&11r%   )rd  r<   r  )r  r}  )r   r  )r  updater   r   r"   shaper   )	r`   r   r  r7  rj   rB  brz  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%   )r  r  r  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 r'   r|   r!   s    r#   rj   zBTestOptimizeScalar.test_minimize_scalar_warnings_gh1953.<locals>.f  rV  r%   r  r   r  rf  r   TrR   r  r  r,  r   Fr   )r  rq  r   r]  r   )r`   r   rj   rz  kwdr   s         r#   $test_minimize_scalar_warnings_gh1953z7TestOptimizeScalar.test_minimize_scalar_warnings_gh1953  s    	  I-h92hsA.\\(22:JK 	/$$Q /vw /'-/	/    M67MfM	/ 	/s    BB
Nr  )rx   ry   rz   ra   r   r	  r  r  r  r  r  r  r  r!  r$  r(  r  r*  r,  r  r1  r3  r6  r   rA  rE  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)TestBracketr:  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   r(   g      Y@r|   r!   s    r#   rj   z3TestBracket.test_errors_and_status_false.<locals>.f       !VA.1a4:U:r%   9The algorithm terminated without finding a valid bracket.r,  r  r   rY  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 )	Nrb  r  r      rR      r(   r   r|   r!   s    r#   rj   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   rQ   r   r  )	r  r
   rc   r   r  r   ro  r  r  )r`   rj   r  s      r#   test_errors_and_status_falsez(TestBracket.test_errors_and_status_false  s)   	; N]]<w7 	'QA&	']]<w7 	,QBFF+	,]]<w7 	-NN1G,	-]]<w7 	.OOAW-	.	L M]]<w7 	7Qc26	7 	7	' 	'	, 	,	- 	-	. 	.	7 	7s;   E&E%E E( E4EEE%(E14E=r   )r  r  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 rJ  r|   r!   s    r#   rj   z9TestBracket.test_minimize_scalar_success_false.<locals>.f  rK  r%   rL  rY  )r  r   rR   r   r   )r   r   r   r  r   r   r   )r`   r   rj   r  r   s        r#   "test_minimize_scalar_success_falsez.TestBracket.test_minimize_scalar_success_false  sq    	; N&&q'&I;;#++%%%xx1}}ww!||ww#~~r%   N)	rx   ry   rz   r  r  r  rP  r  rS  r|   r%   r#   rG  rG    sJ    [[ 897 :7, [[X':; <r%   rG  c                  b    t        t        t        j                  t        j
                  d       y )Ng{Gzr  )rC   rD   r   r  r   r:   r|   r%   r#   test_brent_negative_tolerancerU    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  rO   r   r  r   rt   r  r   r   ru  r   )r   r?   r   r   r   r  rN  r   r  r   r"   r`   rH   r   s      r#   test_rosenbrockzTestNewtonCg.test_rosenbrock  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  r/   )r   rt   r   r  ru  r   r   )r   r?   rG   r   r   
himmelblaurE   rF   r   r  r   r"   himmelblau_xoptr   himmelblau_minr[  s      r#   test_himmelblauzTestNewtonCg.test_himmelblau  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  rO   r  r   r  rZ  r   ru  r   )
r   r?   r   r   r   r  r   r  r   r"   r[  s      r#   test_finite_differencez#TestNewtonCg.test_finite_difference  sr    XXtSk"$,$6$6%.$('2	4
 {{'CKK'{rxxA/d;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 rY  )r   r?   r   r   r   r  r   r   r  r   r"   r[  s      r#   test_hessian_update_strategyz)TestNewtonCg.test_hessian_update_strategy  sx    XXtSk"$,$6$6%-]]_$('2	4
 {{'CKK'{rxxA/d;r%   N)rx   ry   rz   r\  ra  rc  re  r|   r%   r#   rW  rW    s    <
<<<r%   rW  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@rR   rS   r   r   r   )rS   r(   r`  r   rO   r   r   r   rg  r   rS   r   r   r   r  r   rS   r   r   r   r   rh  rS   r   r   r   r`  rR   )rO   r   r   r   )rO   r   r  r(   r*   )rY  r   r  r(   gffffff?g333333@)rO   r   r  r   r/   r   g333333)r   r/  _line_for_searchr   r?   r   ro  )line_for_searchlower_boundupper_boundrH   x1	all_testsr"   alphalminlmaxmimas               r#   test_line_for_searchry    sr   
 ((99O ((/0K((+,K 
-	 B	.	!B 
RXXm$dC0	RXXm$b!,	RXXm$dC0	RXXm$b!,	RXXm$b!,	RXXn%tS1	RXXn%tT2	RXXm$dC0	RXXm$b"-	RXXm$c3/	RXXm$b!,	RXXm$b"-	RXXn%tT2I  !* -5$ E;DBDt,Dt,- ((RVVGR"&&"56K((BFFAsBFF34K 
RXXm$rvvgrvv6	RXXm$b!,	RXXm$rvvgs3	RXXm$b"&&1	RXXm$b!,	RXXn%tRVV4	RXXm$rvvgrvv6	RXXm$b"-	RXXm$rvvgs3	RXXm$b"&&1	RXXm$b"-	RXXn%tRVV4I !* -5$ E;DBDt,Dt,-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  rY  r*   皙ٿr(   r   r6   r?   r!   s    r#   rk   z$test_linesearch_powell.<locals>.func`  %    vvq288$:;;ABBr%   ri  r   rj  r  rk  r(   rl  r*   rm  r}  r  r   r   r         ?rS   r   r   r   皙?rY  r   r  r   r   )fvalr  r/   r   r  rp  rq  r  )r   r/  _linesearch_powellr   r?   ro  r   linesearch_powellrk   rU  r  rp  rq  rs  xilrj   ro   r-   s               r#   test_linesearch_powellr  [  s    **==C	-	 B8D((RVVG9q=)K((BFF8a<(K 
-	 "%	-	 !$	-	 #&	-	 #&	.	!4(	-	 #&	.	!4(I  6A+D"b154A1i4B<d31r6-	1r65+D"bd8C8C1571i 	4B<d31r6-	1r656r%   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#   rk   z,test_linesearch_powell_bounded.<locals>.func  r  r%   ri  g       r   rY  rj  r  rk  r(   rl  r*   rm  r}  r  r  r  r  r  r  r   r  r/   r   g333333ӿrR   g?r  rP   g333333ÿ)r  r   r   r(   r   g333333)r   r/  r  r   r?   r   ro  r  s               r#   test_linesearch_powell_boundedr    sh    **==C	-	 B8D ((C57#K((B46"K 
-	 "%	-	 !$	-	 #&	-	 #&	.	!4(	-	 #&	.	!4(I  6A+D"bd8C8C1571i 	4B<d31r6-	1r656 ((C57bT>*K((C57bT>*K 
-	 #&	-	 #&	-	 #&	-	 #&	.	!2&	-	 #&	.	!4(I  6A+D"bd8C8C1571i 	4B<d31r6-	1r656 
.	!B8D 
-	 "%	-	 #&	-	 #&	-	 $'	I  6A+D"bd8C8C1571i 	4QV,482B;T2	1r656 
-	 B8D ((C"&&266'267K((BFFC45K 
-	 #&	-	 #&	-	 #&	-	 #&	.	!2&	-	 #&	.	!4(I  6A+D"bd8C8C1571i 	4B<d31r6-	1r656 
.	!B8D 
-	 "%	-	 #&	-	 #&	-	 $'	I  6A+D"bd8C8C1571i 	4QV,482B;T2	1r656r%   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 rQ  )lbr>   ub)r"   rB  r@  r   s      r#   r   ztest_powell_limits.<locals>.fun	  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#   rk   z test_powell_limits.<locals>.func	  s#    Av!q&  vvayr%   rQ   r0  )r   rH   r   r   )r   r   r   )r   rk   r   s     @r#   test_powell_limitsr    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)rR   r   r  )r(   r(   r(   )r   r?   r   rosen_hess_prodrd   rN  r   )r`   r"   ro   hpdothps        r#   	test_hesszTestRosen.test_hess	  sU    HHYHHY%%a+x**1-q1Rr%   N)rx   ry   rz   r  r|   r%   r#   r  r  	  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.
    rO  r   r|   )ro   r"   r  rB  r@  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   rR   *   r(         r  r,  ro   r"   r  s      r#   rE   rE   )	  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 )NrN  r(   r   r  r  r,  r  s      r#   rF   rF   /	  sr    DAq88bAg!mb(!A#!)4cAaCi1r!Q$w!346 7 7r%   gHzGѿgrR   r(   rS   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   r<   r   rv  r   rw  r(   r,  r!   s    r#   rk   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 rQ  r,  r!   s    r#   r  z1test_minimize_multiple_constraints.<locals>.func2B	  r  r%   rd  re  c                 *    d| d   | d   z   | d   z   z  S )Nr  r   r   r(   r|   r!   s    r#   rj   z-test_minimize_multiple_constraints.<locals>.fI	  s"    QqTAaD[1Q4'((r%   r\  ri  rg  )}   r   r   rg  r   )r   r   r   r"   )rk   r  r  rc  rj   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  )rS   r  )rH   r   r   rk   r  r   rN  rt   r  rw   r   r_   s    r#   ra   z)TestOptimizeResultAttributes.setup_methodS	  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  r4  r   z7Method .+ does not use (gradient|Hessian.*) information)r   r   rt   rw   )r   r	   r  rr  r   r   rk   rH   r   rt   rw   rk  dirrH  r  str)r`   
attributesr  r   r  r   	attributes          r#   test_attributes_presentz4TestOptimizeResultAttributes.test_attributes_present[	  s    !
5'"& 	0F"$ :

>+- ''		4776,0HH499.2jj:	: ( -	T>i4<&?sI... CH,,,- ckk3///!	0: :s   A$CC!	N)rx   ry   rz   ra   r  r|   r%   r#   r  r  P	  s    -0r%   r  c                 ~    | \  }}|\  }}}}}}	}
}}}}}}||dz  z  ||z  |z  z   ||dz  z  z   ||z  z   ||z  z   |	z   S rQ  r|   r*  r   r"   r  rB  r@  r  r  r   rj   r  r  r4  r   r   r  r  s                    r#   f1r  r	  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 rQ  r   r  s                    r#   f2r  x	  ^    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 rQ  r   r  s                    r#   f3r  ~	  r  r%   c                 N    t        | g| t        | g| z   t        | g| z   S r4   )r  r  r  )r*  r   s     r#   
brute_funcr  	  s*    a>&>BqN6N*R^F^;;r%   c                   6    e Zd Zd Zd Zd Zd Z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)r(   rR   r   r   r   r   ,   r  r(   r  r   rf  rQ   rZ  r         ?g_}gi?)r   slicerrangesr   r?   rZ   r_   s    r#   ra   zTestBrute.setup_method	  s<    Db!T*E"a,>?+z!:;r%   c                     t        |g| S r4   )r  )r`   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   rZ   r   )r`   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   r(   )r^  r?  r!   s    r#   rj   zTestBrute.test_1D.<locals>.f	  s5    qww<1$$$771:?"?6Mr%   rY  rR   )Nsr  )r   r  )r`   rj   s     r#   test_1DzTestBrute.test_1D	  s    	
 	q7)$7r%   c                    t        j                  t        | j                  | j                  dd       }t        j                  t        | j                  | j                  dd d      }t        |d   |d          t        |d   |d          y )NTr  r(   )r   r   r  workersr  r   )r   r  r  r  r   r   )r`   r  	resbrute1s      r#   test_workerszTestBrute.test_workers	  sp    >>*dll.24A NN:t||$++/3D!M	 		"x|4	!hqk2r%   c                    t         j                  j                  d      fd}t        j                  t
        d      5  t        j                  || j                  | j                  d       d d d        y # 1 sw Y   y xY w)Nr,   c                 ,    j                  d      dz  S r   r!  )r*  r   r"  s     r#   rk   z,TestBrute.test_runtime_warning.<locals>.func	  s    ::a=4''r%   z)Either final optimization did not succeedr,  T)r   r   )
r   r+   r&  r  rq  rr  r   r  r  r   )r`   rk   r"  s     @r#   rs  zTestBrute.test_runtime_warning	  sc    ii##D)	( \\. LN 	LNN4DKKdK	L 	L 	Ls   .A88Bc                 j    d }t        j                  |t        ddd      fd      }t        |d       y )Nc                     | |d   z  S r  r|   )r"   r   s     r#   rj   z+TestBrute.test_coerce_args_param.<locals>.f	  s    Q<r%   rZ  r   r  r(   r&  r   )r   r  r  r   )r`   rj   r  s      r#   test_coerce_args_paramz TestBrute.test_coerce_args_param	  s1    	  >>!eB3&7%9B!$r%   N)
rx   ry   rz   ra   r  r  r  r  rs  r  r|   r%   r#   r  r  	  s&    <
&?.8	3L%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 )Nr1   r   r(   sleepr"   times    r#   
objective1z*test_cobyla_threadsafe.<locals>.objective1	  s    

3tQwr%   c                 <    j                  d       | d   dz
  dz  S )Nr1   r   r   r(   r  r  s    r#   
objective2z*test_cobyla_threadsafe.<locals>.objective2	  s     

3!Q{r%   COBYLAc                  6    t        j                  dg       S NrS   r   rA  )
min_methodr  s   r#   
minimizer1z*test_cobyla_threadsafe.<locals>.minimizer1	         '*e-79 	9r%   c                  6    t        j                  dg       S r  rA  )r  r  s   r#   
minimizer2z*test_cobyla_threadsafe.<locals>.minimizer2	  r  r%   )concurrent.futuresr  futuresThreadPoolExecutorrf   submitr  )

concurrentr  r  pooltasksrn  r  r  r  r  s
         @@@@r#   test_cobyla_threadsafer  	  s      J9
9
 
			.	.	0 DT[[,-T[[,- 	AHHJ		  s   AB##B,c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestIterationLimitsc                     d| _         y r  )r  r_   s    r#   ra   z TestIterationLimits.setup_method	  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   r(   r  rQ   )r  r   r  arctan2r5   )r`   r  rI   rn  s       r#   	slow_funczTestIterationLimits.slow_func	  si    wwqtQwqtQw'AaD!A$)?1vvadQh#%%r%   c                 (    | j                  dd       y )Nr$     check_limitsr_   s    r#   test_neldermead_limitz)TestIterationLimits.test_neldermead_limit
  s    --r%   c                 (    | j                  dd       y )Nr0  rT   r  r_   s    r#   test_powell_limitz%TestIterationLimits.test_powell_limit
  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 )Nr1   r   r(   )r   i    r   r%  r   r   r   r[   r   r   r  )r[   r%  )r  r   r   r  r   ro  )r`   r   default_itersstart_vmfevr   mits          r#   r   z TestIterationLimits.check_limits
  s   c
QFQF3 +	[G' 	/ !''/51940@B }}F333y>v;---v;$...	/ ' -''/51:C0@B y>u:,,,u:,,,-  "2httRVVnE 
D	c !''/5<?;?1AB }}F333y>v;-#e*2CCCv;$.#e*2CCC
D  "vvtntRVVn= [	c !''/5<?;?1AB }}F333y>|"6{]1_<<<"5z]1_<<<v;-/9SZ=YZ?=ZZZ[=+	[r%   N)rx   ry   rz   ra   r  r  r  r   r|   r%   r#   r  r  	  s    &
.*,[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 r4   r|   r!   s    r#   r   z2test_result_x_shape_when_len_x_is_one.<locals>.fun7
  s    1ur%   c                     d| z  S NrY  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#   rt   z3test_result_x_shape_when_len_x_is_one.<locals>.hess=
  s    xx"r%   )r$  r   r   r   r  r  r  ri  r1   r   r8  )r  r  r  r  r  r  r  )r   r   r   r?   r"   r?  )r   r   rt   r  r   r   s         r#   %test_result_x_shape_when_len_x_is_oner  6
  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 r  )number_of_callsr_   s    r#   r  zFunctionWithGradient.__init__P
  s
     r%   c                 f    | xj                   dz  c_         t        j                  |dz        d|z  fS r'   )r  r   r6   r  s     r#   r  zFunctionWithGradient.__call__S
  s.    !vvad|QU""r%   Nr  r|   r%   r#   r  r  O
  s    !#r%   r  c                      t               S r4   )r  r|   r%   r#   function_with_gradientr  X
  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 )
NrO   rY  rB  r   r(   zHfunction is not recomputed if gradient is requested after function valueg      4@(different input triggers new computationr  )r   r   r?   r   r  
derivativer  memoized_functionrH   s      r#   )test_memoize_jac_function_before_gradientr  ]
  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 )
NrO   rY  r(   r   rB  zHfunction is not recomputed if function value is requested after gradientr   r  r  )r   r   r?   r   r  r  r  s      r#   )test_memoize_jac_gradient_before_functionr  p
  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.
    rO   rQ   r|   Nr   r1   r(   r<   rR   )	r   r  r   r   r   r?   r   r  r   )r  r  r   rt   rH   scalar_functions         r#   test_memoize_jac_with_bfgsr!  
  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 rQ  r,  r!   s    r#   r9  ztest_gh12696.<locals>.<lambda>
  s    bhh1v& r%   Fr   )r   r   r  r   r   r|   r%   r#   test_gh12696r$  
  sC    		 C&E	CC C 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   r(   r  r  )rR   r(   r(   r  Tc                 V    |r| j                   dk(  sJ |rt        |              y y r<  )r  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 r4   r  r"   r*  s    r#   rk   z%setup_test_equal_bounds.<locals>.func
  s    
~~a  r%   c                 >     |        t        j                  |       S r4   )r   r  r,  s    r#   rp   z%setup_test_equal_bounds.<locals>.grad
  s    
!!!$$r%   c                      |        y r4   r|   )r"   r   r*  s     r#   r  z)setup_test_equal_bounds.<locals>.callback
  s
    
r%   c                 (     | d       | dd dz
  S )NFr(  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 )NFr0  r   r   r   
zeros_liker"   dcr*  s     r#   	jacobian1z*setup_test_equal_bounds.<locals>.jacobian1
  )    &]]11	r%   c                 (     | d       | dd dz
  S )NFr0  r(   rR   rQ   r|   r,  s    r#   constraint2z,setup_test_equal_bounds.<locals>.constraint2
  s    &1v|r%   c                 P     | d       t        j                  |       }d|d<   |S )NFr0  r   r(   r3  r5  s     r#   	jacobian2z*setup_test_equal_bounds.<locals>.jacobian2
  r8  r%   )r  ri  r  Fr  c                 $     |        |       fS r4   r|   )r"   rk   rp   s    r#   r9  z)setup_test_equal_bounds.<locals>.<lambda>
  s    Qa1 r%   c                 ,    t        t        | |            S r4   )listzipr  r  s     r#   r9  z)setup_test_equal_bounds.<locals>.<lambda>
  s    $s2r{"3 r%   r  )	r  kwdsbound_typesr#  	callbacksr  r  rH   r)  )TT)r   r+   r.   r  r?   r   ro  r   )rH   r  r  r1  r7  r:  r<  c1ac1bc2ac2br  rB  rC  r#  rD  datar*  rk   rp   r)  r  s                    @@@@@r#   setup_test_equal_boundsrJ  
  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  rB  
bound_typerC  r#  r  rD  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  rH   r)  ri  z)Only SLSQP supports nonlinear constraints)rH   r   r   r#  r  )r   r   r   r#  r/   r   gMb@?r   r   c                     t        j                  t         j                  dt         j                  dg      }| |ddg<   t        j                  |      S )Nr(   r  r   )r   r?   r  r   r   )r"   new_xs     r#   r   ztest_equal_bounds.<locals>.fun+  s=    HHbffa45EE1a&M>>%((r%   r(   r5  g>r|   )platformmachiner  r  eb_datar>  r   r   r   r  r   r   r   r"   r   r  r   r?  rH  r   )r   rB  rK  r#  r  r  r  rH   r)  test_constraintsreference_constraints	fd_neededr   r   expectedr   fd_ress                    r#   test_equal_boundsrX  
  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\\5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 r4   )r   linalgnorm)r"   p1s     r#   rj   z test_all_bounds_equal.<locals>.fA  s    yy~~a 2%%r%   r9  )r(   r(   )rO   r^  r[  rO   rY  z/All independent variables were fixed by bounds.)r(   r  r(   ri  c                 ,    t        j                  |       S r4   rR  r!   s    r#   conz"test_all_bounds_equal.<locals>.conR  s    66!9r%   rS   )r   r   r#  Fz3All independent variables were fixed by bounds, butr   Tz8All independent variables were fixed by bounds at valuesr8  )r   r   r   r   r   r   r  upperr   r   ro  rO  )	r   rj   r   rH   r   r   r_  nlcr  s	            r#   test_all_bounds_equalrb  =  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   rR   r   r(   r|   r!   s    r#   rj   ztest_eb_constraints.<locals>.fl  s.    tQw1q 1Q4!9,,r%   c                 6    | d   | d   z   | d   z   | d   z   dz
  S )Nr   r   r(   rR   (   r|   r!   s    r#   cfunz!test_eb_constraints.<locals>.cfuno  s+    tad{QqT!AaD(2--r%   rd  re  )r   r  r   )r  r  r   )r   r(   rR   r   ri  )rH   r   r   r#  r   r   rA  )rj   rg  r#  r   s       r#   test_eb_constraintsrh  i  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   r   rootroot_scalarlinprogquadratic_assignmentekkir1  )r   maximizemaximize_scalar)
r   r   r   r   r   r   itemsr   rC   rD   )solver_methodssolverr  r   unknown_solver_methods        r#   test_show_optionsru    s    $2*" <N *//1 ) 	)F(	)) !
 0557 @j,?@r%   c                      t        j                  ddgddg      } t        j                  t         j                  t	        j
                  ddg      d|        y )NrB  r  rA  r   r   r  )r   r   r   r   r   r?   r}  s    r#   test_bounds_with_listrw    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 r4   )r   rB   r  r6   rb  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 rQ  )r   rB   r  rb  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   eyer  r!   s    r#   
fquad_hessz4test_x_overwritten_user_function.<locals>.fquad_hess  s    vvbggaj!C''r%   )r2  r  r  r  r  r  )r  r  r  r  r  r  r*   r  g-C6*?r   )	r   r  r   r   r   r   r"   rB   r  )
rz  r|  r  meth_jac	meth_hessrH   methr   rt   r   s
             r#    test_x_overwritten_user_functionr    s    (HI 
c	B  B8C9Dr$CdKryy5DAB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 rQ  r|   r!   s    r#   rk   zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.func  s    6Mr%   r   )rH   )rZ  r   r"   r   r  r   r   r   )	r   basinhoppingdifferential_evolutionshgodual_annealingdirectrH  r   rk  )r`   rk   rI  r  s       r#   test_optimize_result_attributesz6TestGlobalOptimization.test_optimize_result_attributes  s    	 ((!4224'C==y1**4';??4'3	  	*Ffh&=&=>>>63'''69---69---65)))66***65)))	*r%   N)rx   ry   rz   r  r|   r%   r#   r  r    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_fprimerG   r^  r   rE   rF   )r  r  s     r#   test_approx_fprimer    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 rL  r|   r!   s    r#   rj   ztest_gh12594.<locals>.f  s!    tQw!A$(Q&&r%   rc  r   rA  )r   r   r   r  )r   r   r   r   r?   r   r   r"   )rj   r   r   r   s       r#   test_gh12594r    s    
' Szr2h/F


A&&
ICrxxc
+"b0BCF


A&&
ICCGGSWW%CEE355!r%   )ir{   r  rP  numpyr   numpy.testingr   r   r   r   r   r   r	   r  r
   rC   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   rJ   rL   r~   r(  r6  r:  r@  rI  rN  rV  r_  rr  r{  r}  r  r  r  r  r  r  r  r  r  rG  rU  rW  ry  r  r  r  r  r^  rE   rF   rG   r_  r`  r  r  r  r  r  r  r  r  r  r  r  fixturer  r  r  r!  r$  rJ  rR  xfail_on_32bitrX  rb  rh  ru  rw  r  r  r  r  r|   r%   r#   <module>r     sA  
   A A A  *  @? ? 4 - ; < O M M2j-' -'`W. W.t-"0H8D$ >I:X'FT8 
 : 
 : 
"< 
cD cDL 0-	-:= :=ziN iNX	& &R@)< )<X<-~#6Lz6zJ*   ;7 a&4,0 0D=77<G% G%T F>[ >[B#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"r%   