Ë
    çÿæi�s  ã                   óJ  — d Z ddl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gZ G d„ d«      Z G d„ d	e«      Z G d
„ de«      Z G d„ de«      Zdd„Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zd„ Zy)aU  Abstract linear algebra library.

This module defines a class hierarchy that implements a kind of "lazy"
matrix representation, called the ``LinearOperator``. It can be used to do
linear algebra with extremely large sparse or structured matrices, without
representing those explicitly in memory. Such matrices can be added,
multiplied, transposed, etc.

As a motivating example, suppose you want have a matrix where almost all of
the elements have the value one. The standard sparse matrix representation
skips the storage of zeros, but not ones. By contrast, a LinearOperator is
able to represent such matrices efficiently. First, we need a compact way to
represent an all-ones matrix::

    >>> import numpy as np
    >>> from scipy.sparse.linalg._interface import LinearOperator
    >>> class Ones(LinearOperator):
    ...     def __init__(self, shape):
    ...         super().__init__(dtype=None, shape=shape)
    ...     def _matvec(self, x):
    ...         return np.repeat(x.sum(), self.shape[0])

Instances of this class emulate ``np.ones(shape)``, but using a constant
amount of storage, independent of ``shape``. The ``_matvec`` method specifies
how this linear operator multiplies with (operates on) a vector. We can now
add this operator to a sparse matrix that stores only offsets from one::

    >>> from scipy.sparse.linalg._interface import aslinearoperator
    >>> from scipy.sparse import csr_array
    >>> offsets = csr_array([[1, 0, 2], [0, -1, 0], [0, 0, 3]])
    >>> A = aslinearoperator(offsets) + Ones(offsets.shape)
    >>> A.dot([1, 2, 3])
    array([13,  4, 15])

The result is the same as that given by its dense, explicitly-stored
counterpart::

    >>> (np.ones(A.shape, A.dtype) + offsets.toarray()).dot([1, 2, 3])
    array([13,  4, 15])

Several algorithms in the ``scipy.sparse`` library are able to operate on
``LinearOperator`` instances.
é    N)Úissparse)ÚisshapeÚ	isintlikeÚasmatrixÚis_pydata_spmatrixÚLinearOperatorÚaslinearoperatorc                   ó  ‡ — e Zd ZdZdZdZ eej                  «      Z	ˆ fd„Z
d„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z" e#e"«      Z$d„ Z% e#e%«      Z&d„ Z'd„ Z(ˆ xZ)S ) r   aÀ  Common interface for performing matrix vector products

    Many iterative methods (e.g. `cg`, `gmres`) do not need to know the
    individual entries of a matrix to solve a linear system ``A@x = b``.
    Such solvers only require the computation of matrix vector
    products, ``A@v`` where ``v`` is a dense vector.  This class serves as
    an abstract interface between iterative solvers and matrix-like
    objects.

    To construct a concrete `LinearOperator`, either pass appropriate
    callables to the constructor of this class, or subclass it.

    A subclass must implement either one of the methods ``_matvec``
    and ``_matmat``, and the attributes/properties ``shape`` (pair of
    integers) and ``dtype`` (may be None). It may call the ``__init__``
    on this class to have these attributes validated. Implementing
    ``_matvec`` automatically implements ``_matmat`` (using a naive
    algorithm) and vice-versa.

    Optionally, a subclass may implement ``_rmatvec`` or ``_adjoint``
    to implement the Hermitian adjoint (conjugate transpose). As with
    ``_matvec`` and ``_matmat``, implementing either ``_rmatvec`` or
    ``_adjoint`` implements the other automatically. Implementing
    ``_adjoint`` is preferable; ``_rmatvec`` is mostly there for
    backwards compatibility.

    Parameters
    ----------
    shape : tuple
        Matrix dimensions ``(M, N)``.
    matvec : callable f(v)
        Returns returns ``A @ v``.
    rmatvec : callable f(v)
        Returns ``A^H @ v``, where ``A^H`` is the conjugate transpose of ``A``.
    matmat : callable f(V)
        Returns ``A @ V``, where ``V`` is a dense matrix with dimensions ``(N, K)``.
    dtype : dtype
        Data type of the matrix.
    rmatmat : callable f(V)
        Returns ``A^H @ V``, where ``V`` is a dense matrix with dimensions ``(M, K)``.

    Attributes
    ----------
    args : tuple
        For linear operators describing products etc. of other linear
        operators, the operands of the binary operation.
    ndim : int
        Number of dimensions (this is always 2)

    See Also
    --------
    aslinearoperator : Construct LinearOperators

    Notes
    -----
    The user-defined `matvec` function must properly handle the case
    where ``v`` has shape ``(N,)`` as well as the ``(N,1)`` case.  The shape of
    the return type is handled internally by `LinearOperator`.

    It is highly recommended to explicitly specify the `dtype`, otherwise
    it is determined automatically at the cost of a single matvec application
    on ``int8`` zero vector using the promoted `dtype` of the output.
    Python ``int`` could be difficult to automatically cast to numpy integers
    in the definition of the `matvec` so the determination may be inaccurate.
    It is assumed that `matmat`, `rmatvec`, and `rmatmat` would result in
    the same dtype of the output given an ``int8`` input as `matvec`.

    LinearOperator instances can also be multiplied, added with each
    other and exponentiated, all lazily: the result of these operations
    is always a new, composite LinearOperator, that defers linear
    operations to the original operators and combines the results.

    More details regarding how to subclass a LinearOperator and several
    examples of concrete LinearOperator instances can be found in the
    external project `PyLops <https://pylops.readthedocs.io>`_.


    Examples
    --------
    >>> import numpy as np
    >>> from scipy.sparse.linalg import LinearOperator
    >>> def mv(v):
    ...     return np.array([2*v[0], 3*v[1]])
    ...
    >>> A = LinearOperator((2,2), matvec=mv)
    >>> A
    <2x2 _CustomLinearOperator with dtype=int8>
    >>> A.matvec(np.ones(2))
    array([ 2.,  3.])
    >>> A @ np.ones(2)
    array([ 2.,  3.])

    é   Nc                 ó,  •— | t         u rt        ‰| �	  t        «      S t        ‰| �	  | «      }t	        |«      j
                  t         j
                  k(  rBt	        |«      j                  t         j                  k(  rt        j                  dt        d¬«       |S )NzMLinearOperator subclass should implement at least one of _matvec and _matmat.r   )ÚcategoryÚ
