
    `iJC                     p   d dl Z d dlZd dlmZ d dlmZ  G d de          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dS )    N)sparse)_utilc                        e Zd ZdZd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 ee          Zd Z ee          Zd Z d Z! xZ"S )LinearOperatora  LinearOperator(shape, matvec, rmatvec=None, matmat=None, dtype=None, rmatmat=None)

    Common interface for performing matrix vector products

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

    Args:
        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)``.

    .. seealso:: :class:`scipy.sparse.linalg.LinearOperator`
       c                    | t           u r-t          t           |                               t                    S t          t           |                               |           }t	          |          j        t           j        k    r>t	          |          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       x/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/cupyx/scipy/sparse/linalg/_interface.pyr   zLinearOperator.__new__"   s    .  --556KLLL,,44S99CS		!^%;;;S		)^-CCC F'5!E E E E J    c                     |t          j        |          }t          |          }t          j        |          st          d|d          || _        || _        dS )z0Initialize this :class:`LinearOperator`
        Nzinvalid shape z (must be 2-d))cupydtypetupler   isshape
ValueErrorshape)selfr   r!   s      r   __init__zLinearOperator.__init__1   s`     Ju%%Ee}U## 	J*HIII



r   c                     | j         @t          j        | j        d                   }|                     |          j         | _         dS dS )zECalled from subclasses at the end of the `__init__` routine.
        N)r   r   zerosr!   matvec)r"   vs     r   _init_dtypezLinearOperator._init_dtype>   sA     :
4:b>**AQ-DJJJ r   c                 N     t          j         fd|j        D                       S )z6Default matrix-matrix multiplication handler.
        c                 b    g | ]+}                     |                    d d                    ,S r%      )r'   reshape.0colr"   s     r   
<listcomp>z*LinearOperator._matmat.<locals>.<listcomp>I   s3    KKKDKKB(:(:;;KKKr   )r   hstackTr"   Xs   ` r   r   zLinearOperator._matmatE   s,     {KKKKqsKKKLLLr   c                 T    |                      |                    dd                    S )z6Default matrix-vector multiplication handler.
        r%   r-   )matmatr.   r"   xs     r   r   zLinearOperator._matvecK   s$     {{199R++,,,r   c                 8   | j         \  }}|j         |fk    r|j         |dfk    rt          d          |                     |          }|j        dk    r|                    |          }n1|j        dk    r|                    |d          }nt          d          |S )z&Matrix-vector multiplication.
        r-   dimension mismatchr   z/invalid shape returned by user-defined matvec())r!   r    r   ndimr.   r"   r:   MNys        r   r'   zLinearOperator.matvecP   s     z17qd??qw1a&001222LLOO6Q;;		!AAVq[[		!QAANOOOr   c                 8   | j         \  }}|j         |fk    r|j         |dfk    rt          d          |                     |          }|j        dk    r|                    |          }n1|j        dk    r|                    |d          }nt          d          |S )z.Adjoint matrix-vector multiplication.
        r-   r<   r   z0invalid shape returned by user-defined rmatvec())r!   r    _rmatvecr=   r.   r>   s        r   rmatveczLinearOperator.rmatvecd   s     z17qd??qw1a&001222MM!6Q;;		!AAVq[[		!QAABD D D r   c                     t          |           j        t          j        k    rt          | j                            |          S )z?Default implementation of _rmatvec; defers to adjoint.
        )r   _adjointr   NotImplementedErrorHr'   r9   s     r   rC   zLinearOperator._rmatvecy   s5     ::."999%%6==###r   c                     |j         dk    rt          d|j         z            |j        d         | j        d         k    rt          d| j        d|j                  |                     |          }|S )z&Matrix-matrix multiplication.
        r   (expected 2-d ndarray or matrix, not %d-dr   r-   dimension mismatch: , )r=   r    r!   r   r"   r6   Ys      r   r8   zLinearOperator.matmat   s     6Q;;G v& ' ' ' 71:A&&* $


