
    Ui8                     &   d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZ d dlmZmZ  G d d          Z G d d	e	          Zej                            d
eeg          ej                            dddg          d                         ZdS )    N)deepcopy)norm)TestCaseassert_array_almost_equalassert_array_equalassert_array_less)BFGSSR1c                   ,    e Zd ZdZd	dZd Zd Zd ZdS )

RosenbrockzRosenbrock function.

    The following optimization problem:
        minimize sum(100.0*(x[1:] - x[:-1]**2.0)**2.0 + (1 - x[:-1])**2.0)
       r   c                     t           j                            |          }|                    dd|          | _        t          j        |          | _        d S )N   )nprandomRandomStateuniformx0onesx_opt)selfnrandom_staterngs       /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_hessian_update_strategy.py__init__zRosenbrock.__init__   sA    i##L11++b!Q''WQZZ


    c                     t          j        |          }t          j        d|dd          |d d         dz  z
  dz  z  d|d d         z
  dz  z   d          }|S )Ng      Y@r   r   g       @r   )axis)r   asarraysum)r   xrs      r   funzRosenbrock.fun   sh    JqMMF5AabbEAcrcFCK/#55QssVc8II  r   c                 z   t          j        |          }|dd         }|d d         }|dd          }t          j        |          }d||dz  z
  z  d||dz  z
  z  |z  z
  dd|z
  z  z
  |dd<   d|d         z  |d         |d         dz  z
  z  dd|d         z
  z  z
  |d<   d|d         |d         dz  z
  z  |d<   |S )	Nr   r   r        pr   )r   r!   
zeros_like)r   r#   xmxm_m1xm_p1ders         r   gradzRosenbrock.grad   s    JqMMqtW#2#!""mABM*EBEM*R/023q2v,?AbD	!!qtQw/!q1Q4x.@A22)*B
r   c                    t          j        |          }t          j        d|d d         z  d          t          j        d|d d         z  d          z
  }t          j        t	          |          |j                  }d|d         dz  z  d|d         z  z
  dz   |d<   d	|d<   d
d|dd         dz  z  z   d|dd          z  z
  |dd<   |t          j        |          z   }|S )Nr*   r   r   r)   )dtypei  r   r   r(      )r   
atleast_1ddiagzeroslenr2   )r   r#   Hdiagonals       r   hesszRosenbrock.hess*   s    M!GD1SbS6M1%%afb(A(AA8CFF!'222QqT1WnsQqTz1A5ta"gqj003122;>2!!!r   N)r   r   )__name__
__module____qualname____doc__r   r%   r0   r:    r   r   r   r      s_                
  
 
 
    r   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestHessianUpdateStrategyc           	      h   d}t          j        g dg dg dg dg dg          }dt          j        |          fdt          j        |          dz  ft          j        d	|d	z             t          j        |          z  t          j        d	|d	z             t          j        |          z  f||ff}d
D ]}|D ]\  }}t	          |dd          t          |d          f}|D ]}|                    ||           |                                }	t          |	t          j        |                     t          |t                    r|dk    rj|                    t          j        |          dz  t          j        |          dz              |                                }	t          |	|           όd S )N   )+      !   "   1   )rE   $   ,      rJ   )rF   rJ   %   r      )rG   rK   r   rC   .   )rH   rJ   rM   rN      autor   r   r:   inv_hessgd~QJskip_update)
init_scalemin_curvatureexception_strategyrT   min_denominatorgh㈵>g?)r   arrayeyearanger	   r
   
initialize
get_matrixr   
isinstancestrupdater   )
r   ndimssymmetric_matrixinit_scalesapprox_typerT   true_matrixquasi_newtonqnBs
             r   test_hessian_initializationz5TestHessianUpdateStrategy.test_hessian_initialization8   s   8%9%9%9%9%9%9%8%8%8%7%7%7%9%9%9	%; < < RVE]]#u!"Yq%!)$$rve}}4Yq%!)$$rve}}46/03 0 	7 	7K+6 7 7'
