
    e!hZa                         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 d dlmZ d dlmZ dZdd	Zdd
ZddZ G d d      Z G d d      Z G d d      Z G d de      Zy)    N   )approx_derivativegroup_columns)HessianUpdateStrategy)LinearOperator)array_namespace)array_api_extra)z2-pointz3-pointcsc                 $     dg fd}|fS )Nr   c                    dxx   dz  cc<    t        j                  |       g }t        j                  |      s&	 t        j                  |      j	                         }|S |S # t
        t        f$ r}t        d      |d }~ww xY w)Nr   r   z@The user-provided objective function must return a scalar value.)npcopyisscalarasarrayitem	TypeError
ValueError)xfxeargsfunncallss      p/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/optimize/_differentiable_functions.pywrappedz_wrapper_fun.<locals>.wrapped   s    q	Q	 #d#{{2ZZ^((* 	r	 z*  2 s   #A( (B7BB )r   r   r   r   s   `` @r   _wrapper_funr      s    SF  F?    c                 h     dgt               r fd}|fS  t        v rdfd	}|fS y )Nr   c                 |    dxx   dz  cc<   t        j                   t        j                  |       g       S Nr   r   )r   
atleast_1dr   )r   kwdsr   gradr   s     r   r   z_wrapper_grad.<locals>.wrapped'   s1    1INI==bggaj!84!899r   c                 <    dxx   dz  cc<   t        | fd|iS )Nr   r   f0r   )r   r&   finite_diff_optionsr   r   s     r   wrapped1z_wrapper_grad.<locals>.wrapped1.   s2    1INI$Q!4 r   N)callable
FD_METHODS)r$   r   r   r(   r   r)   r   s   ````  @r   _wrapper_gradr-   #   sA    SF~	: 			  
r   c                     t               r  t        j                  |      g }dgt        j                  |      r fd}t        j
                  |      }nGt        |t              r fd}n/ fd}t        j                  t        j                  |            }||fS  t        v rdgdfd	}|d fS y )Nr   c                 |    dxx   dz  cc<   t        j                   t        j                  |       g       S r!   )sps
csr_matrixr   r   r   r#   r   hessr   s     r   r   z_wrapper_hess.<locals>.wrapped=   s1    q	Q	~~d2771:&=&=>>r   c                 V    dxx   dz  cc<    t        j                  |       g S r!   )r   r   r2   s     r   r   z_wrapper_hess.<locals>.wrappedD   s(    q	Q	BGGAJ...r   c           	          dxx   dz  cc<   t        j                  t        j                   t        j                  |       g             S r!   )r   
atleast_2dr   r   r2   s     r   r   z_wrapper_hess.<locals>.wrappedI   s:    q	Q	}}RZZRWWQZ0G$0G%HIIr   r   c                 "    t        | fd|iS Nr&   r'   )r   r&   r(   r$   s     r   r)   z_wrapper_hess.<locals>.wrapped1S   s%    $a"5 r   r*   )r+   r   r   r0   issparser1   
isinstancer   r6   r   r,   )	r3   r$   x0r   r(   Hr   r)   r   s	   `` ``   @r   _wrapper_hessr=   7   s    ~$t$<<?? q!A>*/
J bjjm,A!!			
 %% 
