
    Ug                     Z    d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
 dgZd Zd	dZdS )
zSparse matrix norms.

    N)issparse)svds)sqrtabsnormc                 ~    t           j                            |           }t          j                            |          S )N)sp_sputils_todatanplinalgr   )xdatas     X/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/sparse/linalg/_norm.py_sparse_frobenius_normr      s+    ;q!!D9>>$    c                 	   t          |           st          d          ||dv rt          |           S |                                 } |d}nbt	          |t
                    sMd}	 t          |          }n"# t          $ r}t          |          |d}~ww xY w||k    rt          |          |f}d}t          |          dk    r|\  }}| |cxk    r|k     rn n| |cxk    r|k     sn d|d| j        }	t          |	          ||z  ||z  k    rt          d	          |dk    rt          | d
d          \  }
}}
|d         S |dk    rt          |d
k    r=t          |                               |                              |          d         S |t          j        k    r=t          |                               |                              |          d         S |dk    r=t          |                               |                              |          d         S |t          j         k    r=t          |                               |                              |          d         S |dv rt          |           S t          d          t          |          d
k    r|\  }| |cxk    r|k     sn d|d| j        }	t          |	          |t          j        k    r%t          |                               |          }n>|t          j         k    r%t          |                               |          }n|dk    r| dk                        |          }n|d
k    r$t          |                               |          }n|dv rDt%          t          |                               d                              |                    }nu	 |d
z    n"# t          $ r}t          d          |d}~ww xY wt          j        t          |                               |                              |          d
|z            }t)          |d          r&|                                                                S t)          |d          r|j                                        S |                                S t          d          )a
  
    Norm of a sparse matrix

    This function is able to return one of seven different matrix norms,
    depending on the value of the ``ord`` parameter.

    Parameters
    ----------
    x : a sparse matrix
        Input sparse matrix.
    ord : {non-zero int, inf, -inf, 'fro'}, optional
        Order of the norm (see table under ``Notes``). inf means numpy's
        `inf` object.
    axis : {int, 2-tuple of ints, None}, optional
        If `axis` is an integer, it specifies the axis of `x` along which to
        compute the vector norms.  If `axis` is a 2-tuple, it specifies the
        axes that hold 2-D matrices, and the matrix norms of these matrices
        are computed.  If `axis` is None then either a vector norm (when `x`
        is 1-D) or a matrix norm (when `x` is 2-D) is returned.

    Returns
    -------
    n : float or ndarray

    Notes
    -----
    Some of the ord are not implemented because some associated functions like,
    _multi_svd_norm, are not yet available for sparse matrix.

    This docstring is modified based on numpy.linalg.norm.
    https://github.com/numpy/numpy/blob/main/numpy/linalg/linalg.py

    The following norms can be calculated:

    =====  ============================
    ord    norm for sparse matrices
    =====  ============================
    None   Frobenius norm
    'fro'  Frobenius norm
    inf    max(sum(abs(x), axis=1))
    -inf   min(sum(abs(x), axis=1))
    0      abs(x).sum(axis=axis)
    1      max(sum(abs(x), axis=0))
    -1     min(sum(abs(x), axis=0))
    2      Spectral norm (the largest singular value)
    -2     Not implemented
    other  Not implemented
    =====  ============================

    The Frobenius norm is given by [1]_:

        :math:`||A||_F = [\sum_{i,j} abs(a_{i,j})^2]^{1/2}`

    References
    ----------
    .. [1] G. H. Golub and C. F. Van Loan, *Matrix Computations*,
        Baltimore, MD, Johns Hopkins University Press, 1985, pg. 15

    Examples
    --------
    >>> from scipy.sparse import *
    >>> import numpy as np
    >>> from scipy.sparse.linalg import norm
    >>> a = np.arange(9) - 4
    >>> a
    array([-4, -3, -2, -1, 0, 1, 2, 3, 4])
    >>> b = a.reshape((3, 3))
    >>> b
    array([[-4, -3, -2],
           [-1, 0, 1],
           [ 2, 3, 4]])

    >>> b = csr_matrix(b)
    >>> norm(b)
    7.745966692414834
    >>> norm(b, 'fro')
    7.745966692414834
    >>> norm(b, np.inf)
    9
    >>> norm(b, -np.inf)
    2
    >>> norm(b, 1)
    7
    >>> norm(b, -1)
    6

    The matrix 2-norm or the spectral norm is the largest singular
    value, computed approximately and with limitations.

    >>> b = diags([-1, 1], [0, 1], shape=(9, 10))
    >>> norm(b, 2)
    1.9753...
    z*input is not sparse. use numpy.linalg.normN)Nfrof)r      z6'axis' must be None, an integer or a tuple of integers   zInvalid axis z for an array with shape zDuplicate axes given.r   lobpcg)ksolverr   )axis)r   r   )Nr   r   z Invalid norm order for matrices.)r   NzInvalid norm order for vectors.toarrayAz&Improper number of dimensions to norm.)r   	TypeErrorr   tocsr
isinstancetupleintlenshape
ValueErrorr   NotImplementedErrorr   summaxr   infminr   powerhasattrr   ravelr   )r   ordr   msgint_axisendrow_axiscol_axismessage_saMs                 r   r   r      s   | A;; FDEEE |111%a((( 	
		A|e$$ F	(4yyHH 	( 	( 	(C..a'	(8C.. {	
B
4yyA~~!(x$$$$"$$$$$")=)=)=)=2)=)=)=)=RdRRqwRRGW%%%b=HrM))4555!881(333GAq!Q4KBYY%%AXXq66::8:,,00h0??DDBF]]q66::8:,,00h0??DDBYYq66::8:,,00h0??DDRVG^^q66::8:,,00h0??DD&&&)!,,,?@@@	Taq2RdRRqwRRGW%%%"&==A


""AARVG^^A


""AAAXXa!$$AAAXXA


""AAISVV\\!__((a(0011AAKa K K K !BCCJKQc**..A.66C@@A1i   	99;;$$&&&Q__ 	399;;7799ABBBs0   %A5 5
B?BBO 
O>)O99O>)NN)__doc__numpyr   scipy.sparser   scipy.sparse.linalgr   sparser	   r   r   __all__r   r    r   r   <module>rC      s         ! ! ! ! ! ! $ $ $ $ $ $              (     
nC nC nC nC nC nCr   