stacklevel)
r   ÚsuperÚ__new__Ú_CustomLinearOperatorÚtypeÚ_matvecÚ_matmatÚwarningsÚwarnÚRuntimeWarning)ÚclsÚargsÚkwargsÚobjÚ	__class__s       €ús/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/scipy/sparse/linalg/_interface.pyr   zLinearOperator.__new__ž   sx   ø€ Ø”.Ñ ä‘7‘?Ô#8Ó9Ð9ä‘'‘/ #Ó&ˆCä�S“	×!Ñ!¤^×%;Ñ%;Ò;Ü˜S›	×)Ñ)¬^×-CÑ-CÒCÜ—‘ð Fä'5À!õEð ˆJó    c                 ó˜   — |�t        j                  |«      }t        |«      }t        |«      st	        d|›d�«      ‚|| _        || _        y)z¡Initialize this LinearOperator.

        To be called by subclasses. ``dtype`` may be None; ``shape`` should
        be convertible to a length-2 tuple.
        Nzinvalid shape z (must be 2-d))ÚnpÚdtypeÚtupler   Ú
ValueErrorÚshape)Úselfr!   r$   s      r   Ú__init__zLinearOperator.__init__­   sI   € ð ÐÜ—H‘H˜U“OˆEä�e“ˆÜ�uŒ~Ü˜~¨e¨Y°nÐEÓFÐFàˆŒ
Øˆ�
r   c                 óH  — | j                   €it        j                  | j                  d   t        j                  ¬«      }	 t        j
                  | j                  |«      «      }|j                   | _         yy# t        $ r! t        j                   t        «      | _         Y yw xY w)aø  Determine the dtype by executing `matvec` on an `int8` test vector.

        In `np.promote_types` hierarchy, the type `int8` is the smallest,
        so we call `matvec` on `int8` and use the promoted dtype of the output
        to set the default `dtype` of the `LinearOperator`.
        We assume that `matmat`, `rmatvec`, and `rmatmat` would result in
        the same dtype of the output given an `int8` input as `matvec`.

        Called from subclasses at the end of the __init__ routine.
        Néÿÿÿÿ)r!   )	r!   r    Úzerosr$   Úint8ÚasarrayÚmatvecÚOverflowErrorÚint)r%   ÚvÚmatvec_vs      r   Ú_init_dtypezLinearOperator._init_dtype½   sw   € ð �:‰:ÐÜ—‘˜Ÿ™ B™¬r¯w©wÔ7ˆAð,ÜŸ:™: d§k¡k°!£nÓ5�ð
 &Ÿ^™^�•
ð øô !ò +äŸX™X¤c›]�–
ð+ús   Á $A7 Á7'B!Â B!c                 ó¤   — t        j                  |j                  D �cg c]#  }| j                  |j	                  dd«      «      ‘Œ% c}«      S c c}w )zÌDefault matrix-matrix multiplication handler.

        Falls back on the user-defined _matvec method, so defining that will
        define matrix multiplication (though in a very suboptimal way).
        r(   é   )r    ÚhstackÚTr,   Úreshape©r%   ÚXÚcols      r   r   zLinearOperator._matmatÒ   s=   € ô �y‰yÀAÇCÂCÓHÁC¸S˜$Ÿ+™+ c§k¡k°"°QÓ&7Õ8ÀCÑHÓIÐIùÒHs   ž(Ac                 óD   — | j                  |j                  dd«      «      S )ay  Default matrix-vector multiplication handler.

        If self is a linear operator of shape (M, N), then this method will
        be called on a shape (N,) or (N, 1) ndarray, and should return a
        shape (M,) or (M, 1) ndarray.

        This default implementation falls back on _matmat, so defining that
        will define matrix-vector multiplication as well.
        r(   r3   )Úmatmatr6   ©r%   Úxs     r   r   zLinearOperator._matvecÛ   s   € ð �{‰{˜1Ÿ9™9 R¨Ó+Ó,Ð,r   c                 óÚ  — t        j                  |«      }| j                  \  }}|j                  |fk7  r|j                  |dfk7  rt        d«      ‚| j	                  |«      }t        |t         j                  «      rt        |«      }nt        j                  |«      }|j                  dk(  r|j                  |«      }|S |j                  dk(  r|j                  |d«      }|S t        d«      ‚)ax  Matrix-vector multiplication.

        Performs the operation y=A@x where A is an MxN linear
        operator and x is a column vector or 1-d array.

        Parameters
        ----------
        x : {matrix, ndarray}
            An array with shape (N,) or (N,1).

        Returns
        -------
        y : {matrix, ndarray}
            A matrix or ndarray with shape (M,) or (M,1) depending
            on the type and shape of the x argument.

        Notes
        -----
        This matvec wraps the user-specified matvec routine or overridden
        _matvec method to ensure that y has the correct shape and type.

        r3   údimension mismatchr   z/invalid shape returned by user-defined matvec())r    Ú
asanyarrayr$   r#   r   Ú
isinstanceÚmatrixr   r+   Úndimr6   ©r%   r=   ÚMÚNÚys        r   r,   zLinearOperator.matvecç   sÈ   € ô0 �M‰M˜!Óˆà�j‰j‰ˆˆ!à�7‰7�q�dŠ?˜qŸw™w¨1¨Q¨%Ò/ÜÐ1Ó2Ð2à�L‰L˜‹Oˆä�aœŸ™Ô#Ü˜“‰Aä—
‘
˜1“ˆAà�6‰6�QŠ;Ø—	‘	˜!“ˆAð ˆð �V‰V�qŠ[Ø—	‘	˜!˜A“ˆAð ˆô ÐNÓOÐOr   c                 óÚ  — t        j                  |«      }| j                  \  }}|j                  |fk7  r|j                  |dfk7  rt        d«      ‚| j	                  |«      }t        |t         j                  «      rt        |«      }nt        j                  |«      }|j                  dk(  r|j                  |«      }|S |j                  dk(  r|j                  |d«      }|S t        d«      ‚)a‰  Adjoint matrix-vector multiplication.

        Performs the operation y = A^H @ x where A is an MxN linear
        operator and x is a column vector or 1-d array.

        Parameters
        ----------
        x : {matrix, ndarray}
            An array with shape (M,) or (M,1).

        Returns
        -------
        y : {matrix, ndarray}
            A matrix or ndarray with shape (N,) or (N,1) depending
            on the type and shape of the x argument.

        Notes
        -----
        This rmatvec wraps the user-specified rmatvec routine or overridden
        _rmatvec method to ensure that y has the correct shape and type.

        r3   r?   r   z0invalid shape returned by user-defined rmatvec())r    r@   r$   r#   Ú_rmatvecrA   rB   r   r+   rC   r6   rD   s        r   ÚrmatveczLinearOperator.rmatvec  sÉ   € ô0 �M‰M˜!Óˆà�j‰j‰ˆˆ!à�7‰7�q�dŠ?˜qŸw™w¨1¨Q¨%Ò/ÜÐ1Ó2Ð2à�M‰M˜!Óˆä�aœŸ™Ô#Ü˜“‰Aä—
