
     hL             
          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 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$ d Z% G d d          Z& G d de&          Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0 G d de'          Z1 G d de'          Z2 G d  d!e'          Z3 G d" d#e'          Z4 G d$ d%e&          Z5ej6        7                    d&g d'          d(             Z8 G d) d*          Z9 G d+ d,          Z:d- Z; G d. d/          Z<d0 Z=d1 Z>d2 Z?d3 Z@ G d4 d5          ZAd6 ZBd7 ZCd8 ZDd9d:gZEd;d<gZFd=ZGd> ZH G d? d@          ZIdA ZJdB ZKdC ZLdD ZM G dE dF          ZNdG ZO G dH dI          ZPdJ ZQ G dK dL          ZRejS        dM             ZTdN ZUdO ZVdP ZWdQ ZXdR ZY eY            ZZej6        [                    dS          ej6        7                    d&eZdT                   ej6        7                    dUeZdU                   ej6        7                    dVeZdW                   ej6        7                    dXeZdX                   ej6        7                    dYeZdZ                   d[                                                                         Z\ej6        7                    d&eZdT                   d\             Z]d] Z^d^ Z_d_ Z`d` Za G da db          Zbdc Zcdd ZddS )ez
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_SCALAR_METHODS)LINPROG_METHODS)ROOT_METHODS)ROOT_SCALAR_METHODS)QUADRATIC_ASSIGNMENT_METHODS)ScalarFunction
FD_METHODS)
MemoizeJacshow_optionsc            
      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    ^/var/www/html/Sam_Eipo/venv/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)r.   r+   r,   皙?Hz>c                 T    | t          j        |           z                                  S N)r   sinsumr   s    r!   x_sinxztest_check_grad.<locals>.x_sinx@   s     "&))  """r#   c                 Z    t          j        |           | t          j        |           z  z   S r2   r   r3   cosr   s    r!   
der_x_sinxz#test_check_grad.<locals>.der_x_sinxC   s!    vayy1RVAYY;&&r#   r&   皙?random_projectionallgƠ>)r   arrayr   
check_gradr   absarangeassert_raises
ValueErrorhimmelblau_gradhimmelblau_hesshimmelblau_x0)r"   r'   x0rr5   r9   s         r!   test_check_gradrH   !   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   r=   FKzerosfloat64startparamssolutionmaxiter	funccalls	gradcallstraceselfs    r!   setup_methodzCheckOptimize.setup_method\   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)rZ   RuntimeErrorr   dotrS   logr4   r   rT   r\   appendcopy)r^   r    log_pdotlogZfs        r!   funczCheckOptimize.funcj   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   )	r[   r   rb   rS   rc   r4   r   	transposerT   r^   r    rf   rg   ps        r!   gradzCheckOptimize.gradt   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 r2   )r   rb   rS   rc   r4   r   Tdiagrl   s        r!   hesszCheckOptimize.hess{   s    6$&!$$vc"&**++,,F8d?##vdfhfRWQZZ"&12E2E)EFFH H 	Hr#   c                 R    t          j        |                     |          |          S r2   )r   rb   rr   r^   r    rm   s      r!   hesspzCheckOptimize.hessp   s    vdiillA&&&r#   N)	__name__
__module____qualname____doc__r_   ri   rn   rr   ru    r#   r!   rJ   rJ   V   sl         
    6 6 6H H H' ' ' ' 'r#   rJ   c                       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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rY   disp
