§
    ¢éUg=H  ã                   óê  — d Z ddlmZ ddlZddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZ ddl
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)Ú	csr_array)Ú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
   ç      à?ç{®Gáz„?)ÚnpÚasarrayÚTr   Úfloat)ÚxÚdÚcÚfs       ú_/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/optimize/tests/test_nonlin.pyÚFr!       sU   € Ý
Œ
�1‰ŒŒ€AÝÐ Ð Ð Ñ!Ô!€AØ€AØ	
ˆˆQ‰�•U˜1œ3 ™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-   9   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
   ç        )r
   r/   r
   )r   r
   r/   )r
   r   ç      @)r   Úarray©r   ÚAÚbs      r    ÚF3r6   C   sE   € Ý
Œ�+�+�+˜z˜z˜z¨:¨:¨:Ð6Ñ7Ô7€AÝ
Œ���ÑÔ€AØˆq‰5�1‰9Ð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   r4   s     r    Ú	F4_powellr9   O   sT   € Ø€AØˆa�Œd‰F�1�Q”4‰K˜!‰O�RœV Q q¤T E™]œ]­R¬V°Q°q´T°E©]¬]Ñ:¸aÀ!ÀAÁ#¹gÑFÐGÐGr"   éÿÿÿÿr/   )r   r   r   Úminres>   ÚcgsÚgmresÚtfqmrr;   Úbicgstabc                 óL   — t          | dt          j        g d¢¦  «        ¦  «        S )Nr)   )r   r   r   r   )r   r   r2   r&   s    r    ÚF5rA   _   s%   € Ý˜A˜q¥"¤(Ð+;Ð+;Ð+;Ñ"<Ô"<Ñ=Ô=Ð=r"   )ç       @r   r   r   )r   r   r   r<   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+åÌ,Ýê?gr•þ�D0ã?r   r*   é   é   r
   )r   r2   Úsinr8   ÚlinalgÚsolve)r   Úx1Úx2ÚJ0Úvs        r    ÚF6rM   n   s”   € Ø�F€BˆÝ	Œ�F˜D�>Ø˜zÐ*ð,ñ 
-ô 
-€Bå
Œ�2˜‘6˜b !™e a™iÑ(¨3Ñ.Ý”&˜�bœf R™jœj™¨1Ñ,Ñ-Ô-ð/ñ 	0ô 	0€AåŒI�OŠO˜B Ñ"Ô"Ð"Ð"r"   g      à¿gffffffö?c                   ój  — e Zd ZdZdd„Zdd„Zej        j        d„ ¦   «         Z	ej         
                    d¦  «        d„ ¦   «         Zej         
                    d¦  «        ej                             dg d	¢¦  «        d
„ ¦   «         ¦   «         Zej         
                    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?   r<   r;   r>   éÈ   r   )ÚmethodÚline_searchÚf_tolÚmaxiterÚverbose)rU   rV   rW   )ÚSOLVERSÚJAC_KSP_BADÚxinr   r   ÚabsoluteÚmax)Úselfr   ÚfuncrU   rS   r   s         r    Ú_check_nonlin_funczTestNonlin._check_nonlin_func�   sß   € à•7˜8Ô$Ò$Ð$ØIð 9ð 9�Ø˜Qœ]Ð*Ð*Øà�D˜˜AœE¨&¸dØ$¨c¸1ð>ñ >ô >�å�œ A A a¡D¤DÑ)Ô)×-Ò-Ñ/Ô/°%Ò7Ñ8Ô8Ð8Ð8àˆD��A”E °¸QÐ?Ñ?Ô?ˆÝ•”˜A˜A˜a™DœDÑ!Ô!×%Ò%Ñ'Ô'¨%Ò/Ñ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   rQ   rR   r   rS   )ÚftolrV   ÚdispÚjac_options©rS   Úoptions)ra   rV   rb   )ÚROOT_JAC_KSP_BADr   rZ   r   r   r[   Úfunr\   )r]   r   rS   rU   Ú
