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

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

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

    N)assert_allcloseassert_equalassert_almost_equalassert_no_warningsassert_warnsassert_array_lesssuppress_warnings)raises)optimize)BoundsNonlinearConstraint)MINIMIZE_METHODSMINIMIZE_METHODS_NEW_CBMINIMIZE_SCALAR_METHODS)LINPROG_METHODS)ROOT_METHODS)ROOT_SCALAR_METHODS)QUADRATIC_ASSIGNMENT_METHODS)ScalarFunction
FD_METHODS)
MemoizeJacshow_optionsOptimizeResult)rosen	rosen_der
rosen_hess)
coo_matrix
csc_matrix
csr_matrix	coo_array	csr_array	csc_arrayc            
      v   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k    sJ t          t          j        | ||ddd
          dz
            }|dk    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 d S )Nc                 8    ddt          j        |            z   z  S N   npexpxs    a/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/optimize/tests/test_optimize.pyexpitztest_check_grad.<locals>.expit*   s    Ar

N##    c                 d    t          j        |            dt          j        |            z   dz  z  S Nr&      r'   r*   s    r,   	der_expitz"test_check_grad.<locals>.der_expit-   s*    vqbzzQ^a///r.         ?r   random  )	directionseedư>)epsilon)r9   r6   r7   皙?Hz>c                 T    | t          j        |           z                                  S N)r(   sinsumr*   s    r,   x_sinxztest_check_grad.<locals>.x_sinxE   s     "&))  """r.   c                 Z    t          j        |           | t          j        |           z  z   S r=   r(   r>   cosr*   s    r,   
der_x_sinxz#test_check_grad.<locals>.der_x_sinxH   s!    vayy1RVAYY;&&r.   r1   皙?random_projectionallgƠ>)r(   arrayr   
check_gradr   absarangeassert_raises
ValueErrorhimmelblau_gradhimmelblau_hesshimmelblau_x0)r-   r2   x0rr@   rD   s         r,   test_check_gradrS   &   s%   $ $ $0 0 0 
3%BE9b11A1E9b&.T	; 	; 	;A1E9b$???A1E9b$&.T	; 	; 	;A1 	Hy"dCCCaGHHAt8888Hy"d*2? ? ?ABC 	D 	DAt8888# # #' ' ' 
1a		BFJ&.T	; 	; 	;A1*h1*b/d< < < <
 	O_m&+$	8 	8 	8At888888r.   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )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                 B   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 | _        d S )
Nr&   r&   r&   )r&   r&   r   )r&   r   r&   )r&   r   r   )      ?333333?      ?   )        g\g)3?  r   )r(   rH   FKzerosfloat64startparamssolutionmaxiter	funccalls	gradcallstraceselfs    r,   setup_methodzCheckOptimize.setup_methoda   s    999$99$99$99$99	& ' '
 ...))8Arz22!@!@!@AA


r.   c                    | xj         dz  c_         | j         dk    rt          d          t          j        | j        |          }t          j        t          t          j        |                              }|t          j        | j        |          z
  }| j	        
                    t          j        |                     |S )Nr&   ip  z+too many iterations in optimization routine)re   RuntimeErrorr(   dotr^   logr?   r)   r_   rg   appendcopy)ri   r+   log_pdotlogZfs        r,   funczCheckOptimize.funco   s    !>D  LMMM6$&!$$vc"&**++,,26$&!$$$
"'!**%%%r.   c                 R   | xj         dz  c_         t          j        | j        |          }t          j        t          t          j        |                              }t          j        ||z
            }t          j        | j                                        |          | j        z
  S r%   )	rf   r(   rm   r^   rn   r?   r)   	transposer_   ri   r+   rq   rr   ps        r,   gradzCheckOptimize.grady   s    !6$&!$$vc"&**++,,F8d?##vdf&&((!,,tv55r.   c                    t          j        | j        |          }t          j        t	          t          j        |                              }t          j        ||z
            }t          j        | j        j        t          j        t          j        |          | j        t          j        | j        j        |          z
                      S r=   )r(   rm   r^   rn   r?   r)   Tdiagrw   s        r,   hesszCheckOptimize.hess   s    6$&!$$vc"&**++,,F8d?##vdfhfRWQZZ"&12E2E)EFFH H 	Hr.   c                 R    t          j        |                     |          |          S r=   )r(   rm   r}   ri   r+   rx   s      r,   hesspzCheckOptimize.hessp   s    vdiillA&&&r.   N)	__name__
__module____qualname____doc__rj   rt   ry   r}   r    r.   r,   rU   rU   [   sl         
    6 6 6H H H' ' ' ' 'r.   rU   c                   x   e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            d          d             Zd	 Zd
 Zd Ze	j
                            ddgddgddgddgg          d             Zd Ze	j
                            d          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Zd" Zd#S )$CheckOptimizeParameterizedc           
         | j         re| j        | j        dd}t          j        | j        | j        dd| j        |          }|d         |d         |d         |d	         |d
         f\  }}}}}n=t          j        | j        | j        | j        d| j        d| j        d          }|\  }}}}}t          |                     |          |                     | 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           d S )NFrd   disp
return_allr   CG)argsmethodjacoptionsr+   funnfevnjevstatusT)rd   full_outputr   retallr8   atol	      r1      )r         rZ   )r   g;ӱ.g)`$|;?+=r;   r   rtol)use_wrapperrd   r   r   minimizert   rb   ry   fmin_cgr   rc   re   rf   rg   )	ri   optsresparamsfopt
func_calls
grad_callswarnflagretvals	            r,   test_cgz"CheckOptimizeParameterized.test_cg   s    	F#|TY"') )D#DIt/?b+/TY,02 2 2C C#e*c&k3v;HM ;FD*j(( %di1A&*iT\26TY-24 4 4F @F<VT:z8		&))499T]+C+C!	# 	# 	# 	#
 ~"""DN"""~"""DN""" 	
1Q3'===?"	/ 	/ 	/ 	/ 	/ 	/r.   c                     d }t          j        ddd          D ];}t          j        ||gd          }|j        sJ t          |j        dgd	           <d S )
Nc                 H    ddt          j        d| dz
  z            z
  dz  z  S )Ng      @r&         rZ   r1   r'   )rR   s    r,   rs   z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.f   s)    !bfT1s7^444q888r.   g      r[   G   r   r   rZ   h㈵>r   )r(   linspacer   r   successr   r+   )ri   rs   rQ   sols       r,   test_cg_cornercasez-CheckOptimizeParameterized.test_cg_cornercase   s}    	9 	9 	9
 +eQ++ 	5 	5B#AtD999C;CEC5t44444	5 	5r.   c           
         | j         ru| j        | j        dd}t          j        | j        | j        | j        dd|          }|d         |d         |d         |d	         |d
         |d         |d         f\  }}}}}}}	n?t          j        | j        | j        | j        d| j        d| j        d          }
|
\  }}}}}}}	t          |                     |          |                     | 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           d S )NFr   BFGSr   r   r   r   r   r+   r   r   hess_invr   r   r   Tr   rd   r   r   r   r8   r   
         )r   g&/LgB__E7?)r   g$g
|3?r   r;   r   )r   rd   r   r   r   rt   rb   ry   	fmin_bfgsr   rc   re   rf   rg   )ri   r   r   r   r   goptHoptr   r   r   r   s              r,   	test_bfgsz$CheckOptimizeParameterized.test_bfgs   s    	8#|TY"') )D#DIt/?(,	&r,02 2 2C
 Hc%j#e*c*oKVc(mJ=FFD$j*hh '	43CTY-/48ty/46 6 6F
 28/VT4X		&))499T]+C+C!	# 	# 	# 	#
 ~###T^###~"""DN""" 	
1Q3======?"	/ 	/ 	/ 	/ 	/ 	/r.   c                    t          j        t          d          5  t          j        g d          }| j        t          j        d           d}t          j        t          j	        |dd|           d d d            d S # 1 swxY w Y   d S )	N+'hess_inv0' matrix isn't positive definite.matchg?ffffff?皙?ffffff?333333?   r   	hess_inv0r   r   rQ   r   r   r   )
pytestr
   rM   r(   rH   r   eyer   r   r   )ri   rQ   r   s      r,   test_bfgs_hess_inv0_negz2CheckOptimizeParameterized.test_bfgs_hess_inv0_neg   s     ]: .0 1 1 1 	, 	,33344B IRVAYYJ??DhnF&*, , , ,		, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   AB  BBc                 &   t          j        t          d          5  t          j        g d          }t          j        d          }d|d<   | j        |d}t          j        t          j	        |dd	|
           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   r   r   r   r   r   r   )
r   r
   rM   r(   rH   r   r   r   r   r   )ri   rQ   r   r   s       r,   test_bfgs_hess_inv0_semiposz6CheckOptimizeParameterized.test_bfgs_hess_inv0_semipos   s     ]: .0 1 1 1 	, 	,33344Bq		IIdO II>>DhnF&*, , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   ABB
B
c                 2   t           j        }t          j        g d          }| j        dt          j        d          z  d}t          j        ||dd|          }t          j        ||ddd| j        i          }t          |j        |j        d	
           d S )Nr   {Gz?r   r   r   r   r   r   r8   r   )	r   r   r(   rH   r   r   r   r   r   )ri   r   rQ   r   r   res_trues         r,   test_bfgs_hess_inv0_sanityz5CheckOptimizeParameterized.test_bfgs_hess_inv0_sanity   s    nX///00	rvayy0@AA6(,. . .$SRR.4di-@B B BD999999r.   ignore::UserWarningc           	      V   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            d S # 1 swxY w Y   d S )Nc                 $    t           j        |  z   S r=   )r(   er*   s    r,   rt   z;CheckOptimizeParameterized.test_bfgs_infinite.<locals>.func   s    DaRL= r.   c                      |            S r=   r   )r+   rt   s    r,   fprimez=CheckOptimizeParameterized.test_bfgs_infinite.<locals>.fprime   s    DGG8Or.   r   ignore)overr   r   r   r   r+   r   )r(   errstater   r   r   r   r   isfinite)ri   r   rQ   r   r+   rt   s        @r,   test_bfgs_infinitez-CheckOptimizeParameterized.test_bfgs_infinite   s.   	! 	! 	!	 	 	 	 	S[h''' 	, 	, I	*%dBF6+-t= = ==@B &tRdiHHH{4477++++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   A.BB"%B"c                     g d}t          j        t           j        |dddi          }t          j        t           j        |dddi          }|j        |j        k    sJ d S )Nr   bfgsxrtolMbP?r   r   gtolr   r   r   nit)ri   rQ   r   refs       r,   test_bfgs_xrtolz*CheckOptimizeParameterized.test_bfgs_xrtol  sz    &&& "6GT?L L L "6FD>K K Kw#'!!!!!!r.   c                     g d}t          j        t           j        |dddi          }t          j        t           j        |dddi          }|j        |j        k    sJ d S )Ng$@g333334@g%@r   333333r   c1:0yE>r   r:   )r   r   r   r   )ri   rQ   res_c1_small
res_c1_bigs       r,   test_bfgs_c1z'CheckOptimizeParameterized.test_bfgs_c1  s     +**()+FT4LR R R&x~')&4,P P P
  :?222222r.   c                     g d}t          j        t           j        |dddi          }t          j        t           j        |dddi          }|j        |j        k    sJ d S )Nr   r   c2?r   r   r   )ri   rQ   res_defaultres_mods       r,   test_bfgs_c2z'CheckOptimizeParameterized.test_bfgs_c2  s|     '&&'(*6D":O O O#HN$&vd|M M M,,,,,,r.   r   r   rZ   r1   皙r:   rE   c           	          t          j        t          d          5  g d}t          j        t          j        |d||d           d d d            d S # 1 swxY w Y   d S )Nz'c1' and 'c2'r   r   cg)r   r   r   )r   r
   rM   r   r   r   )ri   r   r   rQ   s       r,   test_invalid_c1_c2z-CheckOptimizeParameterized.test_invalid_c1_c2)  s     ]:_=== 	< 	<...Bhnb-/r&:&:< < < <	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   *AAAc           	         | j         rg| j        | j        dd}t          j        | j        | j        dd|          }|d         |d         |d         |d	         |d
         |d         f\  }}}}}}n8t          j        | j        | j        d| j        d| j        d          }	|	\  }}}}}}t          |                     |          |                     | j	                  d           t          |dd          | j	        dd          d           | j
        dk    sJ | j
                    | j        dk    sJ | j                    d S )NFr   r   Powellr   r   r   r+   r   direcr   r   r   Tr   r8   r   r&   h㈵>   r   )r   rd   r   r   r   rt   rb   fmin_powellr   rc   re   rf   
ri   r   r   r   r   r  numiterr   r   r   s
             r,   test_powellz&CheckOptimizeParameterized.test_powell2  s|    	J#|TY"') )D#DIt/?b+3TC C CC Hc%j#g,E
KXB0>FD%*hh )$)T5E/14<6:168 8 8F DJ@VT5':x		&))499T]+C+C!	# 	# 	# 	# 	qrr
DM!""$5DAAAA ~)))4>)))~"""DN"""""r.   zeThis part of test_powell fails on some platforms, but the solution returned by powell is still valid.)reasonc           	         | j         rg| j        | j        dd}t          j        | j        | j        dd|          }|d         |d         |d         |d	         |d
         |d         f\  }}}}}}n8t          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           d S )NFr   r   r  r  r+   r   r  r   r   r   Tr   "   '   )病~W?f"Bܿg%?)r  r  g:&?)gSϼW?gf"Bg{år?)r  r  {år?)gB?r  r  r   r;   r   )
r   rd   r   r   r   rt   rb   r  r   rg   r	  s
             r,   test_powell_gh14014z.CheckOptimizeParameterized.test_powell_gh14014T  sD     	J#|TY"') )D#DIt/?b+3TC C CC Hc%j#g,E
KXB0>FD%*hh )$)T5E/14<6:168 8 8F DJ@VT5':x 	
2b5)>>>>>>>>>>>>>>>	@
 #	/ 	/ 	/ 	/ 	/ 	/r.   c                    d | j         D             }| j        r| j        | j        dd}t	          j        | j        | j         d|d|          }|d         |d         }}|| j        k    sJ t          |                     |          |                     | j	                  d	d
           | j        dk    sJ | j
        dk    sJ d S d S )Nc                 @    g | ]}t           j         t           j        fS r   )r(   pi).0_s     r,   
<listcomp>zBCheckOptimizeParameterized.test_powell_bounded.<locals>.<listcomp>z  s"    <<<aBE625/<<<r.   Fr   r   r  )r   boundsr   r   r+   r   r8   r   r      r   )rb   r   rd   r   r   r   rt   re   r   rc   rf   )ri   r  r   r   r   r   s         r,   test_powell_boundedz.CheckOptimizeParameterized.test_powell_boundedw  s    =<4+;<<< 	'#|TY"') )D#DIt/?b+1+3TC C CC #&c(CKJF////DIIf--tyy/G/G!%D2 2 2 2 >X---->Q&&&&'	' 	'& '&r.   c           	      n   | j         r_| j        | j        dd}t          j        | j        | j        dd|          }|d         |d         |d         |d	         |d
         f\  }}}}}n7t          j        | j        | j        d| j        d| j        d          }|\  }}}}}t          |                     |          |                     | 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           d S )NFr   r   Nelder-meadr  r+   r   r   r   r   Tr   r8   r      r   L   N   )g	dװ?g]fgt䝁?)gә ?g#=^goT?r   r;   r   )r   rd   r   r   r   rt   rb   fminr   rc   re   rf   rg   )	ri   r   r   r   r   r
  r   r   r   s	            r,   test_neldermeadz*CheckOptimizeParameterized.test_neldermead  s    	C#|TY"') )D#DIt/?b+8$H H HC Hc%j#e*c&kM;#7FD':xx ]49d.>(*DL/3$)*/1 1 1F =C9VT7J		&))499T]+C+C!	# 	# 	# 	#
 ~$$$dn$$$~"""DN""" 	
2b5)===>>>@"	/ 	/ 	/ 	/ 	/ 	/r.   c           
      ,   t          j        d          }| j        |d<   t          d          D ]}||dz   |fxx         dz  cc<   | j        r}| j        dd|d}t          j        | j        | j        d	d
|          }|d         |d         |d         |d         |d         f\  }}}}}	t          |d         d         |d                    n3t          j
        | j        | j        d	| j        ddd|          }
|
\  }}}}}	t          |                     |          |                     | 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           d S )N)r   r[   .r[   r&   r:   FTrd   r   r   initial_simplexr   r  r  r+   r   r   r   r   allvecsr   r   rd   r   r   r   r&  r8   r   d   2   4   )gIt?g?'ΛTgx8?)gҢ_׆?goMg囎|52?r   r;   r   )r(   r`   rb   ranger   rd   r   r   rt   r   r"  rc   re   rf   rg   )ri   simplexjr   r   r   r   r
  r   r   r   s              r,   test_neldermead_initial_simplexz:CheckOptimizeParameterized.test_neldermead_initial_simplex  s   (6""'q 	# 	#AAaCFOOOs"OOOO 	C#|U"&7D DD#DIt/?b+8$H H HC;>s8;>u:;>u:;>v;;>x=	;J7FD':x
 C	N1-wqz::::]49d.>(*DL/3%3:< < <F
 =C9VT7J		&))499T]+C+C!	# 	# 	# 	#
 ~$$$dn$$$~"""DN""" 	