‘
˜1“ˆAà�6‰6�QŠ;Ø—	‘	˜!“ˆAð ˆð �V‰V�qŠ[Ø—	‘	˜!˜A“ˆAð ˆô ÐOÓPÐPr   c                 óT  — t        | «      j                  t        j                  k(  rht        | d«      rVt        | «      j                  t        j                  k7  r0| j	                  |j                  dd«      «      j                  d«      S t        ‚| j                  j                  |«      S )z6Default implementation of _rmatvec; defers to adjoint.Ú_rmatmatr(   r3   )	r   Ú_adjointr   ÚhasattrrL   r6   ÚNotImplementedErrorÚHr,   r<   s     r   rI   zLinearOperator._rmatvecE  sz   € ä�‹:×Ñ¤.×"9Ñ"9Ò9ä˜˜jÔ)Ü˜T›
×+Ñ+¬~×/FÑ/FÒFà—}‘} Q§Y¡Y¨r°1Ó%5Ó6×>Ñ>¸rÓBÐBÜ%Ð%à—6‘6—=‘= Ó#Ð#r   c                 ó
  — t        |«      s t        |«      st        j                  |«      }|j                  dk7  rt        d|j                  › d�«      ‚|j                  d   | j                  d   k7  r%t        d| j                  › d|j                  › �«      ‚	 | j                  |«      }t        |t        j                  «      rt        |«      }|S # t        $ r(}t        |«      st        |«      rt        d«      |‚‚ d	}~ww xY w)
aP  Matrix-matrix multiplication.

        Performs the operation y=A@X where A is an MxN linear
        operator and X dense N*K matrix or ndarray.

        Parameters
        ----------
        X : {matrix, ndarray}
            An array with shape (N,K).

        Returns
        -------
        Y : {matrix, ndarray}
            A matrix or ndarray with shape (M,K) depending on
            the type of the X argument.

        Notes
        -----
        This matmat wraps any user-specified matmat routine or overridden
        _matmat method to ensure that y has the correct type.

        r   ú$expected 2-d ndarray or matrix, not ú-dr   r3   údimension mismatch: ú, zdUnable to multiply a LinearOperator with a sparse matrix. Wrap the matrix in aslinearoperator first.N)r   r   r    r@   rC   r#   r$   r   Ú	ExceptionÚ	TypeErrorrA   rB   r   ©r%   r8   ÚYÚes       r   r;   zLinearOperator.matmatQ  sì   € ô. ˜”Ô1°!Ô4Ü—‘˜aÓ ˆAà�6‰6�QŠ;ÜÐCÀAÇFÁFÀ8È2ÐNÓOÐOà�7‰7�1‰:˜Ÿ™ A™Ò&ÜÐ3°D·J±J°<¸rÀ!Ç'Á'ÀÐKÓLÐLð	Ø—‘˜Q“ˆAô �aœŸ™Ô#Ü˜“ˆAàˆøô ò 	Ü˜Œ{Ô0°Ô3ÜðBóð ðð ûð	úó   ÂC Ã	DÃ#C=Ã=Dc                 ó
  — t        |«      s t        |«      st        j                  |«      }|j                  dk7  rt        d|j                  › d�«      ‚|j                  d   | j                  d   k7  r%t        d| j                  › d|j                  › �«      ‚	 | j                  |«      }t        |t        j                  «      rt        |«      }|S # t        $ r(}t        |«      st        |«      rt        d«      |‚‚ d}~ww xY w)	a;  Adjoint matrix-matrix multiplication.

        Performs the operation y = A^H @ x where A is an MxN linear
        operator and x is a column vector or 1-d array, or 2-d array.
        The default implementation defers to the adjoint.

        Parameters
        ----------
        X : {matrix, ndarray}
            A matrix or 2D array.

        Returns
        -------
        Y : {matrix, ndarray}
            A matrix or 2D array depending on the type of the input.

        Notes
        -----
        This rmatmat wraps the user-specified rmatmat routine.

        r   rR   rS   r   rT   rU   zfUnable to multiply a LinearOperator with a sparse matrix. Wrap the matrix in aslinearoperator() first.N)r   r   r    r@   rC   r#   r$   rL   rV   rW   rA   rB   r   rX   s       r   ÚrmatmatzLinearOperator.rmatmat€  sí   € ô, ˜”Ô1°!Ô4Ü—‘˜aÓ ˆAà�6‰6�QŠ;ÜÐCÀAÇFÁFÀ8È2ÐNÓOÐOà�7‰7�1‰:˜Ÿ™ A™Ò&ÜÐ3°D·J±J°<¸rÀ!Ç'Á'ÀÐKÓLÐLð	Ø—‘˜aÓ ˆAô �aœŸ™Ô#Ü˜“ˆAØˆøô ò 	Ü˜Œ{Ô0°Ô3ÜðDóð ðð ûð	úr[   c                 ó&  — t        | «      j                  t        j                  k(  rLt        j                  |j
                  D �cg c]#  }| j                  |j                  dd«      «      ‘Œ% c}«      S | j                  j                  |«      S c c}w )z@Default implementation of _rmatmat defers to rmatvec or adjoint.r(   r3   )
