Ë
    çÿæiO  ã                   ó¾  — d Z ddlmZ ddlZddlm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 d
dlmZ ej.                  ej0                  ej2                  ej4                  ej6                  ej8                  ej:                  dœZej.                  ej6                  ej8                  ej:                  dœZd„ Z g d¢e _!        i e _"        i e _#        i e _$        d„ Z%g d¢e%_!        ej2                  ej4                  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j2                  ej4                  ej0                  dœe(_"        dhe(_#        h d£e(_$        d„ Z)g d¢e)_!        ej4                  ej2                  ej0                  dœe)_"        d dhe)_#        dhe)_$        d!„ Z*d"d#ge*_!        ej4                  ej2                  ej0                  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/y).zA Unit tests for nonlinear solvers
Author: Ondrej Certik
May 2007
é    )Úassert_N)Úpartial)Ú_nonlinÚroot)Ú	csr_array)ÚdiagÚdot)Úinv©Úminresé   )Ú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       úu/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/scipy/optimize/tests/test_nonlin.pyÚFr$   "   sN   € Ü
�
‰
�1‹�‰€AÜÒ Ó!€AØ€AØ	
ˆˆQ‰�”U˜1Ÿ3™3 ™7“^Ñ# aÑ'Ñ'€AØ€Hó    )r   r   r   r   r   c                 ó   — | S ©N© ©r   s    r#   ÚF2r*   0   ó   € Ø€Hr%   )r   r   r   é   é   é   )r   r   c                 ó   — | S r'   r(   r)   s    r#   ÚF2_luckyr0   ;   r+   r%   )r   r   r   r   r   r   c                 ó|   — t        j                  g d¢g d¢g d¢g«      }t        j                  g d¢«      }|| z  |z
  S )N)éþÿÿÿr   ç        )r   r2   r   )r   r   r2   )r   r   ç      @)r   Úarray©r   ÚAÚbs      r#   ÚF3r9   E   s3   € Ü
�‰’+šzª:Ð6Ó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   r7   s     r#   Ú	F4_powellr<   Q   sT   € Ø€AØˆa�‰d‰F�1�Q‘4‰K˜!‰OœRŸV™V Q q¡T E›]¬R¯V©V°Q°q±T°E«]Ñ:¸aÀ!ÀAÁ#¹gÑFÐGÐGr%   éÿÿÿÿr2   )r   r   r   r   >   ÚcgsÚgmresÚtfqmrr   Úbicgstabc                 óF   — t        | dt        j                  g d¢«      «      S )Nr,   )r   r   r   r   )r   r   r5   r)   s    r#   ÚF5rC   a   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                  j                  ||«       S )
Ng /Ý$Àgffffff-@g+åÌ,Ýê?gr•þ�D0ã?r   r-   é   é   r   )r   r5   Úsinr;   ÚlinalgÚsolve)r   Úx1Úx2ÚJ0Úvs        r#   ÚF6rO   p   sŒ   € Ø�F€BˆÜ	�‰�F˜D�>Ø˜zÐ*ð,ó 
-€Bä
�‰�2˜‘6˜b !™e a™iÑ(¨3Ñ.Ü—&‘&˜œbŸf™f R›j™¨1Ñ,Ó-ð/ó 	0€Aä�I‰I�O‰O˜B Ó"Ð"Ð"r%   g      à¿gffffffö?c                   ór  — e Zd ZdZdd„Zdd„Zej                  j                  d„ «       Z	ej                  j                  d«      d„ «       Zej                  j                  d«      ej                  j                  dg d¢«      d	„ «       «       Zej                  j                  d«      d
„ «       Zd„ Zd„ Zd„ Zy)Ú
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.

    c           
      ó|  — |t         d   k(  rddD ]_  }||j                  v rŒ |||j                  |d |dd¬«      }t        t	        j
                   ||«      «      j                  «       |k  «       Œa  |||j                  |dd¬«      }t        t	        j
                   ||«      «      j                  «       |k  «       y )Nr   ©r?   rA   r>   r   r@   éÈ   r   )ÚmethodÚline_searchÚf_tolÚmaxiterÚverbose)rW   rX   rY   )ÚSOLVERSÚJAC_KSP_BADÚxinr   r   ÚabsoluteÚmax)Úselfr"   ÚfuncrW   rU   r   s         r#   Ú_check_nonlin_funczTestNonlin._check_nonlin_func�   s¤   € à”7˜8Ñ$Ò$ÛI�Ø˜QŸ]™]Ñ*Øá˜˜AŸE™E¨&¸dØ$¨c¸1ô>�äœŸ™¡A a£DÓ)×-Ñ-Ó/°%Ñ7Õ8ð Jñ ��A—E‘E °¸QÔ?ˆÜ”—‘™A˜a›DÓ!×%Ñ%Ó'¨%Ñ/Õ0r%   c                 ó˜  — |dk(  rodD ]j  }||j                   v rŒt        ||j                  ||ddd|idœ¬«      }t        t	        j
                  |j                  «      j                  «       |k  «       Œl t        ||j                  ||dddœ¬«      }t        t	        j
                  |j                  «      j                  «       |k  «       y )	Nr   rS   rT   r   rU   )ÚftolrX   ÚdispÚjac_options©rU   Úoptions)rc   rX   rd   )ÚROOT_JAC_KSP_BADr   r\   r   r   r]   Úfunr^   )r_   r"   rU   rW   Ú