2b5)======?"	/ 	/ 	/ 	/ 	/ 	/r.   c                    g }t          j        d          }| j        d d         |d<   t          d          D ]}||dz   |fxx         dz  cc<   |                    |           t          j        d          }|                    |           |D ]|}| j        r<| j        dd|d}t          t          t          j
        | j        | j        d	d
|           Et          t          t          j        | j        | j        d	| j        ddd|
  
         }d S )N)r[   r1   r1   .r&   r:   )r[   r[   Fr%  r   r  r  Tr(  )r(   r`   rb   r,  ro   r   rd   rL   rM   r   r   rt   r"  )ri   bad_simplicesr-  r.  r   s        r,   #test_neldermead_initial_simplex_badz>CheckOptimizeParameterized.test_neldermead_initial_simplex_bad  sL   (6""'+q 	# 	#AAaCFOOOs"OOOOW%%%(6""W%%%$ 	7 	7G 7#'<&+I Ij&/"i".#%%2&*, , , , , j(-"i)9#%t|*.U5.5	7 7 7 7 7	7 	7r.   c                     d }t          j        |dgdgd          }t          |j        dg           t          j        |ddgddgd          }t          |j        ddg           d S )	Nc                 0    t          j        | dz            S Nr1   r(   r?   r*   s    r,   quadz>CheckOptimizeParameterized.test_neldermead_x0_ub.<locals>.quad      6!Q$<<r.   r&   )r   rX   nelder-meadr  r   r   r1   )r&         @r   r   r   r+   )ri   r7  r   s      r,   test_neldermead_x0_ubz0CheckOptimizeParameterized.test_neldermead_x0_ub  s    	  	  	  C9 	
 
 
 	s###FW% 	
 
 
 	1v&&&&&r.   c                 z    ddi}t          j        | j        | j        d| j        d|          }|j        dk    sJ d S )Nrd   	Newton-CGr   r   r   r   r   r&   )r   r   rt   rb   ry   r   )ri   r   results      r,   test_ncg_negative_maxiterz4CheckOptimizeParameterized.test_ncg_negative_maxiter  sR    2"49d.>*549(*D: : : }!!!!!!r.   c           	          d }d }dg}d}t          j        |||dt          |                    }|j        dk    sJ t	          |j        d         t          j                   d S )Nc                 6    t          j        | d                   S Nr   )r(   rC   r*   s    r,   cosinez=CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.cosine  s    6!A$<<r.   c                 8    t          j        | d                    S rF  )r(   r>   r*   s    r,   r   z:CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.jac  s    F1Q4LL= r.   r:   r   	newton-cg)xtol)rQ   r   r   r   )r   r   dictr   r   r+   r(   r  )ri   rG  r   rQ   rJ  rB  s         r,   test_ncg_zero_xtolz-CheckOptimizeParameterized.test_ncg_zero_xtol  s    	  	  	 	! 	! 	! U"6&('**5+/T???	< < <
 }!!!!FHQK/////r.   c           
      0   | j         r@| j        | j        dd}t          j        | j        | j        d| j        d|          d         }n5t          j        | j        | j        | j        d| j        d| j        d          }|}t          |                     |          |                     | 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           d S )NFr   r@  r   rA  r+   r   r8   r   r      r[   r   (6-H=g?g4u3?rP  g_g/N3?r;   r   )r   rd   r   r   r   rt   rb   ry   fmin_ncgr   rc   re   rf   rg   ri   r   r   r   s       r,   test_ncgz#CheckOptimizeParameterized.test_ncg'  sZ    
	5#|TY"') )D&ty$2B.9ty,.> > >>ACFF &ty$2BDI,.38ty.35 5 5F
 		&))499T]+C+C!	# 	# 	# 	#
 ~"""DN"""~###T^### 	
1Q3KKKKKKM!	. 	. 	. 	. 	. 	.r.   c                 H   | j         rF| j        | j        dd}t          j        | j        | j        d| j        | j        d|          d         }n;t          j	        | j        | j        | j        | j        d| j        d| j        d	  	        }|}t          |                     |          |                     | 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           d S )NFr   r@  r   )r   r   r}   r   r   r+   )fhessr   rd   r   r   r   r8   r   r      r[   r   rO  rQ  r;   r   )r   rd   r   r   r   rt   rb   ry   r}   rR  r   rc   re   rf   rg   rS  s       r,   test_ncg_hessz(CheckOptimizeParameterized.test_ncg_hessH  sg    	5#|TY"') )D&ty$2B.9ty,0I,.> > > ?BCFF
 &ty$2BDI-1Y,.38ty.3	5 5 5F 		&))499T]+C+C!	# 	# 	# 	#
 ~"""DN"""~###T^###
 	
1Q3KKKKKKM!	. 	. 	. 	. 	. 	.r.   c                 H   | j         rF| j        | j        dd}t          j        | j        | j        d| j        | j        d|          d         }n;t          j	        | j        | j        | j        | j        d| j        d| j        d	  	        }|}t          |                     |          |                     | 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           d S )NFr   r@  r   )r   r   r   r   r   r+   )fhess_pr   rd   r   r   r   r8   r   r   rW  r[   r   rO  rQ  r;   r   )r   rd   r   r   r   rt   rb   ry   r   rR  r   rc   re   rf   rg   rS  s       r,   test_ncg_hesspz)CheckOptimizeParameterized.test_ncg_hesspj  sg    	5#|TY"') )D&ty$2B.9ty-1Z,.> > > ?BCFF
 &ty$2BDI/3z,.38ty.3	5 5 5F 		&))499T]+C+C!	# 	# 	# 	#
 ~"""DN"""~###T^###
 	
1Q3KKKKKKM!	. 	. 	. 	. 	. 	.r.   c                    | j         rxt          j        | j        | j        d| j        | j        d          }t          |j        |                     | j	                  d           | j
        dk    sJ | j
                    d S d S )Ncobyqard   r   r   r8   r   A   )r   r   r   rt   rb   rd   r   r   r   rc   re   ri   r   s     r,   test_cobyqaz&CheckOptimizeParameterized.test_cobyqa  s     	=#	 $(L$)DD	  C CGTYYt}%=%=DIIII >W,,,dn,,,	= 	= -,r.   N) r   r   r   r   r   r   r   r   r   r   markfilterwarningsr   r   r   r   parametrizer  r  xfailr  r  r#  r/  r2  r=  rC  rL  rT  rX  r[  ra  r   r.   r,   r   r      s
       / / />	5 	5 	5 /  /  /D, , ,
, 
, 
,	: 	: 	: [ 566, , 76, " " "	3 	3 	3- - - [dD\S!H-13K-0#J,8 9 9< <9 9< 3  3  3D [ & ' '/ /' '/@' ' '2/ / />&/ &/ &/P7 7 7>' ' '." " "0 0 0$. . .B .  .  .D .  .  .D= = = = =r.   r   c            	          t           j                            d          fd} dD ]B}dD ]=}t          j        |                     d          |d|i          }|d         |k    sJ >Cd S )	Nl	   <vgRI*q4 c                 4                         d          dz  S Nr&   r]   r4   )r+   rngs    r,   costztest_maxfev_test.<locals>.cost  s    zz!}}t##r.   )r&   r   r*  )r  Nelder-Meadr   maxfevr   r   )r(   r4   default_rngr   r   )rk  imaxfevr   rB  rj  s       @r,   test_maxfev_testrp    s    
)

 G
H
HC$ $ $ $ $  - - 0 	- 	-F&tSZZ^^.408'/BD D DF &>W,,,,,		-	- -r.   c                     d } t           j                            | t          j        d          d          \  }}t          d          D ]0} |t          j        |                     |d         |dz   k    sJ 1d}t          t           j        j        |          5   |t          j        |                     d d d            n# 1 swxY w Y   t           j                            | t          j        d          d          \  }}d}t          t          |          5   |t          j	        ddg                     d d d            d S # 1 swxY w Y   d S )Nc                     | S r=   r   r*   s    r,   func_z8test_wrap_scalar_function_with_validation.<locals>.func_  s    r.   r&   r   r   zToo many function callsr   @The user-provided objective function must return a scalar value.)
r   	_optimize'_wrap_scalar_function_maxfun_validationr(   asarrayr,  rL   _MaxFuncCallErrorrM   rH   )rs  fcallsrt   imsgs        r,   )test_wrap_scalar_function_with_validationr|    s      %//rz!}}aHH FD 1XX    RZ]]ayAaC
#C	x);3	G	G	G  RZ]]               %//rz!}}aHH FD MC	z	-	-	-  RXq!f                 s$   CC
C
 EEEc                      d} t          t          |           5  t          j        d t	          j        ddg          d           d d d            d S # 1 swxY w Y   d S )Nrt  r   c                     | S r=   r   r*   s    r,   <lambda>z.test_obj_func_returns_scalar.<locals>.<lambda>  s    A r.   r&   r   r   )rL   rM   r   r   r(   rH   r   s    r,   test_obj_func_returns_scalarr    s    &E 
z	/	/	/ H H++rxA'7'7GGGGH H H H H H H H H H H H H H H H H Hs   -AAAc                      t          j        g d          } t          j                            t          j        | d          }|j        dk    sJ d S )Nr   r   )xatoliS  )r(   rH   r   	_minimize_minimize_neldermeadr   r   )rQ   r   s     r,   test_neldermead_iteration_numr    sQ    	+++	,	,B


1
1(."8< 2 > >C7c>>>>>>r.   c                      t          j        ddg                              t           j                  } d }t	          j        || d           d S )N      @      @c                 X    | j         t          j        k    sJ t          j        |           S r=   )dtyper(   float32r   r   r*   s    r,   rosen_z*test_neldermead_respect_fp.<locals>.rosen_  s'    w"*$$$$~a   r.   rl  r   )r(   rH   astyper  r   r   )rQ   r  s     r,   test_neldermead_respect_fpr    sT    	3*			$	$RZ	0	0B! ! ! fb777777r.   c                  X    d } t           j                            | ddgddd           d S )Nc                 0    | d         dz  | d         dz  z   S Nr   r1   r&   r   r*   s    r,   rt   z)test_neldermead_xatol_fatol.<locals>.func  s    tqy1Q419$$r.   r&   r1   r   )rd   r  fatol)r   r  r  )rt   s    r,   test_neldermead_xatol_fatolr    sQ    % % % ++D1a&!26d , D D D D Dr.   c                      d } g d}t          j        | |d          }t          |j        d           t          j        | |dddi          }t          |j        d           d S )	Nc                 0    t          j        | dz            S r5  r6  r*   s    r,   rt   z&test_neldermead_adaptive.<locals>.func      va1f~~r.   )gM@'?gOC?g~?g -?g?g#j?g ?g~^g?gܠr#?g^cǽ?g)i	?g'?g?g1?g[VΤ?rl  r   FadaptiveTr   )r   r   r   r   )rt   p0r   s      r,   test_neldermead_adaptiver    s      
F 
F 
FB 
D"]
;
;
;Ce$$$

D"]%/$68 8 8Cd#####r.   c            	         d } d}g d}t          t          j                  5  t          j        | ||d          }d d d            n# 1 swxY w Y   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            n# 1 swxY w Y   t	          |j        t          j        g d          d           t          |j
        d           t          |j        d           d S )Nc                 0    t          j        | dz            S r5  r6  r*   s    r,   rt   z/test_bounded_powell_outsidebounds.<locals>.func  r  r.   )r?  r&   r  r  )rZ   gr  r:  r\   r8   r   Tr   r   r   r   )r   r&   r   )r   r   r&   r  )r  r   r   )g      r   r   Fr   )r   r   OptimizeWarningr   r   r+   r(   rH   lenr   r   r   )rt   r  rQ   r   r  s        r,   !test_bounded_powell_outsideboundsr    s     &F	B 
h.	/	/ J JbIIIJ J J J J J J J J J J J J J JCE28RD3r77N33$????d###Q YY			999-E	h.	/	/ : :b'-h)0%(8: : :: : : : : : : : : : : : : : : CE28KKK00t<<<<e$$$Qs#   AAADD
D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            n# 1 swxY w Y   t          |j        dd	
           d S )Nc                 0    t          j        | dz            S r5  r6  r*   s    r,   rt   z+test_bounded_powell_vs_powell.<locals>.func"  r  r.   ))r?  )r   )r&   gffffff"@)r  gffffff@g/)g gr   r   r  绽|=ftolrJ  r  r   r\   r8   r   )r   r  r   )r?  r   r&   r   r  )Nr?  r   r&   )r  Nr  c                    t          j        | d                    t          j        | d                   z  t          j        | d          | d         z            z  t          j        | d                   z  }|t          j        t          j        | d         | d         z            t          j        | d                   z            z  }|dz  S Nr   r&   r1   rB   r+   ts     r,   rt   z+test_bounded_powell_vs_powell.<locals>.func@  s    FAaD5MMBF1Q4LL(261Q4%!A$,+?+??"&1,,N	RVBF1Q4!A$;''"&1,,6777!tr.   )r  r   r[   )r   r   r   r   r:  g8:}?r   )gb4F@g:gW?@)r   r   r   r+   r   r(   rH   infr   r   r  )rt   r  rQ   r   
res_powellres_bounded_powellrx   s          r,   test_bounded_powell_vs_powellr    sx     DF	!	!	!Be,,G"4HgNNNJJL"40000JNBT2222!*4W282:< < < 	%%%&&A&(!$7777&*DDGG$???? 26'3!RVj+MF!*4W282:< < < 	%%%&&A&(!$7777&*DDGG$????
  
 Y]F			B"4H===J!*4282:< < < JN$8tDDDD&*AD9999
 w 1$F!*4282:< < < JN$6$:FFFFJO%7%<4HHHHJL"4"6TBBBB 
2	1	1BY]F	h.	/	/ @ @%.tR6<6>@ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ &*AD999999s   I<<J J 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           d S )Nr  g    .Ar[   r   r  )r   r  r   rW   c                 ,    t          j        |            S r=   r6  r*   s    r,   rs   z1test_onesided_bounded_powell_stability.<locals>.fr  s    q		zr.   g    `F-C6?r   c                     t          j        t          j        |                     dz   t          j        | dk              rdndz  S )Nr:   r   r&   r?  r(   rJ   r?   rG   r*   s    r,   rs   z1test_onesided_bounded_powell_stability.<locals>.fx  s<    rvayy!!c**26!a%==.HaabIIr.   gwc                     t          j        t          j        |                     dz   t          j        | dk              rdndz  S )Nr   r   r&   r?  r  r*   s    r,   rs   z1test_onesided_bounded_powell_stability.<locals>.f  s<    rvayy!!R''q1u+E112FFr.   gB+Iar;   r   c                    t          j        t          j        | d d                             dz   t          j        t          j        | dd                              dz  z
  }|t          j        | dk              rdndz  }|S )Nr1   r   r:   r   r&   r?  r  r  s     r,   rs   z1test_onesided_bounded_powell_stability.<locals>.f  sq    VBF1RaR5MM""a''"&!""*?*?C*HH	26!a%==(aab)r.   g     @@r  g 4&k\)r(   r  r   r   r   r   )kwargsrQ   rs   r   s       r,   &test_onesided_bounded_powell_stabilityr  f  sd    !6'3(1,"&557 7F 