r   c                   z    e Zd ZdZ	 ddZed        Zed        Zed        Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)ScalarFunctiona  Scalar function and its derivatives.

    This class defines a scalar function F: R^n->R and methods for
    computing or approximating its first and second derivatives.

    Parameters
    ----------
    fun : callable
        evaluates the scalar function. Must be of the form ``fun(x, *args)``,
        where ``x`` is the argument in the form of a 1-D array and ``args`` is
        a tuple of any additional fixed parameters needed to completely specify
        the function. Should return a scalar.
    x0 : array-like
        Provides an initial set of variables for evaluating fun. Array of real
        elements of size (n,), where 'n' is the number of independent
        variables.
    args : tuple, optional
        Any additional fixed parameters needed to completely specify the scalar
        function.
    grad : {callable, '2-point', '3-point', 'cs'}
        Method for computing the gradient vector.
        If it is a callable, it should be a function that returns the gradient
        vector:

            ``grad(x, *args) -> array_like, shape (n,)``

        where ``x`` is an array with shape (n,) and ``args`` is a tuple with
        the fixed parameters.
        Alternatively, the keywords  {'2-point', '3-point', 'cs'} can be used
        to select a finite difference scheme for numerical estimation of the
        gradient with a relative step size. These finite difference schemes
        obey any specified `bounds`.
    hess : {callable, '2-point', '3-point', 'cs', HessianUpdateStrategy}
        Method for computing the Hessian matrix. If it is callable, it should
        return the  Hessian matrix:

            ``hess(x, *args) -> {LinearOperator, spmatrix, array}, (n, n)``

        where x is a (n,) ndarray and `args` is a tuple with the fixed
        parameters. Alternatively, the keywords {'2-point', '3-point', 'cs'}
        select a finite difference scheme for numerical estimation. Or, objects
        implementing `HessianUpdateStrategy` interface can be used to
        approximate the Hessian.
        Whenever the gradient is estimated via finite-differences, the Hessian
        cannot be estimated with options {'2-point', '3-point', 'cs'} and needs
        to be estimated using one of the quasi-Newton strategies.
    finite_diff_rel_step : None or array_like
        Relative step size to use. The absolute step size is computed as
        ``h = finite_diff_rel_step * sign(x0) * max(1, abs(x0))``, possibly
        adjusted to fit into the bounds. For ``method='3-point'`` the sign
        of `h` is ignored. If None then finite_diff_rel_step is selected
        automatically,
    finite_diff_bounds : tuple of array_like
        Lower and upper bounds on independent variables. Defaults to no bounds,
        (-np.inf, np.inf). Each bound must match the size of `x0` or be a
        scalar, in the latter case the bound will be the same for all
        variables. Use it to limit the range of function evaluation.
    epsilon : None or array_like, optional
        Absolute step size to use, possibly adjusted to fit into the bounds.
        For ``method='3-point'`` the sign of `epsilon` is ignored. By default
        relative steps are used, only if ``epsilon is not None`` are absolute
        steps used.

    Notes
    -----
    This class implements a memoization logic. There are methods `fun`,
    `grad`, hess` and corresponding attributes `f`, `g` and `H`. The following
    things should be considered:

        1. Use only public methods `fun`, `grad` and `hess`.
        2. After one of the methods is called, the corresponding attribute
           will be set. However, a subsequent call with a different argument
           of *any* of the methods may overwrite the attribute.
    Nc	                    t        |      s|t        vrt        dt         d      t        |      s+|t        v s#t        |t              st        dt         d      |t        v r|t        v rt        d      t        |      x| _        }	t        j                  |	j                  |      d|	      }
|	j                  }|	j                  |
j                  d      r|
j                  }t        ||      \  | _        | _        || _        || _        || _        || _        |	j)                  |
|      | _        || _        | j*                  j.                  | _        d	| _        d	| _        d	| _        d | _        t:        j<                  | _        i }|t        v r||d
<   ||d<   ||d<   ||d<   |t        v r||d
<   ||d<   ||d<   d|d<   | jA                          tC        || j                  ||      \  | _"        | _#        | jI                          t        |      r)tK        |||      \  | _&        | _'        | _(        d| _        y |t        v rptK        || jD                  ||      \  | _&        | _'        | _(        | jI                          | jM                  | j*                  | jR                        | _(        d| _        y t        |t              rK|| _(        | jP                  jU                  | j0                  d       d| _        d | _+        d | _,        dg| _'        y y )Nz)`grad` must be either callable or one of .z@`hess` must be either callable, HessianUpdateStrategy or one of zWhenever the gradient is estimated via finite-differences, we require the Hessian to be estimated using one of the quasi-Newton strategies.r   ndimxpreal floating)r   Fmethodrel_stepabs_stepboundsTas_linear_operator)r   r   r(   )r;   r   )r$   r;   r(   r&   r3   r   )-r+   r,   r   r:   r   r   rD   xpx
atleast_ndr   float64isdtypedtyper   _wrapped_fun_nfev	_orig_fun
_orig_grad
_orig_hess_argsastyper   x_dtypesizen	f_updated	g_updated	H_updated	_lowest_xr   inf	_lowest_f_update_funr-   _wrapped_grad_ngev_update_gradr=   _wrapped_hess_nhevr<   g
initializex_prevg_prev)selfr   r;   r   r$   r3   finite_diff_rel_stepfinite_diff_boundsepsilonrD   _x_dtyper(   s                r   __init__zScalarFunction.__init__   s   ~$j"8;J<qI  $*"4d$9:(\, 
 :$*"4 8 9 9
 'r**"^^BJJrNr:::bhh0XXF )5St(D%4:
 2v& :,0).B
+.5
+,>):,0).B
+.5
+8< 45 	 *7!! 3	*
&DJ 	 D>5B$62D
DF "DNZ5B''$7	62D
DF ''466':DF!DN34DFFFdfff-!DNDKDKDJ 5r   c                      | j                   d   S Nr   )rR   rk   s    r   nfevzScalarFunction.nfev      zz!}r   c                      | j                   d   S rs   )rc   rt   s    r   ngevzScalarFunction.ngev  rv   r   c                      | j                   d   S rs   )rf   rt   s    r   nhevzScalarFunction.nhev
  rv   r   c                    t        | j                  t              r| j                          | j                  | _        | j                  | _        t        j                  | j                  j                  |      d| j                        }| j                  j                  || j                        | _        d| _        d| _        d| _        | j#                          y t        j                  | j                  j                  |      d| j                        }| j                  j                  || j                        | _        d| _        d| _        d| _        y Nr   rB   F)r:   rU   r   rd   r   ri   rg   rj   rL   rM   rD   r   rW   rX   r[   r\   r]   _update_hessrk   r   ro   s      r   	_update_xzScalarFunction._update_x  s    doo'<=&&DK&&DK  2twwGBWW^^B5DF"DN"DN"DN  2twwGBWW^^B5DF"DN"DN"DNr   c                     | j                   sQ| j                  | j                        }|| j                  k  r| j                  | _        || _        || _        d| _         y y NT)r[   rQ   r   r`   r^   f)rk   r   s     r   ra   zScalarFunction._update_fun%  sN    ~~""466*BDNN"!%!#DF!DN r   c                     | j                   sV| j                  t        v r| j                          | j	                  | j
                  | j                        | _        d| _         y y NrK   T)r\   rT   r,   ra   rb   r   r   rg   rt   s    r   rd   zScalarFunction._update_grad/  sL    ~~*,  "''466':DF!DN	 r   c                    | j                   s| j                  t        v r=| j                          | j	                  | j
                  | j                        | _        nt        | j                  t              r[| j                          | j                  j                  | j
                  | j                  z
  | j                  | j                  z
         n | j	                  | j
                        | _        d| _         y y r   )r]   rU   r,   rd   re   r   rg   r<   r:   r   updateri   rj   rt   s    r   r}   zScalarFunction._update_hess6  s    ~~*,!!#++DFFtvv+>DOO-BC!!#dfft{{2DFFT[[4HI++DFF3!DN r   c                     t        j                  || j                        s| j                  |       | j	                          | j
                  S r*   )r   array_equalr   r   ra   r   rk   r   s     r   r   zScalarFunction.funC  s5    ~~a(NN1vvr   c                     t        j                  || j                        s| j                  |       | j	                          | j
                  S r*   )r   r   r   r   rd   rg   r   s     r   r$   zScalarFunction.gradI  5    ~~a(NN1vvr   c                     t        j                  || j                        s| j                  |       | j	                          | j
                  S r*   )r   r   r   r   r}   r<   r   s     r   r3   zScalarFunction.hessO  r   r   c                     t        j                  || j                        s| j                  |       | j	                          | j                          | j                  | j                  fS r*   )r   r   r   r   ra   rd   r   rg   r   s     r   fun_and_gradzScalarFunction.fun_and_gradU  sJ    ~~a(NN1vvtvv~r   r*   )__name__