jac_methodÚress         r#   Ú_check_rootzTestNonlin._check_root�   sº   € à�XÒÛM�
Ø ×!3Ñ!3Ñ3Øä˜1˜aŸe™e¨FØ,1¸cØ,-Ø4<¸jÐ3Iñ$KôL�ô œŸ™ C§G¡GÓ,×0Ñ0Ó2°UÑ:Õ;ð Nô �1�a—e‘e FØ$)°cÀ1ÑEôGˆä”—‘˜CŸG™GÓ$×(Ñ(Ó*¨UÑ2Õ3r%   c                  ó   — y r'   r(   )r_   ÚaÚkws      r#   Ú_check_func_failzTestNonlin._check_func_fail®   s   € àr%   zignore::DeprecationWarningc                 ó8  — t         t        t        t        t        t
        t        fD ]r  }t        j                  «       D ]Y  }||j                  j                  «       v r)|t        j                  «       v r| j                  ||«       ŒH| j                  ||«       Œ[ Œt y r'   )r$   r*   r0   r9   r<   rC   rO   rZ   ÚvaluesÚ	KNOWN_BADÚ	MUST_WORKrp   ra   )r_   r"   r`   s      r#   Útest_problem_nonlinzTestNonlin.test_problem_nonlin²   su   € ä”Rœ¤2¤y´"´bÓ9ˆAÜŸ™Ö(�Ø˜1Ÿ;™;×-Ñ-Ó/Ñ/Øœy×/Ñ/Ó1Ñ1Ø×-Ñ-¨a°Ô6ØØ×'Ñ'¨¨4Õ0ñ )ñ :r%   rU   )Úlgmresr?   rA   r>   r   r@   c           	      ó¤   ‡ — d‰ _         ˆ fd„}t        j                  t        t        j                  |ddd|¬«       t        ‰ j                   «       y )NFc                 óX   •— d‰_         t        j                  | «      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   rT   r   )rU   rW   rX   rY   Útol_norm)ry   ÚnonlinÚnewton_krylovr$   r\   r   )r_   rU   rz   s   `  r#   Útest_tol_norm_calledzTestNonlin.test_tol_norm_called¼   sF   ø€ ð
 $ˆÔô	(ô 	×ÑœQ¤§¡¨f¸DØ%(°!Ø&5õ	7ô 	�×#Ñ#Õ$r%   c                 óä   — t         t        t        t        t        t
        t        fD ]H  }t        D ]=  }||j                  v r|t        v r| j                  ||«       Œ,| j                  ||«       Œ? ŒJ y r'   )r$   r*   r0   r9   r<   rC   rO   rZ   rs   rt   rp   rl   )r_   r"   Úmeths      r#   Útest_problem_rootzTestNonlin.test_problem_rootÌ   s\   € ä”Rœ¤2¤y´"´bÓ9ˆAß�Ø˜1Ÿ;™;Ñ&ØœyÑ(Ø×-Ñ-¨a°Ô6ØØ× Ñ   DÕ)ñ  ñ :r%   c                 óÀ   — d„ }t        j                  t        j                  j                  «      5  t        j                  |dgd¬«       d d d «       y # 1 sw Y   y xY w)Nc                 ó   — d| z   S )Ng     @�@r(   r)   s    r#   Úwont_convergez5TestNonlin.test_no_convergence.<locals>.wont_converge×   s   € Ø˜‘7ˆNr%   r   r   )r\   rX   )ÚpytestÚraisesÚscipyÚoptimizeÚNoConvergencer|   r}   )r_   r„   s     r#   Útest_no_convergencezTestNonlin.test_no_convergenceÖ   s?   € ò	ô �]‰]œ5Ÿ>™>×7Ñ7Õ8Ü× Ñ  °Q°CÀÕC÷ 9×8Ñ8ús   ±AÁAc                 ón  — t        j                  t        d¬«      5  t        j                  t
        t
        j                  dd¬«       ddd«       t        j                  t
        t
        j                  ddd„ ¬	«       d
„ }t        j                  t
        t
        j                  |¬«       y# 1 sw Y   ŒdxY w)a  
        Test for ENH #21986, for behavior of `nonlin.newton_krylov`
        Test the following scenarios:
        1. Raise warning for invalid inner param
        2. No warning for valid inner param
        3. No warning for user-provided callable method
        z'Please check inner method documentation©Úmatchr   çñhãˆµøä>)rU   Ú