B  

Ar
,
,V
,
,CCGT----J J J 
Ar
,
,V
,
,CCG_---G G G 
Ar
,
,V
,
,CCG\5555  
 &#'!+F8

Ar
,
,V
,
,CCG9EEEEEEr.   c                       e Zd ZdZdZdS )TestOptimizeWrapperDispTNr   r   r   r   r   r   r.   r,   r  r    s        KDDDr.   r  c                       e Zd ZdZdZdS )TestOptimizeWrapperNoDispTFNr  r   r.   r,   r  r    s        KDDDr.   r  c                       e Zd ZdZdZdS )TestOptimizeNoWrapperDispFTNr  r   r.   r,   r  r    s        KDDDr.   r  c                       e Zd ZdZdZdS )TestOptimizeNoWrapperNoDispFNr  r   r.   r,   r  r    s        KDDDr.   r  c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zej                            d          ej                            d          ej                            d          ej                            dg dez             d                                                 Zej                            dg d          d             Zd Zej                            dg d          d             Zej                            dg d          d             Zd  Z d! Z!d" Z"d# Z#ej                            dg d$          d%             Z$ej                            dg d&          d'             Z%ej                            d          ej                            de&          ej                            d(g d)          d*                                     Z'd+ Z(ej                            dd,          d-             Z)ej                            dg d.          d/             Z*d0S )1TestOptimizeSimplec                     d }d }t           j        g}t          j        dd          5  t          j        |||d          }t          j         ||                    sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                     | S r=   r   r*   s    r,   rt   z.TestOptimizeSimple.test_bfgs_nan.<locals>.func  s    Hr.   c                 *    t          j        |           S r=   r(   	ones_liker*   s    r,   r   z0TestOptimizeSimple.test_bfgs_nan.<locals>.fprime      <??"r.   r   )r   invalidFr   )r(   nanr   r   r   isnan)ri   rt   r   rQ   r+   s        r,   test_bfgs_nanz TestOptimizeSimple.test_bfgs_nan  s    	 	 		# 	# 	#fX[h999 	% 	%"4V%@@@A8DDGG$$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   8A00A47A4c                    d }t          j        d          5  t          j        |d          }d d d            n# 1 swxY w Y   t          j        |d                   sJ |d         du sJ d }d	 }t          j        d          5  t          j        |d|
          }d d d            n# 1 swxY w Y   t          j        |d                   sJ |d         du sJ d S )Nc                     t           j        S r=   r(   r  r*   s    r,   rt   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.func  	    6Mr.   r   r  r   r   r   Fc                 *    | dk    rdnt           j        S rF  r  r*   s    r,   rt   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.func  s    Q11BF*r.   c                 *    t          j        |           S r=   r  r*   s    r,   r   z7TestOptimizeSimple.test_bfgs_nan_return.<locals>.fprime  r  r.   )r   )r(   r   r   r   r  )ri   rt   rB  r   s       r,   test_bfgs_nan_returnz'TestOptimizeSimple.test_bfgs_nan_return  s   	 	 	[*** 	0 	0&tQ//F	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 xu&&&&&i E))))	+ 	+ 	+	# 	# 	#[*** 	< 	<&tQF;;;F	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< xu&&&&&i E))))))s   ;??	B--B14B1c                    t          j        t          j        d                    t           j                            t          | j                            z  }t          j        | j	        | j
        |d| j        d          }t          | 	                    |          | 	                    | j                  d           d S )NrX   r   F)r9   r   rd   r   r8   r   )r(   sqrtspacingr4   randr  rc   r   r   rt   rb   rd   r   )ri   r9   r   s      r,   test_bfgs_numerical_jacobianz/TestOptimizeSimple.test_bfgs_numerical_jacobian  s     '"*R..))BINN3t};M;M,N,NN#DIt/?,3",0LuF F F 			&))499T]+C+C!	# 	# 	# 	# 	# 	#r.   c                    g d}g d}t          j        ||          D ]i\  }}t          j        | j        | j        ||          }t          |                     |j                  |                     | j                  d           jd S )N)r   r   TNC2-point3-pointN)r   r   r8   r   )		itertoolsproductr   r   rt   rb   r   r+   rc   )ri   methodsjacsr   r   rB  s         r,   test_finite_differences_jacz.TestOptimizeSimple.test_finite_differences_jac  s    '''+++$,Wd;; 	' 	'KFC&ty$2B.4#? ? ?FDIIfh//4=1I1I!%' ' ' ' '	' 	'r.   c           	         g d}t           t          j        fz   }t          j        ||          D ]N\  }}|t          j        u r
 |            }t          j        | j        | j        || j        |          }|j	        sJ Og d}|D ][}t          j        t                    5  t          j        | j        | j        || j        d            d d d            n# 1 swxY w Y   \d S )N)trust-constrr@  	trust-ncgtrust-krylovr   r   r}   )r  r  doglegtrust-exact)r   r   r   r  r  r   rt   rb   ry   r   r   r
   rM   )ri   r  hessesr   r}   rB  s         r,   test_finite_differences_hessz/TestOptimizeSimple.test_finite_differences_hess  sN    MLLx}..%-gv>> 	" 	"LFDx}$$tvv&ty$2B.4$),02 2 2F >!!!!
 IHH 	- 	-Fz** - -!$)T-=)/TY'+- - - -- - - - - - - - - - - - - - -	- 	-s   )CC	C	c                 b    d }t          j        |dgd          }t          |ddd           d S )Nc                 "    | dk     rdS | d| z  z   S )Nr   gBrX   r   r*   s    r,   rs   z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.f  s    1uu&2a4xr.         $@Fr   rX   r  r   r   )r   r   r   )ri   rs   xss      r,   test_bfgs_gh_2169z$TestOptimizeSimple.test_bfgs_gh_2169  sI    	  	  	 
 C5u555Cd666666r.   c                 `    fd}t                      t          j        |dddd           d S )Nc                 d    | d         }|vsJ                      |           d| dz  z  d| z  fS )Nr   r   r1      )add)r+   xpseens     r,   rs   z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.f  s>    1BT>>>>HHRLLLad7BqD= r.   r   Tr;   )r   r   tol)setr   r   )ri   rs   r  s     @r,   test_bfgs_double_evaluationsz/TestOptimizeSimple.test_bfgs_double_evaluations   sI    	! 	! 	! 	! 	! uu!T&dEEEEEEr.   c                    t          j        | j        | j        | j        d| j                  }|\  }}}t          |                     |          |                     | 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           d S )Nr   )r   rd   r8   r   r   r   r[   )g><gwT볹gUuAX?)r\   gHg!mʲ3?r   r;   r   )r   fmin_l_bfgs_brt   rb   ry   rd   r   rc   re   rf   rg   ri   r   r   r   ds        r,   test_l_bfgs_bz TestOptimizeSimple.test_l_bfgs_b  s    '	43C(,	04> > > #q		&))499T]+C+C!	# 	# 	# 	#
 ~"""DN"""~"""DN""" 	
1Q3DDD6668"	/ 	/ 	/ 	/ 	/ 	/r.   c                     t          j        | j        | j        d| j                  }|\  }}}t          |                     |          |                     | j                  d           d S )NT)approx_gradrd   r8   r   )r   r  rt   rb   rd   r   rc   r  s        r,   test_l_bfgs_b_numjacz'TestOptimizeSimple.test_l_bfgs_b_numjac"  sz    '	43C4804> > > #q		&))499T]+C+C!	# 	# 	# 	# 	# 	#r.   c                       fd}t          j        | j         j                  }|\  }}}t	                               |                                j                  d           d S )Nc                 X                         |                               |           fS r=   )rt   ry   )r+   ri   s    r,   r   z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.fun/  s"    99Q<<1--r.   rd   r8   r   )r   r  rb   rd   r   rt   rc   )ri   r   r   r   r   r  s   `     r,   test_l_bfgs_b_funjacz'TestOptimizeSimple.test_l_bfgs_b_funjac-  s    	. 	. 	. 	. 	. 'T-=04> > > #q		&))499T]+C+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
           d S )Nc                       e Zd Zd Zd ZdS ):TestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callbackc                 0    d| _         d | _        d | _        d S rF  )r   r   r+   rh   s    r,   __init__zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__init__>  s    r.   c                 f    || _         t          j        |          | _        | xj        dz  c_        d S r%   )r+   r   r   r   r   ri   r+   s     r,   __call__zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__C  s-    #>!,,Ar.   Nr   r   r   r  r  r   r.   r,   Callbackr  =  s2          
    r.   r  r\   l-bfgs-brd   r   )r   callbackr   r&   Fz+STOP: TOTAL NO. of ITERATIONS REACHED LIMIT)r   r   r   r   r   r   r+   r   r   r   message)ri   r  cr   s       r,   test_l_bfgs_b_maxiterz(TestOptimizeSimple.test_l_bfgs_b_maxiter:  s    		 		 		 		 		 		 		 		 HJJR)*YND D D 	SWa   CE13'''CGQU+++SZ###{e####S[B	D 	D 	D 	D 	Dr.   c                 $   d| j         d}t          j        | j        | j        d| j        |          }t          |                     |j                  |                     | j                  d           | j	        |j
        k    sJ dx| _        | _	        t          j        | j        | j        d|          }| j        |j        k    sJ t          |                     |j                  |                     | j                  d           dx| _        | _	        t          j        | j        | j        d	d|
          }| j        |j        k    sJ t          |                     |j                  |                     | j                  d           d S )NFr   rd   L-BFGS-Br   r   r   r8   r   r   r   r  r   r   r   )rd   r   r   rt   rb   ry   r   r+   rc   rf   r   re   r   )ri   r   rR   ras       r,   test_minimize_l_bfgs_bz)TestOptimizeSimple.test_minimize_l_bfgs_bT  s   $,77di)9%/TY&*, , , 			!#		$-(@(@!	# 	# 	# 	#~''''*++ty$*:&0$@ @ @ ~((((		"$4=)A)A!	# 	# 	# 	# +,+ty$*:	&0$@ @ @~((((		"$4=)A)A!	# 	# 	# 	# 	# 	#r.   c                    d }dD ]}d| j         |d}t          j        | j        | j        d| j        |          }|                     |j                  }||}n||k     sJ t          ||                     | j                  |           d S )N)r:   r  r;   r  F)r   rd   r  r  r  r   )	rd   r   r   rt   rb   ry   r+   r   rc   )ri   v0r  r   r   vs         r,   test_minimize_l_bfgs_b_ftolz.TestOptimizeSimple.test_minimize_l_bfgs_b_ftolp  s    , 	C 	CC!dlCHHD#DIt/?+549,02 2 2C 		#%  Az2vvvvAtyy77cBBBBB	C 	Cr.   c           	          t          j        t           j        t          j        ddg          dt           j        ddd          }|j        rJ d S )Nr   rX   r  Fr&   )r   maxlsr  )r   r   r   r(   rH   r   r   )ri   r   s     r,   test_minimize_l_bfgs_maxlsz-TestOptimizeSimple.test_minimize_l_bfgs_maxls  sY    $0E0E'1x7I16(C(CE E 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          ||
           d S )Nr   r]   c                 H     |           }                     |           |S r=   )ro   )r+   valuers   valuess     r,   objfunzMTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.objfun  s'    AaDDEMM%   Lr.   )   r)  i,  )r   maxfunc              3   $   K   | ]\  }}||fV  d S r=   r   )r  rz  ys      r,   	<genexpr>zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>  s*      AAdaAq6AAAAAAr.   )
r   r   r   r(   fullr  max	enumerateminr   )ri   grQ   r.  lowmediumhighr%  kr0  targetxminr"  r  rs   r-  s                 @@r,   *test_minimize_l_bfgs_b_maxfun_interruptionz=TestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption  s    NWQ	 	 	 	 	 	 )VTvr!DAAAAAAivww&@&@AAAAA1! VDSD\"" .q"QvNNNdA$'''''r.   c                     	 	 dd}g d}t          j        t           j        ||t          d                    }t	          |j        d	d
d
           d S )Nr   r:   r)  c                    |} | |          }	d}
d}d}d}|r|s||k     rd}|dz  }t          t          j        |                    D ]g}||         |z
  ||         |z   fD ]5}t          j        |          }|||<    | |g|R  }|
dz  }
||	k     r|}	|}d}6| ||           |
|
|k    rd} nh|r|s||k     t	          j        |	|||
|dk              S )Nr&   r   TFr   r+   r   r   r   )r,  r(   sizerp   r   r   )r   rQ   r   rm  stepsizerd   r  r   bestxbestyfuncallsniterimprovedstopdimstestxtestys                     r,   custminz/TestOptimizeSimple.test_custom.<locals>.custmin  sW   ECGGEHEHD 4 EGOO 
 --  C#Cj83U3Z(5JK , , "%&c
 #E 1D 1 1 1 A 5==$)E$)E'+H+ )h&.@.@##  4 EGOO& *u508519O O O Or.   )g?r   r   皙?r   皙?rD  r   rX   r  r  r   Nr:   r)  N)r   r   r   rK  r   r+   )ri   rO  rQ   r   s       r,   test_customzTestOptimizeSimple.test_custom  sy    <?*.	O 	O 	O 	O> (''7(,d(;(;(;= = =sD999999r.   c                 p    ddgdfd}ddg}t          j        t           j        ||           d S )N)r  r1   )r   r[   constraintsc                 Z    |d         u sJ |d         u sJ t          j                    S )Nr  rV  r   r   )r   rQ   r   r  rV  s      r,   rO  z0TestOptimizeSimple.test_gh10771.<locals>.custmin  s>    8$....=)[8888*,,,r.   r&   )r   r  rV  )r   r   r   )ri   rO  rQ   r  rV  s      @@r,   test_gh10771zTestOptimizeSimple.test_gh10771  su     6"#	- 	- 	- 	- 	- 	-
 V(."W!'[	B 	B 	B 	B 	B 	Br.   c           	      :   d }d }dD ]}|dv rd }n|}t          j        |ddg|d|          }t          j        |ddg|d|          } ||j                   ||j                  k     s.J | d	 ||j                   d
 ||j                               d S )Nc                 4    | \  }}|dz  |dz  z  |dz  z   dz   S )Nr1   r   r&   r   zr+   r2  s      r,   rt   z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.func  s+    DAqa419q!t#a''r.   c                 n    | \  }}t          j        d|z  |dz  z  d|dz  z  z   d|dz  z  |z  g          S )Nr1   r   r[   r(   rH   r\  s      r,   dfuncz=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc  sE    DAq8QqSAX!Q$.!Q$q9:::r.   