return_allrz   CG)argsmethodjacoptionsr    funnfevnjevstatusT)rY   full_outputr   retallr-   atol	      r&      )r         rO   )r   g;ӱ.g)`$|;?+=r0   r   rtol)use_wrapperrY   r   r   minimizeri   rW   rn   fmin_cgr   rX   rZ   r[   r\   )	r^   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         rO   r&   r   )rG   s    r!   rh   z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.f   s)    !bfT1s7^444q888r#   g      rP   G   r   r   rO   h㈵>r   )r   linspacer   r   successr   r    )r^   rh   rF   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~   BFGSrz   r   r   r   r   r    r   r   hess_invr   r   r   Tr   rY   r   r   r   r-   r   
         )r   g&/LgB__E7?)r   g$g
|3?r   r0   r   )r   rY   r   r   r   ri   rW   rn   	fmin_bfgsr   rX   rZ   r[   r\   )r^   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           	      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 r2   )r   er   s    r!   <lambda>z?CheckOptimizeParameterized.test_bfgs_infinite.<locals>.<lambda>   s    "$( r#   c                      |            S r2   rz   )r    ri   s    r!   r   z?CheckOptimizeParameterized.test_bfgs_infinite.<locals>.<lambda>   s    DDGG8 r#   r   ignore)overr   r   rz   r   r    r   )r   errstater   r   r   r   r   isfinite)r^   fprimerF   r   r    ri   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 )Ng?ffffff?皙?ffffff?333333?bfgsxrtolMbP?r   r   gtol)r   r   rosennit)r^   rF   r   refs       r!   test_bfgs_xrtolz*CheckOptimizeParameterized.test_bfgs_xrtol   sz    &&& "6GT?L L L "6FD>K K Kw#'!!!!!!r#   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~   rz   Powellr   r   r   r    r   direcr   r   r   Tr   r-   r   r   h㈵>   r   )r   rY   r   r   r   ri   rW   fmin_powellr   rX   rZ   r[   
r^   r   r   r   r   r   numiterr   r   r   s
             r!   test_powellz&CheckOptimizeParameterized.test_powell   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~   rz   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   r0   r   )
r   rY   r   r   r   ri   rW   r   r   r\   r   s
             r!   test_powell_gh14014z.CheckOptimizeParameterized.test_powell_gh14014  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         |d	         |d
         |d         |d         f\  }}}}}}	|| 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 rz   )r   pi).0_s     r!   
<listcomp>zBCheckOptimizeParameterized.test_powell_bounded.<locals>.<listcomp>3  s"    <<<aBE625/<<<r#   Fr~   rz   r   )r   boundsr   r   r    r   r   r   r   r   r-   r   r      r   )rW   r   rY   r   r   r   ri   rZ   r   rX   r[   )
r^   r   r   r   r   r   r   r   r   r   s
             r!   test_powell_boundedz.CheckOptimizeParameterized.test_powell_bounded0  s0    =<4+;<<< 	'#|TY"') )D#DIt/?b+1+3TC C CC Hc%j#g,E
KXB0>FD%*h ////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~   rz   Nelder-meadr   r    r   r   r   r   Tr   r-   r      r   L   N   )g	dװ?g]fgt䝁?)gә ?g#=^goT?r   r0   r   )r   rY   r   r   r   ri   rW   fminr   rX   rZ   r[   r\   )	r^   r   r   r   r   r   r   r   r   s	            r!   test_neldermeadz*CheckOptimizeParameterized.test_neldermeadK  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   rP   .rP   r   r/   FTrY   r   r   initial_simplexrz   r   r   r    r   r   r   r   allvecsr   r   rY   r   r   r   r   r-   r   d   2   4   )gIt?g?'ΛTgx8?)gҢ_׆?goMg囎|52?r   r0   r   )r   rU   rW   ranger   rY   r   r   ri   r   r   rX   rZ   r[   r\   )r^   simplexjr   r   r   r   r   r   r   r   s              r!   test_neldermead_initial_simplexz:CheckOptimizeParameterized.test_neldermead_initial_simplexj  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)rP   r&   r&   .r   r/   )rP   rP   Fr   rz   r   r   Tr   )r   rU   rW   r   rd   r   rY   rA   rB   r   r   ri   r   )r^   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                 z    ddi}t          j        | j        | j        d| j        d|          }|j        dk    sJ d S )NrY   	Newton-CGrz   r   r   r   r   r   )r   r   ri   rW   rn   r   )r^   r   results      r!   test_ncg_negative_maxiterz4CheckOptimizeParameterized.test_ncg_negative_maxiter  sR    2"49d.>*549(*D: : : }!!!!!!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  rz   r  r    r   r-   r   r      rP      (6-H=g?g4u3?r  g_g/N3?r0   r   )r   rY   r   r   r   ri   rW   rn   fmin_ncgr   rX   rZ   r[   r\   r^   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  rz   )r   r   rr   r   r   r    )fhessr   rY   r   r   r   r-   r   r      rP   r  r  r  r0   r   )r   rY   r   r   r   ri   rW   rn   rr   r  r   rX   rZ   r[   r\   r  s       r!   test_ncg_hessz(CheckOptimizeParameterized.test_ncg_hess  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  rz   )r   r   ru   r   r   r    )fhess_pr   rY   r   r   r   r-   r   r   r  rP   r  r  r  r0   r   )r   rY   r   r   r   ri   rW   rn   ru   r  r   rX   rZ   r[   r\   r  s       r!   test_ncg_hesspz)CheckOptimizeParameterized.test_ncg_hessp  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#   N)rv   rw   rx   r   r   r   r   r   r   pytestmarkxfailr   r   r   r  r  r
  r  r  r  rz   r#   r!   r|   r|      s$       / / />	5 	5 	5 /  /  /D, , ," " " 3  3  3D [ & ' '/ /' '/@' ' '6/ / />&/ &/ &/P7 7 7>" " ". . .B .  .  .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   rR   r)   )r    rngs    r!   costztest_maxfev_test.<locals>.cost"  s    zz!}}t##r#   )r   r   r   )r   Nelder-Meadr   maxfevr   r   )r   r)   default_rngr   r   )r#  imaxfevr   r	  r"  s       @r!   test_maxfev_testr(    s    
)

 G
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 r2   rz   r   s    r!   func_z8test_wrap_scalar_function_with_validation.<locals>.func_2  s    r#   r   r  r   zToo many function callsmatch@The user-provided objective function must return a scalar value.)
r   	_optimize'_wrap_scalar_function_maxfun_validationr   asarrayr   rA   _MaxFuncCallErrorrB   r=   )r+  fcallsri   imsgs        r!   )test_wrap_scalar_function_with_validationr6  0  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 )Nr.  r,  c                     | S r2   rz   r   s    r!   r   z.test_obj_func_returns_scalar.<locals>.<lambda>M  s    A r#   r   r   r   )rA   rB   r   r   r   r=   r,  s    r!   test_obj_func_returns_scalarr9  H  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   :0yE>)xatoliS  )r   r=   r   	_minimize_minimize_neldermeadr   r   )rF   r   s     r!   test_neldermead_iteration_numr?  P  sQ    	+++	,	,B


1
1(."8< 2 > >C7c>>>>>>r#   c                  X    d } t           j                            | ddgddd           d S )Nc                 0    | d         dz  | d         dz  z   S Nr   r&   r   rz   r   s    r!   r   z-test_neldermead_xatol_fatol.<locals>.<lambda>Z  s    QqT1WqtQw& r#   r   r&   r   )rY   r<  fatol)r   r=  r>  )ri   s    r!   test_neldermead_xatol_fatolrD  W  sJ     '&D++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 Nr&   r   r4   r   s    r!   r   z*test_neldermead_adaptive.<locals>.<lambda>a      RVAqD\\ r#   )gM@'?gOC?g~?g -?g?g#j?g ?g~^g?gܠr#?g^cǽ?g)i	?g'?g?g1?g[VΤ?r$  r   FadaptiveTr   )r   r   r   r   )ri   p0r   s      r!   test_neldermead_adaptiverL  `  s    !!D
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 rG  rH  r   s    r!   r   z3test_bounded_powell_outsidebounds.<locals>.<lambda>r  rI  r#   )r  r   rO  rO  )rO   gr   r   r   rQ   r-   r   Tr   r   r   r   )r   r   r   )r   r   r   r   )r   r   r   )g      r   r   Fr   )r   r   OptimizeWarningr   r   r    r   r=   lenr   r   r   )ri   r   rF   r   r   s        r!   !test_bounded_powell_outsideboundsrU  n  s    "!D&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 rG  rH  r   s    r!   r   z/test_bounded_powell_vs_powell.<locals>.<lambda>  rI  r#   ))r  )皙)r   gffffff"@)rP  gffffff@g/)g gr   r   r\  绽|=ftolxtolr   r   rQ   r-   r   )r   r   r   )r  rZ  r   r   r\  )Nr  rZ  r   )rP  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   r&   r7   r    ts     r!   ri   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  rP   )r   r   r   r   rQ  g8:}?r   )gb4F@g:gW?@)r   r   r   r    r   r   r=   infr   r   rS  )ri   r   rF   r   
res_powellres_bounded_powellrm   s          r!   test_bounded_powell_vs_powellrh    ss    "!D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    .ArP   r;  r^  )r   r   r   rL   c                 ,    t          j        |            S r2   rH  r   s    r!   r   z8test_onesided_bounded_powell_stability.<locals>.<lambda>  s    26!99* 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   r?   r4   r<   r   s    r!   rh   z1test_onesided_bounded_powell_stability.<locals>.f  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  rm  r   s    r!   rh   z1test_onesided_bounded_powell_stability.<locals>.f  s<    rvayy!!R''q1u+E112FFr#   gB+Iar0   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 )Nr&   r  r/   r   r   r  rm  rc  s     r!   rh   z1test_onesided_bounded_powell_stability.<locals>.f  sq    VBF1RaR5MM""a''"&!""*?*?C*HH	26!a%==(aab)r#   g     @@r   g 4&k\)r   re  r   r   r   r   )kwargsrF   rh   r   s       r!   &test_onesided_bounded_powell_stabilityrq    s_    !6'3(1,"&557 7F 
B 	A

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rv   rw   rx   r   r   rz   r#   r!   rs  rs     s        KDDDr#   rs  c                       e Zd ZdZdZdS )TestOptimizeWrapperNoDispTFNrt  rz   r#   r!   rv  rv    s        KDDDr#   rv  c                       e Zd ZdZdZdS )TestOptimizeNoWrapperDispFTNrt  rz   r#   r!   rx  rx  
  s        KDDDr#   rx  c                       e Zd ZdZdZdS )TestOptimizeNoWrapperNoDispFNrt  rz   r#   r!   rz  rz    s        KDDDr#   rz  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ej                            d          d             Zd Zd Z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%d(S ))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 r2   rz   r   s    r!   r   z2TestOptimizeSimple.test_bfgs_nan.<locals>.<lambda>  s     r#   c                 *    t          j        |           S r2   r   	ones_liker   s    r!   r   z2TestOptimizeSimple.test_bfgs_nan.<locals>.<lambda>      2<?? r#   r   )r   invalidFr   )r   nanr   r   r   isnan)r^   ri   r   rF   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 r2   r   r  r   s    r!   r   z9TestOptimizeSimple.test_bfgs_nan_return.<locals>.<lambda>#  s     r#   r   r  r   r   r   Fc                 *    | dk    rdnt           j        S Nr   r  r   s    r!   r   z9TestOptimizeSimple.test_bfgs_nan_return.<locals>.<lambda>+  s    a1ff"& r#   c                 *    t          j        |           S r2   r  r   s    r!   r   z9TestOptimizeSimple.test_bfgs_nan_return.<locals>.<lambda>,  r  r#   )r   )r   r   r   r   r  )r^   ri   r	  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)))) 10**[*** 	< 	<&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 )NrM   rz   F)r.   r   rY   r   r-   r   )r   sqrtspacingr)   randrT  rX   r   r   ri   rW   rY   r   )r^   r.   r   s      r!   test_bfgs_numerical_jacobianz/TestOptimizeSimple.test_bfgs_numerical_jacobian3  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   r-   r   )		itertoolsproductr   r   ri   rW   r   r    rX   )r^   methodsjacsr   r   r	  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   rr   )r  r  doglegtrust-exact)r   r   r   r  r  r   ri   rW   rn   r   r  r
   rB   )r^   r  hessesr   rr   r	  s         r!   test_finite_differences_hessz/TestOptimizeSimple.test_finite_differences_hessH  sM    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rM   rz   r   s    r!   rh   z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.fc  s    1uu&2a4xr#         $@Fr   rM   rk  r   r   )r   r   r   )r^   rh   xss      r!   test_bfgs_gh_2169z$TestOptimizeSimple.test_bfgs_gh_2169b  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   r&      )add)r    xpseens     r!   rh   z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.fm  s>    1BT>>>>HHRLLLad7BqD= r#   r   Tr0   )r   r   tol)setr   r   )r^   rh   r  s     @r!   test_bfgs_double_evaluationsz/TestOptimizeSimple.test_bfgs_double_evaluationsk  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 )Nrz   )r   rY   r-   r   r   r  rP   )g><gwT볹gUuAX?)rQ   gHg!mʲ3?r   r0   r   )r   fmin_l_bfgs_bri   rW   rn   rY   r   rX   rZ   r[   r\   r^   r   r   r   ds        r!   test_l_bfgs_bz TestOptimizeSimple.test_l_bfgs_bv  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_gradrY   r-   r   )r   r  ri   rW   rY   r   rX   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 r2   )ri   rn   )r    r^   s    r!   r   z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.fun  s"    99Q<<1--r#   rY   r-   r   )r   r  rW   rY   r   ri   rX   )r^   r   r   r   r   r  s   `     r!   test_l_bfgs_b_funjacz'TestOptimizeSimple.test_l_bfgs_b_funjac  s    	. 	. 	. 	. 	. 'T-=04> > > #q		&))499T]+C+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 r  )r   r   r    r]   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   r^   r    s     r!   __call__zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__  s-    #>!,,Ar#   Nrv   rw   rx   r  r  rz   r#   r!   Callbackr    s2          
    r#   r  rQ   l-bfgs-brY   r  )r   callbackr   r   Fz+STOP: TOTAL NO. of ITERATIONS REACHED LIMIT)r   r   r   r   r   r   r    r   r   r   message)r^   r  cr   s       r!   test_l_bfgs_b_maxiterz(TestOptimizeSimple.test_l_bfgs_b_maxiter  s    		 		 		 		 		 		 		 		 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   rY   L-BFGS-Br   r   r   r-   r   r   r   r  r   r   r   )rY   r   r   ri   rW   rn   r   r    rX   r[   r   rZ   r   )r^   r   rG   ras       r!   test_minimize_l_bfgs_bz)TestOptimizeSimple.test_minimize_l_bfgs_b  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/   rk  r0   r]  F)r   rY   r_  r  r  r   )	rY   r   r   ri   rW   rn   r    r   rX   )r^   v0r  r   r   vs         r!   test_minimize_l_bfgs_b_ftolz.TestOptimizeSimple.test_minimize_l_bfgs_b_ftol  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 )N333333rM   r  Fr   )r   maxlsr  )r   r   r   r   r=   	rosen_derr   )r^   r   s     r!   test_minimize_l_bfgs_maxlsz-TestOptimizeSimple.test_minimize_l_bfgs_maxls  sX    $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   rR   c                 H     |           }                     |           |S r2   )rd   )r    valuerh   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 r2   rz   )r   r4  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   )r^   grF   r  lowmediumhighr  kr  targetxminr   r  rh   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 )Nrz   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   sizere   r   OptimizeResult)r   rF   r   r%  stepsizerY   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   g?r   皙?r  r   rM   rk  r  rz   Nr/   r   N)r   r   r   dictr   r    )r^   r  rF   r   s       r!   test_customzTestOptimizeSimple.test_custom  sy    <?*.	O 	O 	O 	O> (''7(,d(;(;(;= = =sD999999r#   z$output not reliable on all platformsr   c                 `   t           j        ddgt           j        dd}t          j        di |ddi |                                \  }}d|vrd|vsJ t          j        di |dd	i |                                \  }}d|v rd|vsJ t          j        di |dd