AGG5 6 6 6 LLOOr   c                     |j         dk    rt          d|j         z            |j        d         | j        d         k    rt          d| j        d|j                  |                     |          }|S )z.Adjoint matrix-matrix multiplication.
        r   rJ   r   rK   rL   )r=   r    r!   _rmatmatrM   s      r   rmatmatzLinearOperator.rmatmat   s     6Q;;G v& ' ' ' 71:A&&* $


AGG5 6 6 6 MM!r   c                      t                     j        t          j        k    r%t          j         fd|j        D                       S  j                            |          S )z@Default implementation of _rmatmat defers to rmatvec or adjoint.c                 b    g | ]+}                     |                    d d                    ,S r,   )rD   r.   r/   s     r   r2   z+LinearOperator._rmatmat.<locals>.<listcomp>   sC      0  0  0$' !%S[[Q-?-? @ @  0  0  0r   )r   rF   r   r   r3   r4   rH   r8   r5   s   ` r   rP   zLinearOperator._rmatmat   sl    ::."999;  0  0  0  0+,3 0  0  0 1 1 1 6==###r   c                     | |z  S N r9   s     r   __call__zLinearOperator.__call__   s    Avr   c                 ,    |                      |          S rU   )dotr9   s     r   __mul__zLinearOperator.__mul__   s    xx{{r   c                 p   t          |t                    rt          | |          S t          j        |          rt          | |          S |j        dk    s|j        dk    r&|j        d         dk    r|                     |          S |j        dk    r| 	                    |          S t          d|z            )z7Matrix-matrix or matrix-vector multiplication.
        r-   r   z!expected 1-d or 2-d array, got %r)