r9  powellr   r   rI  r  tnccobylar]  slsqpr9  rb  rd  r]  r1   r  )r   r  r   rX   : z vs. )r   r   r+   )ri   rt   r`  r   r   sol1sol2s          r,   test_minimize_tol_parameterz.TestOptimizeSimple.test_minimize_tol_parameter  s   	( 	( 	(	; 	; 	;4 	B 	BF FFF$TAq6s,24 4 4D$TAq6s,24 4 4D4<<$$tv,,...AATVAA44<<AA /...	B 	Br.   r   r   ignore::RuntimeWarningr   )r"  r  r   r   rR  r  fmin_tnc
fmin_slsqpc                   
 dv rd }n$t           j        }t           j        }t           j        }t	          j        d          }i }                    d          r=t          t                     }dk    rd|d<   nNdk    rd	|d
<   nBdv rd|d<   n8d|d<   n2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k    sJ t          d 
D                       sJ t          j        
d          }	t          d |	D                       rJ d S )N)rl  r  c                 R    t          j        |           t          j        |           fS r=   )r   r   r   r*   s    r,   rt   zDTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.func  s"    ~a(((*<Q*?*???r.   r   r"  rm  r   iterrl  r)  r0  )r"  r  i  rd   c                  0    |d<   t          j        | i |S )Nr   r   r   )akwr   s     r,   routinezGTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.routine  s"    %8(!2r222r.   rc  r0  r   r  )rR  r   )rI  r   r  r  r  r  r  r}   c                     t          | t          j                  rJ                     | t	          j        |           f           d S r=   )
isinstancer   r   ro   r(   rp   )r+   r   r  resultss      r,   r  zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callback'  s@    !!X%<=====NNArwqzz?+++++r.   r  r1   c              3   L   K   | ]\  }}t          j        ||k              V   d S r=   )r(   rG   r  r+   r2  s      r,   r3  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>0  s2      66da26!q&>>666666r.   c              3   ^   K   | ](\  }}t          j        |d          |d                    V  )dS )r   N)r(   may_share_memoryr|  s      r,   r3  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>2  s;      PP41ar*1Q4166PPPPPPr.   )r   r   r   r   r(   r`   
startswithgetattrrK  r  rG   r  combinationsany)ri   r   rt   r   r}   rQ   r  ru  r  r  rz  s    `        @r,   #test_minimize_callback_copies_arrayz6TestOptimizeSimple.test_minimize_callback_copies_array  s(    222@ @ @ @ >D$C&DXb\\ V$$ 	4h//G%%!"v:%%#&x  222$(y!!$%y!!3 3 3 3 3 $($4$4$4y!!$(OOOy!]"""F8~%%F5MM ( ( (F5M!F6N 	, 	, 	, 	, 	, 	b6686v666 7||a66g66666666 -gq99PP<PPPPPPPPPPr.   ra  c                    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 d S )Nc                     | dz
  dz  S r0   r   r*   s    r,   rt   z1TestOptimizeSimple.test_no_increase.<locals>.func;      EA:r.   c                     d| dz
  z  dz  dz
  S )Nr1   r&   r?  r   r*   s    r,   bad_gradz5TestOptimizeSimple.test_no_increase.<locals>.bad_grad>  s     a!e9#a''r.          @rc  r  rv  r  rf  r   re  zSLSQP returns slightly worse)
r(   rH   rK  r   r   r   r+   r   r   re  )	ri   r   rt   r  rQ   f0r   r   r   s	            r,   test_no_increasez#TestOptimizeSimple.test_no_increase4  s    	 	 		( 	( 	(
 Xse__T"XX%+u__$b////$r:J:J:JBBBCbc&(/1 1 1TT#%[[#'***WL7888tCE{{b      r.   c                     d }d }t          j        g d          }t          j        ||dd|d          }t	          |j        t          j        g d          d	z  d
           d S )Nc                 T    t          | t          j        g d          z
  dz            S )N)rX   r  r;  r  r1   )r?   r(   rH   r*   s    r,   rs   z7TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.fS  s+    BH%5%5%5666:;;;r.   c                     t          j        g dg dg          }t          j        t          j        ||           t          j        ddg          z   | g          S )N)r?  r?  r?  r?  )r  r  r?  r   r   )r(   rH   concatenaterm   r+   rs  s     r,   consz:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.consV  sV    ***,<,<,<=>>A>26!Q<<"(Ar72C2C#CQ"GHHHr.   )rZ   rX   r3   r  re  ineqtyper   r   rV  )r\   r1   r   r   r[   g-q=r   )r(   rH   r   r   r   r+   )ri   rs   r  rQ   r   s        r,   test_slsqp_respect_boundsz,TestOptimizeSimple.test_slsqp_respect_boundsQ  s    	< 	< 	<	I 	I 	I X((())2g5;D,I,IK K Krx66q8uEEEEEEr.   )rl  r  r   r   r@  r  SLSQPr  r  r  r  r  r]  c           	         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 d S |dk    r|j        dk    sJ d S d S )Nr   r   r   r  r   )r@  r   rw  r}   r   r  r   r]  r   )r(   r`   r   r   r   r   r   rK  ry   r}   r   r   r   r   hasattrr   ngevr   )ri   r   MAXITERrQ   sfr  r   s          r,   test_respect_maxiterz'TestOptimizeSimple.test_respect_maxiter_  sH    Xb\\HNBH4F$/t= = #tG/D/D/DEE^##GF5MM ( ( (GF5MWF6N55f55w'!!!!x27""""3 	'8rw&&&& W:??????x:????  "?r.   )rl  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  |
                    d          r%t          t          |          } ||j        |fi | nt          j        |j        |||	           d d d            d S # 1 swxY w Y   d S )
Nr   r   r&   Tr^  zMaximum number of iterationsr   r"  r   )r(   r`   r   r   r   r   r   r   warnsRuntimeWarningr  r  r   r   )ri   r   rQ   r  r   ru  s         r,   test_runtime_warningz'TestOptimizeSimple.test_runtime_warning  s<    Xb\\HNBH4F$/t= =..\. ?A A A 	N 	N  (( N!(F33..g....!"&"VWMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Ns   (AC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 d S )	Nr   c                 n    t          j        d| d         z  d| d         z  z
  d| d         z  z
  g          S )NrE   r   皙?r&   Q?r1   r_  r*   s    r,   r   zRTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.fun  s7    8S1Q4Z#!*4tad{BCDDDr.   r  r  r   r  r  )rV  r   r}   r   r   )	r   r   r   r   r(   r`   r   rK  r   )	ri   r  rs   r   r}   r   r  rQ   r   s	            r,   2test_respect_maxiter_trust_constr_ineq_constraintszETestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints  s     N "	E 	E 	E   Xb\\24St'5(,W(=(=(=? ? ? w'!!!!!!r.   c                 L   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        sJ t          |j        dd           t          |j        dd           t          |j        dd           t          |j        dd           t          |j        dd           d S )Nc                     | dz  S r5  r   r*   s    r,   rs   z6TestOptimizeSimple.test_minimize_automethod.<locals>.f      a4Kr.   c                     | dz
  S r5  r   r*   s    r,   r  z9TestOptimizeSimple.test_minimize_automethod.<locals>.cons  s    q5Lr.   r  r  r  )rV  )r   r   r  )rV  r  r&   r   r   r;   r   r1   r   )r(   rH   r   r   r   r   r+   )
ri   rs   r  rQ   sol_0sol_1sol_2sol_3sol_4r   s
             r,   test_minimize_automethodz+TestOptimizeSimple.test_minimize_automethod  s   	 	 		 	 	 Xse__!!R((!!Rv>B7D 7D 6E F F F!!R	:::!!R8>t/L/L.M*14 4 4 !!R8>t/L/L.M*14 4 4 5%6 	 	C;......................r.   c                     d }dd}t          j        g d          }t           j                            t	          |                    }t          j        ||||d           d S )Nc                 6    t          j        | |z
  dz            S r5  r6  r+   r  s     r,   Yz=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Y  s    61Q3(###r.   c                     d| |z
  z  S r5  r   r  s     r,   dY_dxzATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dx  s    ac7Nr.   )r[   r&   r   r&   r   r   r1   r   r   r[   r   r   )r   r   r   r=   )r(   rH   r4   randnr  r   r   )ri   r  r  r  xinits        r,   test_minimize_coerce_args_paramz2TestOptimizeSimple.test_minimize_coerce_args_param  sx    	$ 	$ 	$	 	 	 	 H66677	A''!UQGGGGG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6d
gd g	t          j        ||||          }| d
 d	 d| }|j        s
J |            t          |j        dg|           |j        dk    s
J |            
dk    r@|dv rt          	d         d|           É	d         dk    r	d         dk     s
J |            d S )N)gJz5r&   gd~QJ)r   r   r  r@  c                    d         3| d         d         k    r!t          | d         d         z
            d<   t          |                                           dk    rt          d          | d         dz
  dz  z  S )Nr   g     @zOptimization stepped far away!r&   r1   )rJ   r5  AssertionError)r+   first_step_sizescalerQ   s    r,   rs   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.f  s{    q!)adbemm%(11%6%6"1vvzz||c!!$%EFFF!A$(Q&&r.   c                 F    t          j        | d         dz
  z  g          S Nr   r&   r_  )r+   r  s    r,   r8  z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g  s#    8UAaD1H-.///r.   )r   r   r   )r   r  )r  r@        r    rg  rX   err_msgr[   r   g)\(?rZ   )	r  r  rK  r   r   r   r   r+   r   )ri   scalesr  rs   r8  r   r   r   r  r  r  rQ   s            @@@r,   test_initial_step_scalingz,TestOptimizeSimple.test_initial_step_scaling  s    "!!999	' 	' 	' 	' 	' 	' 	'	0 	0 	0 	0 	0 '.vw?? 	 	ME6''E$J///&&u}}+D!D!DB#fO#Arq,35 5 5C  CC%CC?CCcCCG;'''''CEC5'::::7a<<<<<<u}}^++#OA$6gNNNNN +1-338JQ8N8N8NPW8N8N8N8N ?	 	r.   )r9  rb  r   r   rI  r  rc  rd  r]  re  r  r  r  r  r  c                    t           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 }|                    t          d           |                    t          d           |                    t          d           t          j        |	|
|          D ]8\  }}}dgt          j        ||||||          }t          |j        d           9	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr5   r   c                     t           j        S r=   r  r*   s    r,   rt   z0TestOptimizeSimple.test_nan_values.<locals>.func
  r  r.   c                     dxx         dz  cc<   d         dk    rt           j        S t           j                                        S r  )r(   r  r4   r  r+   counts    r,   func2z1TestOptimizeSimple.test_nan_values.<locals>.func2  s>    !HHHMHHHQx!||vy~~'''r.   c                 ,    t          j        dg          S NrX   r_  r*   s    r,   ry   z0TestOptimizeSimple.test_nan_values.<locals>.grad  s    8SE??"r.   c                 .    t          j        dgg          S r  r_  r*   s    r,   r}   z0TestOptimizeSimple.test_nan_values.<locals>.hess  s    8cUG$$$r.   rX   rI  r  r  r  r  r  r  r  r  rc  r  rv  r  r   r  delta_grad == 0.*.*does not use Hessian.*.*does not use gradient.*)r   r}   r   r   F)r(   r4   r7   rH   rK  r   r	   filterUserWarningr  r  r  r   r   r   r   )ri   r   rt   r  ry   r}   rQ   
needs_grad
needs_hessfuncsgradshesssr   suprs   r8  hr   r  s                     @r,   test_nan_valuesz"TestOptimizeSimple.test_nan_values  si    		t	 	 		( 	( 	( 	( 	(	# 	# 	#	% 	% 	% Xse__  7 7
  * *
 u$64,$64,%+u__$b////$r:J:J:J[*** 		1 		1,=,?,? 		13JJ{$7888JJ~'ABBBJJ~'BCCC$,UE5AA 1 11a'211V079 9 9S[%0000	1		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1s7    E5/B!EE5E!	!E5$E!	%E55E9<E9)r9  r   r   r  rc  rd  r]  re  r  r  r  r  r  c           	      &   d x}}|dv r| j         }|dv r| j        }t          j        d          5  t	                      5 }|                    t          d           t          j        | j	        | j
        |||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          dt          | j                            D ]B}t          j        | j        |dz
           | j        |                   rt          d|           Cd S )	Nr  r  r   r  r  r  r&   zDuplicate evaluations made by )ry   r}   r(   r   r	   r  r  r   r   rt   rb   r,  r  rg   array_equalrl   )ri   r   r   r}   r  rz  s         r,   test_duplicate_evaluationsz-TestOptimizeSimple.test_duplicate_evaluations1  s    d - - -)C      9D[*** 	A 	A,=,?,? 	A3JJ{$7888di)9%+4A A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A q#dj//** 	? 	?A~djQ/A?? ?"=V==? ? ??	? 	?s4   B!?B
>B!
B	B!B	B!!B%(B%new_cb_interface)r   r&   r1   c                 v  
 fdd_         fd}fd}d|dk    r
fd}n&|dk    r G 
fd	d
          } |            }n
fd}
fd
d
_        d
_         dgdz  |||d}t          j        di |d|i}|dk    rdz   |dk    r3t          j        di |ddii}	|j        |	j        cxk    rk    sn J n2t          j        di |ddii}	|j        |	j        cxk    rk    sn J |j        |	j        k    sJ t          |j        |	j                   |j	        |dv rdndk    sJ d S )Nc                 :    d_         t          j        |           S NF)flagr   r   r+   rs   s    r,   rs   z9TestOptimizeSimple.test_callback_stopiteration.<locals>.fR  s    AF>!$$$r.   Fc                 :    d_         t          j        |           S r  )r  r   r   r  s    r,   r8  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.gW  s    AF%a(((r.   c                 :    d_         t          j        |           S r  )r  r   r   r  s    r,   r  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.h[  s    AF&q)))r.   r   r&   c                 R    | j          | j                  k    sJ               d S r=   r   r+   )intermediate_resultr  rs   s    r,   callback_interfacezJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfaceb  s4    *.!!4G4I2J2JJJJJ




r.   r1   c                   "    e Zd Zdef fdZdS )@TestOptimizeSimple.test_callback_stopiteration.<locals>.Callbackr  c                 R    |j          |j                  k    sJ               d S r=   r  )ri   r  r  rs   s     r,   r  zITestOptimizeSimple.test_callback_stopiteration.<locals>.Callback.__call__g  s4    .2aa8K8M6N6NNNNNHJJJJJr.   N)r   r   r   r   r  )r  rs   s   r,   r  r  f  s?                 r.   r  c                                   d S r=   r   )xkr   r  s     r,   r  zJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfacel  s    




r.   c                  v     xj         dz  c_         d _         j         k    rd _        t                      d S )Nr&   FT)rz  r  StopIteration)r  rd   s   r,   r  z@TestOptimizeSimple.test_callback_stopiteration.<locals>.callbacko  s?    JJ!OJJ!HMzW$$ $#oo% %$r.   r   rP  )rQ   r   r   r   r}   r  r9  r]  r   rm  rd   )r  r]  r[   c   r   )
r  rz  r   r   r   r   r   r   r+   r   )ri   r   r  r8  r  r  r  r  r   r   r  rs   rd   s             @@@r,   test_callback_stopiterationz.TestOptimizeSimple.test_callback_stopiterationK  s   	% 	% 	% 	% 	% 	) 	) 	) 	) 	)	* 	* 	* 	* 	* q         ""           "*    	& 	& 	& 	& 	& 	& 
a61a1 1 FF&FF3EFFF]""kGX#JJfJJx6IJJJC8sx222272222222#KKfKKy'6JKKKC7cg0000000000w#'!!!!SUCE"""z6 .
 $
 $