K !%
378E!G !G !G !$z48!: !: !: ; ' 7 7BMM%555A&q"&--888!*c22 !zV7K7K IIbgennt3RYu5E5E5KLLLA&q+666677	7 	7r   c           
      ^   d}t          d          dt          ft          j        g d                              t          j                  dt          ft          j        g dg dg dg                              t          j                  dt          ft          j        g d	g          t          j        d
          t          ft          j        g dg dg dg          t          j        d          t          ff}dD ]}|D ]\  }}}t          |          t          |          f}|D ]}|                    ||           t          j        ||          5  |                    t          j        |          t          j        |                     d d d            n# 1 swxY w Y   d S )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.)rD   rE   rF   )rE   rI   rJ   )rF   rJ   rL   )rD   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@rI   rJ   z}If init_scale is an array, it must be symmetric (passing scipy.linalg.issymmetric) to be an approximation of a hess/inv_hess.rQ   rT   )match)complex	TypeErrorr   rY   astype
complex128reescape
ValueErrorr	   r
   r\   pytestraisesr`   r   r[   )	r   ra   inits_msg_errtyperd   rT   message	errortyperf   rg   s	            r   test_initialize_catch_illegalz7TestHessianUpdateStrategy.test_initialize_catch_illegalc   sO   %dmm?')
 !h77>>r}MM.')
 !h(6(6(8 9 99?9N9N.') !h~66 i#12 2 )* !h(8(8(8(6(8 9 9 !i )V W W )*5!D 0 
	D 
	DK2C 	D 	D.
GY !%
 ; ; ; #z : : : < ' D DBMM%555y@@@ D D		"'%..")E2B2BCCCD D D D D D D D D D D D D D DD	D
	D 
	Ds   ;F	F#&F#c                    t          d          g g dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(fd)D             fd*t          t                    d+z
            D             }fd,t          t                    d+z
            D             }t          ||          D ],\  }}t	          j        ||          d-k    rt                      -t          d+d./          t          d+0          fD ]d}t          |          }t          |          }|
                    t          d-                   d1           |
                    t          d-                   d2           t          ||          D ]\  }}|                    ||           |                    ||           |                                }|                                }	t          t          j                            |          |	d34                               t          |                             }
t#          t%          ||
z
            t%          |
          z  d5           fd S )6NrC   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~?c                 :    g | ]}                     |          S r?   r0   .0r#   probs     r   
<listcomp>zOTestHessianUpdateStrategy.test_rosenbrock_with_no_exception.<locals>.<listcomp>   #    222aTYYq\\222r   c                     g | ]:}t          j        |d z                      t          j        |                   z
  ;S r   r   rY   r   ix_lists     r   r   zOTestHessianUpdateStrategy.test_rosenbrock_with_no_exception.<locals>.<listcomp>   N     2 2 2 8F1Q3K((&))<)<< 2 2 2r   r   c                 8    g | ]}|d z            |         z
  S r   r?   r   r   	grad_lists     r   r   zOTestHessianUpdateStrategy.test_rosenbrock_with_no_exception.<locals>.<listcomp>   :     8 8 8  !nYq\1 8 8 8r   r   g-C6?rT   rU   rn   r:   rR   
   )decimalg?)r   ranger7   zipr   dotArithmeticErrorr	   r
   r   r\   r`   r]   r   linalginvr:   r   r   )r   delta_x