jac_methodÚress         r    Ú_check_rootzTestNonlin._check_root›   sõ   € à�XÒÐØMð <ð <�
Ø Ô!3Ð3Ð3Øå˜1˜aœe¨FØ,1¸cØ,-Ø4<¸jÐ3Ið$Kð $KðLñ Lô L�õ �œ C¤GÑ,Ô,×0Ò0Ñ2Ô2°UÒ:Ñ;Ô;Ð;Ð;å�1�a”e FØ$)°cÀ1ÐEÐEðGñ Gô Gˆå•”˜CœGÑ$Ô$×(Ò(Ñ*Ô*¨UÒ2Ñ3Ô3Ð3Ð3Ð3r"   c                 ó   — d S r$   r%   )r]   ÚaÚkws      r    Ú_check_func_failzTestNonlin._check_func_fail¬   s   € àˆr"   zignore::DeprecationWarningc                 ób  — t           t          t          t          t          t
          t          fD ]�}t                               ¦   «         D ]e}||j	                             ¦   «         v r2|t                               ¦   «         v r|                      ||¦  «         ŒO|                      ||¦  «         ŒfŒ‚d S r$   )r!   r'   r-   r6   r9   rA   rM   rX   ÚvaluesÚ	KNOWN_BADÚ	MUST_WORKrn   r_   )r]   r   r^   s      r    Útest_problem_nonlinzTestNonlin.test_problem_nonlin°   sª   € å•R�¥2¥yµ"µbÐ9ð 	1ð 	1ˆAÝŸšÑ(Ô(ð 1ð 1�Ø˜1œ;×-Ò-Ñ/Ô/Ð/Ð/Ø�y×/Ò/Ñ1Ô1Ð1Ð1Ø×-Ò-¨a°Ñ6Ô6Ð6ØØ×'Ò'¨¨4Ñ0Ô0Ð0Ð0ð1ð	1ð 	1r"   rS   )Úlgmresr=   r?   r<   r;   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   r[   r\   )r   r]   s    €r    Úlocal_norm_funcz8TestNonlin.test_tol_norm_called.<locals>.local_norm_funcÁ   s%   ø€ Ø"&ˆDÔÝ”;˜q‘>”>×%Ò%Ñ'Ô'Ð'r"   r   rR   r   )rS   rU   rV   rW   Útol_norm)rw   ÚnonlinÚnewton_krylovr!   rZ   r   )r]   rS   rx   s   `  r    Útest_tol_norm_calledzTestNonlin.test_tol_norm_calledº   sm   ø€ ð
 $ˆÔð	(ð 	(ð 	(ð 	(ð 	(õ 	Ô�Q¥¤¨f¸DØ%(°!Ø&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|  
                    ||¦  «         Œ+|                      ||¦  «         ŒBŒLd S r$   )r!   r'   r-   r6   r9   rA   rM   rX   rq   rr   rn   rj   )r]   r   Úmeths      r    Útest_problem_rootzTestNonlin.test_problem_rootÊ   sˆ   € å•R�¥2¥yµ"µbÐ9ð 	*ð 	*ˆAÝð *ð *�Ø˜1œ;Ð&Ð&Ø�yÐ(Ð(Ø×-Ò-¨a°Ñ6Ô6Ð6ØØ× Ò   DÑ)Ô)Ð)Ð)ð*ð	*ð 	*r"   c                 ó´   — d„ }t          j        t          j        j        ¦  «        5  t          j        |dgd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 ó   — d| z   S )Ng     @�@r%   r&   s    r    Úwont_convergez5TestNonlin.test_no_convergence.<locals>.wont_convergeÕ   s   € Ø˜‘7ˆNr"   r   r
   )rZ   rV   )ÚpytestÚraisesÚscipyÚoptimizeÚNoConvergencerz   r{   )r]   r‚   s     r    Útest_no_convergencezTestNonlin.test_no_convergenceÔ   sº   € ð	ð 	ð 	õ Œ]�5œ>Ô7Ñ8Ô8ð 	Dð 	DÝÔ  °Q°CÀÐCÑCÔCÐCð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð 	Dð 	Ds   §AÁAÁAN)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r_   rj   rƒ   ÚmarkÚxfailrn   Úfilterwarningsrs   Úparametrizer|   r   rˆ   r%   r"   r    rO   rO   „   s2  € € € € € ðð ð1ð 1ð 1ð 1ð4ð 4ð 4ð 4ð" „[Ôðð ñ Ôðð „[×ÒÐ <Ñ=Ô=ð1ð 1ñ >Ô=ð1ð „[×ÒÐ <Ñ=Ô=Ø„[×Ò˜Xð (;ð (;ð (;ñ <ô <ð%ð %ñ<ô <ñ >Ô=ð%ð „[×ÒÐ <Ñ=Ô=ð*ð *ñ >Ô=ð*ðDð Dð Dð Dð Dr"   rO   c                   ód  — e Zd ZdZ ej        g d¢¦  «         ej        g d¢¦  «         ej        g d¢¦  «         ej        g d¢¦  «         ej        g d¢¦  «         ej        g d¢¦  «         ej        g d¢¦  «         ej        g d	¢¦  «        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)ç      ð?rB   r1   ç      @ç      @)rB   r1   r”   r•   r“   )r1   r”   r•   r“   rB   )r”   r•   r“   rB   r1   )ç      "@r“   r–   r“   r1   )r0   r“   r–   r“   r1   )r•   r•   ç      @r“   r“   )r“   rB   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   ÚallcloserH   )r]   Újac_clsÚnpointsrm   ÚjacÚjr   r   ÚkÚdxÚdfs              r    Ú_check_secantzTestSecant._check_secanté   s�  € ð
 ˆgˆmˆm˜ˆmˆmˆØ�	Š	�$”'˜!”*˜dœg aœj¨$Ñ/Ô/Ð/Ý"¥3 t¤w¨q¨r¨r¤{°D´G¸A¸B¸B´KÑ#@Ô#@ÑAÔAð 	<ñ 	<‰IˆA‰v��1Ø�JŠJ�q˜!ÑÔÐå�3˜w¨¨!©Ñ,Ô,Ñ-Ô-ð 8ð 8�Ø”W˜Q˜q™S ™U”^ d¤g¨a°©c¤lÑ2�Ø”W˜Q˜q™S ™U”^ d¤g¨a°©c¤lÑ2�Ý�œ B¨¯	ª	°"©¬Ñ6Ô6Ñ7Ô7Ð7Ð7ð �GŠ|ˆ|Ø”W˜Q˜w™Y q™[Ô)¨D¬G°A°g±IÔ,>Ñ>�Ø”W˜Q˜w™Y q™[Ô)¨D¬G°A°g±IÔ,>Ñ>�Ý�BœK¨¨C¯IªI°b©M¬MÑ:Ô:Ð:Ñ;Ô;Ð;ùð	<ð 	<r"   c                 óD   — |                       t          j        ¦  «         d S r$   )r¬   rz   ÚBroydenFirst©r]   s    r    Útest_broyden1zTestSecant.test_broyden1þ   s   € Ø×Ò�6Ô.Ñ/Ô/Ð/Ð/Ð/r"   c                 óD   — |                       t          j        ¦  «         d S r$   )r¬   rz   Ú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)rz   r®   rœ   r�   rž   r   ÚidentityrŸ   r    r   r¡   r   r¤   Útodense)r]   r§   ÚBÚlast_jr   r   r«   rª   s           r    Útest_broyden1_updatezTestSecant.test_broyden1_update  s5  € åÔ!¨Ð,Ñ,Ô,ˆØ�	Š	�$”'˜!”*˜dœg aœj¨$Ñ/Ô/Ð/åŒK˜‰NŒN˜fÑ%ˆå'­¨D¬G°A°B°B¬K¸¼ÀÀÀ¼Ñ(EÔ(EÑFÔFð 	Kð 	K‰NˆF‘F�Q˜Ø�T”W˜V”_Ñ$ˆBØ�T”W˜V”_Ñ$ˆBØ�"•s˜1˜b‘z”z‘/ 1 1 1 d 7Ô+¨b°°q°q°q°¬kÑ9½CÀÀB¹K¼KÑGÑGˆAØ�JŠJ�q˜!ÑÔÐÝ•B”K §¢¡¤¨q°uÀ5Ð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*   gš™™™™™¹¿r
   r¸   r¹   rº   )rz   r²   rœ   r�   rž   r   r½   rŸ   r    r   r¡   r   r¤   r¾   r	   )r]   r§   ÚHrÀ   r   r   r«   rª   s           r    Útest_broyden2_updatezTestSecant.test_broyden2_update  s;  € åÔ"¨Ð-Ñ-Ô-ˆØ�	Š	�$”'˜!”*˜dœg aœj¨$Ñ/Ô/Ð/åŒK˜‰NŒN˜dÑ#ˆå'­¨D¬G°A°B°B¬K¸¼ÀÀÀ¼Ñ(EÔ(EÑFÔFð 	Pð 	P‰NˆF‘F�Q˜Ø�T”W˜V”_Ñ$ˆBØ�T”W˜V”_Ñ$ˆBØ�"•s˜1˜b‘z”z‘/ 1 1 1 d 7Ô+¨b°°q°q°q°¬kÑ9½CÀÀB¹K¼KÑGÑGˆAØ�JŠJ�q˜!ÑÔÐÝ•B”K §¢¡¤­s°1©v¬v¸EÈÐNÑNÔNÑOÔOÐOÐOð	Pð 	Pr"   c                 óL   — |                       t          j        ddd¬¦  «         d S )Nr   r   )ÚMÚw0r¦   )r¬   rz   ÚAndersonr¯   s    r    Útest_andersonzTestSecant.test_anderson   s)   € ð
 	×Ò�6œ?¨a°A¸qÐÑAÔAÐAÐAÐAr"   N)r
   )r‰   rŠ   r‹   rŒ   r   r2   r�   rž   r¬   r°   r³   rÁ   rÄ   rÉ   r%   r"   r    r’   r’   Ü   sP  € € € € € Ø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                   óD   — e Zd ZdZdd„Zd„ Zd„ Z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   r3   s    €€r    r^   zTestLinear._check.<locals>.func6  s   ø€ Ý�q˜!‘9”9˜q‘=Ð r"   ç�íµ ÷Æ°>r   ©rV   rU   rT   rW   ©r¼   )