aa      r.   c                     d}t          t          |          5  t          j        d t	          j        d                     d d d            d S # 1 swxY w Y   d S )Nz"'x0' must only have one dimension.r   c                     | S r=   r   r*   s    r,   r  z4TestOptimizeSimple.test_ndim_error.<locals>.<lambda>  s     r.   )r1   r&   )rL   rM   r   r   r(   onesri   r{  s     r,   test_ndim_errorz"TestOptimizeSimple.test_ndim_error  s    2:S111 	< 	<kk276??;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   )AAA)r9  r  rc  rb  rd  r]  r  c                    d }t          ddgddg          }d}t          j        t          |          5  t	          j        |g d||	           d d d            n# 1 swxY w Y   t          g d
g d          }d}t          j        t          |          5  t	          j        |g d||	           d d d            d S # 1 swxY w Y   d S )Nc                 0    t          j        | dz            S r5  r6  r*   s    r,   rs   z:TestOptimizeSimple.test_minimize_invalid_bounds.<locals>.f  r8  r.   r&   r1   r[   r   z?The number of bounds is not compatible with the length of `x0`.r   )r&   r1   r[   rQ   r   r  )r&   r   r&   )r[   r   r1   z:An upper bound is less than the corresponding lower bound.)r   r   r
   rM   r   r   )ri   r   rs   r  r{  s        r,   test_minimize_invalid_boundsz/TestOptimizeSimple.test_minimize_invalid_bounds  s   	  	  	  AA''O]:S111 	M 	MaIIIfVLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 			999--J]:S111 	M 	MaIIIfVLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms#   AA #A C  CC)r   r   rI  rb  c                 8   |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            n# 1 swxY w Y   d|d<   t          j        d d	d	gf||d
| d S )Nrb  r   Tr   r  Maximum numberr   c                 *    t          j        |           S r=   r   r   r*   s    r,   r  zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>  s    q(9(9 r.   r   r   Fr   c                 *    t          j        |           S r=   r  r*   s    r,   r  zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>  s    HN1$5$5 r.   )r   r   r  r  r   r  r   )ri   r   r  warning_typer   s        r,   test_minimize_warnings_gh1953z0TestOptimizeSimple.test_minimize_warnings_gh1953  sW    x''eX5G-H*0(*:*:%5 	  B//\,.>??? 	H 	H99Aq6 H%+WH H@FH H H	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H  551v 	D!'	D 	D<B	D 	D 	D 	D 	Ds   A11A58A5N)+r   r   r   r  r  r  r  r  r  r   r  r  r  r  r"  r&  r)  r?  rT  rY  rj  r   rb  	fail_slowrc  rd  r   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r	  r   r.   r,   r  r    s~       	% 	% 	%* * *.
# 
# 
#' ' '- - -47 7 7	F 	F 	F/ / /.	# 	# 	## # #D D D4# # #8C C C"  ( ( (4$: $: $:LB B BB B B2 [1[ 566[ 899[X, , ,.>?@ @;Q ;Q	@ @ :9 76 ;Qz [X (L (L (L M M! !M M!4F F F [X (2 (2 (2 3 3
# #3 3
#@ [X (? (? (? @ @N N@ @N" " "(/ / /4
H 
H 
H0 0 0d [X (G (G (G H H
+1 +1H H
+1Z [X (G (G (G H H
? ?H H
?* [ 899[X'>??[/;;; ; <; @? :9;z< < <
 [X (8 9 9M M9 9M [X'L'L'LMMD D NMD D Dr.   r  r   )r  rc  r  rl  r]  c                     d }t          j        |ddg|           }|j        sJ t          |j        dgd           d S )Nc                 0    t          j        | dz            S r5  r6  r*   s    r,   rs   z$test_minimize_with_scalar.<locals>.f  r  r.      )r  r)  r:  r\   r   r   )r   r   r   r   r+   )r   rs   r   s      r,   test_minimize_with_scalarr    s[       
Ar;-
G
G
GC;CEC5t,,,,,,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                            d	d
dgdd
gd
d
gg          d             Zd ZdS )TestLBFGSBBoundsc                 "    d| _         d| _        d S )N))r&   NNN)r&   r   )r  rc   rh   s    r,   rj   zTestLBFGSBBounds.setup_method  s    /r.   r  c                 <    d|z  |d         |z  |d         |z  z   z  S )NrX   r   r&   r   r   s      r,   r   zTestLBFGSBBounds.fun  s&    Qw!A$'AaD!G+,,r.   c                     ||dz
  z  S r%   r   r   s      r,   r   zTestLBFGSBBounds.jac  s    1q5zr.   c                 Z    |                      ||          |                     ||          fS r=   r   r   r   s      r,   fjzTestLBFGSBBounds.fj  s%    xx1~~txx1~~--r.   c                     t          j        | j        ddg| j        | j                  \  }}}|d         dk    sJ |d                     t          || j        d           d S )Nr   r?  )r   r  r   taskr8   r   )r   r  r   r   r  r   rc   ri   r+   rs   r  s       r,   test_l_bfgs_b_boundsz%TestLBFGSBBounds.test_l_bfgs_b_bounds  ss    (Ar70404= = =1a }!!!1V9!!!4=t444444r.   c                     t          j        | j        ddgd| j                  \  }}}|d         dk    sJ |d                     t	          || j        d           d S )	Nr   r?  r  )r   r  r   r  r8   r   )r   r  r  r  r   rc   r  s       r,   r  z%TestLBFGSBBounds.test_l_bfgs_b_funjac  sn    (1b'04= = =1a}!!!1V9!!!4=t444444r.   c                     t          j        | j        ddgd| j        | j                  }|d         sJ |d                     t          |j        | j        d           d S )	Nr   r?  r  r   r   r  r   r  r8   r   )r   r   r   r   r  r   r+   rc   r`  s     r,   test_minimize_l_bfgs_b_boundsz.TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds  sl    1b'*$(HT[B B B9~--s9~---t}4888888r.   r  )r   r&   r  c                     t          j        t          d          5  t          j        | j        ddgd| j        |           d d d            d S # 1 swxY w Y   d S )Nz	.*bound.*r   r   r?  r  r  )r   r
   rM   r   r   r   r   )ri   r  s     r,   'test_minimize_l_bfgs_b_incorrect_boundsz8TestLBFGSBBounds.test_minimize_l_bfgs_b_incorrect_bounds  s     ]:[999 	; 	;dhB
"&(6; ; ; ;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   &AAAc                    g d}ddg}t          j        ||          D ]b\  }}t          j        | j        ddg|d|| j        dd i          }|d	         sJ |d
                     t          |j        | j        d           cd S )Nr  r  r   r   r?  r  finite_diff_rel_step)r   r   r   r  r   r   r  r8   r   )	r  r  r   r   r   r  r   r+   rc   )ri   r  argssr   r   r   s         r,    test_minimize_l_bfgs_b_bounds_FDz1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FD  s    
 ,++"*477 	= 	=IC#DHq"gD+5(+DK-CT,JL L LC y>113y>111CE4=t<<<<<	= 	=r.   Nr  )r   r   r   rj   r   r   r  r  r  r   r   rb  rd  r"  r&  r   r.   r,   r  r    s          - - - -   . . . .5 5 55 5 59 9 9 [X
7	
7	
7	(  
; ; 
;
= = = = =r.   r  c                   h   e Zd Zd Zd!dZd Zej                            d          d             Z	d Z
d Zd	 Zd
 Zd Zd Zej                            dg d          d             Zej                            dg d          d             Zej                            d          ej                            dg d          d                         Zd Zd Zej                            dddg          d             Zej                            d          ej                            de          ej                            dddg          ej                            dg d          d                                                 Zej                            dg d          d             Zd S )"TestOptimizeScalarc                     d| _         d S )Nr3   )rc   rh   s    r,   rj   zTestOptimizeScalar.setup_method  s    r.   r3   c                     ||z
  dz  dz
  S )zObjective functionr1   r   r   )ri   r+   rs  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            n# 1 swxY w Y   d}t          j        t          |
          5  t          j        | j        d           d d d            d S # 1 swxY w Y   d S )Nr8   r   r  r  brackTr   r   ir?     /\(f\(xb\) < f\(xa\)\) and \(f\(xb\) < f\(xc\)\)r   r?  r   r&   \(xa < xb\) and \(xb < xc\)r   r?  r&   )r   brentr   r   rc   r   r
   rM   )ri   r+   r  s      r,   
test_brentzTestOptimizeScalar.test_brent  s   N48$$4=t4444N4884444=t4444N48666!dm$7777N48=9994=t4444D]:W555 	7 	7N48:6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 1]:W555 	7 	7N48:6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s$   *DDD:E##E'*E'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           t          j        | j        d	          }t          || j                   g d
}|D ]]}t          j        | j        dd          }t          j        | j        |d          }|d         |d         }}t          ||z
  |           ^d}t          j        t          |          5  t          j        | j        d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        | j        d           d d d            d S # 1 swxY w Y   d S )Nr8   r   r,  r-  Tr/  r   r0  r  )r   r&   r   )rd   r   r1   r2  r   r3  r4  r5  )	r   goldenr   r   rc   r   r   r
   rM   )ri   r+   maxiter_test_casesrd   rQ   nfev0r   r  s           r,   test_goldenzTestOptimizeScalar.test_golden  sk   ODH%%4=t4444ODHH5554=t4444ODH$777!dm$7777ODHM:::4=t4444ODH!,,,4=)))&YY) 	0 	0G1$GGGB'tLLLAQ%14Ew////D]:W555 	8 	8ODHJ7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 1]:W555 	8 	8ODHJ7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s$   >F&&F*-F*G77G;>G;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           d S )Nr   r&   r  r   r   r8   )	r   	fminboundr   r   rc   r(   rH   rL   rM   r  s     r,   test_fminboundz!TestOptimizeScalar.test_fminbound;  s    txA..14((((txA..4=t4444tx1#!FF4=t4444j("4dh1EEEEEr.   c                 N   t          j        t          d          5  t          j        | j        t          j        d          d           d d d            n# 1 swxY w Y   t          j        | j        dt          j        d                    }t          || j
        d           d S )Nz.*must be finite scalars.*r   r&   r1   r&   r   r8   r   )r   r
   rM   r   r?  r   r(   r`   rH   r   rc   r  s     r,   test_fminbound_scalarz(TestOptimizeScalar.test_fminbound_scalarF  s    ]:-IJJJ 	> 	>tx&)9)91===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> txBHQKK884=t444444s   .AAAc                 8    d }t          j        |dd           d S )Nc                     | dz  S r5  r   r*   s    r,   r   z,TestOptimizeScalar.test_gh11207.<locals>.funN  r  r.   r   )r   r?  )ri   r   s     r,   test_gh11207zTestOptimizeScalar.test_gh11207M  s,    	 	 	31%%%%%r.   c                    t          j        | j                  j        }t	          || j        d           t          j        | j        d          }|j        sJ t          j        | j        dt          d                    }|j        rJ t          j        | j        dd	d
          j        }t	          || j        d           t          j        | j        dd	          j        }t	          || j        d           t          j        | j        dd	d
          j        }t	          || j        d           t          j        | j        dd	d
          j        }t	          || j        d           t          j        | j        dd	          j        }t	          || j        d           t          j        | j        dd	d
          j        }t	          || j        d           t          j        | j        dd	d          j        }t	          |dd           t          j        | j        dd	d          j        }t	          || j        d           t          j        | j        t          j	        dg          t          j	        dg          ft          j	        dg          fd          j        }t	          || j        d           t          t          t           j        | j        ddd	           t          t          t           j        | j        t          j        d          dfdd	           t          j        | j        dt          j	        d          fd          j        }t	          || j        d           d S )Nr8   r   Brentr   r[   r  r   r,  r3   )bracketr   r   )r   r   r0  r:  )r   r&   Bounded)r  r   r   r&   r  )r&   r   boundedr   r3   )r   r&   r  r   r   r1   r:  )r   minimize_scalarr   r+   r   rc   r   rK  r(   rH   rL   rM   r`   r  s     r,   test_minimize_scalarz'TestOptimizeScalar.test_minimize_scalarR  s   $TX..04=t4444$TXg>>>y$TXg-1!___> > >9$TXx*1'C C CCD 	
4=t4444$TXg*02 2 223 	
4=t4444$TX}*1'C C CCD 	
4=t4444$TXx*1(D D DDE 	
4=t4444$TXh*02 2 223 	
4=t4444$TX}*1(D D DDE 	
4=t4444$TXf6,57 7 778 	
14(((($TXf7,57 7 778 	
4=t4444$TXrx}}79x}}7F+-8SE??*=,57 7 7 89 	
 	4=t4444j(":DH#IG	E 	E 	E 	E 	j(":DH hqkk1-ig	O 	O 	O 	O $TXq"(1++6F,57 7 778 	
4=t444444r.   c                     	 	 dd}t          j        | j        d|t          d                    }t	          |j        | j        d	
           d S )Nr   r:   r)  c                 >   |d         |d         z   dz  } | |          }	d}
d}d}d}|rX|sV||k     rPd}|dz  }||z
  ||z   fD ]} | |g|R  }|