i |                                \  }}d|v rd|v sJ t          j        di |d
dd |                                \  }}d|vrd|vsJ t          j        di |ddd |                                \  }}d|v rd|v sJ d S )Nr   rP   )rP   r  r  )ri   rF   r   r   iprintr  r  z
At iterater   r   F)r  r   Trz   )r   r   r  r  
readouterr)r^   capfdrp  outr   s        r!   test_gh13321zTestOptimizeSimple.test_gh133213  s    #.A$.:JL L 	33333333!!##Q$$S)@)@)@@22222222!!##QS  \%<%<%<<22222222!!##QS  \S%8%8%88 	>>>>>>>>!!##Q$$S)@)@)@@>>>>>>>>!!##QS  \S%8%8%88%8%8r#   c                 p    ddgdfd}ddg}t          j        t           j        ||           d S )N)r\  r&   )r   rP   constraintsc                 Z    |d         u sJ |d         u sJ t          j                    S )Nr   r  r   r  )r   rF   r   r   r  s      r!   r  z0TestOptimizeSimple.test_gh10771.<locals>.custmin[  s>    8$....=)[8888*,,,r#   r   )r   r   r  )r   r   r   )r^   r  rF   r   r  s      @@r!   test_gh10771zTestOptimizeSimple.test_gh10771U  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 )Nr&   r   r   rz   zr    r  s      r!   ri   z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.funcf  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 )Nr&   r   rP   r   r=   r  s      r!   dfuncz=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfuncj  sE    DAq8QqSAX!Q$.!Q$q9:::r#   	nelder-meadpowellcgr   	newton-cgr  tnccobylaslsqpr"  r#  r'  r   r]  )r   r  r   rM   z: z vs. )r   r   r    )r^   ri   r   r   r   sol1sol2s          r!   test_minimize_tol_parameterz.TestOptimizeSimple.test_minimize_tol_parameterd  s   	( 	( 	(	; 	; 	;* 	g 	gF <<<$TAq6s,24 4 4D$TAq6s,24 4 4D4<<$$tv,,...66644PTPV<<<<Y]Y]^b^dYeYeYe0f....	g 	gr#   r   )r   r   r   r   r  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          d t          j        	d          D                       rJ d S )N)r-  r  c                 R    t          j        |           t          j        |           fS r2   )r   r   r  r   s    r!   r   zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<lambda>  s     hnQ//1CA1F1FG r#   r   r   r.  r  iterr-  r   r  )r   r   i  rY   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#   r&  r  r   r  )r  r   )r%  r   r  r  r  r  r  rr   c                 Z                         | t          j        |           f           d S r2   )rd   r   re   )r    r   rp  resultss      r!   r  zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callback  s'    NNArwqzz?+++++r#   r  r&   c              3   L   K   | ]\  }}t          j        ||k              V   d S r2   )r   r<   r   r    r  s      r!   r  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>  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!   r  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>  s;      ff41ar*1Q4166ffffffr#   )r   r   r  
rosen_hessr   rU   
startswithgetattrr  rT  r<   anyr  combinations)
r^   r   ri   r   rr   rF   rp  r6  r  r:  s
    `       @r!   #test_minimize_callback_copies_arrayz6TestOptimizeSimple.test_minimize_callback_copies_array|  s    222GGDD>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ff9CYZacdCeCeffffffffffr#   r!  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 r%   rz   r   s    r!   ri   z1TestOptimizeSimple.test_no_increase.<locals>.func  s    EA:r#   c                     d| dz
  z  dz  dz
  S )Nr&   r   r  rz   r   s    r!   bad_gradz5TestOptimizeSimple.test_no_increase.<locals>.bad_grad  s     a!e9#a''r#          @r&  r  r7  r  r)  r  r(  zSLSQP returns slightly worse)
r   r=   r  r   r   r   r    r   r  r  )	r^   r   ri   rH  rF   f0r   r   r   s	            r!   test_no_increasez#TestOptimizeSimple.test_no_increase  s    	 	 		( 	( 	(
 Xse__T"XX%+u__$b////$r:J:J:J888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)rM   rI        @g      @r&   )r4   r   r=   r   s    r!   rh   z7TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.f  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  )rP  r\  r  r  r   )r   r=   concatenaterb   r    r4  s     r!   consz:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.cons  sV    ***,<,<,<=>>A>26!Q<<"(Ar72C2C#CQ"GHHHr#   )rO   rM   r(   rI  r(  ineqtyper   r   r  )rQ   r&   r  r   rP   g-q=r   )r   r=   r   r   r   r    )r^   rh   rS  rF   r   s        r!   test_slsqp_respect_boundsz,TestOptimizeSimple.test_slsqp_respect_bounds  s    	< 	< 	<	I 	I 	I X((())2g5;D,I,IK K Krx66q8uEEEEEEr#   )r$  r   r   r   r  r  SLSQPr  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 S )Nr   r   rz   r  r   )r  r   r8  rr   r   rY  r   )r   rU   r   r   r   r  r?  r  rn   rr   r   r   r   r   hasattrr   ngevr   )r^   r   MAXITERrF   sfrp  r   s          r!   test_respect_maxiterz'TestOptimizeSimple.test_respect_maxiter  s*    Xb\\HNBH4F$/t= = #tG/D/D/DEE^##GF5MM ( ( (GF5MWF6N55f55w'!!!!x27""""3 	'8rw&&&& W:???? "?r#   )r$  r   r   r   c           	         t          j        d          }t          t          j        |dt          j        t          j        d d           }ddd}t          j        t          d          5  |
                    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   rz   r   T)rY   r   zMaximum number of iterationsr,  r   r   )r   rU   r   r   r   r  r?  r  warnsRuntimeWarningr@  rA  r   r   )r^   r   rF   r^  r   r6  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 )Nr:   r   皙?r   Q?r&   r  r   s    r!   r   zWTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.<lambda>  s5    #!*sQqTz"9D1Q4K"G!HII r#   rT  rU  r   r  r  )r  r   rr   r   r   )	r   r   r  r?  r   rU   r   r  r   )	r^   r]  rh   r   rr   r   rS  rF   r   s	            r!   2test_respect_maxiter_trust_constr_ineq_constraintszETestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints  s     N "II   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 rG  rz   r   s    r!   rh   z6TestOptimizeSimple.test_minimize_automethod.<locals>.f*      a4Kr#   c                     | dz
  S rG  rz   r   s    r!   rS  z9TestOptimizeSimple.test_minimize_automethod.<locals>.cons-  s    q5Lr#   r  rT  rU  )r  )r  r   r   )r  r   r   r   r   r0   r   r&   r  )r   r=   r   r   r   r   r    )
r^   rh   rS  rF   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 rG  rH  r    r  s     r!   Yz=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.YE  s    61Q3(###r#   c                     d| |z
  z  S rG  rz   rw  s     r!   dY_dxzATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dxH  s    ac7Nr#   )rP   r   r   r   r  r   r&   r   r  rP   r  r   )r   r   r   r2   )r   r=   r)   randnrT  r   r   )r^   rx  rz  r  xinits        r!   test_minimize_coerce_args_paramz2TestOptimizeSimple.test_minimize_coerce_args_paramC  sx    	$ 	$ 	$	 	 	 	 H66677	A''!UQGGGGGGr#   c                 B  	
 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                    |
	|          }|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   r&   )r?   r  AssertionError)r    first_step_sizescalerF   s    r!   rh   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.fV  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!   r  z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g]  s#    8UAaD1H-.///r#   )r   r   r;  )r   r]  )r  r        r  z{0} {1}: {2}: {3}rM   err_msgrP   r   g)\(?rO   )
r  r  r  r   r   formatr   r   r    r   )r^   scalesr  rh   r  r   r   r   r  r  r  rF   s            @@@r!   test_initial_step_scalingz,TestOptimizeSimple.test_initial_step_scalingO  s    "!!999	' 	' 	' 	' 	' 	' 	'	0 	0 	0 	0 	0 '.vw?? !	 !	ME6''E$J///&&u}}+D!D!DB#fO#Arq,35 5 5C *001@146 6G ;'''';CEC5'::::7a<<<<<<u}}^++#OA$6gNNNNN +1-338JQ8N8N8NPW8N8NN8N C!	 !	r#   )r"  r#  r$  r   r%  r  r&  r'  r(  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 )Nr*   r   c                     t           j        S r2   r  r   s    r!   ri   z0TestOptimizeSimple.test_nan_values.<locals>.func  s	    6Mr#   c                     dxx         dz  cc<   d         dk    rt           j        S t           j                                        S rb  )r   r  r)   r  r    counts    r!   func2z1TestOptimizeSimple.test_nan_values.<locals>.func2  s>    !HHHMHHHQx!||vy~~'''r#   c                 ,    t          j        dg          S NrM   r  r   s    r!   rn   z0TestOptimizeSimple.test_nan_values.<locals>.grad  s    8SE??"r#   c                 .    t          j        dgg          S r  r  r   s    r!   rr   z0TestOptimizeSimple.test_nan_values.<locals>.hess  s    8cUG$$$r#   rM   r%  r  r  r  r  r  r  r  r  r&  r  r7  r  r   r  delta_grad == 0.*.*does not use Hessian.*.*does not use gradient.*)r   rr   r   r   F)r   r)   r,   r=   r  r   r	   filterUserWarningrb  r  r  r   r   r   r   )r^   r   ri   r  rn   rr   rF   
needs_grad
needs_hessfuncsgradshesssr   suprh   r  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)r"  r$  r   r  r&  r'  r(  r  r  r  r  r  c           	      F   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 ]R}t          j        | j        |dz
           | j        |                   r"t          d                    |                    Sd S )	Nr  r  r   r  r  r  r   z Duplicate evaluations made by {})rn   rr   r   r   r	   r  r  r   r   ri   rW   r   rT  r\   array_equalra   r  )r^   r   r   rr   r  r4  s         r!   test_duplicate_evaluationsz-TestOptimizeSimple.test_duplicate_evaluations  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//** 	G 	GA~djQ/A?? G"6==fEEG G GG	G 	Gs4   B!?B
>B!
B	B!B	B!!B%(B%N)&rv   rw   rx   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  parametrizer   rD  rK  rX  r_  rc  rh  rt  r}  r  r  r  rz   r#   r!   r|  r|    sg       % % %* * *(
# 
# 
#' ' '- - -47 7 7	F 	F 	F/ / /.	# 	# 	## # #D D D4# # #8C C C"  ( ( (4$: $: $:L [DEE9 9 FE9BB B Bg g g0 [X, , ,.>?@ @8g 8g	@ @8gt [X (B (B (B C C! !C C!4F F F [X (G (G (G H H# #	H H#< [X (? (? (? @ @N N@ @N" " "&/ / /4
H 
H 
H2 2 2h [X (8 (8 (8 9 9
+1 +19 9
+1Z [X (8 (8 (8 9 9
G G9 9
G G Gr#   r|  r   )r  r&  r   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 rG  rH  r   s    r!   rh   z$test_minimize_with_scalar.<locals>.f  s    va1f~~r#      )r  r   rQ  rQ   r   r   )r   r   r   r   r    )r   rh   r   s      r!   test_minimize_with_scalarr    sZ       
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   rX   r]   s    r!   r_   zTestLBFGSBBounds.setup_method  s    /r#   rI  c                 <    d|z  |d         |z  |d         |z  z   z  S )NrM   r   r   rz   rt   s      r!   r   zTestLBFGSBBounds.fun  s&    Qw!A$'AaD!G+,,r#   c                     ||dz
  z  S r   rz   rt   s      r!   r   zTestLBFGSBBounds.jac  s    1q5zr#   c                 Z    |                      ||          |                     ||          fS r2   r   r   rt   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   taskr-   r   )r   r  r   r   r   r   rX   r^   r    rh   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  rI  )r   r   r   r  r-   r   )r   r  r  r   r   rX   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  r-   r   )r   r   r   r   r   r   r    rX   )r^   r   s     r!   test_minimize_l_bfgs_b_boundsz.TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds  sk    1b'*$(HT[B B B9~--s9~--~t}4888888r#   r   )r   r   rn  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
.*bounds.*r,  r   r  r  r  )r  r
   rB   r   r   r   r   )r^   r   s     r!   'test_minimize_l_bfgs_b_incorrect_boundsz8TestLBFGSBBounds.test_minimize_l_bfgs_b_incorrect_bounds  s     ]:\::: 	; 	;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  rz   r   r  r  finite_diff_rel_step)r   r   r   r   r   r   r  r-   r   )	r  r  r   r   r   r   r   r    rX   )r^   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>CE4=t<<<<<	= 	=r#   Nr  )rv   rw   rx   r_   r   r   r  r  r  r  r  r  r  r  r  rz   r#   r!   r  r    s          - - - -   . . . .5 5 55 5 59 9 9 [X
7	
7	
7	(  
; ; 
;
= = = = =r#   r  c                      e Zd Zd ZddZd Z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g d          d             Zd Zd Zej                            dddg          d             ZdS )TestOptimizeScalarc                     d| _         d S )Nr(   )rX   r]   s    r!   r_   zTestOptimizeScalar.setup_method  s    r#   r(   c                     ||z
  dz  dz
  S )zObjective functionr&   r   rz   )r^   r    r4  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 )Nr-   r   rP  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   rX   r  r
   rB   )r^   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'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 )Nr-   r   r  r  Tr  r   r  r  )r   r   r  )rY   r   r&   r  r,  r  r  r  )	r   goldenr   r   rX   r   r  r
   rB   )r^   r    maxiter_test_casesrY   rF   nfev0r   r  s           r!   test_goldenzTestOptimizeScalar.test_golden8  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   rk  r   r  r-   )	r   	fminboundr   r   rX   r   r=   rA   rB   r  s     r!   test_fminboundz!TestOptimizeScalar.test_fminboundW  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   r&   r   r  r-   r   )r  r
   rB   r   r  r   r   rU   r=   r   rX   r  s     r!   test_fminbound_scalarz(TestOptimizeScalar.test_fminbound_scalarb  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 rG  rz   r   s    r!   r   z,TestOptimizeScalar.test_gh11207.<locals>.funj  rk  r#   r   )r   r  )r^   r   s     r!   test_gh11207zTestOptimizeScalar.test_gh11207i  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 )Nr-   r   Brentr   rP   r  r   r  r(   )bracketr   r   )r   r   r  r  )r   r   Bounded)r   r   r   r   rk  )r   r  boundedr  r(   )r  r   r   r   r   r&   rQ  )r   minimize_scalarr   r    r   rX   r   r  r   r=   rA   rB   rU   r  s     r!   test_minimize_scalarz'TestOptimizeScalar.test_minimize_scalarn  s   $TX..04=t4444$TXg>>>y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 )Nrz   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   rI  TFr  r  )r   r  r   r%  r  rY   r  r   r  r  r  r   r  r  r  r  s                   r!   r  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   r	  r
  )r  r   r   r-   r   r  )r   r  r   r  r   r    rX   )r^   r  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 )Nr(   r   r   r  r   r]   s    r!   &test_minimize_scalar_coerce_args_paramz9TestOptimizeScalar.test_minimize_scalar_coerce_args_param  s      444444r#   r   )r  r  r  c                 J    dD ]}t          j        | j        d|i            d S )N)r   r   r&   rP   r   )r   r  )r^   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 )Nr  r   rY  r   r   r    r   r  r   r   r   )r   r  r   r[  )r^   r   rp  r	  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 )Nr*   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   r&   r/   )r   r  r3   r  s    r!   ri   z0TestOptimizeScalar.test_nan_values.<locals>.func  sG    !HHHMHHHQx!||v!tcBF1IIo--r#   r  rO  r   r  r  r  r  r  r   r  r  r  r   F)r   r)   r,   r   r	   r  r  rb  r   r  r  r   r   )	r^   r   ri   r  r   r  rp  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 rG  rz   r   s    r!   rh   zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.f  rk  r#   r   r;  r   )r   r   r<  r]  )r   r   r   )r   r  r   r    )r^   rh   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   rm  )	r  r
   rB   r   r  r   r3   re  r  )r^   r5  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;r  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,  r  r   r   )r  r
   rB   r   r  r   r3   )r^   r   r5  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Nr  )rv   rw   rx   r_   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rz   r#   r!   r  r    s                7 7 7*8 8 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& [X'E'E'EFF- - GF-:" " "A A A [X':;;K K <;K K Kr#   r  c                  ^    t          t          t          j        t          j        d           d S )Ng{Gzr  )rA   rB   r   r  r   r8   rz   r#   r!   test_brent_negative_tolerancer    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  rM   r   r  r   rr   r  r   r   rk  r   )r   r=   r   r   r   r  r?  r   r  r   r    r^   rF   r   s      r!   test_rosenbrockzTestNewtonCg.test_rosenbrock$  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  r-   )r   rr   r   r  rk  r   r   )r   r=   rE   r   r   
himmelblaurC   rD   r   r  r   r    himmelblau_xoptr   himmelblau_minr  s      r!   test_himmelblauzTestNewtonCg.test_himmelblau.  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  rM   r  r   r  r  r   rk  r   )
r   r=   r   r   r   r  r   r  r   r    r  s      r!   test_finite_differencez#TestNewtonCg.test_finite_difference:  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   r=   r   r   r   r  r   r   r  r   r    r  s      r!   test_hessian_update_strategyz)TestNewtonCg.test_hessian_update_strategyD  s    XtSk""$,$6%-]__$('2	4 4 4
 {''CK''{rxA//d;;;;;;r#   N)rv   rw   rx   r	  r  r  r  rz   r#   r!   r  r  #  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   rP  )r   r   ffffff@rP   rQ   r   r   r   )rQ   r&   rP  r   rM   r   r   r   r  r   rQ   r   r   r   r  r   rQ   r   r   r   r   r  rQ   r   r   r   rP  rP   )rM   r   r   r   )rM   r   r  r&   r(   )rI  r   r  r&   gffffff?g333333@)rM   r   r  r   r-   r   g333333)r   r/  _line_for_searchr   r=   r   re  )line_for_searchlower_boundupper_boundrF   x1	all_testsr    alphalminlmaxmimas               r!   test_line_for_searchr&  O  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  rI  r(   皙ٿr&   r   r4   r=   r   s    r!   r   z(test_linesearch_powell.<locals>.<lambda>  s+    RVQ*=*=*=!>!>>BCC r#   r  r   r  r  r  r&   r  r(   r  r*  r  r   r   r         ?rQ   r   r   r   皙?rI  r   r  r   r   )fvalr  r-   r   r  r  r  r2  )r   r/  _linesearch_powellr   r=   re  r   linesearch_powellri   rK  r2  r  r  r   xilrh   rm   r+   s               r!   test_linesearch_powellr9    s/    *= DCD	---	 	 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!   r   z0test_linesearch_powell_bounded.<locals>.<lambda>  s+    RVQrx(;(;(;<<<q@AA r#   r  g       r   rI  r  r  r  r&   r  r(   r  r*  r,  r-  r.  r/  r0  r1  r   r3  r-   r   g333333ӿrP   g?r  rN   g333333ÿ)r  r   r   r&   r   g333333)r   r/  r4  r   r=   r   re  r5  s               r!   test_linesearch_powell_boundedr<    s    *= BAD	---	 	 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 rG  )lbr<   ub)r    r4  br   s      r!   r   ztest_powell_limits.<locals>.fun3  sS    1VY##%%@1	>*>*>*@*@@@@AvQr#   r   rF   r   r   r   T)r?  r@  keep_feasiblec                 F    | dk    r| dk    sJ t          j        |           S r  r   r   s    r!   ri   z test_powell_limits.<locals>.func=  s&    Avv!q&&& vayyr#   rO   r#  )r   rF   r   r   )r   r   r   )r   ri   r   s     @r!   test_powell_limitsrE  /  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)rP   r   r  )r&   r&   r&   )r   r=   r   rosen_hess_prodrb   r?  r   )r^   r    rm   hpdothps        r!   	test_hesszTestRosen.test_hessF  sl    HYYYHYYY%a++x*1--q11Rr#   N)rv   rw   rx   rL  rz   r#   r!   rG  rG  D  s#                 r#   rG  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   rz   )rm   r    r  r4  rA  s        r!   r  r  O  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   rP   *   r&         r  r  rm   r    r  s      r!   rC   rC   Z  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 )N   r&   r   rP  rR  r  rS  s      r!   rD   rD   `  su    DAq8bAg!mb(!A#!)4cAaCi1r!Q$w!346 7 7 7r#   gHzGѿgrP   r&   rQ   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   r:   r   rf  r   rg  r&   r  r   s    r!   ri   z0test_minimize_multiple_constraints.<locals>.funcm  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>.func1p      x1r#   c                 8    t          j        | d         g          S rG  r  r   s    r!   r  z1test_minimize_multiple_constraints.<locals>.func2s  r[  r#   rT  rU  c                 <    d| d         | d         z   | d         z   z  S )Nr  r   r   r&   rz   r   s    r!   r   z4test_minimize_multiple_constraints.<locals>.<lambda>z  s     "!qtad*+ r#   rR  rY  rW  )}   r   r   r]  r   )r   r   r   r    )ri   rZ  r  rS  rh   r   s         r!   "test_minimize_multiple_constraintsr_  k  s    F F F           D))E**E**,D 	,+A

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  )rQ   r  )rF   r   r   ri   r  r   r?  rr   rI  ru   r   r]   s    r!   r_   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  r'  r   z7Method .+ does not use (gradient|Hessian.*) information)r   r   rr   ru   )r   r	   r  rb  r   r   ri   rF   r   rr   ru   r[  dir
isinstancer  str)r^   
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)rv   rw   rx   r_   rj  rz   r#   r!   ra  ra    s2        - - -0 0 0 0 0r#   ra  c                 ~    | \  }}|\  }}}}}}	}
}}}}}}||dz  z  ||z  |z  z   ||dz  z  z   ||z  z   ||z  z   |	z   S rG  rz   r  r   r    r  r4  rA  r  r  r   rh   r  r  r4  r   r  r8  r  s                    r!   f1rm    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 rG  r   rl  s                    r!   f2ro    _    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 rG  r   rl  s                    r!   f3rr    rp  r#   c                 T    t          | g|R  t          | g|R  z   t          | g|R  z   S r2   )rm  ro  rr  )r  r   s     r!   
brute_funcrt    s6    a>&>>>BqN6NNN*R^F^^^;;r#   c                   8    e Zd Zd Zd Zd Zd Z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)r&   rP   r   r   r   r   ,   r  r&   rR  r   r\  rO   rP  r         ?g_}gi?)r   slicerrangesr   r=   rX   r]   s    r!   r_   zTestBrute.setup_method  sG    Db!T**E"a,>,>?+z!:;;r#   c                     t          |g|R  S r2   )rt  )r^   r  r   s      r!   rt  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   brutert  r{  r   r   r   rX   r   )r^   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   r&   )rT  shaper   s    r!   rh   zTestBrute.test_1D.<locals>.f  s7    qw<<1$$$$71:????6Mr#   rO  rP   )Nsr  )r   r  )r^   rh   s     r!   test_1DzTestBrute.test_1D  s4    	 	 	
 	q7)$777777r#   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~  r&   )r   r   r  workersr  r   )r   r  rt  r{  r   r   )r^   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}t          j        t
          d          5  t          j        || j        | j	        d           d d d            d S # 1 swxY w Y   d S )Nr*   c                 4                         d          dz  S r   r!  )r  r   r"  s     r!   ri   z,TestBrute.test_runtime_warning.<locals>.func  s    ::a==4''r#   z)Either final optimization did not succeedr,  T)r   r   )
