
    ge*f                        d dl Z d dlZd dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZ d dlmZmZmZ d dlmZ  G d d	          Z G d
 de          Z G d d          Z G d de          Zd Zd Zd ZdS )    N)TestCaseassert_array_almost_equalassert_array_equalassert_assert_allcloseassert_equal)
csr_matrix)LinearOperator)ScalarFunctionVectorFunctionLinearVectorFunctionIdentityVectorFunction)rosen	rosen_der
rosen_hess)BFGSc                   &    e Zd Zd Zd Zd Zd ZdS )ExScalarFunctionc                 0    d| _         d| _        d| _        d S Nr   )nfevngevnhevselfs    Rlib/python3.11/site-packages/scipy/optimize/tests/test_differentiable_functions.py__init__zExScalarFunction.__init__       					    c                 n    | xj         dz  c_         d|d         dz  |d         dz  z   dz
  z  |d         z
  S )N      r   )r   r   xs     r   funzExScalarFunction.fun   s?    		Q		!A$'AaD!G#a'(1Q4//r   c                 x    | xj         dz  c_         t          j        d|d         z  dz
  d|d         z  g          S )Nr!      r   )r   nparrayr#   s     r   gradzExScalarFunction.grad   s:    		Q		x1Q41QqT6*+++r   c                 P    | xj         dz  c_         dt          j        d          z  S )Nr!   r'   r"   )r   r(   eyer#   s     r   hesszExScalarFunction.hess   s#    		Q		{r   N)__name__
__module____qualname__r   r%   r*   r-    r   r   r   r      sP          
0 0 0, , ,    r   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestScalarFunctionc           
         t                      }d}d}ddg}t          |j        |d|j        |j        d t
          j         t
          j        f          }|dz  }|dz  }t          |j        |           t          |j        |           t          |j	        |           t          |j	        |           t          |j        |dd|j        d t
          j         t
          j        f          }|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |j	        z   |           t          |j
        |j
                   t          |j        |j                   dd	g}|                    |          }|                    |          }	|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |j	        z   |           |                    |          }
|                    |          }|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |j	        z   |           t          ||
           t          |	|           d
dg}|                    |          }	|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |j	        z   |           |                    |          }|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |j	        z   |           t          |	|           dd	g}|                    |          }|                    |          }	|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |j	        z   |           |                    |          }
|                    |          }|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |j	        z   |           t          ||
           t          |	|           dd	g}|                    |          }|                    |          }	|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |j	        z   |           |                    |          }
|                    |          }|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |j	        z   |           t          ||
           t          |	|           d S )Nr         ?        r1   r!   2-point   
   333333?       @      @r"   )r   r   r%   r*   r-   r(   infr   r   r   fr   g)r   exr   r   x0analitapproxr$   f_analitg_analitf_approxg_approxs               r   test_finite_difference_gradz.TestScalarFunction.test_finite_difference_grad&   sk   3ZB "/@B B		27D)))6;---27D)))6;---B	 "/@B B		27D)))6;v{2D9996;v{2D99968VX...!&(FH555I::a==;;q>>		27D)))6;v{2D9996;v{2D999::a==;;q>>		27D)))6;v{2D9996;v{2D999!(H555!(H555#J;;q>>	27D)))6;v{2D9996;v{2D999;;q>>		27D)))6;v{2D9996;v{2D999!(H555#J::a==;;q>>		27D)))6;v{2D9996;v{2D999::a==;;q>>		27D)))6;v{2D9996;v{2D999!(H555!(H555H::a==;;q>>		27D)))6;v{2D9996;v{2D999::a==;;q>>		27D)))6;v{2D9996;v{2D999!(H555!(H55555r   c           
         t                      }d }ddg}t          |j        |d|j        |j        d t
          j         t
          j        f          }|                    |          |                    |          f} ||                    |          |           |j        dk    sJ d|d<   |                    |          |                    |          f} ||                    |          |           ddg}t          |j        |dd|j        d t
          j         t
          j        f          }|j        dk    sJ |                    |          |                    |          f} ||                    |          |           |j        dk    sJ d|d<   |                    |          |                    |          f} ||                    |          |           d S )Nc                 v    t          | d         |d                    t          | d         |d                    d S )Nr   r!   )r   )r$   ys     r   fg_allclosez9TestScalarFunction.test_fun_and_grad.<locals>.fg_allclose   s8    AaD!A$'''AaD!A$'''''r   r;   r:   r1   r!   r5   3-point)	r   r   r%   r*   r-   r(   r=   fun_and_gradr   )r   r@   rL   rA   rB   fgsfs          r   test_fun_and_gradz$TestScalarFunction.test_fun_and_grad   s   	( 	( 	(
 3ZB "/@B B VVBZZ$F''++R000{a1VVBZZ$F''++R000 3ZBFBI "/@B Bw!||||VVBZZ$BOOB'',,,w!||||1VVBZZ$BOOB'',,,,,r   c           
         t                      }d}d}d}ddg}t          |j        |d|j        |j        d t
          j         t
          j        f          }|dz  }|dz  }|dz  }t          |j        |           t          |j        |           t          |j	        |           t          |j	        |           t          |j
        |           t          |j
        |           t          |j        |d|j        dd t
          j         t
          j        f          }t          t          |j        t                               ddgdd	gd