r   rM   r   r    r4   r5   rJ   r6   rP   r;   r7   s      r   rL   zLinearOperator._rmatmat­  si   € ä�‹:×Ñ¤.×"9Ñ"9Ò9Ü—9‘9È!Ï#Ê#ÓNÉ#À3˜dŸl™l¨3¯;©;°r¸1Ó+=Õ>È#ÑNÓOÐOà—6‘6—=‘= Ó#Ð#ùò Os   Á(Bc                 ó   — | |z  S ©N© r<   s     r   Ú__call__zLinearOperator.__call__´  s   € Ø�A‰vˆr   c                 ó$   — | j                  |«      S r`   )Údotr<   s     r   Ú__mul__zLinearOperator.__mul__·  s   € Ø�x‰x˜‹{Ðr   c                 ó`   — t        j                  |«      st        d«      ‚t        | d|z  «      S )Nz.Can only divide a linear operator by a scalar.g      ð?)r    Úisscalarr#   Ú_ScaledLinearOperator©r%   Úothers     r   Ú__truediv__zLinearOperator.__truediv__º  s+   € Ü�{‰{˜5Ô!ÜÐMÓNÐNä$ T¨3¨u©9Ó5Ð5r   c                 ó°  — t        |t        «      rt        | |«      S t        j                  |«      rt        | |«      S t        |«      s t        |«      st        j                  |«      }|j                  dk(  s!|j                  dk(  r#|j                  d   dk(  r| j                  |«      S |j                  dk(  r| j                  |«      S t        d|›�«      ‚)ar  Matrix-matrix or matrix-vector multiplication.

        Parameters
        ----------
        x : array_like
            1-d or 2-d array, representing a vector or matrix.

        Returns
        -------
        Ax : array
            1-d or 2-d array (depending on the shape of x) that represents
            the result of applying this linear operator on x.

        r3   r   ú)expected 1-d or 2-d array or matrix, got )rA   r   Ú_ProductLinearOperatorr    rg   rh   r   r   r+   rC   r$   r,   r;   r#   r<   s     r   rd   zLinearOperator.dotÀ  s¬   € ô �aœÔ(Ü)¨$°Ó2Ð2Ü�[‰[˜Œ^Ü(¨¨qÓ1Ð1ä˜A”;Ô'9¸!Ô'<ä—J‘J˜q“M�à�v‰v˜Š{˜aŸf™f¨šk¨a¯g©g°a©j¸AªoØ—{‘{ 1“~Ð%Ø—‘˜1’Ø—{‘{ 1“~Ð%ä Ð#LÈQÈEÐ!RÓSÐSr   c                 ód   — t        j                  |«      rt        d«      ‚| j                  |«      S ©Nz0Scalar operands are not allowed, use '*' instead)r    rg   r#   re   ri   s     r   Ú
__matmul__zLinearOperator.__matmul__ß  s/   € Ü�;‰;�uÔÜð /ó 0ð 0à�|‰|˜EÓ"Ð"r   c                 ód   — t        j                  |«      rt        d«      ‚| j                  |«      S rp   )r    rg   r#   Ú__rmul__ri   s     r   Ú__rmatmul__zLinearOperator.__rmatmul__å  s/   € Ü�;‰;�uÔÜð /ó 0ð 0à�}‰}˜UÓ#Ð#r   c                 óf   — t        j                  |«      rt        | |«      S | j                  |«      S r`   )r    rg   rh   Ú_rdotr<   s     r   rs   zLinearOperator.__rmul__ë  s(   € Ü�;‰;�qŒ>Ü(¨¨qÓ1Ð1à—:‘:˜a“=Ð r   c                 ó(  — t        |t        «      rt        || «      S t        j                  |«      rt        | |«      S t        |«      s t        |«      st        j                  |«      }|j                  dk(  s!|j                  dk(  rA|j                  d   dk(  r/| j                  j                  |j                  «      j                  S |j                  dk(  r/| j                  j                  |j                  «      j                  S t        d|›�«      ‚)aï  Matrix-matrix or matrix-vector multiplication from the right.

        Parameters
        ----------
        x : array_like
            1-d or 2-d array, representing a vector or matrix.

        Returns
        -------
        xA : array
            1-d or 2-d array (depending on the shape of x) that represents
            the result of applying this linear operator on x from the right.

        Notes
        -----
        This is copied from dot to implement right multiplication.
        r3   r   r   rm   )rA   r   rn   r    rg   rh   r   r   r+   rC   r$   r5   r,   r;   r#   r<   s     r   rv   zLinearOperator._rdotñ  sÌ   € ô$ �aœÔ(Ü)¨!¨TÓ2Ð2Ü�[‰[˜Œ^Ü(¨¨qÓ1Ð1ä˜A”;Ô'9¸!Ô'<ä—J‘J˜q“M�ð �v‰v˜Š{˜aŸf™f¨šk¨a¯g©g°a©j¸AªoØ—v‘v—}‘} Q§S¡SÓ)×+Ñ+Ð+Ø—‘˜1’Ø—v‘v—}‘} Q§S¡SÓ)×+Ñ+Ð+ä Ð#LÈQÈEÐ!RÓSÐSr   c                 óP   — t        j                  |«      rt        | |«      S t        S r`   )r    rg   Ú_PowerLinearOperatorÚNotImplemented)r%   Úps     r   Ú__pow__zLinearOperator.__pow__  s    € Ü�;‰;�qŒ>Ü'¨¨aÓ0Ð0ä!Ð!r   c                 óF   — t        |t        «      rt        | |«      S t        S r`   )rA   r   Ú_SumLinearOperatorrz   r<   s     r   Ú__add__zLinearOperator.__add__  s   € Ü�aœÔ(Ü% d¨AÓ.Ð.ä!Ð!r   c                 ó   — t        | d«      S )Nr(   )rh   ©r%   s    r   Ú__neg__zLinearOperator.__neg__!  s   € Ü$ T¨2Ó.Ð.r   c                 ó&   — | j                  | «      S r`   )r   r<   s     r   Ú__sub__zLinearOperator.__sub__$  s   € Ø�|‰|˜Q˜BÓÐr   c           	      ó´   — | j                   \  }}| j                  €d}ndt        | j                  «      z   }d|› d|› d| j                  j                  › d|› d�	S )Nzunspecified dtypezdtype=Ú<r=   Ú z with Ú>)r$   r!   Ústrr   Ú__name__)r%   rE   rF   Údts       r   Ú__repr__zLinearOperator.__repr__'  s\   € Ø�j‰j‰ˆˆ!Ø�:‰:ÐØ$‰BàœC §
