+
    LV-j�s  ã                   óN  € R t ^ RIt^ RIt^ RIt^ RIHt ^ RIHtH	t	H
t
Ht RR.t ! R R4      t ! R R]4      t ! R	 R
]4      t ! R R]4      tRR lt ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      tR tR# )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                   ó$  a a€ ] tR t^8t oRt^tRt]! ]P                  4      t
V 3R ltR tR tR tR tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!R t"R t#]$! ]#4      t%R t&]$! ]&4      t'R t(R t)Rt*Vt+V ;t,# ) 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                ó:  <€ V \         J d   \        SV `	  \        4      # \        SV `	  V 4      p\	        V4      P
                  \         P
                  8X  dF   \	        V4      P                  \         P                  8X  d   \        P                  ! R \        ^R7       V# )zMLinearOperator subclass should implement at least one of _matvec and _matmat.)ÚcategoryÚ
stacklevel)
r   ÚsuperÚ__new__Ú_CustomLinearOperatorÚtypeÚ_matvecÚ_matmatÚwarningsÚwarnÚRuntimeWarning)ÚclsÚargsÚkwargsÚobjÚ	__class__s   &*, €Úo/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/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                óª   € Ve   \         P                  ! V4      p\        V4      p\        V4      '       g   \	        RV: R24      hWn        W n        R# )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                ód  € V P                   fq   \        P                  ! V P                  R,          \        P                  R7      p \        P
                  ! V P                  V4      4      pVP                   V n         R# R#   \         d$    \        P                   ! \        4      T n          R# i ; i)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   Á%B Â*B/Â.B/c                ó¨   € \         P                  ! VP                   Uu. uF#  q P                  VP	                  R^4      4      NK%  	  up4      # u upi )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   € V P                  VP                  R^4      4      # )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(   )Úmatmatr6   ©r$   Úxs   &&r   r   ÚLinearOperator._matvecÛ   s   € ð �{‰{˜1Ÿ9™9 R¨Ó+Ó,Ð,r   c                óø  € \         P                  ! V4      pV P                  w  r#VP                  V38w  d   VP                  V^38w  d   \        R4      hV P	                  V4      p\        V\         P                  4      '       d   \        V4      pM\         P                  ! V4      pVP                  ^8X  d   VP                  V4      pV# VP                  ^8X  d   VP                  V^4      pV# \        R4      h)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.

údimension mismatchz/invalid shape returned by user-defined matvec())r   Ú
asanyarrayr#   r"   r   Ú
isinstanceÚmatrixr   r+   Úndimr6   ©r$   r>   Ú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                óø  € \         P                  ! V4      pV P                  w  r#VP                  V38w  d   VP                  V^38w  d   \        R4      hV P	                  V4      p\        V\         P                  4      '       d   \        V4      pM\         P                  ! V4      pVP                  ^8X  d   VP                  V4      pV# VP                  ^8X  d   VP                  V^4      pV# \        R4      h)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.

rA   z0invalid shape returned by user-defined rmatvec())r   rB   r#   r"   Ú_rmatvecrC   rD   r   r+   rE   r6   rF   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                óh  € \        V 4      P                  \        P                  8X  dq   \        V R4      '       dY   \        V 4      P                  \        P                  8w  d1   V P	                  VP                  R^4      4      P                  R4      # \        hV P                  P                  V4      # )z6Default implementation of _rmatvec; defers to adjoint.Ú_rmatmatr(   )	r   Ú_adjointr   ÚhasattrrP   r6   ÚNotImplementedErrorÚHr,   r=   s   &&r   rL   Ú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  € \        V4      '       g(   \        V4      '       g   \        P                  ! V4      pVP                  ^8w  d   \        RVP                   R24      hVP                  ^ ,          V P                  ^,          8w  d&   \        RV P                   RVP                   24      h V P                  V4      p\        T\        P                  4      '       d   \        T4      pT#   \         d5   p\        T4      '       g   \        T4      '       d   \        R4      Thh Rp?ii ; i)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.