dgfD ]v}t          |j        |j                   t!          |j        |j                   t!          |j                            |          |j                            |                     w|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           ddg}	|                    |	          }
|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           |                    |	          }t          t          |t                               ddgdd	gd
dgfD ]8}t!          |
                    |          |                    |                     9|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           ddg}	|                    |	          }
|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           |                    |	          }t          t          |t                               ddgdd	gd
dgfD ]8}t!          |
                    |          |                    |                     9|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           ddg}	|                    |	          }|                    |	          }
|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           |                    |	          }|                    |	          }t          t          |t                               ddgdd	gd
dgfD ]8}t!          |
                    |          |                    |                     9|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           ddg}	|                    |	          }|                    |	          }
|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           |                    |	          }|                    |	          }t          t          |t                               ddgdd	gd
dgfD ]8}t!          |
                    |          |                    |                     9|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           d S )Nr   r5   r6   r1   r!   r7   r;         @      @      @r'    @333333?r<   r:   @ffffff@)r   r   r%   r*   r-   r(   r=   r   r   r   r   r   
isinstanceHr
   r>   r   r?   dot)r   r@   r   r   r   rA   rB   rC   vr$   H_analitH_approx_s                r   +test_finite_difference_hess_linear_operatorz>TestScalarFunction.test_finite_difference_hess_linear_operator   s   3ZB "/@B B			27D)))6;---27D)))6;---27D)))6;---B )426'261BD D
68^44555*sCj3*5 	H 	HAvx222%fh999%fhll1oovx||AGGGG		27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999#J;;q>>	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999;;q>>
8^44555*sCj3*5 	H 	HA%hll1oox||AGGGG	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999#J;;q>>	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999;;q>>
8^44555*sCj3*5 	H 	HA%hll1oox||AGGGG	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999#JKKNN;;q>>		27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999KKNN;;q>>
8^44555*sCj3*5 	H 	HA%hll1oox||AGGGG	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999#JKKNN;;q>>		27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999KKNN;;q>>
8^44555*sCj3*5 	H 	HA%hll1oox||AGGGG	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D99999r   c           
         d }t          j        g d          }t          ||ddd d t           j         t           j        f          }||j        usJ t          |                    |          d           ||j        usJ d|d<   |                    |          }t          |d	           d