¡
›OÑ+ˆBà�1�#�Q�q�c˜˜4Ÿ>™>×2Ñ2Ð3°6¸"¸¸QÐ?Ð?r   c                 ó"   — | j                  «       S )aƒ  Hermitian adjoint.

        Returns the Hermitian adjoint of self, aka the Hermitian
        conjugate or Hermitian transpose. For a complex matrix, the
        Hermitian adjoint is equal to the conjugate transpose.

        Can be abbreviated self.H instead of self.adjoint().

        Returns
        -------
        A_H : LinearOperator
            Hermitian adjoint of self.
        )rM   r�   s    r   ÚadjointzLinearOperator.adjoint0  s   € ð �}‰}‹Ðr   c                 ó"   — | j                  «       S )z´Transpose this linear operator.

        Returns a LinearOperator that represents the transpose of this one.
        Can be abbreviated self.T instead of self.transpose().
        )Ú
_transposer�   s    r   Ú	transposezLinearOperator.transposeB  s   € ð �‰Ó Ð r   c                 ó   — t        | «      S )z6Default implementation of _adjoint; defers to rmatvec.)Ú_AdjointLinearOperatorr�   s    r   rM   zLinearOperator._adjointL  s   € ä% dÓ+Ð+r   c                 ó   — t        | «      S )z? Default implementation of _transpose; defers to rmatvec + conj)Ú_TransposedLinearOperatorr�   s    r   r�   zLinearOperator._transposeP  s   € ä(¨Ó.Ð.r   )*rŠ   Ú
__module__Ú__qualname__Ú__doc__rC   Ú__array_ufunc__ÚclassmethodÚtypesÚGenericAliasÚ__class_getitem__r   r&   r1   r   r   r,   rJ   rI   r;   r]   rL   rb   re   rk   rd   rq   rt   rs   rv   r|   r   r‚   r„   rŒ   rŽ   ÚpropertyrP   r‘   r5   rM   r�   Ú__classcell__©r   s   @r   r   r   8   sÖ   ø„ ñ\ð| €Dà€Oñ $ E×$6Ñ$6Ó7Ðôòò ,ò*Jò
-ò-ò^-ò^
$ò-ò^+òZ$òòò6òTò>#ò$ò!ò"TòH"ò"ò/ò ò@òñ  	�Ó€Aò!ñ 	�Ó€Aò,ö/r   c                   óN   ‡ — e Zd ZdZ	 	 dˆ fd„	Zˆ fd„Zd„ Zd„ Zˆ fd„Zd„ Z	ˆ xZ
S )	r   z>Linear operator defined in terms of user-specified operations.c                 óŒ   •— t         ‰| �  ||«       d| _        || _        || _        || _        || _        | j                  «        y )Nra   )r   r&   r   Ú"_CustomLinearOperator__matvec_implÚ#_CustomLinearOperator__rmatvec_implÚ#_CustomLinearOperator__rmatmat_implÚ"_CustomLinearOperator__matmat_implr1   )r%   r$   r,   rJ   r;   r!   r]   r   s          €r   r&   z_CustomLinearOperator.__init__X  sE   ø€ ä‰Ñ˜ Ô&àˆŒ	à#ˆÔØ%ˆÔØ%ˆÔØ#ˆÔà×ÑÕr   c                 ó\   •— | j                   �| j                  |«      S t        ‰| �	  |«      S r`   )r¦   r   r   ©r%   r8   r   s     €r   r   z_CustomLinearOperator._matmate  s/   ø€ Ø×ÑÐ)Ø×%Ñ% aÓ(Ð(ä‘7‘? 1Ó%Ð%r   c                 ó$   — | j                  |«      S r`   )r£   r<   s     r   r   z_CustomLinearOperator._matveck  s   € Ø×!Ñ! !Ó$Ð$r   c                 óV   — | j                   }|€t        d«      ‚| j                  |«      S )Nzrmatvec is not defined)r¤   rO   )r%   r=   Úfuncs      r   rI   z_CustomLinearOperator._rmatvecn  s/   € Ø×"Ñ"ˆØˆ<Ü%Ð&>Ó?Ð?Ø×"Ñ" 1Ó%Ð%r   c                 ó\   •— | j                   �| j                  |«      S t        ‰| �	  |«      S r`   )r¥   r   rL   r¨   s     €r   rL   z_CustomLinearOperator._rmatmatt  s0   ø€ Ø×ÑÐ*Ø×&Ñ& qÓ)Ð)ä‘7Ñ# AÓ&Ð&r   c                 óÀ   — t        | j                  d   | j                  d   f| j                  | j                  | j                  | j
                  | j                  ¬«      S )Nr3   r   )r$   r,   rJ   r;   r]   r!   )r   r$   r¤   r£   r¥   r¦   r!   r�   s    r   rM   z_CustomLinearOperator._adjointz  sQ   € Ü$¨D¯J©J°q©M¸4¿:¹:Àa¹=Ð+IØ,0×,?Ñ,?Ø-1×-?Ñ-?Ø,0×,?Ñ,?Ø-1×-?Ñ-?Ø+/¯:©:ô7ð 	7r   )NNNN)rŠ   r–   r—   r˜   r&   r   r   rI   rL   rM   rŸ   r    s   @r   r   r   U  s*   ø„ ÙHà;?Ø%)õô&ò%ò&ô'ö7r   r   c                   ó:   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zˆ xZ	S )r“   z$Adjoint of arbitrary Linear Operatorc                 ó–   •— |j                   d   |j                   d   f}t        ‰| �	  |j                  |¬«       || _        |f| _        y ©Nr3   r   )r!   r$   ©r$   r   r&   r!   ÚAr   ©r%   r²   r$   r   s      €r   r&   z_AdjointLinearOperator.__init__†  óC   ø€ Ø—‘˜‘˜QŸW™W Q™ZÐ(ˆÜ‰Ñ˜qŸw™w¨eÐÔ4ØˆŒØ�Dˆ�	r   c                 ó8   — | j                   j                  |«      S r`   )r²   rI   r<   s     r   r   z_AdjointLinearOperator._matvecŒ  ó   € Ø�v‰v�‰˜qÓ!Ð!r   c                 ó8   — | j                   j                  |«      S r`   )r²   r   r<   s     r   rI   z_AdjointLinearOperator._rmatvec�  ó   € Ø�v‰v�~‰~˜aÓ Ð r   c                 ó8   — | j                   j                  |«      S r`   )r²   rL   r<   s     r   r   z_AdjointLinearOperator._matmat’  r¶   r   c                 ó8   — | j                   j                  |«      S r`   )r²   r   r<   s     r   rL   z_AdjointLinearOperator._rmatmat•  r¸   r   ©