ú$expected 2-d ndarray or matrix, not ú-dúdimension mismatch: ú, zdUnable to multiply a LinearOperator with a sparse matrix. Wrap the matrix in aslinearoperator first.N)r   r   r   rB   rE   r"   r#   r   Ú	ExceptionÚ	TypeErrorrC   rD   r   ©r$   r8   Ú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óð ðð ûð	úó   Â2C0 Ã0D/Ã;/D*Ä*D/c                ód  € \        V4      '       g(   \        V4      '       g   \        P                  ! V4      pVP                  ^8w  d   \        RVP                   R24      hVP                  ^ ,          V P                  ^ ,          8w  d&   \        RV P                   RVP                   24      h V P                  V4      p\        T\        P                  4      '       d   \        T4      pT#   \         d5   p\        T4      '       g   \        T4      '       d   \        R4      Thh Rp?ii ; i)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.

rW   rX   rY   rZ   zfUnable to multiply a LinearOperator with a sparse matrix. Wrap the matrix in aslinearoperator() first.N)r   r   r   rB   rE   r"   r#   rP   r[   r\   rC   rD   r   r]   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óð ðð ûð	úra   c                ó.  € \        V 4      P                  \        P                  8X  dO   \        P                  ! VP
                   Uu. uF#  q P                  VP                  R^4      4      NK%  	  up4      # V P                  P                  V4      # u upi )z@Default implementation of _rmatmat defers to rmatvec or adjoint.r(   )
r   rQ   r   r   r4   r5   rM   r6   rT   r<   r7   s   && r   rP   ÚLinearOperator._rmatmat­  sg   € ä�‹:×Ñ¤.×"9Ñ"9Ô9Ü—9’9È!Ï#Ê#ÓNÉ#À3Ÿl™l¨3¯;©;°r¸1Ó+=Ö>É#ÑNÓOÐOà—6‘6—=‘= Ó#Ð#ùò Os   Á)Bc                ó   € W,          # ©N© r=   s   &&r   Ú__call__ÚLinearOperator.__call__´  s	   € Ø�vˆr   c                ó$   € V P                  V4      # rh   )Údotr=   s   &&r   Ú__mul__ÚLinearOperator.__mul__·  s   € Ø�x‰x˜‹{Ðr   c                óv   € \         P                  ! V4      '       g   \        R 4      h\        V RV,          4      # )z.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                óú  € \        V\        4      '       d   \        W4      # \        P                  ! V4      '       d   \        W4      # \        V4      '       g(   \        V4      '       g   \        P                  ! V4      pVP                  ^8X  g*   VP                  ^8X  d*   VP                  ^,          ^8X  d   V P                  V4      # VP                  ^8X  d   V P                  V4      # \        RV: 24      h)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.

