ó
    Eñi�s  ã                   óL  • S r SSKrSSKrSSKrSSKJr  SSKJrJ	r	J
r
Jr  SS/r " S S5      r " S S	\5      r " S
 S\5      r " S S\5      rSS jr " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rS rg)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                   ó  ^ • \ rS rSrSrSrSr\" \R                  5      r
U 4S jrS rS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#\$" \#5      r%S r&\$" \&5      r'S r(S  r)S!r*U =r+$ )"r   é8   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                 ó.  >• U [         L a  [        TU ]	  [        5      $ [        TU ]	  U 5      n[	        U5      R
                  [         R
                  :X  aA  [	        U5      R                  [         R                  :X  a  [        R                  " S[        SS9  U$ )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       €Ú[/home/mande/repo/quber/.venv/lib/python3.13/site-packages/scipy/sparse/linalg/_interface.pyr   ÚLinearOperator.__new__ž   sx   ø€ Ø”.Ò ä‘7‘?Ô#8Ó9Ð9ä‘'‘/ #Ó&ˆCä�S“	×!Ñ!¤^×%;Ñ%;Ó;Ü˜S›	×)Ñ)¬^×-CÑ-CÓCÜ—’ð Fä'5À!òEð ˆJó    c                 ó¤   • Ub  [         R                  " U5      n[        U5      n[        U5      (       d  [	        SU< S35      eXl        X l        g)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__ÚLinearOperator.__init__­   sG   € ð ÑÜ—H’H˜U“OˆEä�e“ˆÜ�u�~‰~Ü˜~¨e©Y°nÐEÓFÐFàŒ
Ø�
r    c                 óL  • U R                   ch  [        R                  " U R                  S   [        R                  S9n [        R
                  " U R                  U5      5      nUR                   U l         gg! [         a"    [        R                   " [        5      U l          gf = f)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_dtypeÚLinearOperator._init_dtype½   sw   € ð �:‰:ÑÜ—’˜Ÿ™ B™¬r¯w©wÑ7ˆAð,ÜŸ:š: d§k¡k°!£nÓ5�ð
 &Ÿ^™^�•
ð øô !ó +äŸXšX¤c›]�–
ð+ús   ¿%A7 Á7)B#Â"B#c                 óª   • [         R                  " UR                   Vs/ s H#  o R                  UR	                  SS5      5      PM%     sn5      $ s  snf )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   Ú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   • U R                  UR                  SS5      5      $ )aI  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+   r7   )Úmatmatr:   ©r'   Úxs     r   r   ÚLinearOperator._matvecÛ   s   € ð �{‰{˜1Ÿ9™9 R¨Ó+Ó,Ð,r    c                 óî  • [         R                  " U5      nU R                  u  p#UR                  U4:w  a  UR                  US4:w  a  [        S5      eU R	                  U5      n[        U[         R                  5      (       a  [        U5      nO[         R                  " U5      nUR                  S:X  a  UR                  U5      nU$ UR                  S:X  a  UR                  US5      nU$ [        S5      e)aø  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.

r7   údimension mismatchr   z/invalid shape returned by user-defined matvec())r"   Ú
asanyarrayr&   r%   r   Ú
isinstanceÚmatrixr   r.   Úndimr:   ©r'   rB   ÚMÚNÚys        r   r/   Ú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                 óî  • [         R                  " U5      nU R                  u  p#UR                  U4:w  a  UR                  US4:w  a  [        S5      eU R	                  U5      n[        U[         R                  5      (       a  [        U5      nO[         R                  " U5      nUR                  S:X  a  UR                  U5      nU$ UR                  S:X  a  UR                  US5      nU$ [        S5      e)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.

r7   rE   r   z0invalid shape returned by user-defined rmatvec())r"   rF   r&   r%   Ú_rmatvecrG   rH   r   r.   rI   r:   rJ   s        r   ÚrmatvecÚ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                 ób  • [        U 5      R                  [        R                  :X  an  [        U S5      (       aW  [        U 5      R                  [        R                  :w  a0  U R	                  UR                  SS5      5      R                  S5      $ [        eU R                  R                  U5      $ )z6Default implementation of _rmatvec; defers to adjoint.Ú_rmatmatr+   r7   )	r   Ú_adjointr   ÚhasattrrT   r:   ÚNotImplementedErrorÚHr/   rA   s     r   rP   ÚLinearOperator._rmatvecE  s}   € ä�‹:×Ñ¤.×"9Ñ"9Ó9ä˜˜j×)Ñ)Ü˜T›
×+Ñ+¬~×/FÑ/FÓFà—}‘} Q§Y¡Y¨r°1Ó%5Ó6×>Ñ>¸rÓBÐBÜ%Ð%à—6‘6—=‘= Ó#Ð#r    c                 óD  • [        U5      (       d&  [        U5      (       d  [        R                  " U5      nUR                  S:w  a  [        SUR                   S35      eUR                  S   U R                  S   :w  a%  [        SU R                   SUR                   35      e U R                  U5      n[        U[        R                  5      (       a  [        U5      nU$ ! [         a2  n[        U5      (       d  [        U5      (       a  [        S5      Uee S	nAff = f)
aÐ  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   r7   údimension mismatch: ú, zdUnable to multiply a LinearOperator with a sparse matrix. Wrap the matrix in aslinearoperator first.N)r   r   r"   rF   rI   r%   r&   r   Ú	ExceptionÚ	TypeErrorrG   rH   r   ©r'   r<   ÚYÚes       r   r@   ÚLinearOperator.matmatQ  sù   € ô. ˜—‘Ô1°!×4Ñ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Ñ3ÜðBóð ðð ûð	úó   Â&C# Ã#
DÃ--DÄDc                 óD  • [        U5      (       d&  [        U5      (       d  [        R                  " U5      nUR                  S:w  a  [        SUR                   S35      eUR                  S   U R                  S   :w  a%  [        SU R                   SUR                   35      e U R                  U5      n[        U[        R                  5      (       a  [        U5      nU$ ! [         a2  n[        U5      (       d  [        U5      (       a  [        S5      Uee SnAff = f)	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   r[   r\   r   r]   r^   zfUnable to multiply a LinearOperator with a sparse matrix. Wrap the matrix in aslinearoperator() first.N)r   r   r"   rF   rI   r%   r&   rT   r_   r`   rG   rH   r   ra   s       r   ÚrmatmatÚLinearOperator.rmatmat€  sú   € ô, ˜—‘Ô1°!×4Ñ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Ñ3ÜðDóð ðð ûð	úre   c                 ó.  • [        U 5      R                  [        R                  :X  aO  [        R                  " UR
                   Vs/ s H#  o R                  UR                  SS5      5      PM%     sn5      $ U R                  R                  U5      $ s  snf )z@Default implementation of _rmatmat defers to rmatvec or adjoint.r+   r7   )
r   rU   r   r"   r8   r9   rQ   r:   rX   r@   r;   s      r   rT   ÚLinearOperator._rmatmat­  sg   € ä�‹:×Ñ¤.×"9Ñ"9Ó9Ü—9’9È!Ï#Ê#ÓNÊ#À3Ÿl™l¨3¯;©;°r¸1Ó+=Ö>É#ÑNÓOÐOà—6‘6—=‘= Ó#Ð#ùò Os   Á*Bc                 ó
   • X-  $ ©N© rA   s     r   Ú__call__ÚLinearOperator.__call__´  s	   € Ø‰vˆr    c                 ó$   • U R                  U5      $ rl   )ÚdotrA   s     r   Ú__mul__ÚLinearOperator.__mul__·  s   € Ø�x‰x˜‹{Ðr    c                 ól   • [         R                  " U5      (       d  [        S5      e[        U SU-  5      $ )Nz.Can only divide a linear operator by a scalar.g      ð?)r"   Úisscalarr%   Ú_ScaledLinearOperator©r'   Úothers     r   Ú__truediv__ÚLinearOperator.__truediv__º  s.   € Ü�{Š{˜5×!Ñ!ÜÐMÓNÐNä$ T¨3¨u©9Ó5Ð5r    c                 óâ  • [        U[        5      (       a  [        X5      $ [        R                  " U5      (       a  [        X5      $ [        U5      (       d&  [        U5      (       d  [        R                  " U5      nUR                  S:X  d#  UR                  S:X  a$  UR                  S   S:X  a  U R                  U5      $ UR                  S:X  a  U R                  U5      $ [        SU< 35      e)a"  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.

r7   r   ú)expected 1-d or 2-d array or matrix, got )rG   r   Ú_ProductLinearOperatorr"   ru   rv   r   r   r.   rI   r&   r/   r@   r%   rA   s     r   rq   ÚLinearOperator.dotÀ  s²   € ô �aœ×(Ñ(Ü)¨$Ó2Ð2Ü�[Š[˜�^‰^Ü(¨Ó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                 óp   • [         R                  " U5      (       a  [        S5      eU R                  U5      $ ©Nz0Scalar operands are not allowed, use '*' instead)r"   ru   r%   rr   rw   s     r   Ú
__matmul__ÚLinearOperator.__matmul__ß  s2   € Ü�;Š;�u×ÑÜð /ó 0ð 0à�|‰|˜EÓ"Ð"r    c                 óp   • [         R                  " U5      (       a  [        S5      eU R                  U5      $ r€   )r"   ru   r%   Ú__rmul__rw   s     r   Ú__rmatmul__ÚLinearOperator.__rmatmul__å  s2   € Ü�;Š;�u×ÑÜð /ó 0ð 0à�}‰}˜UÓ#Ð#r    c                 óp   • [         R                  " U5      (       a  [        X5      $ U R                  U5      $ rl   )r"   ru   rv   Ú_rdotrA   s     r   r„   ÚLinearOperator.__rmul__ë  s(   € Ü�;Š;�q�>‰>Ü(¨Ó1Ð1à—:‘:˜a“=Ð r    c                 óZ  • [        U[        5      (       a  [        X5      $ [        R                  " U5      (       a  [        X5      $ [        U5      (       d&  [        U5      (       d  [        R                  " U5      nUR                  S:X  d#  UR                  S:X  aB  UR                  S   S:X  a/  U R                  R                  UR                  5      R                  $ UR                  S:X  a/  U R                  R                  UR                  5      R                  $ [        SU< 35      e)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.
r7   r   r   r|   )rG   r   r}   r"   ru   rv   r   r   r.   rI   r&   r9   r/   r@   r%   rA   s     r   rˆ   ÚLinearOperator._rdotñ  sÒ   € ô$ �aœ×(Ñ(Ü)¨!Ó2Ð2Ü�[Š[˜�^‰^Ü(¨Ó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                 óZ   • [         R                  " U5      (       a  [        X5      $ [        $ rl   )r"   ru   Ú_PowerLinearOperatorÚNotImplemented)r'   Úps     r   Ú__pow__ÚLinearOperator.__pow__  s    € Ü�;Š;�q�>‰>Ü'¨Ó0Ð0ä!Ð!r    c                 óN   • [        U[        5      (       a  [        X5      $ [        $ rl   )rG   r   Ú_SumLinearOperatorrŽ   rA   s     r   Ú__add__ÚLinearOperator.__add__  s    € Ü�aœ×(Ñ(Ü% dÓ.Ð.ä!Ð!r    c                 ó   • [        U S5      $ )Nr+   )rv   ©r'   s    r   Ú__neg__ÚLinearOperator.__neg__!  s   € Ü$ T¨2Ó.Ð.r    c                 ó&   • U R                  U* 5      $ rl   )r”   rA   s     r   Ú__sub__ÚLinearOperator.__sub__$  s   € Ø�|‰|˜Q˜BÓÐr    c           	      ó´   • U R                   u  pU R                  c  SnOS[        U R                  5      -   nSU SU SU R                  R                   SU S3	$ )Nzunspecified dtypezdtype=Ú<rB   Ú z with Ú>)r&   r#   Ústrr   Ú__name__)r'   rK   rL   Údts       r   Ú__repr__ÚLinearOperator.__repr__'  sZ   € Ø�j‰j‰ˆØ�:‰:ÑØ$‰BàœC §
¡
›OÑ+ˆBà�1�#�Q�q�c˜˜4Ÿ>™>×2Ñ2Ð3°6¸"¸¸QÐ?Ð?r    c                 ó"   • U R                  5       $ )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.
)rU   r—   s    r   ÚadjointÚLinearOperator.adjoint0  s   € ð �}‰}‹Ðr    c                 ó"   • U R                  5       $ )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   Ú	transposeÚLinearOperator.transposeB  s   € ð �‰Ó Ð r    c                 ó   • [        U 5      $ )z6Default implementation of _adjoint; defers to rmatvec.)Ú_AdjointLinearOperatorr—   s    r   rU   ÚLinearOperator._adjointL  s   € ä% dÓ+Ð+r    c                 ó   • [        U 5      $ )z>Default implementation of _transpose; defers to rmatvec + conj)Ú_TransposedLinearOperatorr—   s    r   rª   ÚLinearOperator._transposeP  s   € ä(¨Ó.Ð.r    ©r#   r&   ),r¢   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rI   Ú__array_ufunc__ÚclassmethodÚtypesÚGenericAliasÚ__class_getitem__r   r(   r4   r   r   r/   rQ   rP   r@   rg   rT   rn   rr   ry   rq   r�   r…   r„   rˆ   r�   r”   r˜   r›   r¤   r§   ÚpropertyrX   r«   r9   rU   rª   Ú__static_attributes__Ú__classcell__©r   s   @r   r   r   8   sÛ   ø† ñ\ð| €Dà€Oñ $ E×$6Ñ$6Ó7Ðõòò ,ò*Jò
-ò-ò^-ò^
$ò-ò^+òZ$òòò6òTò>#ò$ò!ò"TòH"ò"ò/ò ò@òñ  	�Ó€Aò!ñ 	�Ó€Aò,÷/ð /r    c                   ó^   ^ • \ rS rSrSr  S
U 4S jjrU 4S jrS rS rU 4S jr	S r
S	rU =r$ )r   iU  z>Linear operator defined in terms of user-specified operations.c                 ó‚   >• [         TU ]  XQ5        SU l        X l        X0l        X`l        X@l        U R                  5         g )Nrm   )r   r(   r   Ú"_CustomLinearOperator__matvec_implÚ#_CustomLinearOperator__rmatvec_implÚ#_CustomLinearOperator__rmatmat_implÚ"_CustomLinearOperator__matmat_implr4   )r'   r&   r/   rQ   r@   r#   rg   r   s          €r   r(   Ú_CustomLinearOperator.__init__X  s;   ø€ ä‰Ñ˜Ô&àˆŒ	à#ÔØ%ÔØ%ÔØ#Ôà×ÑÕr    c                 ó^   >• U R                   b  U R                  U5      $ [        TU ]	  U5      $ rl   )rÆ   r   r   ©r'   r<   r   s     €r   r   Ú_CustomLinearOperator._matmate  s/   ø€ Ø×ÑÑ)Ø×%Ñ% aÓ(Ð(ä‘7‘? 1Ó%Ð%r    c                 ó$   • U R                  U5      $ rl   )rÃ   rA   s     r   r   Ú_CustomLinearOperator._matveck  s   € Ø×!Ñ! !Ó$Ð$r    c                 óX   • U R                   nUc  [        S5      eU R                  U5      $ )Nzrmatvec is not defined)rÄ   rW   )r'   rB   Úfuncs      r   rP   Ú_CustomLinearOperator._rmatvecn  s/   € Ø×"Ñ"ˆØ‰<Ü%Ð&>Ó?Ð?Ø×"Ñ" 1Ó%Ð%r    c                 ó^   >• U R                   b  U R                  U5      $ [        TU ]	  U5      $ rl   )rÅ   r   rT   rÉ   s     €r   rT   Ú_CustomLinearOperator._rmatmatt  s0   ø€ Ø×ÑÑ*Ø×&Ñ& qÓ)Ð)ä‘7Ñ# AÓ&Ð&r    c           	      óº   • [        U R                  S   U R                  S   4U R                  U R                  U R                  U R
                  U R                  S9$ )Nr7   r   )r&   r/   rQ   r@   rg   r#   )r   r&   rÄ   rÃ   rÅ   rÆ   r#   r—   s    r   rU   Ú_CustomLinearOperator._adjointz  sQ   € Ü$¨D¯J©J°q©M¸4¿:¹:Àa¹=Ð+IØ,0×,?Ñ,?Ø-1×-?Ñ-?Ø,0×,?Ñ,?Ø-1×-?Ñ-?Ø+/¯:©:ñ7ð 	7r    )Ú__matmat_implÚ__matvec_implÚ__rmatmat_implÚ__rmatvec_implr   )NNNN)r¢   r´   rµ   r¶   r·   r(   r   r   rP   rT   rU   r¾   r¿   rÀ   s   @r   r   r   U  s/   ø† ÙHà;?Ø%)÷õ&ò%ò&õ'÷7ð 7r    r   c                   óD   ^ • \ rS rSrSrU 4S jrS rS rS rS r	Sr
U =r$ )	r®   iƒ  z$Adjoint of arbitrary Linear Operatorc                 óŽ   >• UR                   S   UR                   S   4n[        TU ]	  UR                  US9  Xl        U4U l        g ©Nr7   r   r³   ©r&   r   r(   r#   ÚAr   ©r'   rÜ   r&   r   s      €r   r(   Ú_AdjointLinearOperator.__init__†  óA   ø€ Ø—‘˜‘˜QŸW™W Q™ZÐ(ˆÜ‰Ñ˜qŸw™w¨eÐÑ4ØŒØ�Dˆ�	r    c                 ó8   • U R                   R                  U5      $ rl   )rÜ   rP   rA   s     r   r   Ú_AdjointLinearOperator._matvecŒ  ó   € Ø�v‰v�‰˜qÓ!Ð!r    c                 ó8   • U R                   R                  U5      $ rl   )rÜ   r   rA   s     r   rP   Ú_AdjointLinearOperator._rmatvec�  ó   € Ø�v‰v�~‰~˜aÓ Ð r    c                 ó8   • U R                   R                  U5      $ rl   )rÜ   rT   rA   s     r   r   Ú_AdjointLinearOperator._matmat’  râ   r    c                 ó8   • U R                   R                  U5      $ rl   )rÜ   r   rA   s     r   rT   Ú_AdjointLinearOperator._rmatmat•  rå   r    ©rÜ   r   ©r¢   r´   rµ   r¶   r·   r(   r   rP   r   rT   r¾   r¿   rÀ   s   @r   r®   r®   ƒ  s$   ø† Ù.õò"ò!ò"÷!ð !r    r®   c                   óD   ^ • \ rS rSrSrU 4S jrS rS rS rS r	Sr
U =r$ )	r±   i˜  z*Transposition of arbitrary Linear Operatorc                 óŽ   >• UR                   S   UR                   S   4n[        TU ]	  UR                  US9  Xl        U4U l        g rÚ   rÛ   rÝ   s      €r   r(   Ú"_TransposedLinearOperator.__init__›  rß   r    c                 óˆ   • [         R                  " U R                  R                  [         R                  " U5      5      5      $ rl   )r"   ÚconjrÜ   rP   rA   s     r   r   Ú!_TransposedLinearOperator._matvec¡  ó&   € ä�wŠw�t—v‘v—‘¤r§w¢w¨q£zÓ2Ó3Ð3r    c                 óˆ   • [         R                  " U R                  R                  [         R                  " U5      5      5      $ rl   )r"   rð   rÜ   r   rA   s     r   rP   Ú"_TransposedLinearOperator._rmatvec¥  ó&   € Ü�wŠw�t—v‘v—~‘~¤b§g¢g¨a£jÓ1Ó2Ð2r    c                 óˆ   • [         R                  " U R                  R                  [         R                  " U5      5      5      $ rl   )r"   rð   rÜ   rT   rA   s     r   r   Ú!_TransposedLinearOperator._matmat¨  rò   r    c                 óˆ   • [         R                  " U R                  R                  [         R                  " U5      5      5      $ rl   )r"   rð   rÜ   r   rA   s     r   rT   Ú"_TransposedLinearOperator._rmatmat¬  rõ   r    rê   rë   rÀ   s   @r   r±   r±   ˜  s$   ø† Ù4õò4ò3ò4÷3ð 3r    r±   c                 óª   • Uc  / nU  H6  nUc  M  [        US5      (       d  M  UR                  UR                  5        M8     [        R                  " U6 $ )Nr#   )rV   Úappendr#   r"   Úresult_type)Ú	operatorsÚdtypesr   s      r   Ú
_get_dtyperÿ   ¯  sH   € Ø�~ØˆÛˆØ‹?œw s¨G×4Ó4Ø�M‰M˜#Ÿ)™)Ö$ñ ô �>Š>˜6Ð"Ð"r    c                   óF   ^ • \ rS rSrU 4S jrS rS rS rS rS r	Sr
U =r$ )	r“   i¸  c                 ó   >• [        U[        5      (       a  [        U[        5      (       d  [        S5      eUR                  UR                  :w  a  [        SU SU S35      eX4U l        [
        TU ]  [        X/5      UR                  5        g )Nú)both operands have to be a LinearOperatorzcannot add ú and ú: shape mismatch)rG   r   r%   r&   r   r   r(   rÿ   ©r'   rÜ   ÚBr   s      €r   r(   Ú_SumLinearOperator.__init__¹  sw   ø€ Ü˜!œ^×,Ñ,Ü˜q¤.×1Ñ1ÜÐHÓIÐIØ�7‰7�a—g‘gÓÜ˜{¨1¨#¨U°1°#Ð5EÐFÓGÐGØ�FˆŒ	Ü‰Ñœ Q FÓ+¨Q¯W©WÕ5r    c                 ó|   • U R                   S   R                  U5      U R                   S   R                  U5      -   $ ©Nr   r7   ©r   r/   rA   s     r   r   Ú_SumLinearOperator._matvecÂ  ó3   € Ø�y‰y˜‰|×"Ñ" 1Ó%¨¯	©	°!©×(;Ñ(;¸AÓ(>Ñ>Ð>r    c                 ó|   • U R                   S   R                  U5      U R                   S   R                  U5      -   $ r	  ©r   rQ   rA   s     r   rP   Ú_SumLinearOperator._rmatvecÅ  ó3   € Ø�y‰y˜‰|×#Ñ# AÓ&¨¯©°1©×)=Ñ)=¸aÓ)@Ñ@Ð@r    c                 ó|   • U R                   S   R                  U5      U R                   S   R                  U5      -   $ r	  ©r   rg   rA   s     r   rT   Ú_SumLinearOperator._rmatmatÈ  r  r    c                 ó|   • U R                   S   R                  U5      U R                   S   R                  U5      -   $ r	  ©r   r@   rA   s     r   r   Ú_SumLinearOperator._matmatË  r  r    c                 óP   • U R                   u  pUR                  UR                  -   $ rl   ©r   rX   ©r'   rÜ   r  s      r   rU   Ú_SumLinearOperator._adjointÎ  ó   € Ø�y‰y‰ˆØ�s‰s�Q—S‘S‰yÐr    ©r   ©r¢   r´   rµ   r¶   r(   r   rP   rT   r   rU   r¾   r¿   rÀ   s   @r   r“   r“   ¸  s(   ø† õ6ò?òAòAò?÷ð r    r“   c                   óF   ^ • \ rS rSrU 4S jrS rS rS rS rS r	Sr
U =r$ )	r}   iÓ  c                 óP  >• [        U[        5      (       a  [        U[        5      (       d  [        S5      eUR                  S   UR                  S   :w  a  [        SU SU S35      e[        TU ]  [        X/5      UR                  S   UR                  S   45        X4U l        g )Nr  r7   r   zcannot multiply r  r  )rG   r   r%   r&   r   r(   rÿ   r   r  s      €r   r(   Ú_ProductLinearOperator.__init__Ô  s•   ø€ Ü˜!œ^×,Ñ,Ü˜q¤.×1Ñ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   • U R                   S   R                  U R                   S   R                  U5      5      $ r	  r
  rA   s     r   r   Ú_ProductLinearOperator._matvecÞ  ó.   € Ø�y‰y˜‰|×"Ñ" 4§9¡9¨Q¡<×#6Ñ#6°qÓ#9Ó:Ð:r    c                 óv   • U R                   S   R                  U R                   S   R                  U5      5      $ ©Nr7   r   r  rA   s     r   rP   Ú_ProductLinearOperator._rmatvecá  ó.   € Ø�y‰y˜‰|×#Ñ# D§I¡I¨a¡L×$8Ñ$8¸Ó$;Ó<Ð<r    c                 óv   • U R                   S   R                  U R                   S   R                  U5      5      $ r%  r  rA   s     r   rT   Ú_ProductLinearOperator._rmatmatä  r'  r    c                 óv   • U R                   S   R                  U R                   S   R                  U5      5      $ r	  r  rA   s     r   r   Ú_ProductLinearOperator._matmatç  r#  r    c                 óP   • U R                   u  pUR                  UR                  -  $ rl   r  r  s      r   rU   Ú_ProductLinearOperator._adjointê  r  r    r  r  rÀ   s   @r   r}   r}   Ó  s&   ø† õò;ò=ò=ò;÷ð r    r}   c                   óF   ^ • \ rS rSrU 4S jrS rS rS rS rS r	Sr
U =r$ )	rv   iï  c                 óP  >• [        U[        5      (       d  [        S5      e[        R                  " U5      (       d  [        S5      e[        U[
        5      (       a  UR                  u  pX#-  n[        U/[        U5      /5      n[        TU ])  XAR                  5        X4U l        g )NúLinearOperator expected as Azscalar expected as alpha)rG   r   r%   r"   ru   rv   r   rÿ   r   r   r(   r&   )r'   rÜ   ÚalphaÚalpha_originalr#   r   s        €r   r(   Ú_ScaledLinearOperator.__init__ð  s‰   ø€ Ü˜!œ^×,Ñ,ÜÐ;Ó<Ð<Ü�{Š{˜5×!Ñ!ÜÐ7Ó8Ð8Ü�aÔ.×/Ñ/Ø !§¡ÑˆAð Ñ*ˆEä˜A˜3¤ e£ Ó.ˆÜ‰Ñ˜§¡Ô(Ø�Jˆ�	r    c                 ó^   • U R                   S   U R                   S   R                  U5      -  $ r%  r
  rA   s     r   r   Ú_ScaledLinearOperator._matvec   ó(   € Ø�y‰y˜‰|˜dŸi™i¨™l×1Ñ1°!Ó4Ñ4Ð4r    c                 ó†   • [         R                  " U R                  S   5      U R                  S   R                  U5      -  $ r%  )r"   rð   r   rQ   rA   s     r   rP   Ú_ScaledLinearOperator._rmatvec  ó1   € Ü�wŠw�t—y‘y ‘|Ó$ t§y¡y°¡|×';Ñ';¸AÓ'>Ñ>Ð>r    c                 ó†   • [         R                  " U R                  S   5      U R                  S   R                  U5      -  $ r%  )r"   rð   r   rg   rA   s     r   rT   Ú_ScaledLinearOperator._rmatmat  r9  r    c                 ó^   • U R                   S   U R                   S   R                  U5      -  $ r%  r  rA   s     r   r   Ú_ScaledLinearOperator._matmat	  r6  r    c                 ód   • U R                   u  pUR                  [        R                  " U5      -  $ rl   )r   rX   r"   rð   )r'   rÜ   r1  s      r   rU   Ú_ScaledLinearOperator._adjoint  s$   € Ø—9‘9‰ˆØ�s‰s”R—W’W˜U“^Ñ#Ð#r    r  r  rÀ   s   @r   rv   rv   ï  s&   ø† õò 5ò?ò?ò5÷$ð $r    rv   c                   óL   ^ • \ rS rSrU 4S jrS rS rS rS rS r	S r
S	rU =r$ )
r�   i  c                 ó>  >• [        U[        5      (       d  [        S5      eUR                  S   UR                  S   :w  a  [        SU< 35      e[	        U5      (       a  US:  a  [        S5      e[
        TU ]  [        U/5      UR                  5        X4U l        g )Nr0  r   r7   z$square LinearOperator expected, got z"non-negative integer expected as p)	rG   r   r%   r&   r   r   r(   rÿ   r   )r'   rÜ   r�   r   s      €r   r(   Ú_PowerLinearOperator.__init__  s„   ø€ Ü˜!œ^×,Ñ,ÜÐ;Ó<Ð<Ø�7‰7�1‰:˜Ÿ™ ™Ó#ÜÐCÀAÁ5ÐIÓJÐJÜ˜�|‰|˜q 1›uÜÐAÓBÐBä‰Ñœ Q C›¨!¯'©'Ô2Ø�Fˆ�	r    c                 ó~   • [         R                  " USS9n[        U R                  S   5       H  nU" U5      nM     U$ )NT)Úcopyr7   )r"   ÚarrayÚranger   )r'   ÚfunrB   ÚresÚis        r   Ú_powerÚ_PowerLinearOperator._power  s7   € Ü�hŠh�q˜tÑ$ˆÜ�t—y‘y ‘|Ö$ˆAÙ�c“(ŠCñ %àˆ
r    c                 óT   • U R                  U R                  S   R                  U5      $ ©Nr   )rJ  r   r/   rA   s     r   r   Ú_PowerLinearOperator._matvec#  ó!   € Ø�{‰{˜4Ÿ9™9 Q™<×.Ñ.°Ó2Ð2r    c                 óT   • U R                  U R                  S   R                  U5      $ rM  )rJ  r   rQ   rA   s     r   rP   Ú_PowerLinearOperator._rmatvec&  ó!   € Ø�{‰{˜4Ÿ9™9 Q™<×/Ñ/°Ó3Ð3r    c                 óT   • U R                  U R                  S   R                  U5      $ rM  )rJ  r   rg   rA   s     r   rT   Ú_PowerLinearOperator._rmatmat)  rR  r    c                 óT   • U R                  U R                  S   R                  U5      $ rM  )rJ  r   r@   rA   s     r   r   Ú_PowerLinearOperator._matmat,  rO  r    c                 ó<   • U R                   u  pUR                  U-  $ rl   r  )r'   rÜ   r�   s      r   rU   Ú_PowerLinearOperator._adjoint/  s   € Ø�y‰y‰ˆØ�s‰s�a‰xˆr    r  )r¢   r´   rµ   r¶   r(   rJ  r   rP   rT   r   rU   r¾   r¿   rÀ   s   @r   r�   r�     s+   ø† õ	òò3ò4ò4ò3÷ð r    r�   c                   ó4   ^ • \ rS rSrU 4S jrS rS rSrU =r$ )ÚMatrixLinearOperatori4  c                 óx   >• [         TU ]  UR                  UR                  5        Xl        S U l        U4U l        g rl   )r   r(   r#   r&   rÜ   Ú_MatrixLinearOperator__adjr   )r'   rÜ   r   s     €r   r(   ÚMatrixLinearOperator.__init__5  s/   ø€ Ü‰Ñ˜Ÿ™ !§'¡'Ô*ØŒØˆŒ
Ø�Dˆ�	r    c                 ó8   • U R                   R                  U5      $ rl   )rÜ   rq   )r'   r<   s     r   r   ÚMatrixLinearOperator._matmat;  s   € Ø�v‰v�z‰z˜!‹}Ðr    c                 óh   • U R                   c  [        U R                  5      U l         U R                   $ rl   )r\  Ú_AdjointMatrixOperatorrÜ   r—   s    r   rU   ÚMatrixLinearOperator._adjoint>  s&   € Ø�:‰:ÑÜ/°·±Ó7ˆDŒJØ�z‰zÐr    )rÜ   Ú__adjr   )	r¢   r´   rµ   r¶   r(   r   rU   r¾   r¿   rÀ   s   @r   rZ  rZ  4  s   ø† õò÷ð r    rZ  c                   ó0   • \ rS rSrS r\S 5       rS rSrg)ra  iD  c                 ó˜   • UR                   R                  5       U l        U4U l        UR                  S   UR                  S   4U l        g r%  )r9   rð   rÜ   r   r&   )r'   Úadjoint_arrays     r   r(   Ú_AdjointMatrixOperator.__init__E  sB   € Ø—‘×%Ñ%Ó'ˆŒØ"Ð$ˆŒ	Ø"×(Ñ(¨Ñ+¨]×-@Ñ-@ÀÑ-CÐCˆ�
r    c                 ó4   • U R                   S   R                  $ rM  )r   r#   r—   s    r   r#   Ú_AdjointMatrixOperator.dtypeJ  s   € à�y‰y˜‰|×!Ñ!Ð!r    c                 ó2   • [        U R                  S   5      $ rM  )rZ  r   r—   s    r   rU   Ú_AdjointMatrixOperator._adjointN  s   € Ü# D§I¡I¨a¡LÓ1Ð1r    )rÜ   r   r&   N)	r¢   r´   rµ   r¶   r(   r½   r#   rU   r¾   rm   r    r   ra  ra  D  s!   † òDð
 ñ"ó ð"õ2r    ra  c                   óJ   ^ • \ rS rSrS	U 4S jjrS rS rS rS rS r	Sr
U =r$ )
ÚIdentityOperatoriR  c                 ó$   >• [         TU ]  X!5        g rl   )r   r(   )r'   r&   r#   r   s      €r   r(   ÚIdentityOperator.__init__S  s   ø€ Ü‰Ñ˜Õ&r    c                 ó   • U$ rl   rm   rA   s     r   r   ÚIdentityOperator._matvecV  ó   € Øˆr    c                 ó   • U$ rl   rm   rA   s     r   rP   ÚIdentityOperator._rmatvecY  rr  r    c                 ó   • U$ rl   rm   rA   s     r   rT   ÚIdentityOperator._rmatmat\  rr  r    c                 ó   • U$ rl   rm   rA   s     r   r   ÚIdentityOperator._matmat_  rr  r    c                 ó   • U $ rl   rm   r—   s    r   rU   ÚIdentityOperator._adjointb  s   € Øˆr    rm   rl   r  rÀ   s   @r   rm  rm  R  s&   ø† ÷'òòòò÷ð r    rm  c                 óö  • [        U [        5      (       a  U $ [        U [        R                  5      (       d  [        U [        R                  5      (       aP  U R
                  S:”  a  [        S5      e[        R                  " [        R                  " U 5      5      n [        U 5      $ [        U 5      (       d  [        U 5      (       a  [        U 5      $ [        U S5      (       aŽ  [        U S5      (       a}  SnSnSn[        U S5      (       a  U R                  n[        U S5      (       a  U R                  n[        U S5      (       a  U R                  n[        U R                   U R"                  UX#S	9$ [%        S
5      e)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/   NrQ   rg   r#   )rQ   rg   r#   ztype not understood)rG   r   r"   ÚndarrayrH   rI   r%   Ú
atleast_2dr.   rZ  r   r   rV   rQ   rg   r#   r&   r/   r`   )rÜ   rQ   rg   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Ñ#7ØˆGØˆGØˆEä�q˜)×$Ñ$ØŸ)™)�Ü�q˜)×$Ñ$ØŸ)™)�Ü�q˜'×"Ñ"ØŸ™�Ü! !§'¡'¨1¯8©8¸WØ*1ñ@ð @ô Ð1Ó2Ð2r    rl   )r·   rº   r   Únumpyr"   Úscipy.sparser   Úscipy.sparse._sputilsr   r   r   r   Ú__all__r   r   r®   r±   rÿ   r“   r}   rv   r�   rZ  ra  rm  r	   rm   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    