dz  }
||	k     r|}	|}d}| ||           |	|
|k    rd}n
|r|s||k     Pt          j        |	|||
|dk              S )Nr&   r   r  TFrB  rX  )r   rJ  r   rm  rD  rd   r  r   rE  rF  rG  rH  rI  rJ  rM  rN  s                   r,   rO  z?TestOptimizeScalar.test_minimize_scalar_custom.<locals>.custmin  s)   QZ'!*,3ECJJEHEHD 4 EGOO 
#h.0@A ( (EC----EMHu}} % %#''HUOOO%(f*<*<D  4 EGOO  *u508519O O O Or.   )r   r   rQ  rR  )rJ  r   r   r8   r   rS  )r   rN  r   rK  r   r+   rc   )ri   rO  r   s      r,   test_minimize_scalar_customz.TestOptimizeScalar.test_minimize_scalar_custom  st    AD*.	O 	O 	O 	O8 &tx.5/3T/B/B/BD D D 	t}4888888r.   c                 <    t          j        | j        d           d S )Nr3   r   r   rN  r   rh   s    r,   &test_minimize_scalar_coerce_args_paramz9TestOptimizeScalar.test_minimize_scalar_coerce_args_param  s      444444r.   r   )r6  rL  r:  c                 J    dD ]}t          j        | j        d|i            d S )N)r   r&   r1   r[   r   )r   rU  )ri   r   r   s      r,   	test_dispzTestOptimizeScalar.test_disp  s@     ! 	G 	GD$TX~FFFFF	G 	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 d S )NrL  r  r  r   r   r+   r   r  r   r   r   )r   rN  r   r  )ri   r   r  rB  s       r,   test_result_attributesz)TestOptimizeScalar.test_result_attributes  s    *0I*=*=(S"I&&2)$(LL6LVLLvs#####vy)))))vy)))))vu%%%%%vv&&&&&vu%%%%%%%r.   c           
      >   t           j                            d           dgfd}d}d}t          j        d          5  t	                      5 }|                    t          d           |                    t          d	           |                    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            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr5   r   c                     dxx         dz  cc<   d         dk    rt           j        S | dz  dt          j        |           z  z   S )Nr   r&   r   r1   r:   )r(   r  r>   r  s    r,   rt   z0TestOptimizeScalar.test_nan_values.<locals>.func  sG    !HHHMHHHQx!||v!tcBF1IIo--r.   r3  r  r   r  r  r  r  rL  r  rJ  r  r  r   F)r(   r4   r7   r   r	   r  r  r  r   rN  rK  r   r   )	ri   r   rt   rJ  r  r  r  r   r  s	           @r,   r  z"TestOptimizeScalar.test_nan_values  s    		t	. 	. 	. 	. 	. [*** 	- 	-,=,?,? 	-3JJ{$7888JJ~'ABBBJJ~'BCCCCE+1Y+>+>h''BF*4 E E E-3E<B373C3C3CE E E EC e,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s7   DBC:.D:C>	>DC>	DDDc                     d }t          j        |          }t          |j        dd           t          j        |dddi          }t          |j        d	           d S )
Nc                     | dz  S r5  r   r*   s    r,   rs   zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.f  r  r.   r   r   r   )r&   r)  r  r  )r  r   r&   )r   rN  r   r+   )ri   rs   r   s      r,   %test_minimize_scalar_defaults_gh10911z8TestOptimizeScalar.test_minimize_scalar_defaults_gh10911  sx    	 	 	 &q))qt,,,,&q07/?A A Aq!!!!!r.   c                    d}t          j        t          |          5  t          j        t
          j        dt
          j        f           d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        t
          j        t
          j        df           d d d            d S # 1 swxY w Y   d S )Nz+Optimization bounds must be finite scalars.r   r&   r  )	r   r
   rM   r   rN  r(   r>   r  r  r  s     r,   'test_minimize_non_finite_bounds_gh10911z:TestOptimizeScalar.test_minimize_non_finite_bounds_gh10911  sM    <]:S111 	A 	A$RVQK@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A]:S111 	A 	A$RVRVQK@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As#   -AAA=-B77B;>B;r6  r:  c                     d}t          j        t          |          5  t          j        t
          j        |d           d d d            d S # 1 swxY w Y   d S )Nz'Use of `bounds` is incompatible with...r   rB  r   r  )r   r
   rM   r   rN  r(   r>   )ri   r   r{  s      r,   2test_minimize_unbounded_method_with_bounds_gh10911zETestOptimizeScalar.test_minimize_unbounded_method_with_bounds_gh10911  s     8]:S111 	K 	K$RVF6JJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   "AAArk  r  r&   r8   fshape)r   r&   r&   r&   c                 Z   fd}d\  }}|dk    rt          ||f          nt          ||f          }|                    t          ||                     t          j        |fi |}|j        j        |j        j        cxk    r  ||j                  j        cxk    rk    sn J d S )Nc                 X    t          j        | dz                                          S Nr   )r(   rH   reshape)r+   re  s    r,   rs   zITestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196.<locals>.f  s#    8AqD>>))&111r.   )r   rE   rL  )rJ  r  )r   r  )rK  updater   rN  r+   shaper   )	ri   r   r  re  rs   rs  br  r   s	      `     r,   +test_minimize_scalar_dimensionality_gh16196z>TestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196  s    	2 	2 	2 	2 	2 1*0I*=*=$1v&&&&Aq6*** 	d&c222333&q33F33u{cgmGGGGqqxx~GGGGGGGGGGGGr.   )rL  r6  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            n# 1 swxY w Y   d|d<   t          j        |f||d| d S )Nc                     | dz
  dz  S r0   r   r*   s    r,   rs   zBTestOptimizeScalar.test_minimize_scalar_warnings_gh1953.<locals>.f  r  r.   rL  r  rJ  r  r   Tr[   r  r  r   r   Fr   )r   r  r   r  rN  )ri   r   rs   r  kwdr   s         r,   $test_minimize_scalar_warnings_gh1953z7TestOptimizeScalar.test_minimize_scalar_warnings_gh1953  s   	 	 	  I--hh92hsA..\(2:JKKK 	/ 	/$Q /vw / /'-/ / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/   M67MMfMMMMMs   AA"%A"NrI  )r   r   r   rj   r   r7  r   rb  rc  r=  r@  rC  rF  rO  rR  rV  rd  rX  rZ  r  r_  ra  rd  r   ro  rs  r   r.   r,   r(  r(    s                7 7 7* [ 5668 8 768>	F 	F 	F5 5 5& & &
:5 :5 :5x!9 !9 !9F5 5 5 [X'E'E'EFFG G GFG
 [X'E'E'EFF& & GF& [ 566[X'E'E'EFF- - GF 76-:" " "A A A [X':;;K K <;K [ 899[X'>??[UQI..[X'9'9'9::H H ;: /. @? :9H [X'E'E'EFFN N GFN N Nr.   r(  c                       e Zd Zej                            d          d             Zej                            dd          d             ZdS )TestBracketrk  c                    d }d}t          j        t          |          5  t          j        |dd           d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        |dt
          j                   d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        |d           d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        |d           d d d            n# 1 swxY w Y   d }d	}t          j        t          |          5  t          j        |d
dd           d d d            d S # 1 swxY w Y   d S )Nc                 *    d| k     | dk     z  r| dz  ndS Nr?  r&   r1   g      Y@r   r*   s    r,   rs   z3TestBracket.test_errors_and_status_false.<locals>.f/  "    !VA.:1a44U:r.   9The algorithm terminated without finding a valid bracket.r   r?  r&   r  r-  c                 Z    d| dz  z  d| dz  z  z   d| dz  z  z
  d| dz  z  z   d| z  z
  dz   S )	Nr  r   r      r[      r1   r&   r   r*   s    r,   rs   z3TestBracket.test_errors_and_status_false.<locals>.f<  sE    19q1a4x'"q!t)3b1a4i?!a%G!KKr.   z8No valid bracket was found before the iteration limit...r   rZ   r   r  )	r   r
   rl   r   rJ  r(   r  r6  r:  )ri   rs   r  s      r,   test_errors_and_status_falsez(TestBracket.test_errors_and_status_false,  s   	; 	; 	; N]<w777 	' 	'QA&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	']<w777 	, 	,QBF+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,]<w777 	- 	-N1G,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-]<w777 	. 	.OAW----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.	L 	L 	L M]<w777 	7 	7Qc26666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7sY   AAA*!BBB=C  C$'C$D))D-0D-E::E>E>r   )r6  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 d S )Nc                 *    d| k     | dk     z  r| dz  ndS rx  r   r*   s    r,   rs   z9TestBracket.test_minimize_scalar_success_false.<locals>.fF  ry  r.   rz  r  )rJ  r   r[   r   r)  )r   rN  r   r  r   r   r   )ri   r   rs   r  r   s        r,   "test_minimize_scalar_success_falsez.TestBracket.test_minimize_scalar_success_falseC  s    	; 	; 	; N&q'&III;#+%%%%x1}}}}w!||||w#~~~~~~r.   N)	r   r   r   r   rb  rc  r~  rd  r  r   r.   r,   ru  ru  *  sn        [ 8997 7 :97, [X':;;  <;  r.   ru  c                  ^    t          t          t          j        t          j        d           d S )Ng{Gzr9  )rL   rM   r   r6  r(   rC   r   r.   r,   test_brent_negative_tolerancer  S  s#    *hnbf$??????r.   c                   &    e Zd Zd Zd Zd Zd ZdS )TestNewtonCgc                 $   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           d S 	Nr   rX   r   r@  r   r}   r  r   r&   r  r   )r(   rH   r   r   r   r   r   r   r  r   r+   ri   rQ   r   s      r,   test_rosenbrockzTestNewtonCg.test_rosenbrockX  s    XtSk""$,$6%-%8$('2	4 4 4
 {''CK'''rx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           d S )Nr@  r8   )r   r}   r   r  r  r   r   )r(   rH   rP   r   r   
himmelblaurN   rO   r   r  r   r+   himmelblau_xoptr   himmelblau_minr  s      r,   test_himmelblauzTestNewtonCg.test_himmelblaub  s    Xm$$
 "$3%4'2$(* * * {''CK'''T::::d;;;;;;r.   c                    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	           d S )
Nr   rX   r  r   r@  r  r&   r  r   )
r(   rH   r   r   r   r   r   r  r   r+   r  s      r,   test_finite_differencez#TestNewtonCg.test_finite_differencen  s    XtSk""$,$6%.$('2	4 4 4
 {''CK'''rxA//d;;;;;;r.   c                 2   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           d S r  )r(   rH   r   r   r   r   r   r   r  r   r+   r  s      r,   test_hessian_update_strategyz)TestNewtonCg.test_hessian_update_strategyx  s    XtSk""$,$6%-]__$('2	4 4 4
 {''CK'''rxA//d;;;;;;r.   N)r   r   r   r  r  r  r  r   r.   r,   r  r  W  sP        < < <
< 
< 
<< < << < < < <r.   r  c                  B   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 ]<\  }}}}	 | ||||          \  }
}t          |
|d           t          ||	d           =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 ]<\  }}}}	 | ||||          \  }
}t          |
|d           t          ||	d           =d S )N)333333r?  r   r  )r   r&   ffffff@r[   r\   r   r   r   )r\   r1   r  r   rX   r   r   r   r  r   r\   r&   r   r   r?  r&   r\   r   r&   r   r   r  r\   r   r   r&   r  r[   )rX   r&   r   r   )rX   r   r?  r1   r3   )r  r   r?  r1   gffffff?g333333@)rX   r   r?  r   r8   r   g333333)r   ru  _line_for_searchr(   rH   r   r  )line_for_searchlower_boundupper_boundrQ   x1	all_testsr+   alphalminlmaxmimas               r,   test_line_for_searchr    s%   
 (9O (///00K(+++,,K 
---	 	 B	...	!	!B 
RXmmm$$dC0	RXmmm$$b!,	RXmmm$$dC0	RXmmm$$b!,	RXmmm$$b!,	RXnnn%%tS1	RXnnn%%tT2	RXmmm$$dC0	RXmmm$$b"-	RXmmm$$c3/	RXmmm$$b!,	RXmmm$$b"-	RXnnn%%tT2I  !* - -5$ E;DDBDt,,,,Dt,,,,, (RVGR"&"566K(BFAsBF344K 
RXmmm$$rvgrv6	RXmmm$$b!,	RXmmm$$rvgs3	RXmmm$$b"&1	RXmmm$$b!,	RXnnn%%tRV4	RXmmm$$rvgrv6	RXmmm$$b"-	RXmmm$$rvgs3	RXmmm$$b"&1	RXmmm$$b"-	RXnnn%%tRV4I !* - -5$ E;D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           d S )Nc                 ^    t          j        | t          j        g d          z
  dz            S N)r  r  r3   皙ٿr1   r(   r?   rH   r*   s    r,   rt   z$test_linesearch_powell.<locals>.func  -    vq28$:$:$:;;;ABBBr.   r  r   r  r?  r  r1   r  r3   r  r  r  r   r&   r         ?r\   r   r&   r&   皙?r  r   r?  r&   r   )fvalr  r8   r   r  r  r  r  )r   ru  _linesearch_powellr(   rH   r  r   linesearch_powellrt   r  r  r  r  r  xilrs   rx   r6   s               r,   test_linesearch_powellr    s6    *=C C C	---	 	 B488D(RVG9q=))K(BF8a<((K 
---	 	 "%	---	 	 !$	---	 	 #&	---	 	 #&	...	!	!4(	---	 	 #&	...	!	!4(I  6 6A++D"b154A A A1i44B<<d33331r6----	1r65555++D"bd8C8C157 7 71i 	44B<<d33331r6----	1r6555556 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 ]c\  }} | |||d|||          \  }	}
}t          |	 |||z            d           t          |
||z  d           t          |||z  d           dt          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 ]c\  }} | |||d|||          \  }	}
}t          |	 |||z            d           t          |
||z  d           t          |||z  d           dt          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 ]i\  }} | |||d|||          \  }	}
}t          |	 ||||z  z             d           t          |
|||z  z   d           t          |||z  d           jt          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 ]c\  }} | |||d|||          \  }	}
}t          |	 |||z            d           t          |
||z  d           t          |||z  d           dt          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 ]i\  }} | |||d|||          \  }	}
}t          |	 ||||z  z             d           t          |
|||z  z   d           t          |||z  d           jd S )!Nc                 ^    t          j        | t          j        g d          z
  dz            S r  r  r*   s    r,   rt   z,test_linesearch_powell_bounded.<locals>.func  r  r.   r  g       r   r  r  r?  r  r1   r  r3   r  r  r  r  r  r  r  r  r   r  r8   r   g333333ӿr[   g?r   rY   g333333ÿ)r  r   r   r1   r   g333333)r   ru  r  r(   rH   r   r  r  s               r,   test_linesearch_powell_boundedr    s    *=C C C	---	 	 B488D (C57##K(B46""K 
---	 	 "%	---	 	 !$	---	 	 #&	---	 	 #&	...	!	!4(	---	 	 #&	...	!	!4(I  6 6A++D"bd8C8C157 7 71i 	44B<<d33331r6----	1r655555 (C57bT>**K(C57bT>**K 
---	 	 #&	---	 	 #&	---	 	 #&	---	 	 #&	...	!	!2&	---	 	 #&	...	!	!4(I  6 6A++D"bd8C8C157 7 71i 	44B<<d33331r6----	1r655555 
...	!	!B488D 
---	 	 "%	---	 	 #&	---	 	 #&	---	 	 $'	I  6 6A++D"bd8C8C157 7 71i 	44QV,,488882B;T2222	1r655555 
---	 	 B488D (C"&26'2677K(BFC455K 
---	 	 #&	---	 	 #&	---	 	 #&	---	 	 #&	...	!	!2&	---	 	 #&	...	!	!4(I  6 6A++D"bd8C8C157 7 71i 	44B<<d33331r6----	1r655555 
...	!	!B488D 
---	 	 "%	---	 	 #&	---	 	 #&	---	 	 $'	I  6 6A++D"bd8C8C157 7 71i 	44QV,,488882B;T2222	1r6555556 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           d S )Nr   g333333?r  c                     | \  }}| j         k                                    r| j        k                                    sJ |dz  |dz  z   S r5  )lbrG   ub)r+   rs  rn  r  s      r,   r   ztest_powell_limits.<locals>.funi	  sS    1VY##%%@1	>*>*>*@*@@@@AvQr.   r  r  r&   T)r  r  keep_feasiblec                 F    | dk    r| dk    sJ t          j        |           S r  r'   r*   s    r,   rt   z test_powell_limits.<locals>.funcs	  s%    Avv!q&&&&vayyr.   rZ   rb  )r   rQ   r   r  )r   r   r   )r   rt   r  s     @r,   test_powell_limitsr  e	  s    _aVc2Y//F    
 csBiHHHH _!dWEEEF   $C5&IIIIIIr.   c                       e Zd Zd ZdS )	TestRosenc                     t          j        g d          }t          j        g d          }t          j        ||          }t          j        t          j        |          |          }t          ||           d S )N)r[   r   r   )r1   r1   r1   )r(   rH   r   rosen_hess_prodrm   r   r   )ri   r+   rx   hpdothps        r,   	test_hesszTestRosen.test_hess|	  sl    HYYYHYYY%a++x*1--q11Rr.   N)r   r   r   r  r   r.   r,   r  r  z	  s#                 r.   r  c                 N    | \  }}||z  |z   dz
  }|||z  z   dz
  }||z  ||z  z   S )zx
    R^2 -> R^1 test function for optimization. The function has four local
    minima where himmelblau(xopt) == 0.
    r}  r   r   )rx   r+   r2  rs  rn  s        r,   r  r  	  sA    
 DAq	!a"A	AaC!AQ319r.   c                     | \  }}t          j        d|dz  z  d|z  |z  z   d|z  z
  d|dz  z  z   dz
  d|dz  z  d|z  |z  z   d|dz  z  z   d|z  z
  dz
  g          S )Nr   r[   *   r1         rN  r_  rx   r+   r2  s      r,   rN   rN   	  s    DAq8Qq!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 )Nr|  r1   r   r  r  r_  r  s      r,   rO   rO   	  su    DAq8bAg!mb(!A#!)4cAaCi1r!Q$w!346 7 7 7r.   gHzGѿgr[   r1   r\   c                      d } d }d }d| dd|dd|df}d }t          j        |g dd|	          }t          |j        g d
d           d S )Nc                 t    t          j        dd| d         z  z
  d| d         z  z
  d| d         z  z
  g          S )N   rE   r   r  r&   r  r1   r_  r*   s    r,   rt   z0test_minimize_multiple_constraints.<locals>.func	  s;    xcAaDj31:5qtCDEEEr.   c                 8    t          j        | d         g          S r%   r_  r*   s    r,   func1z1test_minimize_multiple_constraints.<locals>.func1	      x1r.   c                 8    t          j        | d         g          S r5  r_  r*   s    r,   r  z1test_minimize_multiple_constraints.<locals>.func2	  r  r.   r  r  c                 <    d| d         | d         z   | d         z   z  S )Nr?  r   r&   r1   r   r*   s    r,   rs   z-test_minimize_multiple_constraints.<locals>.f	  s"    QqTAaD[1Q4'((r.   r  r  r  )}   r   r   r  r   r<  )rt   r  r  r  rs   r   s         r,   "test_minimize_multiple_constraintsr  	  s    F F F           D))E**E**,D) ) ) 