r   r)   r&  r  ra  rb  r   r  r{  r   )r^   ri   r"  s     @r!   rc  zTestBrute.test_runtime_warning  s    i##D))	( 	( 	( 	( 	( \. LN N N 	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   #A11A58A5c                 z    d }t          j        |t          ddd          fd          }t          |d           d S )Nc                     | |d         z  S r  rz   )r    r   s     r!   rh   z+TestBrute.test_coerce_args_param.<locals>.f  s    Q<r#   rP  r   ry  r&   r  r   )r   r  rz  r   )r^   rh   r  s      r!   test_coerce_args_paramz TestBrute.test_coerce_args_param  sN    	  	  	  >!eB3&7&7%9BBB!$$$$$r#   N)
rv   rw   rx   r_   rt  r  r  r  rc  r  rz   r#   r!   rv  rv    s        < < <
& & &? ? ?.8 8 8	3 	3 	3L L L% % % % %r#   rv  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   r&   sleepr    times    r!   
objective1z*test_cobyla_threadsafe.<locals>.objective1		  s    

3tQwr#   c                 J                         d           | d         dz
  dz  S )Nr/   r   r   r&   r  r  s    r!   
objective2z*test_cobyla_threadsafe.<locals>.objective2	  s$    

3!Q{r#   COBYLAc                  4    t          j        dg           S NrQ   r   r3  )
min_methodr  s   r!   
minimizer1z*test_cobyla_threadsafe.<locals>.minimizer1	  '     '*e-79 9 9 	9r#   c                  4    t          j        dg           S r  r3  )r  r  s   r!   
minimizer2z*test_cobyla_threadsafe.<locals>.minimizer2	  r  r#   )concurrent.futuresr  futuresThreadPoolExecutorrd   submitr	  )
concurrentr  r  pooltasksrd  r   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((**CC		                 s   A,B88B<?B<c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestIterationLimitsc                     d| _         d S r  )r  r]   s    r!   r_   z TestIterationLimits.setup_method)	  s    r#   c                     | xj         dz  c_         t          j        |d         dz  |d         dz  z             t          j        |d         |d                   }}t          j        |dz  |z             |dz  z   S )Nr   r   r&   r  rO   )r  r   r  arctan2r3   )r^   r  rG   rd  s       r!   	slow_funczTestIterationLimits.slow_func,	  sn    wqtQwqtQw''AaD!A$)?)?1vadQh#%%r#   c                 2    |                      dd           d S )Nr$     check_limitsr]   s    r!   test_neldermead_limitz)TestIterationLimits.test_neldermead_limit1	  s    ------r#   c                 2    |                      dd           d S )Nr#  rR   r  r]   s    r!   test_powell_limitz%TestIterationLimits.test_powell_limit4	  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   r&   )r   i    r   r%  r   r   r   rY   r   r   r  )rY   r%  )r  r   r   r  r   re  )r^   r   default_itersstart_vmfevr   mits          r!   r  z TestIterationLimits.check_limits7	  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*2C2C2CC2Cv;$..#e*2C2C2CC!vtntRVn= [ [	c !'/5<?;?1A 1AB B B }F3333y> [|"6{]1_<<<<<"5z]1_<<<<<v;-/99SZ=YZ?=Z=Z=ZZ[=+	[ +	[r#   N)rv   rw   rx   r_   r  r  r  r  rz   r#   r!   r  r  %	  sd          & & &
. . .* * *,[ ,[ ,[ ,[ ,[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 r2   rz   r   s    r!   r   z2test_result_x_shape_when_len_x_is_one.<locals>.fung	  s    1ur#   c                     d| z  S NrI  rz   r   s    r!   r   z2test_result_x_shape_when_len_x_is_one.<locals>.jacj	  s    Avr#   c                 .    t          j        dgg          S r  r  r   s    r!   rr   z3test_result_x_shape_when_len_x_is_one.<locals>.hessm	  s    x"r#   )r$  r   r   r   r  r  r  rY  r/   r   r   )r  r  r  r  r  r  r  )r   r   r   r=   r    r  )r   r   rr   r  r   r   s         r!   %test_result_x_shape_when_len_x_is_oner  f	  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 r  )number_of_callsr]   s    r!   r  zFunctionWithGradient.__init__	  s     r#   c                 Z    | xj         dz  c_         t          j        |dz            d|z  fS r%   )r  r   r4   r  s     r!   r  zFunctionWithGradient.__call__	  s1    !vad||QU""r#   Nr  rz   r#   r!   r  r  	  s2        ! ! !# # # # #r#   r  c                      t                      S r2   )r  rz   r#   r!   function_with_gradientr  	  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 )
NrM   rI        @r   r&   zHfunction is not recomputed if gradient is requested after function valueg      4@(different input triggers new computationr  )r   r   r=   r   r  
derivativer  memoized_functionrF   s      r!   )test_memoize_jac_function_before_gradientr  	  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 )
NrM   rI  r&   r   r  zHfunction is not recomputed if function value is requested after gradientr   r  r  )r   r   r=   r   r  r  r  s      r!   )test_memoize_jac_gradient_before_functionr  	  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.
    rM   rO   rz   Nr   r/   r&   r:   rP   )	r   r  r   r   r   r=   r   r  r   )r  r  r   rr   rF   scalar_functions         r!   test_memoize_jac_with_bfgsr  	  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 rG  r  r   s    r!   r   ztest_gh12696.<locals>.<lambda>	  s    bh1v&& r#   Fr   )r   r   r  r   r   rz   r#   r!   test_gh12696r  	  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   r&   r  r  )rP   r&   r&   r  Tc                 f    |r| j         dk    sJ |rt          |                              d S d S )Nr   )r  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 r2   )r   r   r    r  s    r!   ri   z%setup_test_equal_bounds.<locals>.func	  s     