inner_atolNéd   c                  ó   — y)N.r(   )Ú_s    r#   Ú<lambda>z>TestNonlin.test_warnings_invalid_inner_param.<locals>.<lambda>î   s   € ¸r%   )rU   Úinner_maxiterÚinner_callbackc                 ó   — t        | |fi |¤ŽS )z2A dummy user-provided callable method for testing.r   )ÚopÚrhsÚkwargss      r#   Ú'user_provided_callable_method_enh_21986z]TestNonlin.test_warnings_invalid_inner_param.<locals>.user_provided_callable_method_enh_21986ñ   s   € ô ˜"˜cÑ, VÑ,Ð,r%   )rU   )r…   ÚwarnsÚUserWarningr|   r}   r$   r\   )r_   rš   s     r#   Ú!test_warnings_invalid_inner_paramz,TestNonlin.test_warnings_invalid_inner_paramÝ   s�   € ô �\‰\œ+Ø IöKä× Ñ ¤¤A§E¡E°(ÀtÕL÷Kô 	×ÑœQ¤§¡¨hÀcÙ-;õ	=ò	-ô
 	×ÑœQ¤§¡Ø$Kö	M÷Kð Kús   œ,B+Â+B4c                 óº   — t        j                  t        d¬«      5  t        j                  t
        t
        j                  dd¬«       d d d «       y # 1 sw Y   y xY w)NzUnknown parameterrŒ   r   rŽ   )rU   Úinvalid_param)r…   r†   Ú
ValueErrorr|   r}   r$   r\   ©r_   s    r#   Útest_non_inner_prefixz TestNonlin.test_non_inner_prefixù   s=   € Ü�]‰]œ:Ø!4öô × Ñ ¤¤A§E¡E°(È$ÕO÷	÷ ñ ús   œ,AÁAN)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ra   rl   r…   ÚmarkÚxfailrp   Úfilterwarningsru   Úparametrizer~   r�   rŠ   r�   r¢   r(   r%   r#   rQ   rQ   †   sË   „ ñó1ó4ð" ‡[�[×Ññó ðð ‡[�[×ÑÐ <Ó=ñ1ó >ð1ð ‡[�[×ÑÐ <Ó=Ø‡[�[×Ñ˜Xò (;ó <ñ%ó<ó >ð%ð ‡[�[×ÑÐ <Ó=ñ*ó >ð*òDòMó8Pr%   rQ   c                   ó¦  — 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eD � �cg c]
  }|d
z  dz
  ‘Œ c}} Zdd„Zd„ Z	d„ Z
d„ Zd„ Zd„ Zyc c}} w )Ú
TestSecantzDCheck that some Jacobian approximations satisfy the secant condition)ç      ð?rD   r4   ç      @ç      @)rD   r4   r®   r¯   r­   )r4   r®   r¯   r­   rD   )r®   r¯   r­   rD   r4   )ç      "@r­   r°   r­   r4   )r3   r­   r°   r­   r4   )r¯   r¯   ç      @r­   r­   )r­   rD   r±   r¯   r­   r   r   c           
      óJ  —  |di |¤Ž}|j                  | j                  d   | j                  d   d«       t        t	        | j                  dd | j                  dd «      «      D �];  \  }\  }}|j                  ||«       t        t        ||dz   «      «      D ]€  }| j                  ||z
  dz      | j                  ||z
     z
  }	| j                  ||z
  dz      | j                  ||z
     z
  }
t        t        j                  |	|j                  |
«      «      «       Œ‚ ||k\  sŒ½| j                  ||z
  dz      | j                  ||z
     z
  }	| j                  ||z
  dz      | j                  ||z
     z
  }
t        t        j                  |	|j                  |
«      «       «       �Œ> y)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   ÚallcloserJ   )r_   Újac_clsÚnpointsro   ÚjacÚjr   r"   ÚkÚdxÚdfs              r#   Ú_check_secantzTestSecant._check_secant  sh  € ñ
 ‰m˜‰mˆØ�	‰	�$—'‘'˜!‘*˜dŸg™g a™j¨$Ô/Ü"¤3 t§w¡w¨q¨r {°D·G±G¸A¸B°KÓ#@×A‰IˆA‰v��1Ø�J‰J�q˜!Ôäœ3˜w¨¨!©Ó,Ö-�Ø—W‘W˜Q˜q™S ™U‘^ d§g¡g¨a°©c¡lÑ2�Ø—W‘W˜Q˜q™S ™U‘^ d§g¡g¨a°©c¡lÑ2�ÜœŸ™ B¨¯	©	°"«Ó6Õ7ð .ð �G‹|Ø—W‘W˜Q˜w™Y q™[Ñ)¨D¯G©G°A°g±IÑ,>Ñ>�Ø—W‘W˜Q˜w™Y q™[Ñ)¨D¯G©G°A°g±IÑ,>Ñ>�ÜœBŸK™K¨¨C¯I©I°b«MÓ:Ð:Ö;ñ Br%   c                 óB   — | j                  t        j                  «       y r'   )rÃ   r|   ÚBroydenFirstr¡   s    r#   Útest_broyden1zTestSecant.test_broyden1#  s   € Ø×Ñœ6×.Ñ.Õ/r%   c                 óB   — | j                  t        j                  «       y r'   )rÃ   r|   ÚBroydenSecondr¡   s    r#   Útest_broyden2zTestSecant.test_broyden2&  s   € Ø×Ñœ6×/Ñ/Õ0r%   c           	      óZ  — t        j                  d¬«      }|j                  | 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  }|j                  ||«       t        t        j                  |j                  «       |dd¬	«      «       Œ  y )