Ayyyd
K
K
KCCE;;;U333333r.   c                       e Zd Zd Zd ZdS )TestOptimizeResultAttributesc                     ddg| _         t          j        | _        t          j        | _        t          j        | _        t          j        | _	        ddg| _
        d S )Nr   )r\   r  )rQ   r   r   rt   r   r   r   r}   r  r   r  rh   s    r,   rj   z)TestOptimizeResultAttributes.setup_method	  sD    a&N	%'	-
 ),r.   c           
         g d}ddgi}t           D ]}t                      5 }|                    t          d           t	          j        | j        | j        || j        | j	        | j
                  }d d d            n# 1 swxY w Y   |D ]6}||v r|||         v rt          ||          sJ |t          |          v sJ 7t          |j        t                    sJ d S )N)r   r   r+   r   r   r   r  rd  r   z7Method .+ does not use (gradient|Hessian.*) information)r   r   r}   r   )r   r	   r  r  r   r   rt   rQ   r   r}   r   r  dirry  r  str)ri   
attributesskipr   r  r   	attributes          r,   test_attributes_presentz4TestOptimizeResultAttributes.test_attributes_present	  s\   ! ! !
5'"& 	0 	0F"$$ :

>+- - - '	476,0H49.2j: : :	: : : : : : : : : : : : : : : ( - -	T>>i4<&?&?sI..... CHH,,,,, ck3//////!	0 	0s   AA<<B 	B 	N)r   r   r   rj   r  r   r.   r,   r  r  	  s2        - - -0 0 0 0 0r.   r  c                 ~    | \  }}|\  }}}}}}	}
}}}}}}||dz  z  ||z  |z  z   ||dz  z  z   ||z  z   ||z  z   |	z   S r5  r   r]  r   r+   r2  rs  rn  r  r  r   rs   r8  r  rz  r.  r<  r  r  s                    r,   f1r  	  sj    DAq06-Aq!Q1aAq!Q1Hq1uqy 1q!t8+ac1AaC7!;<r.   c                     | \  }}|\  }}}}}}	}
}}}}}}|
 t          j        ||z
  dz  ||z
  dz  z    |z            z  S r5  r'   r  s                    r,   f2r  	  _    DAq06-Aq!Q1aAq!QBrv1qAaC!8+,u45556r.   c                     | \  }}|\  }}}}}}	}
}}}}}}| t          j        ||z
  dz  ||z
  dz  z    |z            z  S r5  r'   r  s                    r,   f3r  	  r  r.   c                 T    t          | g|R  t          | g|R  z   t          | g|R  z   S r=   )r  r  r  )r]  r   s     r,   
brute_funcr  	  s6    a>&>>>BqN6NNN*R^F^^^;;r.   c                   x    e Zd Zd Zd Zd Zd Zej        	                    d          d             Z
d Zd Zd	S )
	TestBrutec                     d| _         t          ddd          t          ddd          f| _        t          j        ddg          | _        d S )N)r1   r[   r   r   r   r   ,   r?  r1   r  r&   r  rZ   r  r         ?g_}gi?)r   slicerrangesr(   rH   rc   rh   s    r,   rj   zTestBrute.setup_method	  sG    Db!T**E"a,>,>?+z!:;;r.   c                     t          |g|R  S r=   )r  )ri   r]  r   s      r,   r  zTestBrute.brute_func	  s    !%f%%%%r.   c                    t          j        t          | j        | j        dt           j                  }t          |d         | j        d           t          |d         t          | j        g| j        R  d           t          j        t          | j        | j        dt           j                  }t          |d         | j        d           t          |d         t          | j        g| j        R  d           t          j        | j        | j        | j        dt           j                  }t          |d         | j        d           d S )NTr   r   finishr   r   r   r&   )	r   bruter  r  r   r"  r   rc   r   )ri   resbrutes     r,   
test_brutezTestBrute.test_brute	  sK   >*dl.28=J J JT]>>>>Z%L%L%L%L!	# 	# 	# 	# >*dl.2)1):< < < 	T]>>>>Z%L%L%L%L!	# 	# 	# 	#
 >$/4<'+{)1):< < < 	T]>>>>>>r.   c                 >    d }t          j        |dgdd            d S )Nc                 f    t          | j                  dk    sJ | j        d         dk    sJ | dz  S )Nr&   r   r1   )r  rm  r*   s    r,   rs   zTestBrute.test_1D.<locals>.f
  s7    qw<<1$$$$71:????6Mr.   r  r[   )Nsr  )r   r  )ri   rs   s     r,   test_1DzTestBrute.test_1D
  s4    	 	 	
 	q7)$777777r.   r   c                    t          j        t          | j        | j        dd           }t          j        t          | j        | j        dd d          }t          |d         |d                    t          |d         |d                    d S )NTr  r1   )r   r   r  workersr?  r   )r   r  r  r  r   r   )ri   r  	resbrute1s      r,   test_workerszTestBrute.test_workers
  s     >*dl.24A A A N:t|$+/3D!M M M	 		"x|444	!hqk22222r.   c                     t           j                            d          fd}d}t          j        t
          |          5  t          j        || j        | j	        d           d d d            d S # 1 swxY w Y   d S )Nr5   c                 4                         d          dz  S rh  ri  )r]  r   rj  s     r,   rt   z,TestBrute.test_runtime_warning.<locals>.func*
  s    ::a==4''r.   zFfinal optimization did not succeed.*|Maximum number of function eval.*r   T)r   r   )
r(   r4   rn  r   r  r  r   r  r  r   )ri   capsysrt   r{  rj  s       @r,   r  zTestBrute.test_runtime_warning'
  s    i##D))	( 	( 	( 	( 	( W\.444 	L 	LN4DKdKKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls   #A33A7:A7c                 z    d }t          j        |t          ddd          fd          }t          |d           d S )Nc                     | |d         z  S rF  r   )r+   r   s     r,   rs   z+TestBrute.test_coerce_args_param.<locals>.f3
  s    Q<r.   r  r   r  r1   rT  r   )r   r  r  r   )ri   rs   r  s      r,   test_coerce_args_paramz TestBrute.test_coerce_args_param1
  sN    	  	  	  >!eB3&7&7%9BBB!$$$$$r.   N)r   r   r   rj   r  r  r  r   rb  r
  r  r  r  r   r.   r,   r  r  	  s        < < <
& & &? ? ?.8 8 8 [1	3 	3 	3L L L% % % % %r.   r  r   c                    	 dd l } dd l		fd	fddfd}fd}| j                                        5 }g }|                    |                    |                     |                    |                    |                     |D ]}|                                 	 d d d            d S # 1 swxY w Y   d S )Nr   c                 D                         d           | d         dz  S )Nr:   r   r1   sleepr+   times    r,   
objective1z*test_cobyla_threadsafe.<locals>.objective1B
  s    

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

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

concurrentr  r  pooltasksr  r  r  r  r  s
         @@@@r,   test_cobyla_threadsafer&  :
  sn   
 KKK         J9 9 9 9 9 9
