
    -i8                        S SK r S SKJr  S SKrS SKrS SKJr  S SKJ	r	J
r
JrJr  S SKJrJr   " S S5      r " S S	\	5      r\R$                  R'                  S
\\/5      \R$                  R'                  SSS/5      S 5       5       rg)    N)deepcopy)norm)TestCaseassert_array_almost_equalassert_array_equalassert_array_less)BFGSSR1c                   4    \ rS rSrSrS	S jrS rS rS rSr	g)

Rosenbrock   zRosenbrock function.

The following optimization problem:
    minimize sum(100.0*(x[1:] - x[:-1]**2.0)**2.0 + (1 - x[:-1])**2.0)
c                     [         R                  R                  U5      nUR                  SSU5      U l        [         R
                  " U5      U l        g )N   )nprandomRandomStateuniformx0onesx_opt)selfnrandom_staterngs       d/var/www/html/venv/lib/python3.13/site-packages/scipy/optimize/tests/test_hessian_update_strategy.py__init__Rosenbrock.__init__   s9    ii##L1++b!Q'WWQZ
    c                     [         R                  " U5      n[         R                  " SUSS  US S S-  -
  S-  -  SUS S -
  S-  -   SS9nU$ )Ng      Y@r   r   g       @r   )axis)r   asarraysum)r   xrs      r   funRosenbrock.fun   sZ    JJqMFF5AabEAcrFCK/#55QsVc8IIr   c                 8   [         R                  " U5      nUSS nUS S nUSS  n[         R                  " U5      nSX#S-  -
  -  SXBS-  -
  -  U-  -
  SSU-
  -  -
  USS& SUS   -  US   US   S-  -
  -  SSUS   -
  -  -
  US'   SUS   US   S-  -
  -  US'   U$ )	Nr   r           pr   )r   r"   