Nçš™™™™™¹?©Úalphar   r-   g      $Àr   ç»½×Ùß|Û=ç‚vIhÂ%<=©ÚrtolÚatol)r|   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)  sû   € ä×!Ñ!¨Ô,ˆØ�	‰	�$—'‘'˜!‘*˜dŸg™g a™j¨$Ô/ä�K‰K˜‹N˜fÑ%ˆä'¬¨D¯G©G°A°B¨K¸¿¹ÀÀ¸Ó(EÖF‰NˆF‘F�Q˜Ø�T—W‘W˜V‘_Ñ$ˆBØ�T—W‘W˜V‘_Ñ$ˆBØ�"”s˜1˜b“z‘/¢1 d 7Ñ+¨b°²q°©kÑ9¼CÀÀB»KÑGÑGˆAØ�J‰J�q˜!ÔÜ”B—K‘K §¡£¨q°uÀ5ÔIÕJñ Gr%   c           	      ól  — t        j                  d¬«      }|j                  | 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  }|j                  ||«       t        t        j                  |j                  «       t        |«      dd¬	«      «       Œ© y )
NrË   rÌ   r   r-   gš™™™™™¹¿r   rÎ   rÏ   rÐ   )r|   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_update7  sÿ   € ä×"Ñ"¨Ô-ˆØ�	‰	�$—'‘'˜!‘*˜dŸg™g a™j¨$Ô/ä�K‰K˜‹N˜dÑ#ˆä'¬¨D¯G©G°A°B¨K¸¿¹ÀÀ¸Ó(EÖF‰NˆF‘F�Q˜Ø�T—W‘W˜V‘_Ñ$ˆBØ�T—W‘W˜V‘_Ñ$ˆBØ�"”s˜1˜b“z‘/¢1 d 7Ñ+¨b°²q°©kÑ9¼CÀÀB»KÑGÑGˆAØ�J‰J�q˜!ÔÜ”B—K‘K §¡£¬s°1«v¸EÈÔNÕOñ Gr%   c                 óJ   — | j                  t        j                  ddd¬«       y )Nr   r   )ÚMÚw0r½   )rÃ   r|   ÚAndersonr¡   s    r#   Útest_andersonzTestSecant.test_andersonE  s   € ð
 	×Ñœ6Ÿ?™?¨a°A¸qÐÕAr%   N)r   )r£   r¤   r¥   r¦   r   r5   r´   rµ   rÃ   rÆ   rÉ   r×   rÚ   rß   )Ú.0r   s   00r#   r¬   r¬     sÉ   „ ÙNà