9 9 9 9 9 9
 
		.	.	0	0 DT[[,,---T[[,,--- 	 	AHHJJJJ		                 s   A,B88B<?B<c                   l    e Zd Zd Zd Zej                            d          d             Zd Z	d Z
dS )TestIterationLimitsc                     d| _         d S rF  )rG  rh   s    r,   rj   z TestIterationLimits.setup_methodb
  s    r.   c                     | xj         dz  c_         t          j        |d         dz  |d         dz  z             t          j        |d         |d                   }}t          j        |dz  |z             |dz  z   S )Nr&   r   r1   r  rZ   )rG  r(   r  arctan2r>   )ri   r%  rR   r  s       r,   	slow_funczTestIterationLimits.slow_funce
  sn    wqtQwqtQw''AaD!A$)?)?1vadQh#%%r.   r   c                 2    |                      dd           d S )Nrl     check_limitsrh   s    r,   test_neldermead_limitz)TestIterationLimits.test_neldermead_limitj
  s    ------r.   c                 2    |                      dd           d S )Nrb  r]   r/  rh   s    r,   test_powell_limitz%TestIterationLimits.test_powell_limitn
  s    (D)))))r.   c           
         ddgddgddgfD ]}dD ]`}d| _         t          j        | j        ||d|i          }| j         |d         k    sJ |d	         r|d         |k     sJ R|d         |k    sJ adD ]F}t          j        | j        ||d
|i          }|d	         r|d         |k    sJ 8|d         |k    sJ Gddgddgdt          j        gfD ]|\  }}d| _         t          j        | j        ||||d          }| j         |d         k    sJ |d	         r|d         |k     r|d         |k    sJ b|d         |k    s|d         |k    sJ }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     sJ [|d         |dz  k    sJ m|d         |dz  k    s|d         |dz  k    sJ d S )Nr:   r&   r1   )r*  i    r   rm  r   r   r   rd   r   r*  r5  )rd   rm  )rG  r   r   r,  r(   r  )ri   r   default_itersstart_vmfevr   mits          r,   r0  z TestIterationLimits.check_limitsq
  s   c
QFQF3 ,	> ,	>G' 	/ 	/ !'/51940@B B B }F3333y> /v;-----v;$.....& - -'/51:C0@B B B y> -u:,,,,,u:,,,,,!2httRVnE 
D 
D	c !'/5<?;?1A 1AB B B }F3333y> Dv;--#e*2C2C2C2C2Cv;$..#e*2C2C2C2C!vtntRVn= > >	c !'/5<?;?1A 1AB B B }F3333y> >|"6{]1_<<<<<"5z]1_<<<<<K=?::"5z]1_<<<<>=,	> ,	>r.   N)r   r   r   rj   r,  r   rb  r
  r1  r3  r0  r   r.   r,   r(  r(  ^
  s|          & & &
 [1. . .* * *-> -> -> -> ->r.   r(  c                  0   d } d }d }g d}|D ]>}t          j        | t          j        dg          |          }|j        j        dk    sJ ?g d}|D ]@}t          j        | t          j        dg          |||	          }|j        j        dk    sJ Ad S )
Nc                     | | z  S r=   r   r*   s    r,   r   z2test_result_x_shape_when_len_x_is_one.<locals>.fun
  s    1ur.   c                     d| z  S Nr  r   r*   s    r,   r   z2test_result_x_shape_when_len_x_is_one.<locals>.jac
  s    Avr.   c                 .    t          j        dgg          S r=  r_  r*   s    r,   r}   z3test_result_x_shape_when_len_x_is_one.<locals>.hess
  s    x"r.   )	rl  r  r   r   r  r  r  COBYQAr  r:   r   rf  )r  r  r  r  r  r@  r  )r   r   r(   rH   r+   rm  )r   r   r}   r  r   r   s         r,   %test_result_x_shape_when_len_x_is_oner@  
  s             , , ,G # #RXse__VDDDu{d""""", , ,G # #RXse__V%)+ + +u{d"""""# #r.   c                       e Zd Zd Zd ZdS )FunctionWithGradientc                     d| _         d S rF  )number_of_callsrh   s    r,   r  zFunctionWithGradient.__init__
  s     r.   c                 Z    | xj         dz  c_         t          j        |dz            d|z  fS r0   )rD  r(   r?   r  s     r,   r  zFunctionWithGradient.__call__
  s1    !vad||QU""r.   Nr  r   r.   r,   rB  rB  
  s2        ! ! !# # # # #r.   rB  c                      t                      S r=   )rB  r   r.   r,   function_with_gradientrG  
  s    !!!r.   c                 x   t          |           }t          j        ddg          }t           ||          d           | j        dk    sJ t          |                    |          d|z             | j        dk    s
J d            t           |d|z            dd	           | j        dk    s
J d            d S )
NrX   r  r  r&   r1   zHfunction is not recomputed if gradient is requested after function valueg      4@(different input triggers new computationr  )r   r(   rH   r   rD  
derivativerG  memoized_functionrQ   s      r,   )test_memoize_jac_function_before_gradientrM  
  s    "#9::	3*		B%%b))3///!1Q6666%0044a"f===!1Q666	8 766 !b&!!4:< < < < "1Q6662 76666r.   c                    t          |           }t          j        ddg          }t          |                    |          d|z             | j        dk    sJ t           ||          d           | j        dk    s
J d            t          |                    d|z            d|z  d	           | j        dk    s
J d            d S )
NrX   r  r1   r&   r  zHfunction is not recomputed if function value is requested after gradientr   rI  r  )r   r(   rH   r   rJ  rD  rK  s      r,   )test_memoize_jac_gradient_before_functionrO  
  s    "#9::	3*		B%0044a"f===!1Q6666%%b))3///!1Q666	8 766 $$QV,,a"f:< < < < "1Q6662 76666r.   c           	      \   t          |           }|j        }t          j                    }t	          j        ddg          }t          ||d||dd          }| j        dk    sJ |                    |dz              | j        dk    sJ |                    |dz              | j        d	k    sJ dS )
z Tests that using MemoizedJac in combination with ScalarFunction
        and BFGS does not lead to repeated function evaluations.
        Tests changes made in response to GH11868.
    rX   rZ   r   Nr&   r:   r1   rE   r[   )	r   rJ  r   r   r(   rH   r   rD  r   )rG  rL  r   r}   rQ   scalar_functions         r,   test_memoize_jac_with_bfgsrR  
  s    
 ##9::

&C=??D	3*		B$2r3dD: :O!1Q6666S!!!!1Q6666S!!!!1Q666666r.   c                      t                      5  t          j        d t          j         t          j        d           d d d            d S # 1 swxY w Y   d S )Nc                 2    t          j        | dz  g          S r5  r_  r*   s    r,   r  ztest_gh12696.<locals>.<lambda>  s    bh1v&& r.   Fr   )r   r   r?  r(   r  r   r.   r,   test_gh12696rU    s    			 C C&&E	C 	C 	C 	CC C C C C C C C C C C C C C C C C Cs   /AAAc                     t           j                            d           t           j                            d          } t          j        g d          t          j        g d          }|k    dfd	fdfdfd	}fd
}fd}fd}fd}t          |t           j         d          }t          |t           j         d|          }t          |t           j         d          }	t          |t           j         d|          }
d}dddfdddf}d t          f}dg g f||f|
|
f|g|gf|	g|
gf||	g||
gf||
g||
gf||
g||
gff	}d |f}||||||| d	}|S )Nr   r   )r   r1   r?  r  )r[   r1   r1   r  Tc                 f    |r| j         dk    sJ |rt          |                              d S d S rj  )rC  r   )r+   
check_sizecheck_valuesi_ebr  s      r,   check_xz(setup_test_equal_bounds.<locals>.check_x  sJ     	6Q;;;; 	/AdGRX.....	/ 	/r.   c                 B     |            t          j        |           S r=   r  r+   r[  s    r,   rt   z%setup_test_equal_bounds.<locals>.func  s     


~a   r.   c                 B     |            t          j        |           S r=   )r   r   r]  s    r,   ry   z%setup_test_equal_bounds.<locals>.grad  s!    


!!$$$r.   c                      |            d S r=   r   )r+   r   r[  s     r,   r  z)setup_test_equal_bounds.<locals>.callback"  s    




r.   c                 8     | d           | dd         dz
  S )NFrY  r   r&   r   r]  s    r,   constraint1z,setup_test_equal_bounds.<locals>.constraint1%  s*    &&&&1vzr.   c                 T     | d           t          j        |           }d|d<   |S )NFra  r&   r   r(   
zeros_liker+   dcr[  s     r,   	jacobian1z*setup_test_equal_bounds.<locals>.jacobian1)  5    &&&&]11	r.   c                 8     | d           | dd         dz
  S )NFra  r1   r[   rZ   r   r]  s    r,   constraint2z,setup_test_equal_bounds.<locals>.constraint2/  s*    &&&&1v|r.   c                 T     | d           t          j        |           }d|d<   |S )NFra  r&   r1   rd  rf  s     r,   	jacobian2z*setup_test_equal_bounds.<locals>.jacobian23  ri  r.   )r  r  r  Fr  c                 0     |            |           fS r=   r   )r+   rt   ry   s    r,   r  z)setup_test_equal_bounds.<locals>.<lambda>E  s    Qa1 r.   c                 <    t          t          | |                    S r=   )listzipr  r  s     r,   r  z)setup_test_equal_bounds.<locals>.<lambda>I  s    $s2r{{"3"3 r.   r  )	r  kwdsbound_typesrV  	callbacksr  r  rQ   rZ  )TT)r(   r4   r7   r  rH   r   r  r   )rQ   r  r  rb  rh  rk  rm  c1ac1bc2ac2br  rs  rt  rV  ru  datar[  rt   ry   rZ  r  s                    @@@@@r,   setup_test_equal_boundsr{    sx   INN1			B	"""	#	#B	///	"	"B"HD/ / / / / / /! ! ! ! !% % % % %                     kBF7A
6
6C
kBF7Ay
A
AC
kBF7A
6
6C
kBF7Ay
A
AC +G ''&&11111 D 43K  "b:SzEC5>SEC5>#Jc
+#Jc
+#Jc
+-K x I[&YBb$8 8D Kr.   z0Failures due to floating point issues, not logicr  rs  
bound_typert  rV  r  ru  c           	      b   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           |	|
k    } |||          }|                    || ||	|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&                    spd }t          j        ||ddg         | |ddd                   }t          |j        |j                   t          |j        ddg         |j        d           dS dS dS dS )z
    Tests that minimizers still work if (bounds.lb == bounds.ub).any()
    gh12502 - Divide by zero in Jacobian numerical differentiation when
    equality bounds constraints are used
    aarch64r  r   FNzTolerance violation on aarchr  r  rQ   rZ  r  z)Only SLSQP supports nonlinear constraints)rQ   r   r  rV  r  )r   r   r  rV  gTqs*>r   gMb@?r   r   r8   c                     t          j        t           j        dt           j        dg          }| |ddg<   t          j        |          S )Nr1   r?  r   )r(   rH   r  r   r   )r+   new_xs     r,   r   ztest_equal_bounds.<locals>.fun  s;    Hbfa455EE1a&M>%(((r.   r1   rc  g>r   )platformmachiner   r  eb_datarl  r   r   r   r   r   r   r   r+   r(   r  r   rm  ry  r   )r   rs  r|  rV  r  r  r  rQ   rZ  test_constraintsreference_constraints	fd_neededr  r   expectedr   fd_ress                    r,   test_equal_boundsr  d  s    	i''FeOOUu$$)=2333T]GDMBt}gfoB.9++ A' 1 1?@@@ "%::IZBFKKrVv 0hH H I I I


#
#d
#
#C F%-%7-BD D DH
 ;CGX\7777CE8:D1111 $DK5((VT7=q    CGDM8<#5DAAAAK <+ <z&&/I/I <	) 	) 	)
 "3#%q!f:*0*01+7 7 7 	,,, 	q!fvxd;;;;;;%< < < < < <r.   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                     |                                 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                            |          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                            |          sJ d S d S )Nr&   c                 F    t           j                            |           |z   S r=   )r(   linalgnorm)r+   p1s     r,   rs   z test_all_bounds_equal.<locals>.f  s    y~~a  2%%r.   rg  )r1   r1   )rX   r;  r:  rX   r  z/All independent variables were fixed by bounds.)r1   rM  r1   r  c                 *    t          j        |           S r=   r6  r*   s    r,   conz"test_all_bounds_equal.<locals>.con  s    6!99r.   r\   )r  r   rV  Fz3All independent variables were fixed by bounds, butr   Tz8All independent variables were fixed by bounds at valuesrf  )r   r   r   r   r   r   r  upperr   r(   r  r  )	r   rs   r  rQ   r   r   r  nlcr  s	            r,   test_all_bounds_equalr    sI   & & & & fF	B

Ar&
@
@
@C;CGQQSz]]+++8q====;KKKKKD

Ar&d
K
K
KC;CGQQSz1--...||~~  	 	 	!#w44r&cU
 
 
 {e####C:///x1}}}}G{%%g.....!#w22r&cU
 
 
 {d""""C:///x1}}}}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 d S )Nc                 T    | d         dz  | d         dz  z   | d         | d         z  z   S )Nr   r[   r&   r1   r   r*   s    r,   rs   ztest_eb_constraints.<locals>.f  s.    tQw1q 1Q4!9,,r.   c                 N    | d         | d         z   | d         z   | d         z   dz
  S )Nr   r&   r1   r[   (   r   r*   s    r,   cfunz!test_eb_constraints.<locals>.cfun  s+    tad{QqT!AaD(2--r.   r  r  )r   r  r   )r   r   r&   )r&   r1   r[   r   r  )rQ   r   r  rV  r   r   rr  )rs   r  rV  r  s       r,   test_eb_constraintsr    s    - - -. . . #4001KY]FF1I	<<    q>% D((((((r.   c                  *   t           t          t          t          t          t
          d} |                                 D ]\  }}|D ]}t          ||           dddd}|                                D ]!\  }}t          t          t          ||           "d S )N)r   rN  rootroot_scalarlinprogquadratic_assignmentekkir   )r   maximizemaximize_scalar)
r   r   r   r   r   r   itemsr   rL   rM   )solver_methodssolverr  r   unknown_solver_methods        r,   test_show_optionsr    s    $2*" < N *//11 ) ) 	) 	)F((((	)
 ! 
 05577 @ @j,????@ @r.   c                      t          j        ddgddg          } t          j        t           j        t	          j        ddg          d|            d S )Nr  r  rr  r   r  r  )r   r   r   r   r(   rH   r  s    r,   test_bounds_with_listr    s[    _Rc3Z888F28QF++HV     r.   c            	      2   d } d }d }g d}g d}t          j        d          dz  }t          D ]f}d }d }||v r|}||v r|}t          j        | ||||          }	t          |	j        t          j        t          j        |                    d	
           gd S )Nc                     t          j        t          j        |                     }| |z  } | | z  } t          j        |           S r=   )r(   rK   rC  r?   r  s     r,   fquadz/test_x_overwritten_user_function.<locals>.fquad  s9    Ibgajj!!	Q	Qvayyr.   c                 l    t          j        t          j        |                     }| dz  } | d|z  z  } | S r5  )r(   rK   rC  r  s     r,   	fquad_jacz3test_x_overwritten_user_function.<locals>.fquad_jac  s4    Ibgajj!!	Q	QU
r.   c                 T    t          j        t          j        |                     dz  S r=  )r(   r   rC  r*   s    r,   
fquad_hessz4test_x_overwritten_user_function.<locals>.fquad_hess  s    vbgajj!!C''r.   )rI  r  r  r  r  r  )r  r  r  r  r  r   r3   r  g-C6*?r   )	r(   r  r   r   r   r   r+   rK   rC  )
r  r  r  meth_jac	meth_hessrQ   methr   r}   r   s
             r,    test_x_overwritten_user_functionr    s        ( ( (  H  I 
c	B  B B8C9Dr$CdKKKry55DAAAAAB Br.   c                       e Zd Zd ZdS )TestGlobalOptimizationc                    d }t          j        |d          t          j        |dg          t          j        |dg          t          j        |dg          t          j        |dg          g}|D ]}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
          sJ d S )Nc                     | dz  S r5  r   r*   s    r,   rt   zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.func6  s    6Mr.   r&   )rQ   )r  r   r+   r   r  r   r   r   )	r   basinhoppingdifferential_evolutionshgodual_annealingdirectry  r   r  )ri   rt   rz  rB  s       r,   test_optimize_result_attributesz6TestGlobalOptimization.test_optimize_result_attributes5  s.   	 	 	 (!44424'CC=y11*4';;?4'33	  	* 	*Ffh&=>>>>>63'''''69-----69-----65)))))66*****65))))))	* 	*r.   N)r   r   r   r  r   r.   r,   r  r  3  s#        * * * * *r.   r  c                     t          j        t          t                    } t	          | t          t                    d           t          j        t          t
                    }t	          |t          t                    d           d S )Nr  r   )r   approx_fprimerP   r  r   rN   rO   )r8  r  s     r,   test_approx_fprimer  K  sh     	}j99AA}55DAAAA}o>>AA}55DAAAAAAr.   c                  p   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                   d S )Nc                 6    | d         dz  | d         dz
  dz  z   S r  r   r*   s    r,   rs   ztest_gh12594.<locals>.fZ  s!    tQw!A$(Q&&r.   r  r   rr  r   r  r  )r   r   r   r(   rH   r   r   r+   )rs   r  r   r   s       r,   test_gh12594r  U  s    
' ' ' Szr2h///F

A&&
I
I
ICrxc
++"b0B0BCCCF

A&&
I
I
ICCGSW%%%CE35!!!!!r.   r@  r  sparse_typec                    fd}ddg}t          j        t          || t          |          }t          j        t          || t          t                    }t          |j        |j                   t          |j        |j                   |j        |j        k    sJ |j	        |j	        k    sJ |j
        |j
        k    sJ d S )Nc                 4     t          |                     S r=   )r   )r+   r  s    r,   sparse_rosen_hessz.test_sparse_hessian.<locals>.sparse_rosen_hesso  s    {:a==)))r.   r  r  )r   r   r   r   r   r   r   r+   r   r   nhev)r   r  r  rQ   
res_sparse	res_denses    `    r,   test_sparse_hessianr  f  s    * * * * * bB"5"V'07HJ J JJ!%F&/jB B BI IM:>222IK...>Z_,,,,>Z_,,,,>Z_,,,,,,r.   )vr   r  r  numpyr(   numpy.testingr   r   r   r   r   r   r	   r   r
   rL   scipyr   scipy.optimize._minimizer   r   r   r   r   scipy.optimize._linprogr   scipy.optimize._rootr   scipy.optimize._root_scalarr   scipy.optimize._qapr   (scipy.optimize._differentiable_functionsr   r   scipy.optimize._optimizer   r   r   scipy.optimizer   r   r   scipy.sparser   r   r   r    r!   r"   rS   rU   r   rp  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  rb  rd  r  r  r(  ru  r  r  r  r  r  r  r  r  rN   rO   rP   r  r  r  r  r  r  r  r  r  r
  r&  r(  r@  rB  fixturerG  rM  rO  rR  rU  r{  r  xfail_on_32bitr  r  r  r  r  r  r  r  r  r  r   r.   r,   <module>r     sy	  
 
         A A A A A A A A A A A A A A A A A A  * * * * * *       @ @ @ @ @ @ @ @? ? ? ? ? ? ? ? ? ? 4 3 3 3 3 3 - - - - - - ; ; ; ; ; ; < < < < < < O O O O O O O O M M M M M M M M M M 7 7 7 7 7 7 7 7 7 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 02 2 2j-' -' -' -' -' -' -' -'`R= R= R= R= R= R= R= R=j- - -"  0H H H  8 8 8D D D$ $ $     >I: I: I:X'F 'F 'FT    8   
     :   
     :   
    "<   
LD LD LD LD LD LD LD LD^ ::: - -	 -:= := := := := := := :=ziN iN iN iN iN iN iN iNX	& & & & & & & &R@ @ @)< )< )< )< )< )< )< )<X<- <- <-~#6 #6 #6Lz6 z6 z6zJ J J*                 ; ; ;7 7 7 a&4 4 4,0 0 0 0 0 0 0 0D= = =7 7 77 7 7< < <H% H% H% H% H% H% H% H%V r     F@> @> @> @> @> @> @> @>F# # #2# # # # # # # # " " "3 3 3&3 3 3&7 7 7*C C CQ Q Qh "
!
#
# NOO79#56611w}'=>>(>??W[%9::;< ;< ;: @? ?> 21 76 PO;<| 79#566(/ (/ 76(/V) ) ).@ @ @0  %B %B %BP* * * * * * * *0B B B" " "" K#@AAZ)2Iy)J K K- -K K BA- - -r.   