ú)expected 1-d or 2-d array or matrix, got )rC   r   Ú_ProductLinearOperatorr   rq   rr   r   r   r+   rE   r#   r,   r<   r"   r=   s   &&r   rm   Ú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                ór   € \         P                  ! V4      '       d   \        R 4      hV P                  V4      # ©z0Scalar operands are not allowed, use '*' instead)r   rq   r"   rn   rs   s   &&r   Ú
__matmul__ÚLinearOperator.__matmul__ß  s2   € Ü�;Š;�u×ÒÜð /ó 0ð 0à�|‰|˜EÓ"Ð"r   c                ór   € \         P                  ! V4      '       d   \        R 4      hV P                  V4      # r|   )r   rq   r"   Ú__rmul__rs   s   &&r   Ú__rmatmul__ÚLinearOperator.__rmatmul__å  s2   € Ü�;Š;�u×ÒÜð /ó 0ð 0à�}‰}˜UÓ#Ð#r   c                ór   € \         P                  ! V4      '       d   \        W4      # V P                  V4      # rh   )r   rq   rr   Ú_rdotr=   s   &&r   r€   ÚLinearOperator.__rmul__ë  s(   € Ü�;Š;�q�>Š>Ü(¨Ó1Ð1à—:‘:˜a“=Ð r   c                ór  € \        V\        4      '       d   \        W4      # \        P                  ! V4      '       d   \        W4      # \        V4      '       g(   \        V4      '       g   \        P                  ! V4      pVP                  ^8X  g*   VP                  ^8X  dH   VP                  ^ ,          ^8X  d0   V P                  P                  VP                  4      P                  # VP                  ^8X  d0   V P                  P                  VP                  4      P                  # \        RV: 24      h)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.
rx   )rC   r   ry   r   rq   rr   r   r   r+   rE   r#   r5   r,   r<   r"   r=   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                ó\   € \         P                  ! V4      '       d   \        W4      # \        # rh   )r   rq   Ú_PowerLinearOperatorÚNotImplemented)r$   Úps   &&r   Ú__pow__ÚLinearOperator.__pow__  s    € Ü�;Š;�q�>Š>Ü'¨Ó0Ð0ä!Ð!r   c                óP   € \        V\        4      '       d   \        W4      # \        # rh   )rC   r   Ú_SumLinearOperatorrŠ   r=   s   &&r   Ú__add__ÚLinearOperator.__add__  s    € Ü�aœ×(Ò(Ü% dÓ.Ð.ä!Ð!r   c                ó   € \        V R4      # )é   r(   )rr   ©r$   s   &r   Ú__neg__ÚLinearOperator.__neg__!  s   € Ü$ T¨2Ó.Ð.r   c                ó&   € V P                  V) 4      # rh   )r�   r=   s   &&r   Ú__sub__ÚLinearOperator.__sub__$  s   € Ø�|‰|˜Q˜BÓÐr   c           	     ó¾   € V P                   w  rV P                  f   RpMR\        V P                  4      ,           pRV RV RV P                  P                   RV R2	# )Nzunspecified dtypezdtype=Ú<r>   Ú z with Ú>)r#   r    Ústrr   Ú__name__)r$   rG   rH   Údts   &   r   Ú__repr__ÚLinearOperator.__repr__'  sZ   € Ø�j‰j‰ˆØ�:‰:ÒØ$‰BàœC §
¡
›OÕ+ˆBà�1�#�Q�q�c˜˜4Ÿ>™>×2Ñ2Ð3°6¸"¸¸QÐ?Ð?r   c                ó"   € V P                  4       # )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.
)rQ   r”   s   &r   ÚadjointÚLinearOperator.adjoint0  s   € ð �}‰}‹Ðr   c                ó"   € V P                  4       # )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                ó   € \        V 4      # )z6Default implementation of _adjoint; defers to rmatvec.)Ú_AdjointLinearOperatorr”   s   &r   rQ   ÚLinearOperator._adjointL  s   € ä% dÓ+Ð+r   c                ó   € \        V 4      # )z>Default implementation of _transpose; defers to rmatvec + conj)Ú_TransposedLinearOperatorr”   s   &r   r§   ÚLinearOperator._transposeP  s   € ä(¨Ó.Ð.r   ©r    r#   )-rŸ   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rE   Ú__array_ufunc__ÚclassmethodÚtypesÚGenericAliasÚ__class_getitem__r   r%   r1   r   r   r,   rM   rL   r<   rc   rP   rj   rn   ru   rm   r}   r�   r€   r„   rŒ   r�   r•   r˜   r¡   r¤   ÚpropertyrT   r¨   r5   rQ   r§   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r   Ú__classdict__s   @@r   r   r   8   sÝ   ù‡ € ñ\ð| €Dà€Oñ $ E×$6Ñ$6Ó7Ðõòò ,ò*Jò
-ò-ò^-ò^
$ò-ò^+òZ$òòò6òTò>#ò$ò!ò"TòH"ò"ò/ò ò@òñ  	�Ó€Aò!ñ 	�Ó€Aò,÷/ò /r   c                   ód   a a€ ] tR tRt oRtR
V 3R lltV 3R ltR tR tV 3R lt	R t
R	tVtV ;t# )r   iU  z>Linear operator defined in terms of user-specified operations.c                ó„   <€ \         SV `  WQ4       RV n        W n        W0n        W`n        W@n        V P                  4        R # )Nri   )r   r%   r   Ú"_CustomLinearOperator__matvec_implÚ#_CustomLinearOperator__rmatvec_implÚ#_CustomLinearOperator__rmatmat_implÚ"_CustomLinearOperator__matmat_implr1   )r$   r#   r,   rM   r<   r    rc   r   s   &&&&&&&€r   r%   Ú_CustomLinearOperator.__init__X  s;   ø€ ä‰Ñ˜Ô&àˆŒ	à#ÔØ%ÔØ%ÔØ#Ôà×ÑÖr   c                ó`   <€ V P                   e   V P                  V4      # \        SV `	  V4      # rh   )rÅ   r   r   ©r$   r8   r   s   &&€r   r   Ú_CustomLinearOperator._matmate  s/   ø€ Ø×ÑÒ)Ø×%Ñ% aÓ(Ð(ä‘7‘? 1Ó%Ð%r   c                ó$   € V P                  V4      # rh   )rÂ   r=   s   &&r   r   Ú_CustomLinearOperator._matveck  s   € Ø×!Ñ! !Ó$Ð$r   c                óZ   € V P                   pVf   \        R4      hV P                  V4      # )Nzrmatvec is not defined)rÃ   rS   )r$   r>   Úfuncs   && r   rL   Ú_CustomLinearOperator._rmatvecn  s/   € Ø×"Ñ"ˆØŠ<Ü%Ð&>Ó?Ð?Ø×"Ñ" 1Ó%Ð%r   c                ó`   <€ V P                   e   V P                  V4      # \        SV `	  V4      # rh   )rÄ   r   rP   rÈ   s   &&€r   rP   Ú_CustomLinearOperator._rmatmatt  s0   ø€ Ø×ÑÒ*Ø×&Ñ& qÓ)Ð)ä‘7Ñ# AÓ&Ð&r   c           	     óÐ   € \        V P                  ^,          V P                  ^ ,          3V P                  V P                  V P                  V P
                  V P                  R7      # )r“   )r#   r,   rM   r<   rc   r    )r   r#   rÃ   rÂ   rÄ   rÅ   r    r”   s   &r   rQ   Ú_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   rL   rP   rQ   r»   r¼   r½   r¾   s   @@r   r   r   U  s+   ù‡ € ÙH÷õ&ò%ò&õ'÷7ò 7r   r   c                   óN   a a€ ] tR tRt oRtV 3R ltR tR tR tR t	Rt