ˆ"�(‰(Ò'Ó
(Ø
ˆ"�(‰(Ò'Ó
(Ø
ˆ"�(‰(Ò'Ó
(Ø
ˆ"�(‰(Ò'Ó
(Ø
ˆ"�(‰(Ò'Ó
(Ø
ˆ"�(‰(Ò'Ó
(Ø
ˆ"�(‰(Ò'Ó
(Ø
ˆ"�(‰(Ò'Ó
(ð
+€Bñ Ô	™B�qˆ!ˆQ‰$�‹(˜BÒ	€Bó<ò*0ò1òKòPóBùós 
 s   Â&Cr¬   c                   óB   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)Ú
TestLinearz]Solve a linear equation;
    some methods find the exact solution in a finite number of stepsc           	      ó¶  ‡	‡
— t         j                  j                  d«      }|j                  ||f«      Š	|r‰	d|j                  ||f«      z  z   Š	|j                  |«      Š
|r‰
d|j                  |«      z  z   Š
ˆ	ˆ
fd„}t	        j
                  |t        j                  |«      ||dd d¬«      }t        t        j                  t        ‰	|«      ‰
d¬«      «       y )Né{   ù              ð?c                 ó"   •— t        ‰| «      ‰z
  S r'   ©r	   r6   s    €€r#   r`   zTestLinear._check.<locals>.func[  s   ø€ Ü�q˜!“9˜q‘=Ð r%   ç�íµ ÷Æ°>r   ©rX   rW   rV   rY   ©rÒ   )
r   ÚrandomÚdefault_rngÚstandard_normalr|   Únonlin_solveÚzerosr   r»   r	   )r_   r¾   ÚNrX   Úcomplexro   Úrngr`   Úsolr7   r8   s            @@r#   Ú_checkzTestLinear._checkQ  sÃ   ù€ Ü�i‰i×#Ñ# CÓ(ˆà×Ñ  A Ó'ˆÙØ�B�s×*Ñ*¨A¨q¨6Ó2Ñ2Ñ2ˆAØ×Ñ Ó"ˆÙØ�B�s×*Ñ*¨1Ó-Ñ-Ñ-ˆAõ	!ô ×!Ñ! $¬¯©°«°SÀ'Ø(,¸$ÈôKˆä”—‘œC  3›K¨°Ô6Õ7r%   c                 ó¤   — | j                  t        j                  d¬«      ddd«       | j                  t        j                  d¬«      ddd«       y ©Nr­   rÌ   é   é)   FT)rô   r|   rÅ   r¡   s    r#   rÆ   zTestLinear.test_broyden1b  s<   € à�‰”F×'Ñ'¨cÔ2°B¸¸EÔBØ�‰”F×'Ñ'¨cÔ2°B¸¸DÕAr%   c                 ó¤   — | j                  t        j                  d¬«      ddd«       | j                  t        j                  d¬«      ddd«       y rö   )rô   r|   rÈ   r¡   s    r#   rÉ   zTestLinear.test_broyden2g  s<   € à�‰”F×(Ñ(¨sÔ3°R¸¸UÔCØ�‰”F×(Ñ(¨sÔ3°R¸¸TÕBr%   c                 ó¨   — | j                  t        j                  dd¬«      ddd«       | j                  t        j                  dd¬«      ddd«       y )Né2   r­   )rÜ   rÍ   r÷   é   FT)rô   r|   rÞ   r¡   s    r#   rß   zTestLinear.test_andersonl  s<   € à�‰”F—O‘O b°Ô4°b¸"¸eÔDØ�‰”F—O‘O b°Ô4°b¸"¸dÕCr%   c                 ó”   — | j                  t        j                  dddd¬«       | j                  t        j                  dddd¬«       y )Nr÷   r   Fé
   )Úinner_mT)rô   r|   ÚKrylovJacobianr¡   s    r#   Útest_krylovzTestLinear.test_krylovq  s:   € à�‰”F×)Ñ)¨2¨q°%ÀˆÔDØ�‰”F×)Ñ)¨2¨q°$ÀˆÕCr%   c           	      ó¢  ‡‡— ˆˆfd„}ˆfd„}t        j                  |t        j                  ‰j                  d   «      |ddd d¬«      }t        j
                  j                  ‰|z  ‰d¬«       t        j                  |t        j                  ‰j                  d   «      ‰ddd d¬«      }t        j
                  j                  ‰|z  ‰d¬«       y )Nc                 ó,   •— ‰j                  | «      ‰z
  S r'   rç   r6   s    €€r#   r`   z'TestLinear._check_autojac.<locals>.funcw  s   ø€ Ø—5‘5˜“8˜a‘<Ðr%   c                 ó   •— ‰S r'   r(   )rN   r7   s    €r#   r¾   z&TestLinear._check_autojac.<locals>.jacz  s   ø€ ØˆHr%   r   r   rè   ré   rê   )r|   rî   r   rï   ÚshapeÚtestingÚassert_allclose)r_   r7   r8   r`   r¾   ró   s    ``   r#   Ú_check_autojaczTestLinear._check_autojacv  s«   ù€ õ	 ô	ô ×!Ñ! $¬¯©°·±¸±Ó(<¸cÈ1Ø(,¸$ÈôKˆä
�
‰
×"Ñ" 1 s¡7¨A°DÐ"Ô9ä×!Ñ! $¬¯©°·±¸±Ó(<¸aÈØ(,¸$ÈôKˆä
�
‰
×"Ñ" 1 s¡7¨A°DÐ"Õ9r%   c                 ó¨   — t        ddgddgg«      }t        j                  ddg«      }| j                  ||«       | j                  d|z  d|z  «       y ©Nr   r   r=   y      ð?       @y       @       @)r   r   r5   r  ©r_   r7   r8   s      r#   Útest_jac_sparsezTestLinear.test_jac_sparse…  sS   € Ü˜˜1�v  1˜vÐ&Ó'ˆÜ�H‰H�a˜�WÓˆØ×Ñ˜A˜qÔ!Ø×Ñ˜V q™L¨6°Q©,Õ7r%   c                 ó¼   — t        j                  ddgddgg«      }t        j                  ddg«      }| j                  ||«       | j                  d|z  d|z  «       y r
  )r   r5   r  r  s      r#   Útest_jac_ndarrayzTestLinear.test_jac_ndarray‹  sW   € Ü�H‰H�q˜!�f˜q !˜fÐ%Ó&ˆÜ�H‰H�a˜�WÓˆØ×Ñ˜A˜qÔ!Ø×Ñ˜V q™L¨6°Q©,Õ7r%   N)F)r£   r¤   r¥   r¦   rô   rÆ   rÉ   rß   r  r  r  r  r(   r%   r#   râ   râ   M  s4   „ ñHó8ò"Bò
Cò
Dò
Dò
:ò8ó8r%   râ   c                   óJ   — e Zd ZdZdd„Zdd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zy)ÚTestJacobianDotSolvezP
    Check that solve/dot methods in Jacobian approximations are consistent
    Nc                 ó@   — |dz  dz
  t        j                  ||«      z   S )Nr   r   )r   r	   )r_   r   r7   s      r#   Ú_funczTestJacobianDotSolve._func—  s   € Ø�!‰t�a‰xœ"Ÿ&™&  A›,Ñ&Ð&r%   c                 ó¤  ‡‡‡— t         j                  j                  d«      Šd}ˆˆfd„}ˆfd„} |||«      }‰j                  |«      }	 |di |¤Ž}