isinstancer   _ProductLinearOperatorr   isscalar_ScaledLinearOperatorr=   r!   r'   r8   r    r9   s     r   rY   zLinearOperator.dot   s     a(( 	&)$222]1 		&(q111v{{afkkagajAoo{{1~~%1{{1~~% !D#$"% & & &r   c                 r    t          j        |          rt          d          |                     |          S Nz0Scalar operands are not allowed, use '*' instead)r   r^   r    rZ   r"   others     r   
__matmul__zLinearOperator.__matmul__   s=    = 	2 1 2 2 2||E"""r   c                 r    t          j        |          rt          d          |                     |          S ra   )r   r^   r    __rmul__rb   s     r   __rmatmul__zLinearOperator.__rmatmul__   s=    = 	2 1 2 2 2}}U###r   c                 X    t          j        |          rt          | |          S t          S rU   )r   r^   r_   NotImplementedr9   s     r   rf   zLinearOperator.__rmul__   s*    = 	"(q111!!r   c                 X    t          j        |          rt          | |          S t          S rU   )r   r^   _PowerLinearOperatorri   )r"   ps     r   __pow__zLinearOperator.__pow__   s*    = 	"'a000!!r   c                 Z    t          |t                    rt          | |          S t          S rU   )r\   r   _SumLinearOperatorri   r9   s     r   __add__zLinearOperator.__add__   s*    a(( 	"%dA...!!r   c                 "    t          | d          S )Nr%   )r_   r"   s    r   __neg__zLinearOperator.__neg__   s    $T2...r   c                 .    |                      |           S rU   )rp   r9   s     r   __sub__zLinearOperator.__sub__   s    ||QBr   c                 ~    | j         \  }}| j        d}ndt          | j                  z   }d||| j        j        |fz  S )Nzunspecified dtypezdtype=z<%dx%d %s with %s>)r!   r   strr   __name__)r"   r?   r@   dts       r   __repr__zLinearOperator.__repr__   sG    z1:$BBC
OO+B#q!T^-Db&IIIr   c                 *    |                                  S )zHermitian adjoint.
        )rF   rr   s    r   adjointzLinearOperator.adjoint   s     }}r   c                 *    |                                  S )z(Transpose this linear operator.
        )
_transposerr   s    r   	transposezLinearOperator.transpose   s        r   c                      t          |           S )z6Default implementation of _adjoint; defers to rmatvec.)_AdjointLinearOperatorrr   s    r   rF   zLinearOperator._adjoint   s    %d+++r   c                      t          |           S )z? Default implementation of _transpose; defers to rmatvec + conj)_TransposedLinearOperatorrr   s    r   r~   zLinearOperator._transpose   s    (...r   )#rx   
__module____qualname____doc__r=   r   r#   r)   r   r   r'   rD   rC   r8   rQ   rP   rW   rZ   rY   rd   rg   rf   rm   rp   rs   ru   rz   r|   propertyrH   r   r4   rF   r~   __classcell__r   s   @r   r   r   	   s        , D      . . .M M M- - -
  (  *$ $ $     $ $ $    & & & # # #$ $ $" " "" " "" " "/ / /     J J J  
 	A! ! !
 	A, , ,/ / / / / / /r   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.Nc                     t          t          |                               ||           d| _        || _        || _        || _        || _        |                                  d S )NrV   )	r   r   r#   r   "_CustomLinearOperator__matvec_impl#_CustomLinearOperator__rmatvec_impl#_CustomLinearOperator__rmatmat_impl"_CustomLinearOperator__matmat_implr)   )r"   r!   r'   rD   r8   r   rQ   r   s          r   r#   z_CustomLinearOperator.__init__  sc    #T**33E5AAA	#%%#r   c                     | j         |                      |          S t          t          |                               |          S rU   )r   r   r   r   r"   r6   r   s     r   r   z_CustomLinearOperator._matmat  s?    )%%a(((.55==a@@@r   c                 ,    |                      |          S rU   )r   r9   s     r   r   z_CustomLinearOperator._matvec  s    !!!$$$r   c                 \    | j         }|t          d          |                      |          S )Nzrmatvec is not defined)r   rG   )r"   r:   funcs      r   rC   z_CustomLinearOperator._rmatvec  s2    "<%&>???""1%%%r   c                     | j         |                      |          S t          t          |                               |          S rU   )r   r   r   rP   r   s     r   rP   z_CustomLinearOperator._rmatmat"  s?    *&&q))).55>>qAAAr   c                     t          | j        d         | j        d         f| j        | j        | j        | j        | j                  S )Nr-   r   )r!   r'   rD   r8   rQ   r   )r   r!   r   r   r   r   r   rr   s    r   rF   z_CustomLinearOperator._adjoint(  sI    $DJqM4:a=+I,0,?-1-?,0,?-1-?+/:7 7 7 	7r   )NNNN)rx   r   r   r   r#   r   r   rC   rP   rF   r   r   s   @r   r   r     s        HH;?%)     A A A A A% % %& & &B B B B B7 7 7 7 7 7 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          t          |                               |j        |           || _        |f| _        d S Nr-   r   )r   r!   )r!   r   r   r#   r   Ar   r"   r   r!   r   s      r   r#   z_AdjointLinearOperator.__init__4  s\    QWQZ($d++44' 	5 	( 	( 	(D			r   c                 6    | j                             |          S rU   )r   rC   r9   s     r   r   z_AdjointLinearOperator._matvec;      vq!!!r   c                 6    | j                             |          S rU   )r   r   r9   s     r   rC   z_AdjointLinearOperator._rmatvec>      v~~a   r   c                 6    | j                             |          S rU   )r   rP   r9   s     r   r   z_AdjointLinearOperator._matmatA  r   r   c                 6    | j                             |          S rU   )r   r   r9   s     r   rP   z_AdjointLinearOperator._rmatmatD  r   r   
rx   r   r   r   r#   r   rC   r   rP   r   r   s   @r   r   r   1  sz        ..    " " "! ! !" " "! ! ! ! ! ! !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          t          |                               |j        |           || _        |f| _        d S r   )r!   r   r   r#   r   r   r   r   s      r   r#   z"_TransposedLinearOperator.__init__K  s\    QWQZ('..77' 	8 	( 	( 	(D			r   c                 ~    t          j        | j                            t          j        |                              S rU   )r   conjr   rC   r9   s     r   r   z!_TransposedLinearOperator._matvecR  (    y166777r   c                 ~    t          j        | j                            t          j        |                              S rU   )r   r   r   r   r9   s     r   rC   z"_TransposedLinearOperator._rmatvecV  (    y	!55666r   c                 ~    t          j        | j                            t          j        |                              S rU   )r   r   r   rP   r9   s     r   r   z!_TransposedLinearOperator._matmatY  r   r   c                 ~    t          j        | j                            t          j        |                              S rU   )r   r   r   r   r9   s     r   rP   z"_TransposedLinearOperator._rmatmat]  r   r   r   r   s   @r   r   r   H  sz        44    8 8 87 7 78 8 87 7 7 7 7 7 7r   r   c                     |g }| D ].}|*t          |d          r|                    |j                   /t          j        | S )Nr   )hasattrappendr   r   result_type)	operatorsdtypesr   s      r   
_get_dtyper   a  sQ    ~ % %?wsG44?MM#)$$$V$$r   c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )ro   c                 R   t          |t                    rt          |t                    st          d          |j        |j        k    rt          d|d|d          ||f| _        t          t          |                               t          ||g          |j                   d S )N)both operands have to be a LinearOperatorzcannot add  and : shape mismatch)	r\   r   r    r!   r   r   ro   r#   r   r"   r   Br   s      r   r#   z_SumLinearOperator.__init__k  s    !^,, 	Jq.11	JHIII7ag* !111& ' ' 'F	 $''00QF1C1CQWMMMMMr   c                     | j         d                             |          | j         d                             |          z   S Nr   r-   r   r'   r9   s     r   r   z_SumLinearOperator._matvecu  5    y|""1%%	!(;(;A(>(>>>r   c                     | j         d                             |          | j         d                             |          z   S r   r   rD   r9   s     r   rC   z_SumLinearOperator._rmatvecx  5    y|##A&&1)=)=a)@)@@@r   c                     | j         d                             |          | j         d                             |          z   S r   r   rQ   r9   s     r   rP   z_SumLinearOperator._rmatmat{  r   r   c                     | j         d                             |          | j         d                             |          z   S r   r   r8   r9   s     r   r   z_SumLinearOperator._matmat~  r   r   c                 4    | j         \  }}|j        |j        z   S rU   r   rH   r"   r   r   s      r   rF   z_SumLinearOperator._adjoint      y1sQSyr   
rx   r   r   r#   r   rC   rP   r   rF   r   r   s   @r   ro   ro   j  s        N N N N N? ? ?A A AA A A? ? ?      r   ro   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        d         |j        d         k    rt          d|d|d          t	          t
          |                               t          ||g          |j        d         |j        d         f           ||f| _        d S )Nr   r-   r   zcannot multiply r   r   )	r\   r   r    r!   r   r]   r#   r   r   r   s      r   r#   z_ProductLinearOperator.__init__  s    !^,, 	Jq.11	JHIII71:##* !111& ' ' '$d++44ZA5G5G67gaj!'!*5M	O 	O 	OF			r   c                 ~    | j         d                             | j         d                             |                    S r   r   r9   s     r   r   z_ProductLinearOperator._matvec  0    y|""49Q<#6#6q#9#9:::r   c                 ~    | j         d                             | j         d                             |                    S Nr-   r   r   r9   s     r   rC   z_ProductLinearOperator._rmatvec  0    y|##DIaL$8$8$;$;<<<r   c                 ~    | j         d                             | j         d                             |                    S r   r   r9   s     r   rP   z_ProductLinearOperator._rmatmat  r   r   c                 ~    | j         d                             | j         d                             |                    S r   r   r9   s     r   r   z_ProductLinearOperator._matmat  r   r   c                 4    | j         \  }}|j        |j        z  S rU   r   r   s      r   rF   z_ProductLinearOperator._adjoint  r   r   r   r   s   @r   r]   r]     s        	 	 	 	 	; ; ;= = == = =; ; ;      r   r]   c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )r_   c                 B   t          |t                    st          d          t          j        |          st          d          t          |gt          |          g          }t          t          |           	                    ||j
                   ||f| _        d S )NLinearOperator expected as Azscalar expected as alpha)r\   r   r    r   r^   r   r   r   r_   r#   r!   r   )r"   r   alphar   r   s       r   r#   z_ScaledLinearOperator.__init__  s    !^,, 	=;<<<}U## 	97888A3e..#T**33E17CCCJ			r   c                 ^    | j         d         | j         d                             |          z  S r   r   r9   s     r   r   z_ScaledLinearOperator._matvec  '    y|dil11!4444r   c                     t          j        | j        d                   | j        d                             |          z  S r   )r   r   r   rD   r9   s     r   rC   z_ScaledLinearOperator._rmatvec  1    y1&&1)=)=a)@)@@@r   c                     t          j        | j        d                   | j        d                             |          z  S r   )r   r   r   rQ   r9   s     r   rP   z_ScaledLinearOperator._rmatmat  r   r   c                 ^    | j         d         | j         d                             |          z  S r   r   r9   s     r   r   z_ScaledLinearOperator._matmat  r   r   c                 N    | j         \  }}|j        t          j        |          z  S rU   )r   rH   r   r   )r"   r   r   s      r   rF   z_ScaledLinearOperator._adjoint  s$    95sTYu%%%%r   r   r   s   @r   r_   r_     s            5 5 5A A AA A A5 5 5& & & & & & &r   r_   c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )rk   c                    t          |t                    st          d          |j        d         |j        d         k    rt          d|z            t	          j        |          r|dk     rt          d          t          t          |                               t          |g          |j                   ||f| _
        d S )Nr   r   r-   z&square LinearOperator expected, got %rz"non-negative integer expected as p)r\   r   r    r!   r   	isintliker   rk   r#   r   r   )r"   r   rl   r   s      r   r#   z_PowerLinearOperator.__init__  s    !^,, 	=;<<<71:##EIJJJq!! 	CQUUABBB"D))22:qc??AGLLLF			r   c                     t          j        |d          }t          | j        d                   D ]} ||          }|S )NT)copyr-   )r   arrayranger   )r"   funr:   resis        r   _powerz_PowerLinearOperator._power  sG    j&&&ty|$$ 	 	A#c((CC
r   c                 N    |                      | j        d         j        |          S Nr   )r   r   r'   r9   s     r   r   z_PowerLinearOperator._matvec      {{49Q<.222r   c                 N    |                      | j        d         j        |          S r   )r   r   rD   r9   s     r   rC   z_PowerLinearOperator._rmatvec      {{49Q</333r   c                 N    |                      | j        d         j        |          S r   )r   r   rQ   r9   s     r   rP   z_PowerLinearOperator._rmatmat  r   r   c                 N    |                      | j        d         j        |          S r   )r   r   r8   r9   s     r   r   z_PowerLinearOperator._matmat  r   r   c                 *    | j         \  }}|j        |z  S rU   r   )r"   r   rl   s      r   rF   z_PowerLinearOperator._adjoint  s    y1saxr   )rx   r   r   r#   r   r   rC   rP   r   rF   r   r   s   @r   rk   rk     s        	 	 	 	 	  3 3 34 4 44 4 43 3 3      r   rk   c                   *     e Zd Z fdZd Zd Z xZS )MatrixLinearOperatorc                     t          t          |                               |j        |j                   || _        d | _        |f| _        d S rU   )r   r   r#   r   r!   r   _MatrixLinearOperator__adjr   )r"   r   r   s     r   r#   zMatrixLinearOperator.__init__  sC    "D))2217AGDDD
D			r   c                 6    | j                             |          S rU   )r   rY   r5   s     r   r   zMatrixLinearOperator._matmat  s    vzz!}}r   c                 F    | j         t          |           | _         | j         S rU   )r   _AdjointMatrixOperatorrr   s    r   rF   zMatrixLinearOperator._adjoint  s!    :/55DJzr   )rx   r   r   r#   r   rF   r   r   s   @r   r   r     sV                    r   r   c                   0    e Zd Zd Zed             Zd ZdS )r   c                     |j         j                                        | _         || _        |f| _        |j        d         |j        d         f| _        d S r   )r   r4   r   _AdjointMatrixOperator__adjointr   r!   )r"   r|   s     r   r#   z_AdjointMatrixOperator.__init__  sG    !!## J	]1%w}Q'77


r   c                     | j         j        S rU   )r   r   rr   s    r   r   z_AdjointMatrixOperator.dtype  s    ~##r   c                     | j         S rU   )r   rr   s    r   rF   z_AdjointMatrixOperator._adjoint  s
    ~r   N)rx   r   r   r#   r   r   rF   rV   r   r   r   r     sM        8 8 8 $ $ X$    r   r   c                   >     e Zd Zd fd	Zd Zd Zd Zd Zd Z xZ	S )	IdentityOperatorNc                 Z    t          t          |                               ||           d S rU   )r   r   r#   )r"   r!   r   r   s      r   r#   zIdentityOperator.__init__  s*    %%..ue<<<<<r   c                     |S rU   rV   r9   s     r   r   zIdentityOperator._matvec      r   c                     |S rU   rV   r9   s     r   rC   zIdentityOperator._rmatvec  r  r   c                     |S rU   rV   r9   s     r   rP   zIdentityOperator._rmatmat
  r  r   c                     |S rU   rV   r9   s     r   r   zIdentityOperator._matmat  r  r   c                     | S rU   rV   rr   s    r   rF   zIdentityOperator._adjoint  s    r   rU   r   r   s   @r   r   r      s        = = = = = =              r   r   c                 T   t          | t                    r| S t          | t          j                  r=| j        dk    rt          d          t          j        |           } t          |           S t          j	        |           rt          |           S t          | d          ryt          | d          rid}d}d}t          | d          r| j        }t          | d          r| j        }t          | d          r| j        }t          | j        | j        |||	          S t!          d
          )aM  Return `A` as a LinearOperator.

    Args:
        A (array-like):
            The input array to be converted to a `LinearOperator` object.
            It may be any of the following types:

               * :class:`cupy.ndarray`
               * sparse matrix (e.g. ``csr_matrix``, ``coo_matrix``, etc.)
               * :class:`cupyx.scipy.sparse.linalg.LinearOperator`
               * object with ``.shape`` and ``.matvec`` attributes

    Returns:
        cupyx.scipy.sparse.linalg.LinearOperator: `LinearOperator` object

    .. seealso:: :func:`scipy.sparse.aslinearoperator``
    r   zarray must have ndim <= 2r!   r'   NrD   rQ   r   )rD   rQ   r   ztype not understood)r\   r   r   ndarrayr=   r    
atleast_2dr   r   
isspmatrixr   rD   rQ   r   r!   r'   	TypeError)r   rD   rQ   r   s       r   aslinearoperatorr    sA   $ !^$$ 3	At|	$	$ 36A::8999OA#A&&&		1		 3#A&&& 1g 	371h#7#7 	3GGEq)$$ $)q)$$ $)q'""  !!'18W*1@ @ @ @ 1222r   rU   )r   r   cupyx.scipyr   cupyx.scipy.sparser   objectr   r   r   r   r   ro   r]   r_   rk   r   r   r   r  rV   r   r   <module>r     sB           $ $ $ $ $ $w/ w/ w/ w/ w/V w/ w/ w/t+7 +7 +7 +7 +7N +7 +7 +7\! ! ! ! !^ ! ! !.7 7 7 7 7 7 7 72% % % %       8    ^   :& & & & &N & & &6         >      F    >        1       ~   (.3 .3 .3 .3 .3r   