VtV ;t# )	r«   iƒ  z$Adjoint of arbitrary Linear Operatorc                ó¦   <€ VP                   ^,          VP                   ^ ,          3p\        SV `	  VP                  VR7       Wn        V3V n        R# ©r“   r°   N©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   € V P                   P                  V4      # rh   )rÛ   rL   r=   s   &&r   r   Ú_AdjointLinearOperator._matvecŒ  ó   € Ø�v‰v�‰˜qÓ!Ð!r   c                ó8   € V P                   P                  V4      # rh   )rÛ   r   r=   s   &&r   rL   Ú_AdjointLinearOperator._rmatvec�  ó   € Ø�v‰v�~‰~˜aÓ Ð r   c                ó8   € V P                   P                  V4      # rh   )rÛ   rP   r=   s   &&r   r   Ú_AdjointLinearOperator._matmat’  rá   r   c                ó8   € V P                   P                  V4      # rh   )rÛ   r   r=   s   &&r   rP   Ú_AdjointLinearOperator._rmatmat•  rä   r   ©rÛ   r   ©rŸ   r±   r²   r³   r´   r%   r   rL   r   rP   r»   r¼   r½   r¾   s   @@r   r«   r«   ƒ  s&   ù‡ € Ù.õò"ò!ò"÷!ò !r   r«   c                   óN   a a€ ] tR tRt oRtV 3R ltR tR tR tR t	Rt
VtV ;t# )	r®   i˜  z*Transposition of arbitrary Linear Operatorc                ó¦   <€ VP                   ^,          VP                   ^ ,          3p\        SV `	  VP                  VR7       Wn        V3V n        R# rÙ   rÚ   rÜ   s   && €r   r%   Ú"_TransposedLinearOperator.__init__›  rÞ   r   c                óˆ   € \         P                  ! V P                  P                  \         P                  ! V4      4      4      # rh   )r   ÚconjrÛ   rL   r=   s   &&r   r   Ú!_TransposedLinearOperator._matvec¡  ó&   € ä�wŠw�t—v‘v—‘¤r§w¢w¨q£zÓ2Ó3Ð3r   c                óˆ   € \         P                  ! V P                  P                  \         P                  ! V4      4      4      # rh   )r   rï   rÛ   r   r=   s   &&r   rL   Ú"_TransposedLinearOperator._rmatvec¥  ó&   € Ü�wŠw�t—v‘v—~‘~¤b§g¢g¨a£jÓ1Ó2Ð2r   c                óˆ   € \         P                  ! V P                  P                  \         P                  ! V4      4      4      # rh   )r   rï   rÛ   rP   r=   s   &&r   r   Ú!_TransposedLinearOperator._matmat¨  rñ   r   c                óˆ   € \         P                  ! V P                  P                  \         P                  ! V4      4      4      # rh   )r   rï   rÛ   r   r=   s   &&r   rP   Ú"_TransposedLinearOperator._rmatmat¬  rô   r   ré   rê   r¾   s   @@r   r®   r®   ˜  s&   ù‡ € Ù4õò4ò3ò4÷3ò 3r   r®   c                 ó²   € Vf   . pV  F8  pVf   K	  \        VR4      '       g   K  VP                  VP                  4       K:  	  \        P                  ! V!  # )Nr    )rR   Úappendr    r   Úresult_type)Ú	operatorsÚdtypesr   s   && r   Ú
_get_dtyperþ   ¯  sH   € Ø‚~ØˆÛˆØŒ?œw s¨G×4Ô4Ø�M‰M˜#Ÿ)™)Ö$ñ ô �>Š>˜6Ñ"Ð"r   c                   óP   a a€ ] tR tRt oV 3R ltR tR tR tR tR t	Rt
VtV ;t# )	r�   i¸  c                ó(  <€ \        V\        4      '       d   \        V\        4      '       g   \        R 4      hVP                  VP                  8w  d   \        RV RV R24      hW3V n        \
        SV `  \        W.4      VP                  4       R# )ú)both operands have to be a LinearOperatorzcannot add ú and ú: shape mismatchN)rC   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                ó”   € V P                   ^ ,          P                  V4      V P                   ^,          P                  V4      ,           # ©é    ©r   r,   r=   s   &&r   r   Ú_SumLinearOperator._matvecÂ  ó3   € Ø�y‰y˜�|×"Ñ" 1Ó%¨¯	©	°!­×(;Ñ(;¸AÓ(>Õ>Ð>r   c                ó”   € V P                   ^ ,          P                  V4      V P                   ^,          P                  V4      ,           # r  ©r   rM   r=   s   &&r   rL   Ú_SumLinearOperator._rmatvecÅ  ó3   € Ø�y‰y˜�|×#Ñ# AÓ&¨¯©°1­×)=Ñ)=¸aÓ)@Õ@Ð@r   c                ó”   € V P                   ^ ,          P                  V4      V P                   ^,          P                  V4      ,           # r  ©r   rc   r=   s   &&r   rP   Ú_SumLinearOperator._rmatmatÈ  r  r   c                ó”   € V P                   ^ ,          P                  V4      V P                   ^,          P                  V4      ,           # r  ©r   r<   r=   s   &&r   r   Ú_SumLinearOperator._matmatË  r  r   c                óX   € V P                   w  rVP                  VP                  ,           # rh   ©r   rT   ©r$   rÛ   r  s   &  r   rQ   Ú_SumLinearOperator._adjointÎ  ó   € Ø�y‰y‰ˆØ�s‰s�Q—S‘S�yÐr   ©r   ©rŸ   r±   r²   r³   r%   r   rL   rP   r   rQ   r»   r¼   r½   r¾   s   @@r   r�   r�   ¸  s*   ù‡ € õ6ò?òAòAò?÷ò r   r�   c                   óP   a a€ ] tR tRt oV 3R ltR tR tR tR tR t	Rt
VtV ;t# )	ry   iÓ  c                óx  <€ \        V\        4      '       d   \        V\        4      '       g   \        R 4      hVP                  ^,          VP                  ^ ,          8w  d   \        RV RV R24      h\        SV `  \        W.4      VP                  ^ ,          VP                  ^,          34       W3V n        R# )r  zcannot multiply r  r  N)rC   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 P                   ^ ,          P                  V P                   ^,          P                  V4      4      # r  r
  r=   s   &&r   r   Ú_ProductLinearOperator._matvecÞ  ó.   € Ø�y‰y˜�|×"Ñ" 4§9¡9¨Q¥<×#6Ñ#6°qÓ#9Ó:Ð:r   c                ó†   € V P                   ^,          P                  V P                   ^ ,          P                  V4      4      # ©r“   r  r=   s   &&r   rL   Ú_ProductLinearOperator._rmatvecá  ó.   € Ø�y‰y˜�|×#Ñ# D§I¡I¨a¥L×$8Ñ$8¸Ó$;Ó<Ð<r   c                ó†   € V P                   ^,          P                  V P                   ^ ,          P                  V4      4      # r%  r  r=   s   &&r   rP   Ú_ProductLinearOperator._rmatmatä  r'  r   c                ó†   € V P                   ^ ,          P                  V P                   ^,          P                  V4      4      # r  r  r=   s   &&r   r   Ú_ProductLinearOperator._matmatç  r#  r   c                óX   € V P                   w  rVP                  VP                  ,          # rh   r  r  s   &  r   rQ   Ú_ProductLinearOperator._adjointê  r  r   r  r  r¾   s   @@r   ry   ry   Ó  s(   ù‡ € õò;ò=ò=ò;÷ò r   ry   c                   óP   a a€ ] tR tRt oV 3R ltR tR tR tR tR t	Rt