r   ÚrandomÚseedÚrandnrz   Únonlin_solveÚzerosr   r¤   r   )
r]   r§   ÚNrV   Úcomplexrm   r^   Úsolr4   r5   s
           @@r    Ú_checkzTestLinear._check,  s
  øø€ Ý
Œ	�Š�sÑÔÐåŒI�OŠO˜A˜qÑ!Ô!ˆØð 	-Ø�B•r”y—’ q¨!Ñ,Ô,Ñ,Ñ,ˆAÝŒI�OŠO˜AÑÔˆØð 	*Ø�B•r”y—’ qÑ)Ô)Ñ)Ñ)ˆAð	!ð 	!ð 	!ð 	!ð 	!ð 	!õ Ô! $­¬°©¬°SÀ'Ø(,¸$ÈðKñ Kô Kˆå•”�C  3™KœK¨°Ð6Ñ6Ô6Ñ7Ô7Ð7Ð7Ð7r"   c                 ó²   — |                       t          j        d¬¦  «        ddd¦  «         |                       t          j        d¬¦  «        ddd¦  «         d S ©Nr“   r¶   é   é)   FT)rÜ   rz   r®   r¯   s    r    r°   zTestLinear.test_broyden1=  sT   € à�Š•FÔ'¨cÐ2Ñ2Ô2°B¸¸EÑBÔBÐBØ�Š•FÔ'¨cÐ2Ñ2Ô2°B¸¸DÑAÔAÐAÐAÐAr"   c                 ó²   — |                       t          j        d¬¦  «        ddd¦  «         |                       t          j        d¬¦  «        ddd¦  «         d S rÞ   )rÜ   rz   r²   r¯   s    r    r³   zTestLinear.test_broyden2B  sT   € à�Š•FÔ(¨sÐ3Ñ3Ô3°R¸¸UÑCÔCÐCØ�Š•FÔ(¨sÐ3Ñ3Ô3°R¸¸TÑBÔBÐBÐBÐBr"   c                 ó¶   — |                       t          j        dd¬¦  «        ddd¦  «         |                       t          j        dd¬¦  «        ddd¦  «         d S )Né2   r“   )rÆ   r·   rß   é   FT)rÜ   rz   rÈ   r¯   s    r    rÉ   zTestLinear.test_andersonG  sV   € à�Š•F”O b°Ð4Ñ4Ô4°b¸"¸eÑDÔDÐDØ�Š•F”O b°Ð4Ñ4Ô4°b¸"¸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Ü   rz   ÚKrylovJacobianr¯   s    r    Útest_krylovzTestLinear.test_krylovL  sF   € à�Š•FÔ)¨2¨q°%ÀˆÑDÔDÐDØ�Š•FÔ)¨2¨q°$ÀˆÑCÔCÐCÐCÐCr"   c           	      ó”  ‡‡— ˆˆfd„}ˆfd„}t          j        |t          j        ‰j        d         ¦  «        |ddd d¬¦  «        }t          j                             ‰|z  ‰d¬¦  «         t          j        |t          j        ‰j        d         ¦  «        ‰ddd d¬¦  «        }t          j                             ‰|z  ‰d¬¦  «         d S )Nc                 ó4   •— ‰                      | ¦  «        ‰z
  S r$   rÐ   r3   s    €€r    r^   z'TestLinear._check_autojac.<locals>.funcR  s   ø€ Ø—5’5˜‘8”8˜a‘<Ðr"   c                 ó   •— ‰S r$   r%   )rL   r4   s    €r    r§   z&TestLinear._check_autojac.<locals>.jacU  s   ø€ ØˆHr"   r   r   rÑ   rÒ   rÓ   )rz   r×   r   rØ   ÚshapeÚtestingÚassert_allclose)r]   r4   r5   r^   r§   rÛ   s    ``   r    Ú_check_autojaczTestLinear._check_autojacQ  s÷   øø€ ð	 ð 	 ð 	 ð 	 ð 	 ð 	 ð	ð 	ð 	ð 	ð 	õ Ô! $­¬°´¸´Ñ(<Ô(<¸cÈ1Ø(,¸$ÈðKñ Kô Kˆå
