
     h5B                        d Z ddlmZ ddlZddlmZmZ ddlm	Z	m
Z
 ddlmZ ddlZddlmZ ej        ej        ej        ej        ej        ej        ej        d	Zej        ej        ej        ej        d
Zd Zg de_        i e_        i e_        i e_        d Zg de_        ej        ej        de_        i e_        i e_        d Zg de_        i e_        i e_        i e_        d Z g de _        i e _        i e _        i e _        d Z!ddge!_        ej        ej        ej        de!_        dhe!_        h de!_        d Z"g de"_        ej        ej        ej        de"_        ddhe"_        dhe"_        d Z#dd ge#_        ej        ej        ej        de#_        i e#_        i e#_         G d! d"          Z$ G d# d$          Z% G d% d&          Z& G d' d(          Z' G d) d*          Z(dS )+zA Unit tests for nonlinear solvers
Author: Ondrej Certik
May 2007
    )assert_N)_nonlinroot)diagdot)inv   )pressure_network)andersondiagbroydenlinearmixingexcitingmixingbroyden1broyden2krylov)r   r   r   r   c                     t          j        |           j        } t          g d          }d}| | z  |t	          | j        | z            z  | z  z
  }|S )N)      g      ?r	         ?{Gz?)npasarrayTr   float)xdcfs       \/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_nonlin.pyFr       sR    

1A___AA	
QU137^^#a''AH    )r	   r	   r	   r	   r	   c                     | S N r   s    r   F2r&   )       Hr!   )r	   r   r            )r   r   c                     | S r#   r$   r%   s    r   F2_luckyr,   4   r'   r!   )r   r   r   r   r   r   c                 x    t          j        g dg dg dg          }t          j        g d          }|| z  |z
  S )N)r	   g        )r	   r.   r	   )r   r	   r.   )r	   r   g      @)r   arrayr   Abs      r   F3r3   >   sE    
+++zzz:::677A
Aq519r!   )r	   r   r   c                     d}|| d         z  | d         z  dz
  t          j        | d                    t          j        | d                    z   dd|z  z   z
  gS )Ng     @r   r	   )r   exp)r   r1   s     r   	F4_powellr6   J   sT    AadF1Q4K!ORVQqTE]]RVQqTE]]:a!A#gFGGr!   r.   )r   r   r   minres>   cgsgmrestfqmrr8   bicgstabc                 L    t          | dt          j        g d                    S )Nr(   )r   r   r   r   )r
   r   r/   r%   s    r   F5r>   Z   s%    Aq"(+;+;+;"<"<===r!   )g       @r   r   r   )r   r   r   r9   c           	          | \  }}t          j        ddgddgg          }t          j        |dz   |dz  dz
  z  dz   t          j        |t          j        |          z  d	z
            g          }t           j                            ||           S )