VtV ;t# )	rr   iï  c                ó`  <€ \        V\        4      '       g   \        R 4      h\        P                  ! V4      '       g   \        R4      h\        V\
        4      '       d   VP                  w  rW#,          p\        V.\        V4      .4      p\        SV `)  WAP                  4       W3V n        R# )úLinearOperator expected as Azscalar expected as alphaN)rC   r   r"   r   rq   rr   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                óv   € V P                   ^,          V P                   ^ ,          P                  V4      ,          # r%  r
  r=   s   &&r   r   Ú_ScaledLinearOperator._matvec   ó(   € Ø�y‰y˜�|˜dŸi™i¨�l×1Ñ1°!Ó4Õ4Ð4r   c                óž   € \         P                  ! V P                  ^,          4      V P                  ^ ,          P                  V4      ,          # r%  )r   rï   r   rM   r=   s   &&r   rL   Ú_ScaledLinearOperator._rmatvec  ó1   € Ü�wŠw�t—y‘y •|Ó$ t§y¡y°¥|×';Ñ';¸AÓ'>Õ>Ð>r   c                óž   € \         P                  ! V P                  ^,          4      V P                  ^ ,          P                  V4      ,          # r%  )r   rï   r   rc   r=   s   &&r   rP   Ú_ScaledLinearOperator._rmatmat  r9  r   c                óv   € V P                   ^,          V P                   ^ ,          P                  V4      ,          # r%  r  r=   s   &&r   r   Ú_ScaledLinearOperator._matmat	  r6  r   c                ól   € V P                   w  rVP                  \        P                  ! V4      ,          # rh   )r   rT   r   rï   )r$   rÛ   r1  s   &  r   rQ   Ú_ScaledLinearOperator._adjoint  s$   € Ø—9‘9‰ˆØ�s‰s”R—W’W˜U“^Õ#Ð#r   r  r  r¾   s   @@r   rr   rr   ï  s(   ù‡ € õò 5ò?ò?ò5÷$ò $r   rr   c                   óV   a a€ ] tR tRt oV 3R ltR tR tR tR tR t	R t
R	tVtV ;t# )
r‰   i  c                óX  <€ \        V\        4      '       g   \        R 4      hVP                  ^ ,          VP                  ^,          8w  d   \        RV: 24      h\	        V4      '       d   V^ 8  d   \        R4      h\
        SV `  \        V.4      VP                  4       W3V n        R# )r0  z$square LinearOperator expected, got z"non-negative integer expected as pN)	rC   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                óŒ   € \         P                  ! VR R7      p\        V P                  ^,          4       F  pV! V4      pK  	  V# )T)Úcopy)r   ÚarrayÚranger   )r$   Úfunr>   ÚresÚis   &&&  r   Ú_powerÚ_PowerLinearOperator._power  s7   € Ü�hŠh�q˜tÔ$ˆÜ�t—y‘y •|Ö$ˆAÙ�c“(ŠCñ %àˆ
r   c                ó\   € V P                  V P                  ^ ,          P                  V4      # r  )rJ  r   r,   r=   s   &&r   r   Ú_PowerLinearOperator._matvec#  ó!   € Ø�{‰{˜4Ÿ9™9 Q�<×.Ñ.°Ó2Ð2r   c                ó\   € V P                  V P                  ^ ,          P                  V4      # r  )rJ  r   rM   r=   s   &&r   rL   Ú_PowerLinearOperator._rmatvec&  ó!   € Ø�{‰{˜4Ÿ9™9 Q�<×/Ñ/°Ó3Ð3r   c                ó\   € V P                  V P                  ^ ,          P                  V4      # r  )rJ  r   rc   r=   s   &&r   rP   Ú_PowerLinearOperator._rmatmat)  rQ  r   c                ó\   € V P                  V P                  ^ ,          P                  V4      # r  )rJ  r   r<   r=   s   &&r   r   Ú_PowerLinearOperator._matmat,  rN  r   c                óD   € V P                   w  rVP                  V,          # rh   r  )r$   rÛ   r‹   s   &  r   rQ   Ú_PowerLinearOperator._adjoint/  s   € Ø�y‰y‰ˆØ�s‰s�a�xˆr   r  )rŸ   r±   r²   r³   r%   rJ  r   rL   rP   r   rQ   r»   r¼   r½   r¾   s   @@r   r‰   r‰     s-   ù‡ € õ	òò3ò4ò4ò3÷ò r   r‰   c                   ó>   a a€ ] tR tRt oV 3R ltR tR tRtVtV ;t	# )ÚMatrixLinearOperatori4  c                óz   <€ \         SV `  VP                  VP                  4       Wn        R V n        V3V n        R # rh   )r   r%   r    r#   rÛ   Ú_MatrixLinearOperator__adjr   )r$   rÛ   r   s   &&€r   r%   ÚMatrixLinearOperator.__init__5  s/   ø€ Ü‰Ñ˜Ÿ™ !§'¡'Ô*ØŒØˆŒ
Ø�DˆŽ	r   c                ó8   € V P                   P                  V4      # rh   )rÛ   rm   )r$   r8   s   &&r   r   ÚMatrixLinearOperator._matmat;  s   € Ø�v‰v�z‰z˜!‹}Ðr   c                ój   € V P                   f   \        V P                  4      V n         V P                   # rh   )r[  Ú_AdjointMatrixOperatorrÛ   r”   s   &r   rQ   ÚMatrixLinearOperator._adjoint>  s&   € Ø�:‰:ÒÜ/°·±Ó7ˆDŒJØ�z‰zÐr   )rÛ   Ú__adjr   )
rŸ   r±   r²   r³   r%   r   rQ   r»   r¼   r½   r¾   s   @@r   rY  rY  4  s   ù‡ € õò÷ò r   rY  c                   ó<   a € ] tR tRt o R t]R 4       tR tRtV t	R# )r`  iD  c                óª   € VP                   P                  4       V n        V3V n        VP                  ^,          VP                  ^ ,          3V n        R# )r“   N)r5   rï   rÛ   r   r#   )r$   Úadjoint_arrays   &&r   r%   Ú_AdjointMatrixOperator.__init__E  sB   € Ø—‘×%Ñ%Ó'ˆŒØ"Ð$ˆŒ	Ø"×(Ñ(¨Õ+¨]×-@Ñ-@ÀÕ-CÐCˆŽ
r   c                ó<   € V P                   ^ ,          P                  # r  )r   r    r”   s   &r   r    Ú_AdjointMatrixOperator.dtypeJ  s   € à�y‰y˜�|×!Ñ!Ð!r   c                ó:   € \        V P                  ^ ,          4      # r  )rY  r   r”   s   &r   rQ   Ú_AdjointMatrixOperator._adjointN  s   € Ü# D§I¡I¨a¥LÓ1Ð1r   )rÛ   r   r#   N)
rŸ   r±   r²   r³   r%   rº   r    rQ   r»   r¼   )r¿   s   @r   r`  r`  D  s)   ø‡ € òDð
 ñ"ó ð"÷2ð 2r   r`  c                   óT   a a€ ] tR tRt oR	V 3R lltR tR tR tR tR t	Rt
VtV ;t# )
ÚIdentityOperatoriR  c                ó&   <€ \         SV `  W!4       R # rh   )r   r%   )r$   r#   r    r   s   &&&€r   r%   ÚIdentityOperator.__init__S  s   ø€ Ü‰Ñ˜Ö&r   c                ó   € V# rh   ri   r=   s   &&r   r   ÚIdentityOperator._matvecV  ó   € Øˆr   c                ó   € V# rh   ri   r=   s   &&r   rL   ÚIdentityOperator._rmatvecY  rq  r   c                ó   € V# rh   ri   r=   s   &&r   rP   ÚIdentityOperator._rmatmat\  rq  r   c                ó   € V# rh   ri   r=   s   &&r   r   ÚIdentityOperator._matmat_  rq  r   c                ó   € V # rh   ri   r”   s   &r   rQ   ÚIdentityOperator._adjointb  s   € Øˆr   ri   rh   r  r¾   s   @@r   rl  rl  R  s(   ù‡ € ÷'òòòò÷ò r   rl  c                ó  € \        V \        4      '       d   V # \        V \        P                  4      '       g!   \        V \        P                  4      '       dR   V P
                  ^8”  d   \        R4      h\        P                  ! \        P                  ! V 4      4      p \        V 4      # \        V 4      '       g   \        V 4      '       d   \        V 4      # \        V R4      '       d–   \        V R4      '       d„   RpRpRp\        V R4      '       d   V P                  p\        V R4      '       d   V P                  p\        V R4      '       d   V P                  p\        V P                   V P"                  VW#R7      # \%        R	4      h)
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>
zarray must have ndim <= 2r#   r,   NrM   rc   r    )rM   rc   r    ztype not understood)rC   r   r   ÚndarrayrD   rE   r"   Ú
atleast_2dr+   rY  r   r   rR   rM   rc   r    r#   r,   r\   )rÛ   rM   rc   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   rh   )r´   r·   r   Únumpyr   Úscipy.sparser   Úscipy.sparse._sputilsr   r   r   r   Ú__all__r   r   r«   r®   rþ   r�   ry   rr   r‰   rY  r`  rl  r   ri   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   