|d<   |                    |          }t          |d           ||j        usJ t                      }t          j        g d          }t          ||dd|d t           j         t           j        f          }||j        usJ t          |                    |          d           ||j        usJ d|d<   |                    |          }t          |d	           d
|d<   |                    |          }t          |d           ||j        usJ d }t          j        g d          }t          ||ddd d t           j         t           j        f          }||j        usJ t          |                    |          d           t          |j        t          j        g d                     ||j        usJ d S )Nc                 T    t          j        t          j        |           dz            S )Nr"   )r(   sumasarrayr$   s    r   r>   z4TestScalarFunction.test_x_storage_overlap.<locals>.f%  s    6"*Q--1,---r   )r5   r;   rS   r1   rM   c                     | S Nr1   rf   s    r   <lambda>z;TestScalarFunction.test_x_storage_overlap.<locals>.<lambda>)  s    1 r   g      ,@r6   r   g      *@r!   c                 4    | | z  } t          j        |           S rh   )r(   rd   rf   s    r   ffz5TestScalarFunction.test_x_storage_overlap.<locals>.ffK  s    FA6!99r   c                     | S rh   r1   rf   s    r   ri   z;TestScalarFunction.test_x_storage_overlap.<locals>.<lambda>Q  s    A r   )r(   r)   r   r=   r$   r   r%   r   )r   r>   r$   rP   f1f2r-   rk   s           r   test_x_storage_overlapz)TestScalarFunction.test_x_storage_overlap   si   
	. 	. 	. H\\\""Aq"idbfWbfDUVV}}}}RVVAYY%%%}}}}!VVAYYR!VVAYYR}}}} vvH\\\""Aq"itrvgrv=NOO}}}}RVVAYY%%%}}}}!VVAYYR!VVAYYR}}}}	 	 	 H\\\""2y++trvgrv5F
 
 }}}}RVVAYY%%%RT28LLL11222}}}}}}r   c           
         t          j        g d          }t          t          |dt          t
          d d           }|                    g d           |                    |           |                    g d           |                    g d           t          |j	        d           t          |j
        g d           t          t          |ddt
          d t           j         t           j        f          }|                    g d           |                    |           |                    g d           |                    g d           t          |j	        d           t          |j
        g d           d S )N)r"   r8   r'   r1   )r!   r!   r!   )g)\(?r!   r5   r6   )r5   r5   r5   r7   )r(   r)   r   r   r   r   r%   r*   r   	_lowest_f	_lowest_xr=   )r   rA   rP   s      r   test_lowest_xz TestScalarFunction.test_lowest_xX  sT   Xiii  E2r9j $( (
yyy
r



~~~
R\3'''R\???333E2r9j BF7BF"35 5
yyy
r



~~~
R\3'''R\???33333r   N)r.   r/   r0   rH   rQ   ra   ro   rs   r1   r   r   r3   r3   $   si        [6 [6 [6z- - -Bz: z: z:x6 6 6p4 4 4 4 4r   r3   c                   &    e Zd Zd Zd Zd Zd ZdS )ExVectorialFunctionc                 0    d| _         d| _        d| _        d S r   )r   njevr   r   s    r   r   zExVectorialFunction.__init__p  r   r   c                     | xj         dz  c_         t          j        d|d         dz  |d         dz  z   dz
  z  |d         z
  d|d         dz  |d         dz  z   dz
  z  d|d         z  z
  g          S )Nr!   r"   r   r'   r8   )r   r(   r)   r#   s     r   r%   zExVectorialFunction.funu  s    		Q		xAaD!GadAg-12QqT9AaD!GadAg-12QqtV;= > > 	>r   c                     | xj         dz  c_         t          j        d|d         z  dz
  d|d         z  gd|d         dz  z  dz
  d|d         z  gg          S )Nr!   r'   r      r"   r8      )rw   r(   r)   r#   s     r   jaczExVectorialFunction.jacz  se    		Q		x!AaD&(AadF+QqT1W*Q,!A$/1 2 2 	2r   c                     | xj         dz  c_         |d         dz  t          j        d          z  |d         t          j        d|d         z  dgddgg          z  z   S )Nr!   r   r'   r"      r{   )r   r(   r,   r)   )r   r$   r]   s      r   r-   zExVectorialFunction.hess  sf    		Q		tAvbfQii!A$rx"QqT'123Q19 (: (: #: : 	:r   N)r.   r/   r0   r   r%   r|   r-   r1   r   r   ru   ru   n  sP          
> > >
2 2 2
: : : : :r   ru   c                        e Zd Zd Zd Zd ZdS )TestVectorialFunctionc           
         t                      }d}d}ddg}t          |j        ||j        |j        d d t
          j         t
          j        fd           }|dz  }|dz  }t          |j        |           t          |j        |           t          |j	        |           t          |j	        |           t          |j        |d|j        d d t
          j         t
          j        fd           }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |j
                   t          |j        |j                   ddg}|                    |          }|                    |          }	|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           |                    |          }
|                    |          }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          ||
           t          |	|d	
           ddg}|                    |          }	|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           |                    |          }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |	|           ddg}|                    |          }|                    |          }	|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           |                    |          }
|                    |          }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          ||
           t          |	|           ddg}|                    |          }|                    |          }	|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           |                    |          }