rŠ   r–   r—   r˜   r&   r   rI   r   rL   rŸ   r    s   @r   r“   r“   ƒ  s   ø„ Ù.ôò"ò!ò"ö!r   r“   c                   ó:   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zˆ xZ	S )r•   z*Transposition of arbitrary Linear Operatorc                 ó–   •— |j                   d   |j                   d   f}t        ‰| �	  |j                  |¬«       || _        |f| _        y r°   r±   r³   s      €r   r&   z"_TransposedLinearOperator.__init__›  r´   r   c                 ó„   — t        j                  | j                  j                  t        j                  |«      «      «      S r`   )r    Úconjr²   rI   r<   s     r   r   z!_TransposedLinearOperator._matvec¡  ó&   € ä�w‰w�t—v‘v—‘¤r§w¡w¨q£zÓ2Ó3Ð3r   c                 ó„   — t        j                  | j                  j                  t        j                  |«      «      «      S r`   )r    r¿   r²   r   r<   s     r   rI   z"_TransposedLinearOperator._rmatvec¥  ó&   € Ü�w‰w�t—v‘v—~‘~¤b§g¡g¨a£jÓ1Ó2Ð2r   c                 ó„   — t        j                  | j                  j                  t        j                  |«      «      «      S r`   )r    r¿   r²   rL   r<   s     r   r   z!_TransposedLinearOperator._matmat¨  rÀ   r   c                 ó„   — t        j                  | j                  j                  t        j                  |«      «      «      S r`   )r    r¿   r²   r   r<   s     r   rL   z"_TransposedLinearOperator._rmatmat¬  rÂ   r   r»   r    s   @r   r•   r•   ˜  s   ø„ Ù4ôò4ò3ò4ö3r   r•   c                 ó’   — |€g }| D ]-  }|€Œt        |d«      sŒ|j                  |j                  «       Œ/ t        j                  |Ž S )Nr!   )rN   Úappendr!   r    Úresult_type)Ú	operatorsÚdtypesr   s      r   Ú
_get_dtyperÊ   ¯  sE   € Ø€~ØˆÛˆØ‰?œw s¨GÕ4Ø�M‰M˜#Ÿ)™)Õ$ð ô �>‰>˜6Ð"Ð"r   c                   ó<   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZ	S )r~   c                 ó  •— t        |t        «      rt        |t        «      st        d«      ‚|j                  |j                  k7  rt        d|› d|› d�«      ‚||f| _        t
        ‰| �  t        ||g«      |j                  «       y )Nú)both operands have to be a LinearOperatorzcannot add ú and ú: shape mismatch)rA   r   r#   r$   r   r   r&   rÊ   ©r%   r²   ÚBr   s      €r   r&   z_SumLinearOperator.__init__¹  su   ø€ Ü˜!œ^Ô,Ü˜q¤.Ô1ÜÐHÓIÐIØ�7‰7�a—g‘gÒÜ˜{¨1¨#¨U°1°#Ð5EÐFÓGÐGØ˜�FˆŒ	Ü‰Ñœ Q¨ FÓ+¨Q¯W©WÕ5r   c                 ó|   — | j                   d   j                  |«      | j                   d   j                  |«      z   S ©Nr   r3   ©r   r,   r<   s     r   r   z_SumLinearOperator._matvecÂ  ó3   € Ø�y‰y˜‰|×"Ñ" 1Ó%¨¯	©	°!©×(;Ñ(;¸AÓ(>Ñ>Ð>r   c                 ó|   — | j                   d   j                  |«      | j                   d   j                  |«      z   S rÓ   ©r   rJ   r<   s     r   rI   z_SumLinearOperator._rmatvecÅ  ó3   € Ø�y‰y˜‰|×#Ñ# AÓ&¨¯©°1©×)=Ñ)=¸aÓ)@Ñ@Ð@r   c                 ó|   — | j                   d   j                  |«      | j                   d   j                  |«      z   S rÓ   ©r   r]   r<   s     r   rL   z_SumLinearOperator._rmatmatÈ  rØ   r   c                 ó|   — | j                   d   j                  |«      | j                   d   j                  |«      z   S rÓ   ©r   r;   r<   s     r   r   z_SumLinearOperator._matmatË  rÕ   r   c                 óR   — | j                   \  }}|j                  |j                  z   S r`   ©r   rP   ©r%   r²   rÑ   s      r   rM   z_SumLinearOperator._adjointÎ  ó!   € Ø�y‰y‰ˆˆ1Ø�s‰s�Q—S‘S‰yÐr   ©