Œ
×"Ò" 1 s¡7¨A°DÐ"Ñ9Ô9Ð9åÔ! $­¬°´¸´Ñ(<Ô(<¸aÈØ(,¸$ÈðKñ Kô Kˆå
Œ
×"Ò" 1 s¡7¨A°DÐ"Ñ9Ô9Ð9Ð9Ð9r"   c                 óÀ   — t          ddgddgg¦  «        }t          j        ddg¦  «        }|                      ||¦  «         |                      d|z  d|z  ¦  «         d S ©Nr
   r   r:   y      ð?       @y       @       @)r   r   r2   rð   ©r]   r4   r5   s      r    Útest_jac_sparsezTestLinear.test_jac_sparse`  si   € Ý˜˜1�v  1˜vÐ&Ñ'Ô'ˆÝŒH�a˜�WÑÔˆØ×Ò˜A˜qÑ!Ô!Ð!Ø×Ò˜V q™L¨6°Q©,Ñ7Ô7Ð7Ð7Ð7r"   c                 óÊ   — t          j        ddgddgg¦  «        }t          j        ddg¦  «        }|                      ||¦  «         |                      d|z  d|z  ¦  «         d S rò   )r   r2   rð   ró   s      r    Útest_jac_ndarrayzTestLinear.test_jac_ndarrayf  sk   € ÝŒH�q˜!�f˜q !˜fÐ%Ñ&Ô&ˆÝŒH�a˜�WÑÔˆØ×Ò˜A˜qÑ!Ô!Ð!Ø×Ò˜V q™L¨6°Q©,Ñ7Ô7Ð7Ð7Ð7r"   N)F)r‰   rŠ   r‹   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ð
:ð :ð :ð8ð 8ð 8ð8ð 8ð 8ð 8ð 8r"   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 )ÚTestJacobianDotSolvezP
    Check that solve/dot methods in Jacobian approximations are consistent
    c                 óH   — |dz  dz
  t          j        | j        |¦  «        z   S )Nr   r
   )r   r   r4   ©r]   r   s     r    Ú_funczTestJacobianDotSolve._funcr  s#   € Ø�!‰t�a‰x�"œ& ¤¨Ñ+Ô+Ñ+Ð+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Í   rD   c                  ód   •— t          j        j        | Ž }‰r|dt          j        j        | Ž z  z   }|S )NrÎ   )r   rÔ   Úrand)rl   ÚqrÚ   s     €r    rþ   z-TestJacobianDotSolve._check_dot.<locals>.randz  s6   ø€ Ý”	” Ð"ˆAØð .Ø˜�2œ9œ>¨1Ð-Ñ-Ñ-�ØˆHr"   c                 óÔ   •— t          | |z
  ¦  «                             ¦   «         }‰t          |¦  «                             ¦   «         ‰z  z   }||k    rt          |› d|d›�¦  «        ‚d S )Nz: err Úg)Úabsr\   ÚAssertionError)rl   r5   Úmsgr   r   Útols        €r    Úassert_closez5TestJacobianDotSolve._check_dot.<locals>.assert_close€  sh   ø€ Ý�A˜‘E‘
”
—’Ñ Ô ˆAØ•c˜!‘f”f—j’j‘l”l 3Ñ&Ñ&ˆAØ�1ŠuˆuÝ$¨Ð%8Ð%8°1Ð%8Ð%8Ð%8Ñ9Ô9Ð9ð ˆur"   r   Ú	__array__rH   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Õ   r4   rþ   rœ   rû   r¢   Úhasattrr2   rH   rG   r  r   Úconjr	  r   r
  r¡   )r]   r¥   rÚ   r  rm   rÙ   rþ   r  Úx0r§   r©   rL   ÚJdÚGvÚGv2ÚJvÚJv2r   s     ``              r    Ú
_check_dotzTestJacobianDotSolve._check_dotu  s"  øø€ Ý
Œ	�Š�sÑÔÐàˆð	ð 	ð 	ð 	ð 	ð	:ð 	:ð 	:ð 	:ð 	:ð ��a˜‘”ˆŒõ ŒY�^Š^˜AÑÔˆØˆgˆmˆm˜ˆmˆmˆØ�	Š	�"�d—j’j ‘n”n d¤jÑ1Ô1Ð1õ �q˜‘s‘”ð !	)ñ !	)ˆAØ��Q‘”ˆAå�s˜KÑ(Ô(ñ >Ý”X˜c‘]”]�Ý˜3 Ñ(Ô(ð <ØŸš 1™œ�BÝœ)Ÿ/š/¨"¨aÑ0Ô0�CØ �L  SÐ*:Ñ;Ô;Ð;Ý˜3 Ñ)Ô)ð =ØŸš A™œ�BÝœ)Ÿ/š/¨"¬$¯)ª)©+¬+°qÑ9Ô9�CØ �L  SÐ*;Ñ<Ô<Ð<Ý˜3 Ñ)Ô)ð :ØŸš A™œ�BÝœ&  Q™-œ-�CØ �L  S¨.Ñ9Ô9Ð9Ý˜3 	Ñ*Ô*ð >ØŸš Q™œ�BÝœ& ¤§¢¡¤¨aÑ0Ô0�CØ �L  SÐ*<Ñ=Ô=Ð=å�s˜HÑ%Ô%ð 6­'°#°wÑ*?Ô*?ð 6Ø—Z’Z ‘]”]�Ø—i’i §
¢
¨2¡¤Ñ/Ô/�Ø�˜R  nÑ5Ô5Ð5å�s˜IÑ&Ô&ð ;­7°3¸Ñ+AÔ+Að ;Ø—[’[ ‘^”^�Ø—k’k #§*¢*¨R¡.¤.Ñ1Ô1�Ø�˜R Ð&9Ñ:Ô:Ð:à��Q‘”ˆAØ�JŠJ�q˜$Ÿ*š* Q™-œ-Ñ(Ô(Ð(Ñ(ðC!	)ð !	)r"   c                 óŠ   — |                       t          j        d¬¦  «         |                       t          j        d¬¦  «         d S ©NF)rÚ   T)r  rz   r®   r¯   s    r    r°   z"TestJacobianDotSolve.test_broyden1±  ó:   € Ø�Š�Ô+°UˆÑ;Ô;Ð;Ø�Š�Ô+°TˆÑ:Ô:Ð:Ð:Ð:r"   c                 óŠ   — |                       t          j        d¬¦  «         |                       t          j        d¬¦  «         d S r  )r  rz   r²   r¯   s    r    r³   z"TestJacobianDotSolve.test_broyden2µ  s:   € Ø�Š�Ô,°eˆÑ<Ô<Ð<Ø�Š�Ô,°dˆÑ;Ô;Ð;Ð;Ð;r"   c                 óŠ   — |                       t          j        d¬¦  «         |                       t          j        d¬¦  «         d S r  )r  rz   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  rz   Ú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  rz   ÚLinearMixingr¯   s    r    Útest_linearmixingz&TestJacobianDotSolve.test_linearmixingÁ  r  r"   c                 óŠ   — |                       t          j        d¬¦  «         |                       t          j        d¬¦  «         d S r  )r  rz   ÚExcitingMixingr¯   s    r    Útest_excitingmixingz(TestJacobianDotSolve.test_excitingmixingÅ  s:   € Ø�Š�Ô-°uˆÑ=Ô=Ð=Ø�Š�Ô-°tˆÑ<Ô<Ð<Ð<Ð<r"   c                 óŽ   — |                       t          j        dd¬¦  «         |                       t          j        dd¬¦  «         d S )NFgü©ñÒMbP?)rÚ   r  T)r  rz   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ø   m  s°   € € € € € ðð ð,ð ,ð ,ð:)ð :)ð :)ð :)ð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·   ç•Ö&è.>)rz   r   r!   rZ   r   Únormrú   s     r    r°   z TestNonlinOldTests.test_broyden1Ô  ó`   € ÝŒO�A�qœu¨2°QÐ7Ñ7Ô7ˆÝ•”˜A‘” Ò%Ñ&Ô&Ð&Ý•”�A˜a™DœDÑ!Ô! DÒ(Ñ)Ô)Ð)Ð)Ð)r"   c                 ó  — t          j        t          t          j        dd¬¦  «        }t	          t          j        |¦  «        dk     ¦  «         t	          t          j        t          |¦  «        ¦  «        dk     ¦  «         d S r&  )rz   r   r!   rZ   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¸Õ?)rz   r   r!   rZ   r   r+  rú   s     r    rÉ   z TestNonlinOldTests.test_andersonÞ  s?   € ÝŒO�A�qœu¨2°T¸QÐ?Ñ?Ô?ˆÝ•”˜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(  çH¯¼šò×z>)rz   r   r!   rZ   r   r+  rú   s     r    r  z$TestNonlinOldTests.test_linearmixingâ  sa   € ÝÔ¥¥1¤5¨r¸Ð=Ñ=Ô=ˆÝ•”˜A‘” Ò%Ñ&Ô&Ð&Ý•”�A˜a™DœDÑ!Ô! 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ãˆµøä>)rz   r   r!   rZ   r   r+  rú   s     r    Útest_excitingz TestNonlinOldTests.test_excitingç  sa   € ÝÔ!¥!¥Q¤U°¸3Ð?Ñ?Ô?ˆÝ•”˜A‘” Ò%Ñ&Ô&Ð&Ý•”�A˜a™DœDÑ!Ô! 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(  ç:Œ0âŽyE>)rz   r   r!   rZ   r   r+  rú   s     r    r  z#TestNonlinOldTests.test_diagbroydenì  sa   € ÝÔ�q¥!¤%¨b¸Ð:Ñ:Ô:ˆÝ•”˜A‘” Ò%Ñ&Ô&Ð&Ý•”�A˜a™DœDÑ!Ô! 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
   ©Únitrc   rd   r*  ©r   r!   rZ   r   rz   r+  r   rg   ©r]   ri   s     r    Útest_root_broyden1z%TestNonlinOldTests.test_root_broyden1ñ  ót   € Ý•1•a”e JØ#%°wÀ°lÐCÐCðEñ Eô Eˆå•”˜CœEÑ"Ô" TÒ)Ñ*Ô*Ð*Ý•”˜CœGÑ$Ô$ 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;  rd   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;  rd   r0  )r   r!   rZ   r   rz   r+  r   r>  s     r    Útest_root_andersonz%TestNonlinOldTests.test_root_andersoný  sb   € Ý•1•a”e JØ#%Ø59ÀÐ+BÐ+BðDð DðEñ Eô Eˆõ 	•”˜CœEÑ"Ô" 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   r2  r·   r   r;  rd   r3  r=  r>  s     r    Útest_root_linearmixingz)TestNonlinOldTests.test_root_linearmixing  sx   € Ý•1•a”e NØ#%Ø,3°S¨>ð;ð ;ð<ñ <ô <ˆõ 	•”˜CœEÑ"Ô" TÒ)Ñ*Ô*Ð*Ý•”˜CœGÑ$Ô$ 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;  rd   r5  r=  r>  s     r    Útest_root_excitingmixingz+TestNonlinOldTests.test_root_excitingmixing
  sy   € Ý•1•a”eÐ$4Ø#%Ø,3°S¨>ð;ð ;ð<ñ <ô <ˆõ 	•”˜CœEÑ"Ô" TÒ)Ñ*Ô*Ð*Ý•”˜CœGÑ$Ô$ 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   r8  r·   r
   r;  rd   r9  r=  r>  s     r    Útest_root_diagbroydenz(TestNonlinOldTests.test_root_diagbroyden  sx   € Ý•1•a”e MØ#%Ø,3°Q¨<ð9ð 9ð:ñ :ô :ˆõ 	•”˜CœEÑ"Ô" TÒ)Ñ*Ô*Ð*Ý•”˜CœGÑ$Ô$ tÒ+Ñ,Ô,Ð,Ð,Ð,r"   N)r‰   rŠ   r‹   rŒ   r°   r³   rÉ   r  r6  r  r?  rB  rD  rF  rH  rJ  r%   r"   r    r$  r$  Î  sÒ   € € € € € ðð ð
*ð *ð *ð
*ð *ð *ð
'ð 'ð 'ð*ð *ð *ð
*ð *ð *ð
*ð *ð *ð
-ð -ð -ð-ð -ð -ð+ð +ð +ð-ð -ð -ð-ð -ð -ð-ð -ð -ð -ð -r"   r$  ),rŒ   Únumpy.testingr   rƒ   Úscipy.optimizer   rz   r   Úscipy.sparser   Únumpyr   r   Únumpy.linalgr	   r   r…   Útest_minpackr   r   r   r   r   r   r   r{   rX   rr   r!   rZ   rq   rY   rf   r'   r-   r6   r9   rA   rM   rO   r’   rË   rø   r$  r%   r"   r    ú<module>rQ     sñ  ððð ð "Ð !Ð !Ð !Ð !Ð !Ø €€€à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€à *Ð *Ð *Ð *Ð *Ð *à”Ø Ô,Ø!Ô.Ø#Ô2Ø”Ø”ØÔ)ð+ð +€ð  œ°f´oØœ°FÔ4Hð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€„ð €„Ø€Ô ðUDð UDð UDð UDð UDñ UDô UDð UDðpIBð IBð IBð IBð IBñ IBô IBð IBðXB8ð B8ð B8ð B8ð B8ñ B8ô B8ð B8ðJ^Gð ^Gð ^Gð ^Gð ^Gñ ^Gô ^Gð ^GðBH-ð H-ð H-ð H-ð H-ñ H-ô H-ð H-ð H-ð H-r"   