~a   r#   c                 B     |            t          j        |           S r2   )r   r  r  s    r!   rn   z%setup_test_equal_bounds.<locals>.grad	  s!    


!!$$$r#   c                      |            d S r2   rz   )r    r   r  s     r!   r  z)setup_test_equal_bounds.<locals>.callback	  s    




r#   c                 8     | d           | dd         dz
  S )NFr  r   r   rz   r  s    r!   constraint1z,setup_test_equal_bounds.<locals>.constraint1	  s*    &&&&1vzr#   c                 T     | d           t          j        |           }d|d<   |S )NFr  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 )NFr  r&   rP   rO   rz   r  s    r!   constraint2z,setup_test_equal_bounds.<locals>.constraint2	  s*    &&&&1v|r#   c                 T     | d           t          j        |           }d|d<   |S )NFr  r   r&   r  r  s     r!   	jacobian2z*setup_test_equal_bounds.<locals>.jacobian2	  r  r#   )r  rY  r  Fr  c                 0     |            |           fS r2   rz   )r    ri   rn   s    r!   r   z)setup_test_equal_bounds.<locals>.<lambda>

  s    Qa1 r#   c                 <    t          t          | |                    S r2   )listzipr?  r@  s     r!   r   z)setup_test_equal_bounds.<locals>.<lambda>
  s    $s2r{{"3"3 r#   r  )	r  kwdsbound_typesr  	callbacksr?  r@  rF   r  )TT)r   r)   r,   r  r=   r   re  r   )rF   r@  r  r  r  r  r  c1ac1bc2ac2br  r  r  r  r  datar  ri   rn   r  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  r  
bound_typer  r  r  r  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@  rF   r  rY  z)Only SLSQP supports nonlinear constraints)rF   r   r   r  r  )r   r   r   r  r-   r   gMb@?r   r   c                     t          j        t           j        dt           j        dg          }| |ddg<   t          j        |          S )Nr&   r  r   )r   r=   r  r   r   )r    new_xs     r!   r   ztest_equal_bounds.<locals>.fun[
  s;    Hbfa455EE1a&M>%(((r#   r&   r  g>rz   )platformmachiner  rh  eb_dataupdater   r   r   r  r   r   r   r    r   r  r   r  re  r   )r   r  r   r  r  r?  r@  rF   r  test_constraintsreference_constraints	fd_neededr   r   expectedr   fd_ress                    r!   test_equal_boundsr  )
  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\5555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 r2   )r   linalgnorm)r    p1s     r!   rh   z test_all_bounds_equal.<locals>.fq
  s    y~~a  2%%r#   )r   r   )r&   r&   )rM   rN  rQ  rM   rI  z/All independent variables were fixed by bounds.)r&   r  r&   rY  c                 *    t          j        |           S r2   rH  r   s    r!   conz"test_all_bounds_equal.<locals>.con
  s    6!99r#   rQ   )r   r   r  Fz3All independent variables were fixed by bounds, butr   Tz8All independent variables were fixed by bounds at valuesr  )r   r   r   r   r   r   r  upperr   r   re  r@  )	r   rh   r   rF   r   r   r  nlcr  s	            r!   test_all_bounds_equalr  m
  sG   & & & & 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   rP   r   r&   rz   r   s    r!   rh   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   r&   rP   (   rz   r   s    r!   cfunz!test_eb_constraints.<locals>.cfun
  s+    tad{QqT!AaD(2--r#   rT  rU  )r   r  r   )r  r  r   )r   r&   rP   r   rY  )rF   r   r   r  r   r   r3  )rh   r  r  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   r  rootroot_scalarlinprogquadratic_assignmentekkir$  )r   maximizemaximize_scalar)
r   r   r   r   r   r   itemsr   rA   rB   )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  r  r   r   rB  )r   r   r   r   r   r=   rm  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 r2   )r   r@   r  r4   rR  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 rG  )r   r@   r  rR  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   eyer  r   s    r!   r   z2test_x_overwritten_user_function.<locals>.<lambda>
  s    26"'!**--3 r#   )r%  r  r  r  r  r  )r  r  r  r  r  r  r(   r  g-C6*?r   )	r   onesr   r   r   r   r    r@   r  )
r0  r2  
fquad_hessmeth_jac	meth_hessrF   methr   rr   r   s
             r!    test_x_overwritten_user_functionr:  
  s         43J  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 rG  rz   r   s    r!   ri   zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.func
  s    6Mr#   r   )rF   )rP  r   r    r   r  r   r   r   )	r   basinhoppingdifferential_evolutionshgodual_annealingdirectre  r  r[  )r^   ri   r:  r	  s       r!   test_optimize_result_attributesz6TestGlobalOptimization.test_optimize_result_attributes
  s.   	 	 	 (!44424'CC=y11*4';;?4'33	  	* 	*Ffh&=>>>>>63'''''69-----69-----65)))))66*****65))))))	* 	*r#   N)rv   rw   rx   rD  rz   r#   r!   r<  r<  
  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_fprimerE   r  r   rC   rD   )r  r  s     r!   test_approx_fprimerG    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 rB  rz   r   s    r!   rh   ztest_gh12594.<locals>.f  s!    tQw!A$(Q&&r#   rY  r   r  )r   r   r   rB  )r   r   r   r   r=   r   r   r    )rh   r   r   r   s       r!   test_gh12594rJ    s    
' ' ' Szr2h///F

A&&
I
I
ICrxc
++"b0B0BCCCF

A&&
I
I
ICCGSW%%%CE35!!!!!r#   )ery   r  r  numpyr   numpy.testingr   r   r   r   r   r   r	   r  r
   rA   scipyr   scipy.optimize._minimizer   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   rH   rJ   r|   r(  r6  r9  r?  rD  rL  rU  rh  rq  rs  rv  rx  rz  r|  r  r  r  r  r  r  r  r&  r9  r<  rE  rG  r  rC   rD   rE   r  r  r_  ra  rm  ro  rr  rt  rv  r  r  r  r  fixturer  r  r  r  r  r  r  xfail_on_32bitr  r  r  r+  r-  r:  r<  rG  rJ  rz   r#   r!   <module>rW     s(  
 
         A A A A A A A A A A A A A A A A A A  * * * * * *       @ @ @ @ @ @ @ @ N N N N N N N N 3 3 3 3 3 3 - - - - - - ; ; ; ; ; ; < < < < < < O O O O O O O O = = = = = = = =2 2 2j-' -' -' -' -' -' -' -'`V. V. V. V. V. V. V. V.r- - -"  0H H H  D D D$ $ $     <H: H: H:V&F &F &FR    8   
     :   
     :   
    "<   
y
G y
G y
G y
G y
G y
G y
G y
Gx 000 - -	 -:= := := := := := := :=zAK AK AK AK AK AK AK AKH@ @ @)< )< )< )< )< )< )< )<X<- <- <-~"6 "6 "6Jy6 y6 y6xJ J J*                 ; ; ;7 7 7 a&4 4 4*0 0 0 0 0 0 0 0D= = =7 7 77 7 7< < <G% G% G% G% G% G% G% G%T     F>[ >[ >[ >[ >[ >[ >[ >[B# # #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N* * * * * * * *0B B B" " " " "r#   