zeros_like)r   r$   xmxm_m1xm_p1ders         r   gradRosenbrock.grad   s    JJqMqW#2!"mmABM*EEM*R/023q2v,?Ab	!!qtQw/!q1Q4x.@A22)*B
r   c                    [         R                  " U5      n[         R                  " SUS S -  S5      [         R                  " SUS S -  S5      -
  n[         R                  " [	        U5      UR
                  S9nSUS   S-  -  SUS   -  -
  S-   US'   S	US'   S
SUSS S-  -  -   SUSS  -  -
  USS& U[         R                  " U5      -   nU$ )Nr-   r   r   r,   )dtypei  r   r*   r+      )r   
atleast_1ddiagzeroslenr6   )r   r$   Hdiagonals       r   hessRosenbrock.hess*   s    MM!GGD1Sb6M1%afb(AA88CF!''2QqT1WnsQqTz1A5ta"gqj00312;>2!!r   )r   r   N)r*   r   )
__name__
__module____qualname____firstlineno____doc__r   r&   r3   r>   __static_attributes__ r   r   r   r      s     

r   r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestHessianUpdateStrategy5   c           	      T   Sn[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      nS[         R                  " U5      4S[         R                  " U5      S-  4[         R                  " S	US	-   5      [         R                  " U5      -  [         R                  " S	US	-   5      [         R                  " U5      -  4X"44nS
 H  nU H  u  pV[	        USSS9[        USS94nU H  nUR                  X5        UR                  5       n	[        U	[         R                  " U5      5        [        U[        5      (       a  US:X  a  Ma  UR                  [         R                  " U5      S-  [         R                  " U5      S-   5        UR                  5       n	[        X5        M     M     M     g )N   )+      !   "   1   )rM   $   ,      rR   )rN   rR   %   r      )rO   rS   r   rK   .   )rP   rR   rU   rV      autor*   r   r>   inv_hessgd~QJskip_update)
init_scalemin_curvatureexception_strategyr\   min_denominatorgh㈵>g?)r   arrayeyearanger	   r
   
initialize
get_matrixr   
isinstancestrupdater   )
r   ndimssymmetric_matrixinit_scalesapprox_typer\   true_matrixquasi_newtonqnBs
             r   test_hessian_initialization5TestHessianUpdateStrategy.test_hessian_initialization8   sk   88%9%9%8%7%9	%; < RVVE]#u!"YYq%!)$rvve}4YYq%!)$rvve}4603 0K+6'
 !%
378E!G !$z48!: ; 'BMM%5A&q"&&-8!*c22zV7K IIbggent3RYYu5E5KLA&q6 ' ,7 0r   c           
      T   Sn[        S5      S[        4[        R                  " / SQ5      R	                  [        R
                  5      S[        4[        R                  " / SQ/ SQ/ SQ/5      R	                  [        R
                  5      S[        4[        R                  " / S	Q/5      [        R                  " S
5      [        4[        R                  " / SQ/ SQ/ SQ/5      [        R                  " S5      [        44nS H  nU H  u  pEn[        US9[        US94nU Hk  nUR                  X5        [        R                  " XeS9   UR                  [        R                  " U5      [        R                   " U5      5        S S S 5        Mm     M     M     g ! , (       d  f       M  = f)N   gQ	@zFfloat\(\) argument must be a string or a (real )?number, not 'complex')g	@gffffff@g333333?z3init_scale contains complex elements, must be real.)rL   rM   rN   )rM   rQ   rR   )rN   rR   rT   )rL   7   B   z`If init_scale is an array, it must have the dimensions of the hess/inv_hess: (3, 3). Got (1, 3).)g8@rQ   rR   z}If init_scale is an array, it must be symmetric (passing scipy.linalg.issymmetric) to be an approximation of a hess/inv_hess.rY   r\   )match)complex	TypeErrorr   ra   astype
complex128reescape
ValueErrorr	   r
   rd   pytestraisesrh   r   rc   )	r   ri   inits_msg_errtyperl   r\   message	errortypern   ro   s	            r   test_initialize_catch_illegal7TestHessianUpdateStrategy.test_initialize_catch_illegalc   st   %dm?')
 !hh7>>r}}M.')
 !hh(6(6(8 99?9N.') !hh~6 ii#12 )* !hh(8(6(8 9 !ii )V W )*5!D 0K2C.
Y !%
 ; #z : < 'BMM%5y@		"''%."))E2BC A@ ' 3D 0 A@s   ;F	
F'c                    [        SS9n/ / SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ S	QP/ S
QP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ S QP/ S!QP/ S"QP/ S#QP/ S$QP/ S%QP/ S&QP/ S'QP/ S(QPnU Vs/ s H  o1R                  U5      PM     nn[        [        U5      S)-
  5       Vs/ s H7  n[        R
                  " X%S)-      5      [        R
                  " X%   5      -
  PM9     nn[        [        U5      S)-
  5       Vs/ s H  nXES)-      XE   -
  PM     nn[        Xg5       H)  u  p[        R                  " X5      S*::  d  M!  [        5       e   [        S)S+S,9[        S)S-94 GH  n
[        U
5      n[        U
5      nUR                  [        US*   5      S.5        UR                  [        US*   5      S/5        [        Xg5       Ho  u  pUR                  X5        UR                  X5        UR                  5       nUR                  5       n[        [        R                   R#                  U5      US0S19  Mq     UR%                  U[        U5         5      n['        [)        WU-
  5      [)        U5      -  S25        GM     g s  snf s  snf s  snf )3NrK   r   g74D?gGYS?g6zN?gmȚ?g`4[ÿgb?g@?gL#i_/?gV!?gU';JK?gZWl?gIaLg:ߙ˩?ge ġ?g~Q?gc${?g tg
	by?g:gQ5U?gf?g$+ƈg~W?g=Ԡg>ˎ?g)	Ʊ?g]Tg10<@A?gU~g@?gBLx!%?gӖUtgY.?giƢdpg?gBv$?g`lϷ?gV;Б?g-&q?ggE?gef?g6~Z?gaK4?g$ۉ?gPBzg
c?g8ηO؏?glas?g6SdF?gӾcrgF?gDkk?gnc?g2?g;ongƇ?g:oʁ?gβ?gqn?glErDg]?gvn?g?gL]?ghc?g^ҽ0?gn(?g-^q'G?gk%?gϬ[r?g?I˒?gl?g(E,?gZ(?g; ?g}[?ge(?g1?gi&)?g=L]d?gBʚm?g͆zP?gJz?g?g ?gLD&F?g?gJ`?g-.?gos?gk?gK0?gZ!?g61n-?gHZ\?)gAi?g(?g?a3?g<0D?g5{?)gF?g	?għJ}?g{cTy?g*?)g##?go9//?g*Y\-?gE?g̶ȟ?)g)ߋ?gb8?gv?g%S;?gUn?)gX ?g]?g|x;g?g*#,&?gjm̂?)go̦-?g`_?gQ?g_rUu?gWI?)gqQ-b?gu%?gAڷ?g
r?g?)g$Y,8?g	I?gm?g݈81?gШx?)gV?gK_?g_?gYO0?gv?)g'ݖ?gG?g ?g, ?g_1?)gM;?got?gu?U?gFtz?gm
!?)g'?gI} ?g8X?g;t՗ ?g@sJ?)g?gf?gtV?gD?g,?)B?gE1Լ?gj1?gL?gA$?)g֔  ?g(?gPf(?r   gW3?)gk_k  ?gsQo?  ?g`&@ ?g@ ?)g?gׇP  ?g7  ?r   g;U  ?)P?g`P^?g?g&q?g?)r   r   r   r   g~?r   r   g-C6?r\   r]   rw   r>   rZ   
   )decimalg?)r   r3   ranger;   r   ra   zipdotArithmeticErrorr	   r
   r   rd   rh   re   r   linalginvr>   r   r   )r   probx_listr$   	grad_listidelta_x
delta_gradsyrn   r>   rZ   rp   r<   B_trues                   r   !test_rosenbrock_with_no_exception;TestHessianUpdateStrategy.test_rosenbrock_with_no_exception   s   A%LK %LJ%LK%L M%L M	%L
 M%L M%L K%L L%L L%L L%L L%L K%L K%L K%L K%L  K!%L" K#%L$ K%%L& K'%L( K)%L* K+%L, K-%L. K/%L0 K1%L2 K3%L4 K5%L6 K7%L8 K9%L: K;%L< K=%L> K?%L@ KA%LB KC%LD KE%LF KG%LH KI%LJ KK%LN ,226aYYq\6	2!#f+a-020q 88FQ3K(&))<<0 	 2  %S^A%5686!  !nY\16 	 8 ,DAvva|q %'' - "QdC A.0LL)D-HOOCq	NF3F1I
;G0A!%OO%''))"))--*:ArJ 1 YYvc'l34Fd1v:.tF|;SA0 328s   (J4>J96J>c                    [        SS9n/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/nU Vs/ s H  o1R                  U5      PM     nn[        [        U5      S-
  5       Vs/ s H7  n[        R
                  " X%S-      5      [        R
                  " X%   5      -
  PM9     nn[        [        U5      S-
  5       Vs/ s H  nXES-      XE   -
  PM     nn[        SSS9nUR                  [        US   5      S5        [        [        U5      S-
  5       H  nXe   n	Xu   n
UR                  X5        M     [        R                  " UR                  5       5      nUS   n	US   n
UR                  X5        [        R                  " UR                  5       5      n[        X5        g s  snf s  snf s  snf )NrK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   g{Gz?r_   r   r>      )r   r3   r   r;   r   ra   r
   rd   rh   copyre   r   r   r   r   r$   r   r   r   r   r>   r   r   rp   	B_updateds                r   test_SR1_skip_update.TestHessianUpdateStrategy.test_SR1_skip_update   s   AKJKLLLLJKKKKJJJJJJJ%L( ,226aYYq\6	2!#f+a-020q 88FQ3K(&))<<0 	 2  %S^A%5686!  !nY\16 	 8a6F1I/s7|A~&A
AAKK '
 GGDOO%&BKrNAGGDOO-.	1(% 328s   	F=>>GGc                 P   [        SS9n/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/nU Vs/ s H  o1R                  U5      PM     nn[        [        U5      S
-
  5       Vs/ s H7  n[        R
                  " X%S
-      5      [        R
                  " X%   5      -
  PM9     nn[        [        U5      S
-
  5       Vs/ s H  nXES
-      XE   -
  PM     nn[        S
SS9nUR                  [        US   5      S5        [        [        U5      S
-
  5       H  nXe   n	Xu   n
UR                  X5        M     [        R                  " UR                  5       5      nUS   n	US   n
UR                  X5        [        R                  " UR                  5       5      n[        X5        g s  snf s  snf s  snf )NrK   r   r   r   r   r   r   r   r   r   r   r   r   r>   )r   r3   r   r;   r   ra   r	   rd   rh   r   re   r   r   s                r   test_BFGS_skip_update/TestHessianUpdateStrategy.test_BFGS_skip_update  s   AKJKLLLLN ,226aYYq\6	2!#f+a-020q 88FQ3K(&))<<0 	 2  %S^A%5686!  !nY\16 	 8q3F1I/s7|A~&A
AAKK '
 GGDOO%&AJqMAGGDOO-.	1(% 328s   F>F3F#rF   N)
r@   rA   rB   rC   rq   r   r   r   r   rE   rF   r   r   rH   rH   5   s"    #7V/DbCBJ*)X)r   rH   strategyrl   r>   rZ   c                     U " SS9nUR                  SU5        [        R                  " SS/5      n[        X#-  UR	                  U5      5        g )Nr   rw   r*   )rd   r   ra   r   r   )r   rl   r<   vs       r   test_matmul_equals_dotr   &  sB     	AALLK 
!QAquaeeAh'r   )r}   r   r   numpyr   r   numpy.linalgr   numpy.testingr   r   r   r   scipy.optimizer	   r
   r   rH   markparametrizer   rF   r   r   <module>r      s    	    B B && &Rn) n)b dC[1(<=( > 2(r   