|                    |          }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          ||
           t          |	|           d S )Nr   r5   r6   r!   r7   r8   r9   r:   r'   decimalr;   r<   r"   )ru   r   r%   r|   r-   r(   r=   r   r   rw   r>   r   J)r   r@   r   rw   rA   rB   rC   r$   rD   J_analitrF   J_approxs               r   test_finite_difference_jacz0TestVectorialFunction.test_finite_difference_jac  s    ""3ZBFBGT4"$&"& 149 9		27D)))6;---27D)))6;---Irwd"$&"& 149 9	27D)))6;v{2D99927D)))6;v{2D99968VX...!&(FH555I::a==::a==		27D)))6;v{2D99927D)))6;v{2D999::a==::a==	27D)))6;v{2D99927D)))6;v{2D999!(H555!(Ha@@@@#J::a==	27D)))6;v{2D99927D)))6;v{2D999::a==	27D)))6;v{2D99927D)))6;v{2D999!(H555#J::a==::a==		27D)))6;v{2D99927D)))6;v{2D999::a==::a==	27D)))6;v{2D99927D)))6;v{2D999!(H555!(H555H::a==::a==		27D)))6;v{2D99927D)))6;v{2D999::a==::a==	27D)))6;v{2D99927D)))6;v{2D999!(H555!(H55555r   c           
         t                      }d}d}d}ddg}ddg}t          |j        ||j        |j        d d t
          j         t
          j        fd           }|dz  }|dz  }|dz  }t          |j        |           t          |j        |           t          |j	        |           t          |j	        |           t          |j
        |           t          |j
        |           t          |j        ||j        dd d t
          j         t
          j        fd           }t          t          |j        t                               ddgddgd	dgfD ]v}	t          |j        |j                   t!          |j        |j                   t!          |j                            |	          |j                            |	                     w|dz  }|d
z  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           ddg}
|                    |
|          }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           |                    |
|          }t          t          |t                               ddgddgd	dgfD ]:}	t!          |                    |	          |                    |	          d           ;|d
z  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           ddg}
ddg}|                    |
|          }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           |                    |
|          }t          t          |t                               ddgddgd	dgfD ]8}t!          |                    |          |                    |                     9|d
z  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           ddg}
|                    |
          }|                    |
|          }|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           |                    |
          }|                    |
|          }t          t          |t                               ddgddgd	dgfD ]:}t!          |                    |          |                    |          d
           ;|d
z  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           ddg}
ddg}|                    |
          }|                    |
|          }|dz  }|dz  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           |                    |
          }|                    |
|          }t          t          |t                               ddgddgd	dgfD ]:}t!          |                    |          |                    |          d
           ;|d