|
j                  |	| j	                  |	|«      t        | j                  |¬«      «       t        d|z  «      D �]5  } ||«      }t        |
d«      �rMt        j                  |
«      }t        |
d«      r;|
j                  |«      }t         j                  j                  ||«      } |||d	«       t        |
d
«      rS|
j                  |«      }t         j                  j                  |j                  j                  «       |«      } |||d«       t        |
d«      r1|
j                  |«      }t        j                  ||«      } |||d«       t        |
d«      rI|
j!                  |«      }t        j                  |j                  j                  «       |«      } |||d«       t        |
d«      rGt        |
d«      r;|
j                  |«      }|
j                  |
j                  |«      «      } |||d«       t        |
d«      rGt        |
d
«      r;|
j!                  |«      }|
j!                  |
j                  |«      «      } |||d«        ||«      }|
j#                  || j	                  ||«      «       �Œ8 y )Nrä   rF   c                  ó\   •— ‰j                  | «      }‰r|d‰j                  | «      z  z   }|S )Nrå   )rë   )rn   Úqrñ   rò   s     €€r#   Úrandz-TestJacobianDotSolve._check_dot.<locals>.randŸ  s/   ø€ Ø—
‘
˜1“ˆAÙØ˜˜3Ÿ:™: a›=Ñ(Ñ(�ØˆHr%   c                 ó¨   •— t        | |z
  «      j                  «       }‰t        |«      j                  «       ‰z  z   }||kD  rt        |› d|d›�«      ‚y )Nz: err Úg)Úabsr^   ÚAssertionError)rn   r8   Úmsgr    r"   Útols        €r#   Úassert_closez5TestJacobianDotSolve._check_dot.<locals>.assert_close¥  sT   ø€ Ü�A˜‘E“