__module____qualname____doc__rq   propertyru   rx   rz   r   ra   rd   r}   r   r$   r3   r   r   r   r   r?   r?   [   sy    IV .2Zx      #."""r   r?   c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)VectorFunctiona  Vector function and its derivatives.

    This class defines a vector function F: R^n->R^m and methods for
    computing or approximating its first and second derivatives.

    Notes
    -----
    This class implements a memoization logic. There are methods `fun`,
    `jac`, hess` and corresponding attributes `f`, `J` and `H`. The following
    things should be considered:

        1. Use only public methods `fun`, `jac` and `hess`.
        2. After one of the methods is called, the corresponding attribute
           will be set. However, a subsequent call with a different argument
           of *any* of the methods may overwrite the attribute.
    c	                 B    t              st        vrt        dt         d      t              s+t        v s#t        t              st        dt         d      t        v rt        v rt        d      t        |      x _        }	t        j                  |	j                  |      d|	      }
|	j                  }|	j                  |
j                  d      r|
j                  }|	j                  |
|       _        | _         j                  j                    _        d _        d _        d _        d	 _        d	 _        d	 _        i t        v rGd
<   |d<   |t1        |      }||fd<   |d<   t3        j4                   j                         _        t        v r3d
<   |d<   dd<   t3        j4                   j                         _        t        v rt        v rt        d       fd fd}| _         |        t3        j:                   j<                         _         j>                  j                    _         t              r  j                         _!        d _         xj&                  dz  c_        |s!|QtE        jF                   jB                        r2 fdtE        jH                   jB                         _!        d _%        n}tE        jF                   jB                        r- fd jB                  jM                          _!        d	 _%        n1 fdt3        jN                   jB                         _!        d	 _%         fd}nt        v rtQ         j                  fd j<                  i _!        d _        |s!|RtE        jF                   jB                        r3 fd}tE        jH                   jB                         _!        d _%        ntE        jF                   jB                        r. fd} jB                  jM                          _!        d	 _%        n2 fd}t3        jN                   jB                         _!        d	 _%         _)        t              r  j                   j>                         _*        d _         xj(                  dz  c_        tE        jF                   jT                        r+ fdtE        jH                   jT                         _*        n^t         jT                  tV              r fdn= fdt3        jN                  t3        j                   jT                               _*         fd}nzt        v rfd fd} |        d _        nWt        t              rG _*         jT                  jY                   j"                  d        d _        d  _-        d  _.         fd!} _/        t        t              r fd"}| _0        y  fd#}| _0        y )$Nz(`jac` must be either callable or one of rA   z?`hess` must be either callable,HessianUpdateStrategy or one of zWhenever the Jacobian is estimated via finite-differences, we require the Hessian to be estimated using one of the quasi-Newton strategies.r   rB   rE   r   FrF   rG   sparsityrI   TrJ   c                 d    xj                   dz  c_         t        j                   |             S Nr   )ru   r   r"   )r   r   rk   s    r   fun_wrappedz,VectorFunction.__init__.<locals>.fun_wrapped  s#    IINI==Q((r   c                  4      j                         _        y r*   )r   r   )r   rk   s   r   
update_funz+VectorFunction.__init__.<locals>.update_fun  s     (DFr   c                 d    xj                   dz  c_         t        j                   |             S r   )njevr0   r1   r   jacrk   s    r   jac_wrappedz,VectorFunction.__init__.<locals>.jac_wrapped  s#    IINI>>#a&11r   c                 Z    xj                   dz  c_          |       j                         S r   )r   toarrayr   s    r   r   z,VectorFunction.__init__.<locals>.jac_wrapped  s!    IINIq6>>++r   c                 d    xj                   dz  c_         t        j                   |             S r   )r   r   r6   r   s    r   r   z,VectorFunction.__init__.<locals>.jac_wrapped  s#    IINI==Q00r   c                  4      j                         _        y r*   )r   J)r   rk   s   r   
update_jacz+VectorFunction.__init__.<locals>.update_jac  s    $TVV,r   r&   c                      j                          t        j                  t        j                  fdj
                  i       _        y r8   )ra   r0   r1   r   r   r   r   r(   r   rk   s   r   r   z+VectorFunction.__init__.<locals>.update_jac  sF    $$& ^^)+tvv A$&& A,?ABDFr   c                      j                          t        j                  fdj                  i j	                         _        y r8   )ra   r   r   r   r   r   r   s   r   r   z+VectorFunction.__init__.<locals>.update_jac  sC    $$&.{DFF Ftvv F1DFFMgi Fr   c                      j                          t        j                  t        j                  fdj
                  i       _        y r8   )ra   r   r6   r   r   r   r   r   s   r   r   z+VectorFunction.__init__.<locals>.update_jac  sF    $$&]])+tvv A$&& A,?ABDFr   c                 f    xj                   dz  c_         t        j                   | |            S r   )rz   r0   r1   r   vr3   rk   s     r   hess_wrappedz-VectorFunction.__init__.<locals>.hess_wrapped  s%    IINI>>$q!*55r   c                 @    xj                   dz  c_          | |      S r   )rz   r   s     r   r   z-VectorFunction.__init__.<locals>.hess_wrapped  s    IINI1:%r   c                     xj                   dz  c_         t        j                  t        j                   | |                  S r   )rz   r   r6   r   r   s     r   r   z-VectorFunction.__init__.<locals>.hess_wrapped  s.    IINI==DAJ)?@@r   c                  J      j                   j                        _        y r*   )r   r   r<   )r   rk   s   r   update_hessz,VectorFunction.__init__.<locals>.update_hess  s    %dffdff5r   c                 F     |       j                   j                  |      S r*   )Tdot)r   r   r   s     r   	jac_dot_vz*VectorFunction.__init__.<locals>.jac_dot_v  s    "1~''++A..r   c                      j                          t        j                  fj                  j                  j                  j                        j                  fd _        y )N)r&   r   )_update_jacr   r   r   r   r   r   r<   )r(   r   rk   s   r   r   z,VectorFunction.__init__.<locals>.update_hess  sW      "*9dff B.2ffhhll466.B15	B .ABr   r3   c                     j                          j                  j                  j                  j                  z
  } j                  j
                  j                  j                        j                  j
                  j                  j                        z
  }j                  j                  | |       y y y r*   )
r   ri   J_prevr   r   r   r   r   r<   r   )delta_xdelta_grk   s     r   r   z,VectorFunction.__init__.<locals>.update_hess!  s      " ;;*t{{/F"fft{{2G"ffhhll4662T[[]]5F5Ftvv5NNGFFMM'73 0G*r   c                    j                          j                  _        j                  _        t        j                  j                  j                  |       dj                        }j                  j                  |j                        _        d_        d_        d_        j                          y r|   )r   r   ri   r   r   rL   rM   rD   r   rW   rX   r[   	J_updatedr]   r}   r   ro   rk   s     r   update_xz)VectorFunction.__init__.<locals>.update_x-  s      ""ff"ff^^DGGOOA$6Q477KDLL9!&!&!&!!#r   c                     t        j                  j                  j                  |       dj                        }j                  j	                  |j
                        _        d_        d_        d_	        y r|   )
rL   rM   rD   r   rW   rX   r   r[   r   r]   r   s     r   r   z)VectorFunction.__init__.<locals>.update_x8  sU    ^^DGGOOA$6Q477KDLL9!&!&!&r   )1r+   r,   r   r:   r   r   rD   rL   rM   r   rN   rO   rP   rW   r   rX   rY   rZ   ru   r   rz   r[   r   r]   r   r   r   x_diff_update_fun_impl
zeros_liker   r   mr   r0   r9   r1   sparse_jacobianr   r6   r   _update_jac_implr<   r   rh   ri   r   _update_hess_impl_update_x_impl)rk   r   r;   r   r3   rl   finite_diff_jac_sparsityrm   r   rD   ro   rp   sparsity_groupsr   r   r   r   r(   r   r   r   r   s   `` ``            @@@@@r   rq   zVectorFunction.__init__n  s    }J!6G
|STUVV$*"4d$9: @@J|1N O O *!3 + , ,
 'r**"^^BJJrNr:::bhh0XXF 2v&			 *,/).B
+'3"/0H"I3K3B3D#J/,>)''$&&/DK:,0).B
+8< 45''$&&/DK*!3 + , ,	)	) !+tvv& C=[DF!DNIINI#+TVV0D2 /'+$dff%, )',$1 tvv.',$- J&{DFF >tvv >)<>DF!DN#+TVV0DB
 /'+$dff%P )',$B
 tvv.',$ * D>$&&$&&)DF!DNIINI||DFF#6 /DFFN3&
A rzz$&&'9:6Z/B M!DN34DFFFdfff-!DNDKDK4 "-d12	$$ '' 'r   c                 b    t        j                  || j                        s|| _        d| _        y y )NF)r   r   r   r]   )rk   r   s     r   	_update_vzVectorFunction._update_vA  s'    ~~a(DF"DN )r   c                 h    t        j                  || j                        s| j                  |       y y r*   )r   r   r   r   r   s     r   r   zVectorFunction._update_xF  s'    ~~a(" )r   c                 L    | j                   s| j                          d| _         y y r   )r[   r   rt   s    r   ra   zVectorFunction._update_funJ  !    ~~!!#!DN r   c                 L    | j                   s| j                          d| _         y y r   )r   r   rt   s    r   r   zVectorFunction._update_jacO  r   r   c                 L    | j                   s| j                          d| _         y y r   )r]   r   rt   s    r   r}   zVectorFunction._update_hessT  s!    ~~""$!DN r   c                 \    | j                  |       | j                          | j                  S r*   )r   ra   r   r   s     r   r   zVectorFunction.funY  #    qvvr   c                 \    | j                  |       | j                          | j                  S r*   )r   r   r   r   s     r   r   zVectorFunction.jac^  r   r   c                 ~    | j                  |       | j                  |       | j                          | j                  S r*   )r   r   r}   r<   rk   r   r   s      r   r3   zVectorFunction.hessc  s/    qqvvr   N)r   r   r   r   rq   r   r   ra   r   r}   r   r   r3   r   r   r   r   r   ]  s6     Q'f#
#"
"
"


r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)LinearVectorFunctionzLinear vector function and its derivatives.

    Defines a linear function F = A x, where x is N-D vector and
    A is m-by-n matrix. The Jacobian is constant and equals to A. The Hessian
    is identically zero and it is returned as a csr matrix.
    c                    |s|7t        j                  |      r"t        j                  |      | _        d| _        nft        j                  |      r|j                         | _        d| _        n4t        j                  t        j                  |            | _        d| _        | j                  j                  \  | _
        | _        t        |      x| _        }t        j                  |j                  |      d|      }|j                   }|j#                  |j$                  d      r|j$                  }|j'                  ||      | _        || _        | j                  j-                  | j(                        | _        d| _        t        j2                  | j                  t4              | _        t        j                  | j                  | j                  f      | _        y )NTFr   rB   rE   )rP   )r0   r9   r1   r   r   r   r   r6   r   shaper   rZ   r   rD   rL   rM   rN   rO   rP   rW   r   rX   r   r   r[   zerosfloatr   r<   )rk   Ar;   r   rD   ro   rp   s          r   rq   zLinearVectorFunction.__init__r  s?   o5#,,q/^^A&DF#'D \\!_YY[DF#(D  ]]2::a=1DF#(D &r**"^^BJJrNr:::bhh0XXF 2v&DFF#$&&. 01r   c                     t        j                  || j                        snt        j                  | j
                  j                  |      d| j
                        }| j
                  j                  || j                        | _        d| _	        y y r|   )
r   r   r   rL   rM   rD   r   rW   rX   r[   r~   s      r   r   zLinearVectorFunction._update_x  s]    ~~a( 2twwGBWW^^B5DF"DN )r   c                     | j                  |       | j                  s'| j                  j                  |      | _        d| _        | j                  S r   )r   r[   r   r   r   r   s     r   r   zLinearVectorFunction.fun  s8    q~~VVZZ]DF!DNvvr   c                 <    | j                  |       | j                  S r*   )r   r   r   s     r   r   zLinearVectorFunction.jac  s    qvvr   c                 J    | j                  |       || _        | j                  S r*   )r   r   r<   r   s      r   r3   zLinearVectorFunction.hess  s    qvvr   N)	r   r   r   r   rq   r   r   r   r3   r   r   r   r   r   k  s     2<#r   r   c                   "     e Zd ZdZ fdZ xZS )IdentityVectorFunctionzIdentity vector function and its derivatives.

    The Jacobian is the identity matrix, returned as a dense array when
    `sparse_jacobian=False` and as a csr matrix otherwise. The Hessian is
    identically zero and it is returned as a csr matrix.
    c                     t        |      }|s|t        j                  |d      }d}nt        j                  |      }d}t        |   |||       y )Ncsr)formatTF)lenr0   eyer   superrq   )rk   r;   r   rZ   r   	__class__s        r   rq   zIdentityVectorFunction.__init__  sL    Go5%(A"Oq	A#OB0r   )r   r   r   r   rq   __classcell__)r   s   @r   r   r     s    1 1r   r   )r   )Nr   N)NNr   N)numpyr   scipy.sparsesparser0   _numdiffr   r   _hessian_update_strategyr   scipy.sparse.linalgr   scipy._lib._array_apir   
scipy._libr	   rL   r,   r   r-   r=   r?   r   r   r   r   r   r   <module>r      sc      6 ; . 1 - *
, (!&H DK K\9 9x11 1r   