rŠ   r–   r—   r&   r   rI   rL   r   rM   rŸ   r    s   @r   r~   r~   ¸  s#   ø„ ô6ò?òAòAò?ör   r~   c                   ó<   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZ	S )rn   c                 ó>  •— t        |t        «      rt        |t        «      st        d«      ‚|j                  d   |j                  d   k7  rt        d|› d|› d�«      ‚t        ‰| �  t        ||g«      |j                  d   |j                  d   f«       ||f| _        y )NrÍ   r3   r   zcannot multiply rÎ   rÏ   )rA   r   r#   r$   r   r&   rÊ   r   rÐ   s      €r   r&   z_ProductLinearOperator.__init__Ô  s“   ø€ Ü˜!œ^Ô,Ü˜q¤.Ô1ÜÐHÓIÐIØ�7‰7�1‰:˜Ÿ™ ™Ò#ÜÐ/°¨s°%¸°sÐ:JÐKÓLÐLÜ‰Ñœ Q¨ FÓ+Ø67·g±g¸a±jÀ!Ç'Á'È!Á*Ð5Mô	Oà˜�Fˆ�	r   c                 óv   — | j                   d   j                  | j                   d   j                  |«      «      S rÓ   rÔ   r<   s     r   r   z_ProductLinearOperator._matvecÞ  ó.   € Ø�y‰y˜‰|×"Ñ" 4§9¡9¨Q¡<×#6Ñ#6°qÓ#9Ó:Ð:r   c                 óv   — | j                   d   j                  | j                   d   j                  |«      «      S ©Nr3   r   r×   r<   s     r   rI   z_ProductLinearOperator._rmatvecá  ó.   € Ø�y‰y˜‰|×#Ñ# D§I¡I¨a¡L×$8Ñ$8¸Ó$;Ó<Ð<r   c                 óv   — | j                   d   j                  | j                   d   j                  |«      «      S rç   rÚ   r<   s     r   rL   z_ProductLinearOperator._rmatmatä  rè   r   c                 óv   — | j                   d   j                  | j                   d   j                  |«      «      S rÓ   rÜ   r<   s     r   r   z_ProductLinearOperator._matmatç  rå   r   c                 óR   — | j                   \  }}|j                  |j                  z  S r`   rÞ   rß   s      r   rM   z_ProductLinearOperator._adjointê  rà   r   rá   r    s   @r   rn   rn   Ó  s!   ø„ ôò;ò=ò=ò;ör   rn   c                   ó<   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZ	S )rh   c                 ó8  •— t        |t        «      st        d«      ‚t        j                  |«      st        d«      ‚t        |t
        «      r|j                  \  }}||z  }t        |gt        |«      g«      }t        ‰| �)  ||j                  «       ||f| _        y )NúLinearOperator expected as Azscalar expected as alpha)rA   r   r#   r    rg   rh   r   rÊ   r   r   r&   r$   )r%   r²   ÚalphaÚalpha_originalr!   r   s        €r   r&   z_ScaledLinearOperator.__init__ð  sˆ   ø€ Ü˜!œ^Ô,ÜÐ;Ó<Ð<Ü�{‰{˜5Ô!ÜÐ7Ó8Ð8Ü�aÔ.Ô/Ø !§¡ÑˆAˆ~ð ˜NÑ*ˆEä˜A˜3¤ e£ Ó.ˆÜ‰Ñ˜ §¡Ô(Ø˜�Jˆ�	r   c                 ó^   — | j                   d   | j                   d   j                  |«      z  S rç   rÔ   r<   s     r   r   z_ScaledLinearOperator._matvec   ó(   € Ø�y‰y˜‰|˜dŸi™i¨™l×1Ñ1°!Ó4Ñ4Ð4r   c                 ó„   — t        j                  | j                  d   «      | j                  d   j                  |«      z  S rç   )r    r¿   r   rJ   r<   s     r   rI   z_ScaledLinearOperator._rmatvec  ó1   € Ü�w‰w�t—y‘y ‘|Ó$ t§y¡y°¡|×';Ñ';¸AÓ'>Ñ>Ð>r   c                 ó„   — t        j                  | j                  d   «      | j                  d   j                  |«      z  S rç   )r    r¿   r   r]   r<   s     r   rL   z_ScaledLinearOperator._rmatmat  rô   r   c                 ó^   — | j                   d   | j                   d   j                  |«      z  S rç   rÜ   r<   s     r   r   z_ScaledLinearOperator._matmat	  rò   r   c                 ód   — | j                   \  }}|j                  t        j                  |«      z  S r`   )r   rP   r    r¿   )r%   r²   rï   s      r   rM   z_ScaledLinearOperator._adjoint  s&   € Ø—9‘9‰ˆˆ5Ø�s‰s”R—W‘W˜U“^Ñ#Ð#r   rá   r    s   @r   rh   rh   ï  s!   ø„ ôò 5ò?ò?ò5ö$r   rh   c                   óB   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )ry   c                 ó&  •— t        |t        «      st        d«      ‚|j                  d   |j                  d   k7  rt        d|›�«      ‚t	        |«      r|dk  rt        d«      ‚t
        ‰| �  t        |g«      |j                  «       ||f| _        y )Nrî   r   r3   z$square LinearOperator expected, got z"non-negative integer expected as p)	rA   r   r#   r$   r   r   r&   rÊ   r   )r%   r²   r{   r   s      €r   r&   z_PowerLinearOperator.__init__  s�   ø€ Ü˜!œ^Ô,ÜÐ;Ó<Ð<Ø�7‰7�1‰:˜Ÿ™ ™Ò#ÜÐCÀAÀ5ÐIÓJÐJÜ˜Œ|˜q 1šuÜÐAÓBÐBä‰Ñœ Q C›¨!¯'©'Ô2Ø˜�Fˆ�	r   c                 ó~   — t        j                  |d¬«      }t        | j                  d   «      D ]
  } ||«      }Œ |S )NT)Úcopyr3   )r    ÚarrayÚranger   )r%   Úfunr=   ÚresÚis        r   Ú_powerz_PowerLinearOperator._power  s7   € Ü�h‰h�q˜tÔ$ˆÜ�t—y‘y ‘|Ö$ˆAÙ�c“(‰Cð %àˆ
r   c                 óT   — | j                  | j                  d   j                  |«      S ©Nr   )r  r   r,   r<   s     r   r   z_PowerLinearOperator._matvec#  ó!   € Ø�{‰{˜4Ÿ9™9 Q™<×.Ñ.°Ó2Ð2r   c                 óT   — | j                  | j                  d   j                  |«      S r  )r  r   rJ   r<   s     r   rI   z_PowerLinearOperator._rmatvec&  ó!   € Ø�{‰{˜4Ÿ9™9 Q™<×/Ñ/°Ó3Ð3r   c                 óT   — | j                  | j                  d   j                  |«      S r  )r  r   r]   r<   s     r   rL   z_PowerLinearOperator._rmatmat)  r  r   c                 óT   — | j                  | j                  d   j                  |«      S r  )r  r   r;   r<   s     r   r   z_PowerLinearOperator._matmat,  r  r   c                 ó>   — | j                   \  }}|j                  |z  S r`   rÞ   )r%   r²   r{   s      r   rM   z_PowerLinearOperator._adjoint/  s   € Ø�y‰y‰ˆˆ1Ø�s‰s�a‰xˆr   )rŠ   r–   r—   r&   r  r   rI   rL   r   rM   rŸ   r    s   @r   ry   ry     s&   ø„ ô	òò3ò4ò4ò3ör   ry   c                   ó*   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚMatrixLinearOperatorc                 óz   •— t         ‰| �  |j                  |j                  «       || _        d | _        |f| _        y r`   )r   r&   r!   r$   r²   Ú_MatrixLinearOperator__adjr   )r%   r²   r   s     €r   r&   zMatrixLinearOperator.__init__5  s1   ø€ Ü‰Ñ˜Ÿ™ !§'¡'Ô*ØˆŒØˆŒ
Ø�Dˆ�	r   c                 ó8   — | j                   j                  |«      S r`   )r²   rd   )r%   r8   s     r   r   zMatrixLinearOperator._matmat;  s   € Ø�v‰v�z‰z˜!‹}Ðr   c                 óf   — | j                   €t        | j                  «      | _         | j                   S r`   )r  Ú_AdjointMatrixOperatorr²   r�   s    r   rM   zMatrixLinearOperator._adjoint>  s&   € Ø�:‰:ÐÜ/°·±Ó7ˆDŒJØ�z‰zÐr   )rŠ   r–   r—   r&   r   rM   rŸ   r    s   @r   r  r  4  s   ø„ ôòör   r  c                   ó(   — e Zd Zd„ Zed„ «       Zd„ Zy)r  c                 ó˜   — |j                   j                  «       | _        |f| _        |j                  d   |j                  d   f| _        y rç   )r5   r¿   r²   r   r$   )r%   Úadjoint_arrays     r   r&   z_AdjointMatrixOperator.__init__E  sB   € Ø—‘×%Ñ%Ó'ˆŒØ"Ð$ˆŒ	Ø"×(Ñ(¨Ñ+¨]×-@Ñ-@ÀÑ-CÐCˆ�
r   c                 ó4   — | j                   d   j                  S r  )r   r!   r�   s    r   r!   z_AdjointMatrixOperator.dtypeJ  s   € à�y‰y˜‰|×!Ñ!Ð!r   c                 ó2   — t        | j                  d   «      S r  )r  r   r�   s    r   rM   z_AdjointMatrixOperator._adjointN  s   € Ü# D§I¡I¨a¡LÓ1Ð1r   N)rŠ   r–   r—   r&   rž   r!   rM   ra   r   r   r  r  D  s!   „ òDð
 ñ"ó ð"ó2r   r  c                   ó>   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZ	S )ÚIdentityOperatorc                 ó&   •— t         ‰| �  ||«       y r`   )r   r&   )r%   r$   r!   r   s      €r   r&   zIdentityOperator.__init__S  s   ø€ Ü‰Ñ˜ Õ&r   c                 ó   — |S r`   ra   r<   s     r   r   zIdentityOperator._matvecV  ó   € Øˆr   c                 ó   — |S r`   ra   r<   s     r   rI   zIdentityOperator._rmatvecY  r  r   c                 ó   — |S r`   ra   r<   s     r   rL   zIdentityOperator._rmatmat\  r  r   c                 ó   — |S r`   ra   r<   s     r   r   zIdentityOperator._matmat_  r  r   c                 ó   — | S r`   ra   r�   s    r   rM   zIdentityOperator._adjointb  s   € Øˆr   r`   rá   r    s   @r   r  r  R  s!   ø„ õ'òòòòör   r  c                 ó”  — t        | t        «      r| S t        | t        j                  «      st        | t        j                  «      rM| j
                  dkD  rt        d«      ‚t        j                  t        j                  | «      «      } t        | «      S t        | «      st        | «      rt        | «      S t        | d«      r~t        | d«      rrd}d}d}t        | d«      r| j                  }t        | d«      r| j                  }t        | d«      r| j                  }t        | j                   | j"                  |||¬	«      S t%        d
«      ‚)aÿ  Return A as a LinearOperator.

    'A' may be any of the following types:
     - ndarray
     - matrix
     - sparse array (e.g. csr_array, lil_array, etc.)
     - LinearOperator
     - An object with .shape and .matvec attributes

    See the LinearOperator documentation for additional information.

    Notes
    -----
    If 'A' has no .dtype attribute, the data type is determined by calling
    :func:`LinearOperator.matvec()` - set the .dtype attribute to prevent this
    call upon the linear operator creation.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.sparse.linalg import aslinearoperator
    >>> M = np.array([[1,2,3],[4,5,6]], dtype=np.int32)
    >>> aslinearoperator(M)
    <2x3 MatrixLinearOperator with dtype=int32>
    r   zarray must have ndim <= 2r$   r,   NrJ   r]   r!   )rJ   r]   r!   ztype not understood)rA   r   r    ÚndarrayrB   rC   r#   Ú
atleast_2dr+   r  r   r   rN   rJ   r]   r!   r$   r,   rW   )r²   rJ   r]   r!   s       r   r	   r	   f  s  € ô4 �!”^Ô$Øˆä	�A”r—z‘zÔ	"¤j°´B·I±IÔ&>Ø�6‰6�AŠ:ÜÐ8Ó9Ð9Ü�M‰Mœ"Ÿ*™* Q›-Ó(ˆÜ# AÓ&Ð&ä	�!ŒÔ*¨1Ô-Ü# AÓ&Ð&ô �1�gÔ¤7¨1¨hÔ#7ØˆGØˆGØˆEä�q˜)Ô$ØŸ)™)�Ü�q˜)Ô$ØŸ)™)�Ü�q˜'Ô"ØŸ™�Ü! !§'¡'¨1¯8©8¸WØ*1¸ô@ð @ô Ð1Ó2Ð2r   r`   )r˜   r›   r   Únumpyr    Úscipy.sparser   Úscipy.sparse._sputilsr   r   r   r   Ú__all__r   r   r“   r•   rÊ   r~   rn   rh   ry   r  r  r  r	   ra   r   r   Ú<module>r&     s½   ðñ*óX Û ã å !ß RÓ RàÐ/Ð
0€÷Z/ñ Z/ôz+7˜Nô +7ô\!˜^ô !ô*3 ô 3ó.#ô˜ô ô6˜^ô ô8$˜Nô $ôD ˜>ô  ôF˜>ô ô 2Ð1ô 2ô�~ô ó(63r   