—‘Ó ˆAØ”c˜!“f—j‘j“l 3Ñ&Ñ&ˆAØ�1ŠuÜ$¨ u¨F°1°Q°%Ð%8Ó9Ð9ð r%   )r7   r   Ú	__array__rJ   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ì   r³   r  r   r¹   Úhasattrr5   rJ   rI   r  r   Úconjr   r	   r!  r¸   )r_   r¼   rñ   r  ro   rð   r  r  r7   Úx0r¾   rÀ   rN   ÚJdÚGvÚGv2ÚJvÚJv2r   rò   s     ``               @r#   Ú
_check_dotzTestJacobianDotSolve._check_dotš  s9  ú€ Ü�i‰i×#Ñ# CÓ(ˆàˆõ	ô	:ñ ��A‹Jˆð �Z‰Z˜‹]ˆÙ‰m˜‰mˆØ�	‰	�"�d—j‘j  QÓ'¬°·±¸qÔ)AÔBô �q˜‘s—ˆAÙ�Q“ˆAä�s˜KÕ(Ü—X‘X˜c“]�Ü˜3 Ô(ØŸ™ 1›�BÜŸ)™)Ÿ/™/¨"¨aÓ0�CÙ   SÐ*:Ô;Ü˜3 Ô)ØŸ™ A›�BÜŸ)™)Ÿ/™/¨"¯$©$¯)©)«+°qÓ9�CÙ   SÐ*;Ô<Ü˜3 Ô)ØŸ™ A›�BÜŸ&™&  Q›-�CÙ   S¨.Ô9Ü˜3 	Ô*ØŸ™ Q›�BÜŸ&™& §¡§¡£¨aÓ0�CÙ   SÐ*<Ô=ä�s˜HÔ%¬'°#°wÔ*?Ø—Z‘Z “]�Ø—i‘i §
¡
¨2£Ó/�Ù˜R  nÔ5ä�s˜IÔ&¬7°3¸Ô+AØ—[‘[ “^�Ø—k‘k #§*¡*¨R£.Ó1�Ù˜R Ð&9Ô:á�Q“ˆAØ�J‰J�q˜$Ÿ*™* Q¨Ó*Ö+ñC r%   c                 óˆ   — | j                  t        j                  d¬«       | j                  t        j                  d¬«       y ©NF)rñ   T)r*  r|   rÅ   r¡   s    r#   rÆ   z"TestJacobianDotSolve.test_broyden1Ö  ó.   € Ø�‰œ×+Ñ+°UˆÔ;Ø�‰œ×+Ñ+°TˆÕ:r%   c                 óˆ   — | j                  t        j                  d¬«       | j                  t        j                  d¬«       y r,  )r*  r|   rÈ   r¡   s    r#   rÉ   z"TestJacobianDotSolve.test_broyden2Ú  s.   € Ø�‰œ×,Ñ,°eˆÔ<Ø�‰œ×,Ñ,°dˆÕ;r%   c                 óˆ   — | j                  t        j                  d¬«       | j                  t        j                  d¬«       y r,  )r*  r|   rÞ   r¡   s    r#   rß   z"TestJacobianDotSolve.test_andersonÞ  s*   € Ø�‰œŸ™°ˆÔ7Ø�‰œŸ™°ˆÕ6r%   c                 óˆ   — | j                  t        j                  d¬«       | j                  t        j                  d¬«       y r,  )r*  r|   ÚDiagBroydenr¡   s    r#   Útest_diagbroydenz%TestJacobianDotSolve.test_diagbroydenâ  s.   € Ø�‰œ×*Ñ*°EˆÔ:Ø�‰œ×*Ñ*°DˆÕ9r%   c                 óˆ   — | j                  t        j                  d¬«       | j                  t        j                  d¬«       y r,  )r*  r|   ÚLinearMixingr¡   s    r#   Útest_linearmixingz&TestJacobianDotSolve.test_linearmixingæ  r-  r%   c                 óˆ   — | j                  t        j                  d¬«       | j                  t        j                  d¬«       y r,  )r*  r|   ÚExcitingMixingr¡   s    r#   Útest_excitingmixingz(TestJacobianDotSolve.test_excitingmixingê  s.   € Ø�‰œ×-Ñ-°uˆÔ=Ø�‰œ×-Ñ-°tˆÕ<r%   c                 óŒ   — | j                  t        j                  dd¬«       | j                  t        j                  dd¬«       y )NFgü©ñÒMbP?)rñ   r  T)r*  r|   r   r¡   s    r#   r  z TestJacobianDotSolve.test_krylovî  s2   € Ø�‰œ×-Ñ-°uÀ$ˆÔGØ�‰œ×-Ñ-°tÀˆÕFr%   r'   )Frè   )r£   r¤   r¥   r¦   r  r*  rÆ   rÉ   rß   r2  r5  r8  r  r(   r%   r#   r  r  ’  s6   „ ñó'ó:,òx;ò<ò7ò:ò;ò=óGr%   r  c                   óX   — 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y)Ú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  «       y ©Né   r   ©ÚiterrÍ   ç•Ö&è.>)r|   r   r$   r\   r   Únorm©r_   r   s     r#   rÆ   z TestNonlinOldTests.test_broyden1ù  óI   € Ü�O‰OœAœqŸu™u¨2°QÔ7ˆÜ”—‘˜A“ Ñ%Ô&Ü”—‘œA˜a›DÓ! DÑ(Õ)r%   c                 óð   — t        j                  t        t        j                  dd¬«      }t	        t        j
                  |«      dk  «       t	        t        j
                  t        |«      «      dk  «       y r=  )r|   r   r$   r\   r   rB  rC  s     r#   rÉ   z TestNonlinOldTests.test_broyden2þ  rD  r%   c                 óž   — t        j                  t        t        j                  ddd¬«      }t	        t        j
                  |«      dk  «       y )Nr>  ç¸…ëQ¸ž?r-   )r@  rÍ   rÜ   ç…ëQ¸Õ?)r|   r   r$   r\   r   rB  rC  s     r#   rß   z TestNonlinOldTests.test_anderson  s1   € Ü�O‰OœAœqŸu™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  «       y )Né<   r   r?  çH¯¼šò×z>)r|   r   r$   r\   r   rB  rC  s     r#   r5  z$TestNonlinOldTests.test_linearmixing  sK   € Ü×Ñ¤¤1§5¡5¨r¸Ô=ˆÜ”—‘˜A“ Ñ%Ô&Ü”—‘œA˜a›DÓ! DÑ(Õ)r%   c                 óð   — t        j                  t        t        j                  dd¬«      }t	        t        j
                  |«      dk  «       t	        t        j
                  t        |«      «      dk  «       y )Nr÷   r   r?  rŽ   )r|   r   r$   r\   r   rB  rC  s     r#   Útest_excitingz TestNonlinOldTests.test_exciting  sK   € Ü×!Ñ!¤!¤Q§U¡U°¸3Ô?ˆÜ”—‘˜A“ Ñ%Ô&Ü”—‘œA˜a›DÓ! DÑ(Õ)r%   c                 óð   — t        j                  t        t        j                  dd¬«      }t	        t        j
                  |«      dk  «       t	        t        j
                  t        |«      «      dk  «       y )Né   r   r?  ç:Œ0âŽyE>)r|   r   r$   r\   r   rB  rC  s     r#   r2  z#TestNonlinOldTests.test_diagbroyden  sK   € Ü×Ñœq¤!§%¡%¨b¸Ô:ˆÜ”—‘˜A“ Ñ%Ô&Ü”—‘œA˜a›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  «       y )Nr   r>  rÍ   r   ©Únitre   rf   rA  ©r   r$   r\   r   r|   rB  r   ri   ©r_   rk   s     r#   Útest_root_broyden1z%TestNonlinOldTests.test_root_broyden1  óW   € Ü”1”a—e‘e JØ#%°wÀ°lÑCôEˆä”—‘˜CŸE™EÓ" TÑ)Ô*Ü”—‘˜CŸG™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  «       y )Nr   r>  rÍ   r   rR  rf   rA  rT  rU  s     r#   Útest_root_broyden2z%TestNonlinOldTests.test_root_broyden2  rW  r%   c           	      ó¨   — t        t        t        j                  dddddœdœ¬«      }t        t	        j
                  |j                  «      dk  «       y )	Nr   r>  rG  r-   )rÍ   rÜ   rR  rf   rH  )r   r$   r\   r   r|   rB  r   rU  s     r#   Útest_root_andersonz%TestNonlinOldTests.test_root_anderson"  sD   € Ü”1”a—e‘e JØ#%Ø59ÀÑ+BñDôEˆô 	”—‘˜CŸE™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  «       y )Nr   rJ  rÍ   r   rR  rf   rK  rT  rU  s     r#   Útest_root_linearmixingz)TestNonlinOldTests.test_root_linearmixing(  s[   € Ü”1”a—e‘e NØ#%Ø,3°S¨>ñ;ô<ˆô 	”—‘˜CŸE™EÓ" TÑ)Ô*Ü”—‘˜CŸG™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  «       y )Nr   r÷   rÍ   r   rR  rf   rŽ   rT  rU  s     r#   Útest_root_excitingmixingz+TestNonlinOldTests.test_root_excitingmixing/  s\   € Ü”1”a—e‘eÐ$4Ø#%Ø,3°S¨>ñ;ô<ˆô 	”—‘˜CŸE™EÓ" TÑ)Ô*Ü”—‘˜CŸG™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  «       y )Nr   rO  rÍ   r   rR  rf   rP  rT  rU  s     r#   Útest_root_diagbroydenz(TestNonlinOldTests.test_root_diagbroyden6  s[   € Ü”1”a—e‘e MØ#%Ø,3°Q¨<ñ9ô:ˆô 	”—‘˜CŸE™EÓ" TÑ)Ô*Ü”—‘˜CŸG™GÓ$ tÑ+Õ,r%   N)r£   r¤   r¥   r¦   rÆ   rÉ   rß   r5  rM  r2  rV  rY  r[  r]  r_  ra  r(   r%   r#   r;  r;  ó  sC   „ ñò