Ng/$gffffff-@g+,?grD0?r   r)         r	   )r   r/   sinr5   linalgsolve)r   x1x2J0vs        r   F6rI   i   s    FB	FD>J') 
* 
*B
26b!eai(3.&bfRjj1,--/ 	0 	0AIOOB""""r!   g      gffffff?c                       e Zd ZdZddZddZej        j        d             Z	d Z
ej                            dg d          d	             Zd
 ZdS )
TestNonlinz
    Check the Broyden methods for a few test problems.

    broyden1, broyden2, and newton_krylov must succeed for
    all functions. Some of the others don't -- tests in KNOWN_BAD are skipped.

    r   c           
         |t           d         k    rfdD ]c}||j        v r |||j        |d |dd          }t          t	          j         ||                                                    |k                d |||j        |dd          }t          t	          j         ||                                                    |k                d S )Nr   r:   r<   r9   r8   r;      r   )methodline_searchf_tolmaxiterverbose)rQ   rR   rS   )SOLVERSJAC_KSP_BADxinr   r   absolutemax)selfr   funcrQ   rO   r   s         r   _check_nonlin_funczTestNonlin._check_nonlin_func   s    78$$$I 9 9Q]**DAE&d$c1> > >AAaDD))--//%78888DAEQ???AAaDD!!%%''%/00000r!   c                    |dk    rjdD ]g}||j         v rt          ||j        ||ddd|id          }t          t	          j        |j                                                  |k                ht          ||j        ||ddd          }t          t	          j        |j                                                  |k                d S )	Nr   rM   rN   r   rO   )ftolrR   dispjac_optionsrO   options)r]   rR   r^   )ROOT_JAC_KSP_BADr   rV   r   r   rW   funrX   )rY   r   rO   rQ   
jac_methodress         r   _check_rootzTestNonlin._check_root   s    XM < <
!3331aeF,1c,-4<j3I$K $KL L L CG,,0022U:;;;;1aeF$)c1EEG G GCG$$((**U233333r!   c                     d S r#   r$   )rY   akws      r   _check_func_failzTestNonlin._check_func_fail   s    r!   c                 b   t           t          t          t          t          t
          t          fD ]}t                                          D ]e}||j	                                        v r2|t                                          v r|                     ||           O|                     ||           fd S r#   )r    r&   r,   r3   r6   r>   rI   rT   values	KNOWN_BAD	MUST_WORKrj   r[   )rY   r   rZ   s      r   test_problem_nonlinzTestNonlin.test_problem_nonlin   s    R2y"b9 	1 	1A(( 1 11;--////y//1111--a666''400001	1 	1r!   rO   )lgmresr:   r<   r9   r8   r;   c           	           d _          fd}t          j        t          t          j        |ddd|           t           j                    d S )NFc                 ^    d_         t          j        |                                           S )NT)_tol_norm_usedr   rW   rX   )r   rY   s    r   local_norm_funcz8TestNonlin.test_tol_norm_called.<locals>.local_norm_func   s%    "&D;q>>%%'''r!   r   rN   r   )rO   rQ   rR   rS   tol_norm)rs   nonlinnewton_krylovr    rV   r   )rY   rO   rt   s   `  r   test_tol_norm_calledzTestNonlin.test_tol_norm_called   sm     $	( 	( 	( 	( 	( 	QfD%(!&5	7 	7 	7 	7 	#$$$$$r!   c                     t           t          t          t          t          t
          t          fD ]K}t          D ]A}||j        v r |t          v r| 
                    ||           +|                     ||           BLd S r#   )r    r&   r,   r3   r6   r>   rI   rT   rm   rn   rj   rf   )rY   r   meths      r   test_problem_rootzTestNonlin.test_problem_root   s    R2y"b9 	* 	*A * *1;&&y((--a666  D))))*	* 	*r!   N)r   )__name__
__module____qualname____doc__r[   rf   pytestmarkxfailrj   ro   parametrizerx   r{   r$   r!   r   rK   rK      s         1 1 1 14 4 4 4" [  1 1 1 [X (; (; (; < <% %< <%* * * * *r!   rK   c                   t   e Zd ZdZ ej        g de           ej        g de           ej        g de           ej        g de           ej        g de           ej        g de           ej        g de           ej        g d	e          gZd
 eD             ZddZ	d Z
d Zd Zd Zd ZdS )
TestSecantzDCheck that some Jacobian approximations satisfy the secant condition)r	   r   r   r(   r)   )r   r   r(   r)   r	   )r   r(   r)   r	   r   )r(   r)   r	   r   r   )	   r	   r   r	   r   )r   r	   r   r	   r   )r)   r)   r@   r	   r	   )r	   r   r@   r)   r	   c                     g | ]
}|d z  dz
  S )r   r	   r$   ).0r   s     r   
<listcomp>zTestSecant.<listcomp>   s     			q!Q$(			r!   r	   c           
      h    |di |}|                     | j        d         | j        d         d           t          t	          | j        dd         | j        dd                             D ]C\  }\  }}|                    ||           t          t          ||dz                       D ]}| j        ||z
  dz            | j        ||z
           z
  }	| j        ||z
  dz            | j        ||z
           z
  }
t          t          j
        |	|                    |
                               ||k    r~| j        ||z
  dz            | j        ||z
           z
  }	| j        ||z
  dz            | j        ||z
           z
  }
t          t          j
        |	|                    |
                                EdS )z|
        Check that the given Jacobian approximation satisfies secant
        conditions for last `npoints` points.
        r   Nr	   r$   )setupxsfs	enumeratezipupdaterangeminr   r   allcloserD   )rY   jac_clsnpointsri   jacjr   r   kdxdfs              r   _check_secantzTestSecant._check_secant   s   
 gmmmm		$'!*dgaj$///"3twqrr{DGABBK#@#@AA 	< 	<IAv1JJq!3w!,,-- 8 8WQqSU^dgacl2WQqSU^dgacl2B		"667777 G||WQwYq[)DGAgI,>>WQwYq[)DGAgI,>>BKCIIbMM:::;;;	< 	<r!   c                 D    |                      t          j                   d S r#   )r   rv   BroydenFirstrY   s    r   test_broyden1zTestSecant.test_broyden1   s    6./////r!   c                 D    |                      t          j                   d S r#   )r   rv   BroydenSecondr   s    r   test_broyden2zTestSecant.test_broyden2   s    6/00000r!   c           	         t          j        d          }|                    | j        d         | j        d         d            t          j        d          dz  }t          t          | j        dd          | j        dd                              D ]\  }\  }}|| j        |         z
  }|| j        |         z
  }||t          ||          z
  d d d f         |d d d f         z  t          ||          z  z  }|
                    ||           t          t          j        |                                |dd	                     d S )
N皙?alphar   r)   g      $r	   绽|=vIh%<=rtolatol)rv   r   r   r   r   r   identityr   r   r   r   r   r   todense)rY   r   Blast_jr   r   r   r   s           r   test_broyden1_updatezTestSecant.test_broyden1_update   s5   !,,,		$'!*dgaj$///KNNf%'DGABBK(E(EFF 	K 	KNFFQTWV_$BTWV_$B"s1bzz/111T6*RQQQZ7#b"++EEAJJq!BKqu5IIIJJJJ	K 	Kr!   c           	         t          j        d          }|                    | j        d         | j        d         d            t          j        d          dz  }t          t          | j        dd          | j        dd                              D ]\  }\  }}|| j        |         z
  }|| j        |         z
  }||t          ||          z
  d d d f         |d d d f         z  t          ||          z  z  }|
                    ||           t          t          j        |                                t          |          dd	                     d S )
Nr   r   r   r)   gr	   r   r   r   )rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rY   r   Hr   r   r   r   r   s           r   test_broyden2_updatezTestSecant.test_broyden2_update  s;   "---		$'!*dgaj$///KNNd#'DGABBK(E(EFF 	P 	PNFFQTWV_$BTWV_$B"s1bzz/111T6*RQQQZ7#b"++EEAJJq!BKs1vvENNNOOOO	P 	Pr!   c                 L    |                      t          j        ddd           d S )Nr   r   )Mw0r   )r   rv   Andersonr   s    r   test_andersonzTestSecant.test_anderson  s)    
 	6?aAqAAAAAr!   N)r	   )r|   r}   r~   r   r   r/   r   r   r   r   r   r   r   r   r   r$   r!   r   r   r      sH       NN
"(;;;
&
&
"(;;;
&
&
"(;;;
&
&
"(;;;
&
&
"(;;;
&
&
"(;;;
&
&
"(;;;
&
&
"(;;;
&
&
)B 
 	B			B< < < <*0 0 01 1 1K K KP P PB B B B Br!   r   c                   2    e Zd ZdZd	dZd Zd Zd Zd ZdS )

TestLinearz]Solve a linear equation;
    some methods find the exact solution in a finite number of stepsFc           	      .  	 t           j                            d           t           j                            ||          |r&dt           j                            ||          z  z   t           j                            |          	|r%	dt           j                            |          z  z   		fd}t	          j        |t          j        |          ||dd d          }t          t          j        t          |          	d                     d S )N{                 ?c                 *    t          |           z
  S r#   )r   r0   s    r   rZ   zTestLinear._check.<locals>.func'  s    q!99q= r!   ư>r   )rR   rQ   rP   rS   )r   )
r   randomseedrandnrv   nonlin_solvezerosr   r   r   )
rY   r   NrR   complexri   rZ   solr1   r2   s
           @@r   _checkzTestLinear._check  s
   
	sIOOAq!! 	-Bryq!,,,,AIOOA 	*Bryq))))A	! 	! 	! 	! 	! 	! !$S'(,$K K KC3KK66677777r!   c                     |                      t          j        d          ddd           |                      t          j        d          ddd           d S N      ?r      )   FT)r   rv   r   r   s    r   r   zTestLinear.test_broyden1.  sT    F'c222BEBBBF'c222BDAAAAAr!   c                     |                      t          j        d          ddd           |                      t          j        d          ddd           d S r   )r   rv   r   r   s    r   r   zTestLinear.test_broyden23  sT    F(s333RUCCCF(s333RTBBBBBr!   c                     |                      t          j        dd          ddd           |                      t          j        dd          ddd           d S )N2   r   )r   r   r      FT)r   rv   r   r   s    r   r   zTestLinear.test_anderson8  sV    FOb444b"eDDDFOb444b"dCCCCCr!   c                     |                      t          j        dddd           |                      t          j        dddd           d S )Nr   r   F
   )inner_mT)r   rv   KrylovJacobianr   s    r   test_krylovzTestLinear.test_krylov=  sF    F)2q%DDDF)2q$CCCCCr!   N)F)	r|   r}   r~   r   r   r   r   r   r   r$   r!   r   r   r     s~        H H8 8 8 8"B B B
C C C
D D D
D D D D Dr!   r   c                   J    e Zd ZdZd ZddZd Zd Zd Zd	 Z	d
 Z
d Zd ZdS )TestJacobianDotSolvezFCheck that solve/dot methods in Jacobian approximations are consistentc                 H    |dz  dz
  t          j        | j        |          z   S )Nr   r	   )r   r   r1   rY   r   s     r   _funczTestJacobianDotSolve._funcF  s#    !tax"&++++r!   Fr   c                    t           j                            d           d}fd}fd} |||          | _        t           j                            |          } |di |}	|	                    ||                     |          | j                   t          d|z            D ]}
 ||          }t          |	d          rtt          j	        |	          }t          |	d          rB|	
                    |          }t           j        
                    ||          } |||d           t          |	d	          rY|	                    |          }t           j        
                    |j                                        |          } |||d
           t          |	d          r7|	                    |          }t          j        ||          } |||d           t          |	d          rN|	                    |          }t          j        |j                                        |          } |||d           t          |	d          rZt          |	d          rJ|	                    |          }|	
                    |	                    |                    } |||d           t          |	d          rZt          |	d	          rJ|	                    |          }|	                    |	                    |                    } |||d            ||          }|	                    ||                     |                     d S )Nr   r@   c                  d    t          j        j        |  }r|dt          j        j        |  z  z   }|S )Nr   )r   r   rand)rh   qr   s     r   r   z-TestJacobianDotSolve._check_dot.<locals>.randN  s6    	"A .29>1---Hr!   c                     t          | |z
                                            }t          |                                          z  z   }||k    rt          d||fz            d S )Nz
%s: err %g)absrX   AssertionError)rh   r2   msgr   r   tols        r   assert_closez5TestJacobianDotSolve._check_dot.<locals>.assert_closeT  s`    AE

  Ac!ffjjll3&&A1uu$\S!H%<=== ur!   r   	__array__rD   zsolve vs arrayrsolvezrsolve vs arraymatveczdot vs arrayrmatveczrmatvec vs arrayzdot vs solvezrmatvec vs rsolver$   )r   r   r   r1   r   r   r   r   hasattrr/   rD   rC   r   r   conjr   r   r   r   )rY   r   r   r   ri   r   r   r   x0r   r   rH   JdGvGv2JvJv2r   s     ``              r   
_check_dotzTestJacobianDotSolve._check_dotI  s"   
	s	 	 	 	 		> 	> 	> 	> 	> a Y^^Agmmmm		"djjnndj111 qs !	) !	)AQAsK(( >Xc]]3(( <1B)//"a00C LS*:;;;3)) =AB)//"$))++q99C LS*;<<<3)) :AB&Q--C LS.9993	** >QB&a00C LS*<===sH%% 6'#w*?*? 6ZZ]]ii

2//Rn555sI&& ;73+A+A ;[[^^kk#**R..11R&9:::QAJJq$**Q--((((C!	) !	)r!   c                     |                      t          j        d           |                      t          j        d           d S NF)r   T)r   rv   r   r   s    r   r   z"TestJacobianDotSolve.test_broyden1  :    +U;;;+T:::::r!   c                     |                      t          j        d           |                      t          j        d           d S r   )r   rv   r   r   s    r   r   z"TestJacobianDotSolve.test_broyden2  s:    ,e<<<,d;;;;;r!   c                     |                      t          j        d           |                      t          j        d           d S r   )r   rv   r   r   s    r   r   z"TestJacobianDotSolve.test_anderson  s8    77766666r!   c                     |                      t          j        d           |                      t          j        d           d S r   )r   rv   DiagBroydenr   s    r   test_diagbroydenz%TestJacobianDotSolve.test_diagbroyden  s:    *E:::*D99999r!   c                     |                      t          j        d           |                      t          j        d           d S r   )r   rv   LinearMixingr   s    r   test_linearmixingz&TestJacobianDotSolve.test_linearmixing  r   r!   c                     |                      t          j        d           |                      t          j        d           d S r   )r   rv   ExcitingMixingr   s    r   test_excitingmixingz(TestJacobianDotSolve.test_excitingmixing  s:    -u===-t<<<<<r!   c                     |                      t          j        dd           |                      t          j        dd           d S )NFgMbP?)r   r   T)r   rv   r   r   s    r   r   z TestJacobianDotSolve.test_krylov  s>    -u$GGG-tFFFFFr!   N)Fr   )r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r$   r!   r   r   r   C  s        PP, , ,:) :) :) :)x; ; ;< < <7 7 7: : :; ; ;= = =G G G G Gr!   r   c                   Z    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S )TestNonlinOldTestsz Test case for a simple constrained entropy maximization problem
    (the machine translation example of Berger et al in
    Computational Linguistics, vol 22, num 1, pp 39--72, 1996.)
    c                    t          j        t          t          j        dd          }t	          t          j        |          dk                t	          t          j        t          |                    dk                d S N   r	   iterr   &.>)rv   r   r    rV   r   normr   s     r   r   z TestNonlinOldTests.test_broyden1  `    OAae!444A%&&&AaDD!!D()))))r!   c                    t          j        t          t          j        dd          }t	          t          j        |          dk                t	          t          j        t          |                    dk                d S r  )rv   r   r    rV   r   r
  r   s     r   r   z TestNonlinOldTests.test_broyden2  r  r!   c                     t          j        t          t          j        ddd          }t	          t          j        |          dk                d S )Nr  Q?r)   )r  r   r   Q?)rv   r   r    rV   r   r
  r   s     r   r   z TestNonlinOldTests.test_anderson  s?    OAae$;;;A%&&&&&r!   c                    t          j        t          t          j        dd          }t	          t          j        |          dk                t	          t          j        t          |                    dk                d S )N<   r   r  Hz>)rv   r   r    rV   r   r
  r   s     r   r   z$TestNonlinOldTests.test_linearmixing  sa    !%Rc:::A%&&&AaDD!!D()))))r!   c                    t          j        t          t          j        dd          }t	          t          j        |          dk                t	          t          j        t          |                    dk                d S )Nr   r   r  h㈵>)rv   r   r    rV   r   r
  r   s     r   test_excitingz TestNonlinOldTests.test_exciting  sa    !!AEr<<<A%&&&AaDD!!D()))))r!   c                    t          j        t          t          j        dd          }t	          t          j        |          dk                t	          t          j        t          |                    dk                d S )N   r	   r  :0yE>)rv   r   r    rV   r   r
  r   s     r   r   z#TestNonlinOldTests.test_diagbroyden  sa    qBQ777A%&&&AaDD!!D()))))r!   c                     t          t          t          j        ddddid          }t          t	          j        |j                  dk                t          t	          j        |j                  dk                d S )Nr   r  r   r	   nitr_   r`   r	  r   r    rV   r   rv   r
  r   rc   rY   re   s     r   test_root_broyden1z%TestNonlinOldTests.test_root_broyden1  t    1aeJ#%wlCCE E ECE""T)***CG$$t+,,,,,r!   c                     t          t          t          j        ddddid          }t          t	          j        |j                  dk                t          t	          j        |j                  dk                d S )Nr   r  r   r	   r  r`   r	  r  r  s     r   test_root_broyden2z%TestNonlinOldTests.test_root_broyden2  r  r!   c           	          t          t          t          j        dddddd          }t          t	          j        |j                  dk                d S )	Nr   r  r  r)   )r   r   r  r`   r  )r   r    rV   r   rv   r
  r   r  s     r   test_root_andersonz%TestNonlinOldTests.test_root_anderson  sb    1aeJ#%59+B+BD DE E E 	CE""T)*****r!   c                     t          t          t          j        ddddid          }t          t	          j        |j                  dk                t          t	          j        |j                  dk                d S )Nr   r  r   r   r  r`   r  r  r  s     r   test_root_linearmixingz)TestNonlinOldTests.test_root_linearmixing  sx    1aeN#%,3S>; ;< < < 	CE""T)***CG$$t+,,,,,r!   c                     t          t          t          j        ddddid          }t          t	          j        |j                  dk                t          t	          j        |j                  dk                d S )Nr   r   r   r   r  r`   r  r  r  s     r   test_root_excitingmixingz+TestNonlinOldTests.test_root_excitingmixing  sy    1ae$4#%,3S>; ;< < < 	CE""T)***CG$$t+,,,,,r!   c                     t          t          t          j        ddddid          }t          t	          j        |j                  dk                t          t	          j        |j                  dk                d S )Nr   r  r   r	   r  r`   r  r  r  s     r   test_root_diagbroydenz(TestNonlinOldTests.test_root_diagbroyden  sx    1aeM#%,3Q<9 9: : : 	CE""T)***CG$$t+,,,,,r!   N)r|   r}   r~   r   r   r   r   r   r  r   r  r!  r#  r%  r'  r)  r$   r!   r   r  r    s         
* * *
* * *
' ' '* * *
* * *
* * *
- - -- - -+ + +- - -- - -- - - - -r!   r  ))r   numpy.testingr   r   scipy.optimizer   rv   r   numpyr   r   numpy.linalgr   r   test_minpackr
   r   r   r   r   r   r   rw   rT   rn   r    rV   rm   rU   rb   r&   r,   r3   r6   r>   rI   rK   r   r   r   r  r$   r!   r   <module>r/     s    " ! ! ! ! !  2 2 2 2 2 2 2 2                   * * * * * *v7I!.&BWFO)+ +  foF4HJ J	   	    
 & 3"("79 9    }}      
 H H H
 R	'-':)/)>&,&8: :	  "
	 LLL	 > > > 
"("7 & 3%13 3 "j # # # "("7 & 3%13 3  K* K* K* K* K* K* K* K*\IB IB IB IB IB IB IB IBX'D 'D 'D 'D 'D 'D 'D 'DT\G \G \G \G \G \G \G \G~H- H- H- H- H- H- H- H- H- H-r!   