delta_gradsyrf   r:   rR   rh   r8   B_truer   r   r   s              @@@r   !test_rosenbrock_with_no_exceptionz;TestHessianUpdateStrategy.test_rosenbrock_with_no_exception   s	   A%LKKK %LJJJ%LKKK%L MLL%L MLL	%L
 MLL%L MLL%L KJJ%L LKK%L LKK%L LKK%L LKK%L KJJ%L KJJ%L KJJ%L KJJ%L  KJJ!%L" KJJ#%L$ KJJ%%L& KJJ'%L( KJJ)%L* KJJ+%L, KJJ-%L. KJJ/%L0 KJJ1%L2 KJJ3%L4 KJJ5%L6 KJJ7%L8 KJJ9%L: KJJ;%L< KJJ=%L> KJJ?%L@ KJJA%LB KJJC%LD KJJE%LF KJJG%LH KJJI%LJ KJJK%LN 32226222	2 2 2 2!#f++a-002 2 28 8 8 8$S^^A%5668 8 8
 ,, 	( 	(DAqva||q  %''' ! "QdCCC A...0 	B 	BLL))D--HOOCq	NNF333F1I
;;;GZ00 K K1Aq!!!1%%%OO%%'')))")--*:*:ArJJJJJYYvc'll344Fd1v:..tF||;SAAAA	B 	Br   c                 r  	
 t          d          
g dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg
fdD             	fdt          t                    dz
            D             }	fdt          t          	          dz
            D             }t          dd          }|                    t          d                   d           t          t          |          dz
            D ](}||         }||         }|                    ||           )t          j        |                                          }|d         }|d         }|                    ||           t          j        |                                          }t          ||           d S )NrC   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                 :    g | ]}                     |          S r?   r   r   s     r   r   zBTestHessianUpdateStrategy.test_SR1_skip_update.<locals>.<listcomp>   r   r   c                     g | ]:}t          j        |d z                      t          j        |                   z
  ;S r   r   r   s     r   r   zBTestHessianUpdateStrategy.test_SR1_skip_update.<locals>.<listcomp>   r   r   r   c                 8    g | ]}|d z            |         z
  S r   r?   r   s     r   r   zBTestHessianUpdateStrategy.test_SR1_skip_update.<locals>.<listcomp>   r   r   g{Gz?rW   r   r:      )
r   r   r7   r
   r\   r`   r   copyr]   r   r   r   r   r:   r   r   r   rh   	B_updatedr   r   r   s            @@@r   test_SR1_skip_updatez.TestHessianUpdateStrategy.test_SR1_skip_update   s=   AKKKJJJKKKLLLLLLLLLLLLJJJKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJ%L( 32226222	2 2 2 2!#f++a-002 2 28 8 8 8$S^^A%5668 8 8
a666F1I///s7||A~&& 	 	A
A1AKK1GDOO%%&&BKrNAqGDOO--..	1i(((((r   c                 *  	
 t          d          
g dg dg dg dg dg dg d	g
fd
D             	fdt          t                    dz
            D             }	fdt          t          	          dz
            D             }t          dd          }|                    t          d                   d           t          t          |          dz
            D ](}||         }||         }|                    ||           )t          j        |                                          }|d         }|d         }|                    ||           t          j        |                                          }t          ||           d S )NrC   r~   r   r   r   r   r   r   r   c                 :    g | ]}                     |          S r?   r   r   s     r   r   zCTestHessianUpdateStrategy.test_BFGS_skip_update.<locals>.<listcomp>  r   r   c                     g | ]:}t          j        |d z                      t          j        |                   z
  ;S r   r   r   s     r   r   zCTestHessianUpdateStrategy.test_BFGS_skip_update.<locals>.<listcomp>  r   r   r   c                 8    g | ]}|d z            |         z
  S r   r?   r   s     r   r   zCTestHessianUpdateStrategy.test_BFGS_skip_update.<locals>.<listcomp>  r   r   r   r   r   r:   )
r   r   r7   r	   r\   r`   r   r   r]   r   r   s            @@@r   test_BFGS_skip_updatez/TestHessianUpdateStrategy.test_BFGS_skip_update  s   AKKKJJJKKKLLLLLLLLLLLLN 32226222	2 2 2 2!#f++a-002 2 28 8 8 8$S^^A%5668 8 8
q333F1I///s7||A~&& 	 	A
A1AKK1GDOO%%&&AJqMAqGDOO--..	1i(((((r   N)r;   r<   r=   ri   r|   r   r   r   r?   r   r   rA   rA   5   sl        #7 #7 #7V/D /D /DbCB CB CBJ*) *) *)X) ) ) ) )r   rA   strategyrd   r:   rR   c                      | d          }|                     d|           t          j        ddg          }t          ||z  |                    |                     d S )Nr   rn   r   )r\   r   rY   r   r   )r   rd   r8   vs       r   test_matmul_equals_dotr   &  sa     	AALLK   
!QAq1uaeeAhh'''''r   )rt   r   r   numpyr   rw   numpy.linalgr   numpy.testingr   r   r   r   scipy.optimizer	   r
   r   rA   markparametrizer   r?   r   r   <module>r      sa   				                 B B B B B B B B B B B B & & & & & & & && & & & & & & &Rn) n) n) n) n) n) n) n)b dC[11(<==( ( >= 21( ( (r   