*ò
*ò
'ò*ò
*ò
*ò
-ò-ò+ò-ò-ó-r%   r;  )0r¦   Únumpy.testingr   r…   Ú	functoolsr   Úscipy.optimizer   r|   r   Úscipy.sparser   Únumpyr   r	   Únumpy.linalgr
   r   r‡   Úscipy.sparse.linalgr   Útest_minpackr   r   r   r   r   r   r   r}   rZ   rt   r$   r\   rs   r[   rh   r*   r0   r9   r<   rC   rO   rQ   r¬   râ   r  r;  r(   r%   r#   Ú<module>rj     s\  ðñõ "Û Ý ç 2Ý "ß Ý Û Û Ý &å *à—‘Ø ×,Ñ,Ø!×.Ñ.Ø#×2Ñ2Ø—‘Ø—‘Ø×)Ñ)ñ+€ð  Ÿ™°f·o±oØŸ™°F×4HÑ4HñJ€	òò 	€„Ø€„Ø€„Ø€Ô òò 
€„Ø &× 3Ñ 3Ø"(×"7Ñ"7ñ9€„à€„Ø€Ô òò "€„Ø€Ô Ø€Ô Ø€Ô òò 
€„Ø€„Ø€„Ø€Ô òHð
 �R�€	„Ø'-×':Ñ':Ø)/×)>Ñ)>Ø&,×&8Ñ&8ñ:€	Ô ð "˜
€	Ô ÚL€	Ô ò>ò 
€„Ø"(×"7Ñ"7Ø &× 3Ñ 3Ø%×1Ñ1ñ3€„ð ˜Ð"€„Ø�j€Ô ò#ð �ˆ€„Ø"(×"7Ñ"7Ø &× 3Ñ 3Ø%×1Ñ1ñ3€„ð €„Ø€Ô ÷xPñ xP÷vIBñ IB÷XB8ñ B8÷J^Gñ ^G÷BH-ò H-r%   