z  }t          |j        |           t          |j        |j        z   |           t          |j	        |           t          |j	        |j	        z   |           t          |j
        |           t          |j
        |j
        z   |           d S )Nr   r5   r6   r;   r!   r7   rS   rT   rU   r'      r   rV   rW   r<   r:   rX   rY   )ru   r   r%   r|   r-   r(   r=   r   r   rw   r   r   rZ   r[   r
   r>   r   r   r\   )r   r@   r   rw   r   rA   v0rB   rC   pr$   r^   r_   r]   r`   s                  r   ra   zATestVectorialFunction.test_finite_difference_hess_linear_operator  sQ	    ""3Z3ZBFBGT4"$&"& 149 9			27D)))6;---27D)))6;---27D)))6;---BFItT"$&"& 149 9
68^44555*sCj3*5 	H 	HAvx222%fh999%fhll1oovx||AGGGG		27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999#J;;q"%%	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999;;q"%%
8^44555*sCj3*5 	1 	1A%hll1oox||A./1 1 1 1 1	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999#J#J;;q!$$	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999;;q!$$
8^44555*sCj3*5 	H 	HA%hll1oox||AGGGG	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999#JJJqMM;;q"%%		27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999JJqMM;;q"%%
8^44555*sCj3*5 	S 	SA%hll1oox||APQRRRRR	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999#J#JJJqMM;;q!$$		27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D999JJqMM;;q!$$
8^44555*sCj3*5 	S 	SA%hll1oox||APQRRRRR	27D)))6;v{2D99927D)))6;v{2D99927D)))6;v{2D99999r   c           
      .   t                      }t          j        ddg          }t          |j        |d|j        d d t          j         t          j        fd           }||j        usJ t          |                    |          |                    |                     ||j        usJ d|d<   t          |                    |          |                    |                     ||j        usJ d|d<   t          |                    |          |                    |                     ||j        usJ t                      }t          j        ddg          }t          |j        |d|d d t          j         t          j        fd           }t          j        t                    5  ||j        usJ t          |                    |          |                    |                     ||j        usJ d|d<   t          |                    |          |                    |                     ||j        usJ d|d<   t          |                    |          |                    |                     ||j        usJ 	 d d d            d S # 1 swxY w Y   d S )Nr5   r6   rM   r;   r   )ru   r(   r)   r   r%   r-   r=   r$   r   r   pytestwarnsUserWarning)r   r@   rA   vfr-   s        r   ro   z,TestVectorialFunction.test_x_storage_overlapg  s    !""XsCj!!BFB	27D$ fWbf-t5 5 ~~~~RVVBZZ,,,~~~~1RVVBZZ,,,~~~~1RVVBZZ,,,~~~~ vvXsCj!!BFB	4t fWbf-t5 5 \+&& 	" 	" RT>>>>RVVBZZ000RT>>>>BqERVVBZZ000RT>>>>BqERVVBZZ000RT>>>>>	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   #CJ

JJN)r.   r/   r0   r   ra   ro   r1   r   r   r   r     sI        ^6 ^6 ^6@~: ~: ~:@)" )" )" )" )"r   r   c                     t          j        g dg dg          } t          j        d          }t          |           }t          j        g d          }t          j        ddg          }t          j        ddg          }t	          | |d           }t          |j                    t	          | |d	          }t          |j                   t	          | |d
          }t          |j                    t	          ||d           }	t          |	j                   t	          ||d	          }
t          |
j                   t	          ||d
          }t          |j                    t          |                    |          |           t          |                    |          |           t          |	                    |          |            t          |	                    |          
                                |
                                           t          |                    ||          
                                t          j        d                     d S )Nr"   r   r   r'   r"   r8   )r!   r   r   r   r!   TFr8   r8   )r(   r)   zerosr	   r   r   sparse_jacobianr   r%   r|   toarrayr-   )A_denserA   A_sparser$   r]   Axrm   rn   f3f4f5f6s               r   test_LinearVectorFunctionr     s   h

		  G 
!B'""H
A
"aA	2r(		B	gr4	0	0B""###	gr4	0	0BB	gr5	1	1B""###	hD	1	1BB	hD	1	1BB	hE	2	2B""###rvvayy"%%%rvvayy"%%%rvvayy'***rvvayy((**H,<,<,>,>???rwwq!}},,..0@0@AAAAAr   c                     t          j        g dg dg          } t          j        g d          }t          | |d          }t          ||j                   t          |                     |          |j                   t          j        g d          }t          | |                    |                     t          ||j                   t          |                     |          |j                   t          |                     |          |                    |                     t          |                     |          |j                   d S )Nr   r   )r!   r"   r   F)r   r8   r9   )	r(   r)   r   r   r$   r\   r>   r|   r%   )ArA   r%   x1s       r   %test_LinearVectorFunction_memoizationr     s   
***iii())A	***		B
q"e
,
,Cr35!!!quuRyy#%(((	+++		Bq#''"++&&&r35!!!quuRyy#%(((quuRyy#''"++...quuRyy#%(((((r   c                  t   t          j        d          } t          | d           }t          | d          }t          | d          }t          |j                   t          |j                    t          |j                   t          j        g d          }t          j        g d          }t          |                    |          |           t          |                    |          |           t          |                    |          	                                t          j
        d                     t          |                    |          t          j
        d                     t          |                    ||          	                                t          j        d                     d S )Nr8   FT)r   r"   r!   )r8   r   r   )r(   r   r   r   r   r)   r   r%   r|   r   r,   r-   )rA   rm   rn   r   r$   r]   s         r   test_IdentityVectorFunctionr     sT   	!B	D	)	)B	E	*	*B	D	)	)BB""###B
A
Arvvayy!$$$rvvayy!$$$rvvayy((**BF1II666rvvayy"&)),,,rwwq!}},,..0@0@AAAAAr   ) r   numpyr(   numpy.testingr   r   r   r   r   r   scipy.sparser	   scipy.sparse.linalgr
   (scipy.optimize._differentiable_functionsr   r   r   r   scipy.optimizer   r   r   'scipy.optimize._hessian_update_strategyr   r   r3   ru   r   r   r   r   r1   r   r   <module>r      s        ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) $ # # # # # . . . . . .N N N N N N N N N N N N 8 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8       (G4 G4 G4 G4 G4 G4 G4 G4T
: : : : : : : :.K" K" K" K" K"H K" K" K"\!B !B !BH) ) ) B B B B Br   