
    Ug!F                         d Z ddlmZ ddlmZ ddlZddlmZm	Z	 ddl
mZmZ ddlZddlmZ ddlmc mc mZ ddlmZ  G d d	          Z G d
 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S )z7Test functions for the sparse.linalg._interface module
    )partial)productN)raiseswarns)assert_assert_equal)matrixc                        e Zd Zd Zd Zd ZdS )TestLinearOperatorc                     t          j        g dg dg          | _        t          j        ddgddgddgg          | _        t          j        ddgddgg          | _        d S )	N                  r   r   r   r   r   r   )nparrayABC)selfs    g/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/sparse/linalg/tests/test_interface.pysetup_methodzTestLinearOperator.setup_method   s~    777"77$ % %Aa5a5a5" # # Aa5a5" # #    c                 2#   d } || j                   D ]T}t          j        di |t          j        dk               t                              t          j        g d                    ddg           t                              t          j        dgdgdgg                    dgdgg           t          t          j        g d          z  ddg           t          t          j        dgdgdgg          z  dgdgg           t          	                    t          j        g d                    ddg           t          	                    t          j        dgdgdgg                    dgdgg           t                              t          dgdgdgg                    dgdgg           t          t          dgdgdgg          z  dgdgg           t          	                    t          dgdgdgg                    dgdgg           t          dz  g d	z  d
dg           t          dz                      ddg          g d           t          dz  j                            ddg          g d           t          dz  dgdgdggz  d
gdgg           t          dz                      dgdgdgg          d
gdgg           t          dz  g d	z  d
dg           t          dz  dgdgdggz  d
gdgg           t          dz  g d	z  ddg           t          z   g d	z  d
dg           t          z                       ddg          g d           t          z   j                            ddg          g d           t          z   dgdgdggz  d
gdgg           t          z                       dgdgdgg          d
gdgg           t           g d	z  ddg           t           dgdgdggz  dgdgg           t          z
  g d	z  ddg           t          z
  dgdgdggz  dgdgg           t          j        ddgddgg          }t          dz                      |          t          j	        d| j         z  j        |                     t          dz                      |          t          j	        | j         dz  j        |                     t          dz                      |          t          j	        d| j         z  j                                        |                     t          dz                      |          t          j	        | j         dz  j                                        |                     t          z                       |          t          j	        | j         | j         z   j        |                     t          dz  z                       |          t          j	        | j         d| j         z  z   j                                        |                     t                               |          t          j	        | j          j        |                     t          z
                      |          t          j	        | j         | j         z
  j        |                     t          dz                      d|z            t          j	        d| j         z  j                                        d|z                       z   }t          t#          |j                  dk    o|j        d         u o|j        d         u            dz  }t          t#          |j                  dk    o|j        d         u o|j        d         dk               t          t%                              g d          t          j                             t          t%                              t          j        dgdgdgg                    t          j                             t          t%          t          j        g d          z  t          j                             t          t%          t          j        dgdgdgg          z  t          j                             t          t%          	                    t          j        g d                    t          j                             t          t%          	                    t          j        dgdgdgg                    t          j                             t          t%                              t          dgdgdgg                    t          j                             t          t%          t          dgdgdgg          z  t          j                             t          t%          	                    t          dgdgdgg                    t          j                             t          t%          dz  t          j                             t          t%          dz  t          j                             t          t%          z   t          j                             t          t%           t          j                             t          t%          z
  t          j                             t          t%          dz  t          j                             t          t%          dz  t          j                             t          dz  dz  j        d         u            t          j        g d          z  }dz  dz  }t          t          j        g d          z  |           t          dz  j        t          j        k               d}t1          t2          |          5  t          j        ddg          z   d d d            n# 1 swxY w Y   t1          t2          j        t          j        ddg                     t1          t2          j        t          j        g d                     t1          t2          j        t          j        dgdgg                     t1          t2          j        t          j        dgdgdgdgg                     t1          t2          fd           t1          t2          fd           Vt5           || j                    || j                            D ]W\  }}	t          j        di |t          j        di |	| j         	                    | j                  }
t          j        ddgddgg          }t          z                      |          t          j	        |
j        |                     t          dz  z                      |          t          j	        d|
z  j                                        |                     t          z  ddgz  ddg           t          z  dgdggz  dgdgg           t          z                      dgdgg          dgdgg           t          z                      ddg          ddg           t          z  j                            ddg          ddg           t          t%          z  t          j                             t1          t2          fd           t1          t2          fd           z  }t          t#          |j                  dk    o|j        d         u o|j        d         u            Y || j                  D ]}t          j        di |}t          j        ddgddgg          }t          |                    |          t          j	        | j        j        |                     t          |dz                      |          t          j	        t          j	        | j        | j                  j        |                     t          |dz  ddgz  d d!g           t          |dz                      ddg          d"dg           t          |dz  j                            ddg          d"dg           t          |dz                      dgdgg          d gd!gg           t          t%          |dz  t          j                             d S )#Nc                 X      j          fd fdd j          fd fd fd fddgS )	Nc                 j    t          j        |                               j        d                   S Nr   )r   dotreshapeshapexr   s    r   <lambda>zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>   s%    BF1aLL,@,@,L,L r   c                     t          j        j                                        |                               j        d                   S Nr   )r   r"   Tconjr#   r$   r%   s    r   r'   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>    s8    RVACHHJJ45.7 .77>wqwqz7J7J r   )r$   matvecrmatvecc                 .    t          j        |           S Nr   r"   r%   s    r   r'   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>%       BF1aLL r   c                 \    t          j        j                                        |           S r/   r   r"   r*   r+   r%   s    r   r'   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>&       RVACHHJJ-B-B r   c                 \    t          j        j                                        |           S r/   r3   r%   s    r   r'   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>'   r4   r   c                 .    t          j        |           S r/   r0   r%   s    r   r'   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>(   r1   r   r$   r,   r-   rmatmatmatmat)r$   r   s   `r   get_matvecsz3TestLinearOperator.test_matvec.<locals>.get_matvecs   s    !""L"L"L"L$K $K $K $K  "#"8"8"8"8#B#B#B#B#B#B#B#B"8"8"8"8  r    r          r   r   r   )r   r   r         )
   r=                     @y              (@y              >@iir   r   r   z.Can only divide a linear operator by a scalar.matchr   r   r   r   c                        z  S r/   r<   r:   s   r   r'   z0TestLinearOperator.test_matvec.<locals>.<lambda>       ac r   c                       dz  S Nr   r<   r:   s   r   r'   z0TestLinearOperator.test_matvec.<locals>.<lambda>       ad r   2   q   G   \   c                       z   S r/   r<   )r   r   s   r   r'   z0TestLinearOperator.test_matvec.<locals>.<lambda>   rH   r   c                       dz  S rJ   r<   r:   s   r   r'   z0TestLinearOperator.test_matvec.<locals>.<lambda>   rK   r      %      )r   	interfaceLinearOperatorr   argsr   r,   r   r   r"   r	   r-   Hr9   r8   r*   r+   len
isinstancendarray_ScaledLinearOperator_SumLinearOperatordtype
complex128assert_raises
ValueErrorr   r   _ProductLinearOperatorr   _PowerLinearOperator)r   r;   matvecsXzresultr   msgmatvecsAmatvecsBAtimesBmatvecsCr   r   s               @@r   test_matveczTestLinearOperator.test_matvec   s^   	 	 	 #{46** a	4 a	4G(33733AAFbL!!!"(777"3"344r"g>>>"(QCQC="9"9::bT2$KHHHRXggg...B888RXsA3sm444tRDkBBBrx0011Br7;;;rx!aS!66772$tEEE&1#qc1#"7"788B4+FFFVaS!aSM222bT2$K@@@vsA3sm4455bT{CCC!A#wwwB000!a%!Q00,,,???!A#1..===!A#QC},tRDk:::!a%!qcA388B4",GGG!A#wwwB000!A#QC},tRDk:::"Q$#c333!A#wwwR111!a%!Q00,,,???!A#1..===!A#QC},tbTl;;;!A#sA3sm44tbTlCCC1"ggg3x0001"sA3sm+rdC5\:::!A#www1...!a%QC!qc?2aS1#J???1a&1a&)**A!a%++RVQZNA-F-FGGG!a%++RVTVaZNA-F-FGGG"q&))!,,df 4 4 6 6::< < <!b&))!,," 4 4 6 6::< < <!a%++$& 3Q779 9 9!b1f*--a00"tv+!5 8 = = ? ?CCE E E1"a"&46'a*@*@AAA!a%++$& 3Q779 9 9"q&))"q&11df 4 4 6 6Q??A A A !ACKK1$JaJAF1INKKK!ACKK1$JaJAF1INKKKJqxx			22BJ??@@@Jqxx1#qc1#(?(?@@"*MMNNNJq28GGG#4#44bjAABBBJq28aS!aSM#:#::BJGGHHHJquuRXggg%6%677DDEEEJquuRXsA3sm%<%<==rzJJKKKJqxxQC}(=(=>>
KKLLLJq6A3sA3-#8#88"*EEFFFJquuVaS!aSM%:%:;;RZHHIIIJqsI$CDDEEEJr!tY%DEEFFFJqsI$@AABBBJr9#BCCDDDJqsI$@AABBBJqsI$CDDEEEJqtY%DEEFFFa!eq[&q)Q./// ))),,,FAAAARXiii000&999RTLBM1222 CCz555 % %BHaV$$$$% % % % % % % % % % % % % % % *ah!A@@@*ah0C0CDDD*ah1#qc0C0CDDD*ah1#qc1#qc9J0K0KLLL*kkkk222*llll3333")++df*=*=*5+df*=*=#? #? 	L 	LHh(44844A(44844Afjj((G1a&1a&)**A!a%++RVWK-C-CDDD"q&1*--a00g 0 5 5 7 7;;= = = !A#!ur#h///!A#QCyB4,777!A#sA3i00B4,???!a%!Q002r(;;;!a%))1a&11B8<<<JqsI$DEEFFF*kkkkk222*llll333!ACKK1$JaJAF1INKKKK#DF++ 	F 	FH(44844A1a&1a&)**A1rvtvj!'<'<===!Q$**!7!7 :A>>@ @ @ !Q$12w///!Q$A//"b:::!Q$!Q002r(;;;!Q$QCy11RD";???Jq!tY%CDDEEEE	F 	Fs   q++q/	2q/	c           	           j         j         fd fd fd fdd}t          j        di |}t	          j        g dg dg dg          }|d	         }t          t          j        ||          ||z             t          t          j        ||	                    d
d                    ||	                    d
d          z             t          t          j        ||          ||z             t          t          j        ||j
                  ||j
        z             t          t          j        |	                    dd
          |j
                  |	                    dd
          |j
        z             t          t          j        ||j
                  ||j
        z             t          t          t          j        |d           t          t          t          j        d|           d S )Nc                 ~    t          j        j        |                               j        j        d                   S r!   )r   r"   r   r#   r$   r&   r   s    r   r'   z0TestLinearOperator.test_matmul.<locals>.<lambda>   s+    !2!2!:!:46<?!K!K r   c                     t          j        j        j                                        |                               j        j        d                   S r)   )r   r"   r   r*   r+   r#   r$   rp   s    r   r'   z0TestLinearOperator.test_matmul.<locals>.<lambda>   s<    "&)*#, #,,3GDFLO,D,D r   c                 f    t          j        j        j                                        |           S r/   )r   r"   r   r*   r+   rp   s    r   r'   z0TestLinearOperator.test_matmul.<locals>.<lambda>   s    "&!"<"< r   c                 8    t          j        j        |           S r/   )r   r"   r   rp   s    r   r'   z0TestLinearOperator.test_matmul.<locals>.<lambda>   s    !2!2 r   r7   )y      ?      ?r   r   r   )      	   r   r   r   r<   )r   r$   rU   rV   r   r   r   operatormatmulr#   rX   r`   ra   )r   Dr   r   bs   `    r   test_matmulzTestLinearOperator.test_matmul   s   flKKKKE E E E<<<<22224 4 $))q))Hnnniiii! " " aDX_Q**AE222X_Q		"a(8(8991qyyQ?O?O;OPPPX_Q**AE222X_Q,,a!#g666X_QYYq"%5%5qs;;QYYq"=M=MPQPS=STTTX_Q,,a!#g666j(/1a888j(/1a88888r   N)__name__
__module____qualname__r   rm   r|   r<   r   r   r   r      sH        # # #[F [F [Fz9 9 9 9 9r   r   c                        e Zd Zd Zd Zd ZdS )TestAsLinearOperatorc                 :   g | _         d }t          j        g dg dg          }| xj          ||t          j                  z  c_         | xj          ||t          j                  z  c_         | xj          ||t          j                  z  c_         | xj         d  ||j        t          j                  D             z  c_         | xj         d  ||j        t          j                  D             z  c_         t          j        g dg dg          }| xj          ||t          j                  z  c_         | xj         d  ||j        t          j                  D             z  c_         | xj         d	  ||j        t          j                  D             z  c_         d S )
Nc                 t    g }|                     t           |           f           |                     t          j         |           f           |                     t	          j         |           f            fd fd G  fddt          j                  } G fdd|          } G fdd	|          } G  fd
d|          }|                      ||           f           |                      ||           f           |                      ||           f           |S )Nr^   c                                          |           }t          | j                  dk    r|                    dd          }|S )Nr   rw   r   )r"   rY   r$   r#   )r&   r^   yoriginals      r   mvzATestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.mv   s=    LLOOqw<<1$$		"a((Ar   c                 \    j                                                             |           S r/   r*   r+   r"   )r&   r^   r   s     r   rmvzBTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.rmv   s#    z((,,Q///r   c                   (    e Zd ZdZfdZ fdZdS )JTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.BaseMatliker<   c                 R    t          j        |          | _        j        | _        d S r/   )r   r^   r$   )r   r^   r   s     r   __init__zSTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.BaseMatlike.__init__   s    !#%DJ!)DJJJr   c                 &     || j                   S r/   r   )r   r&   r   s     r   _matveczRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.BaseMatlike._matvec   s    2a,,,r   N)r}   r~   r   rW   r   r   )r   r   s   r   BaseMatliker      sL        0 0 0 0 0- - - - - - -r   r   c                       e Zd ZdZ fdZdS )ITestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatvecr<   c                 &     || j                   S r/   r   )r   r&   r   s     r   _rmatveczRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatvec._rmatvec   s    3q$*---r   N)r}   r~   r   rW   r   )r   s   r   
HasRmatvecr      s3        . . . . . . .r   r   c                        e Zd ZdZ fdZdS )ITestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasAdjointr<   c                     | j         d         | j         d         f}t          | j                  }t          | j                  }t          j        ||| j        |          S )Nr   r   r   )r,   r-   r^   r$   )r$   r   r^   rU   rV   )r   r$   r,   r-   r   r   s       r   _adjointzRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasAdjoint._adjoint   sl     JqM4:a=8E$S
;;;F%b
;;;G$36<C:>*:?A A A Ar   N)r}   r~   r   rW   r   )r   r   s   r   
HasAdjointr      s@        A A A A A A A Ar   r   c                   $    e Zd Z fdZ fdZdS )ITestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatmatc                 .                         |          S r/   )r"   r   r&   r   s     r   _matmatzQTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatmat._matmat  s    #<<??*r   c                 \    j                                                             |          S r/   r   r   s     r   _rmatmatzRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatmat._rmatmat  s#    #:??,,00333r   N)r}   r~   r   r   r   )r   s   r   
HasRmatmatr     sG        + + + + +4 4 4 4 4 4 4r   r   )appendr	   r   r   sparse
csr_matrixrU   rV   )	r   r^   casesr   r   r   r   r   r   s	   `      @@r   
make_casesz5TestAsLinearOperator.setup_method.<locals>.make_cases   s   ELL&777BCCCLL"(859998DEEELL&+HEBBBHMNNN    0 0 0 0 0- - - - - - - -i6 - - -. . . . . . .[ . . .
A 
A 
A 
A 
A 
A 
A 
A[ 
A 
A 
A4 4 4 4 4 4 4Z 4 4 4 LL**U++X6777LL**U++X6777LL**U++X6777Lr   r   r   c                 T    g | ]%\  }}t          j        |          j        |j        f&S r<   rU   aslinearoperatorr*   .0Mr   s      r   
<listcomp>z5TestAsLinearOperator.setup_method.<locals>.<listcomp>  sG     G G G1a "21557= G G Gr   c                 x    g | ]7\  }}t          j        |          j        |j                                        f8S r<   rU   r   rX   r*   r+   r   s      r   r   z5TestAsLinearOperator.setup_method.<locals>.<listcomp>  sO     G G G1a "21557D G G Gr   r   rC                 @)y              @y              @r   c                 T    g | ]%\  }}t          j        |          j        |j        f&S r<   r   r   s      r   r   z5TestAsLinearOperator.setup_method.<locals>.<listcomp>  sG     J J J1a "21557= J J Jr   c                 x    g | ]7\  }}t          j        |          j        |j                                        f8S r<   r   r   s      r   r   z5TestAsLinearOperator.setup_method.<locals>.<listcomp>  sO     J J J1a "21557D J J Jr   )r   r   r   int32float32float64r*   r_   )r   r   r   s      r   r   z!TestAsLinearOperator.setup_method   s   
8	 8	 8	t 8WWWggg.//

jj28444



jj2:666



jj2:666



 G G#-:hj"*#E#EG G G 	G



 G G#-:hj"*#E#EG G G 	G

 8[[[+++677

jj2=999



 J J#-:hj"-#H#HJ J J 	J



 J J#-:hj"-#H#HJ J J 	J



r   c                    | j         D ]\  }}t          j        |          }|j        \  }}t	          j        g d          t	          j        dgdgdgg          g}t	          j        ddg          t	          j        dgdgg          g}|j        t          j        k    rd|t	          j        g d          t	          j        dgdgdgg          gz  }|t	          j        ddg          t	          j        dgdgg          gz  }t	          j        ddgdd	gdd
gg          }|D ]^}t          |	                    |          |
                    |                     t          ||z  |
                    |                     _t          |                    |          |
                    |                     t          ||z  |
                    |                     |D ]}	t          |                    |	          |j                                        
                    |	                     t          |j        	                    |	          |j        
                    |	                     t          |j        	                    |	          |j                                        
                    |	                     |D ]}	|	j        dk     rt          |                    |	          |j                                        
                    |	                     t          |j                            |	          |j        
                    |	                     t          |j                            |	          |j                                        
                    |	                     t%          |d          rt          |j        |j                   t'          t%          |d                     d S )Nr   r   r   r   r   rC   r   r   r   r   r^   rW   )r   rU   r   r$   r   r   r^   r_   r   r,   r"   r9   r-   r*   r+   rX   ndimr8   hasattrr   )
r   r   A_arrayr   Nxsysx2r&   r   s
             r   
test_basiczTestAsLinearOperator.test_basic  sf   * %	( %	(JAw*1--A'CAa(999%%(QC!qc?++-B(Aq6""BHqcA3Z$8$89Bw"-''rx,,x!rdRD 1224 4rxB(("(QC";*?*?@@Aq6Aq6Aq6233B 4 4QXXa[['++a..999QUGKKNN3333"w{{2777RR111 E EQYYq\\79>>+;+;+?+?+B+BCCCQSZZ]]GIMM!,<,<===QSZZ]]GINN,<,<,@,@,C,CDDDD E E6A::QYYq\\79>>+;+;+?+?+B+BCCCQSZZ]]GIMM!,<,<===QSZZ]]GINN,<,<,@,@,C,CDDDDq!! /QWag...GAv&&''''K%	( %	(r   c                 >   | j         D ]\  }}t          j        |          }|j        \  }}t	          j        g d          }t	          j        dgdgdgg          }t	          j        ddgddgddgg          }t          |                    |          |                    |                     t          |                    |          |                    |                     t          |                    |          |                    |                     d S )Nr   r   r   r   r   r   r   )r   rU   r   r$   r   r   r   r"   )r   r   r   r   r   x0x1r   s           r   test_dotzTestAsLinearOperator.test_dotF  s    * 
	5 
	5JAw*1--A'CAa)))$$BA3aS/**BAq6Aq6Aq6233BrGKKOO444rGKKOO444rGKKOO4444
	5 
	5r   N)r}   r~   r   r   r   r   r<   r   r   r   r      sI        KJ KJ KJZ'( '( '(R5 5 5 5 5r   r   c                  v    t          j        dd           } t          |           }t          d|v|           d S )N)r   r   c                     dS r)   r<   r&   s    r   r'   ztest_repr.<locals>.<lambda>V  s     r   r$   r,   zunspecified dtype)rU   rV   reprr   )r   repr_As     r   	test_reprr   U  s@     vkkBBBA!WWFv-v66666r   c                  p   t          j        d          } t          | g dz  g d           t          |                     t	          j        d                              dd                                                    t	          j        d                     t          t          | j
        g d           d S )Nr   r   r   rv   r   rF   )rU   IdentityOperatorr   r"   r   aranger#   ravelr`   ra   r,   )idents    r   test_identityr   [  s    &v..E"III...29Q<<//15566<<>>	!MMM*elLLL99999r   c                     t          j        t          j        d                              dd                    } d }t          j        d|          }| || |z  | j        | | z   ||z   | dz  fD ]Y}t          t          |d                     t          t          |d                     t          t          |d                     Zd S )	N   r   c                     t          j        |           } t          | j        dk    p
| j        dk               t          j        d          S )N)r   )r   r   r   )r   asarrayr   r$   onesr   s    r   always_four_onesz)test_attributes.<locals>.always_four_onesf  s=    JqMM4417f#4555wqzzr   )r   r   r   r^   r$   r   )	rU   r   r   r   r#   rV   rX   r   r   )r   r   r   ops       r   test_attributesr   c  s    "29R==#8#8A#>#>??A  
 	 v6FGGGA!QUACQAq!t4 ( (G$$%%%G$$%%%I&&''''( (r   c                 *    t          j        d          S )z> Needed for test_pickle as local functions are not pickleable r   )r   zerosr   s    r   r,   r,   r  s    8A;;r   c            	      :   dd l } t          | j        dz             D ]~}t          j        dt
                    }|                     ||          }|                     |          }|j        D ].}t          t          ||          t          ||                     /d S )Nr   r   r   )protocol)picklerangeHIGHEST_PROTOCOLrU   rV   r,   dumpsloads__dict__r   getattr)r   r   r   sr   ks         r   test_pickler   v  s    MMM&1A566 7 7$VV44LLXL..LLOO 	7 	7AA16666	77 7r   c                      G d dt           j                  } t          t          d          5  t	          t
          |            d d d            n# 1 swxY w Y    G d dt           j                  } |d          }t          |                    g d          g d           t	          t          |j	        g d	            G d
 dt           j                  } |t          j                            dd                    }t          |                    t          j                            d                    j        d           d S )Nc                       e Zd ZdS )test_inheritance.<locals>.EmptyN)r}   r~   r   r<   r   r   Emptyr     s        r   r   zshould implement at leastrD   c                   $     e Zd Z fdZd Z xZS )"test_inheritance.<locals>.Identityc                 R    t                                          d ||f           d S )N)r^   r$   )superr   )r   n	__class__s     r   r   z+test_inheritance.<locals>.Identity.__init__  s*    GG41v66666r   c                     |S r/   r<   r   r&   s     r   r   z*test_inheritance.<locals>.Identity._matvec  s    Hr   )r}   r~   r   r   r   __classcell__r   s   @r   Identityr     sG        	7 	7 	7 	7 	7	 	 	 	 	 	 	r   r   r   r   r   c                   $     e Zd Z fdZd Z xZS )$test_inheritance.<locals>.MatmatOnlyc                 n    t                                          |j        |j                   || _        d S r/   )r   r   r^   r$   r   )r   r   r   s     r   r   z-test_inheritance.<locals>.MatmatOnly.__init__  s,    GGQWag...DFFFr   c                 6    | j                             |          S r/   )r   r"   r   s     r   r   z,test_inheritance.<locals>.MatmatOnly._matmat  s    6::a== r   )r}   r~   r   r   r   r   r   s   @r   
MatmatOnlyr     sG        	 	 	 	 		! 	! 	! 	! 	! 	! 	!r   r   r   )r   )rU   rV   r   RuntimeWarningr`   	TypeErrorr   r,   NotImplementedErrorr-   r   randomrandnr$   )r   r   id3r   mms        r   test_inheritancer    s       	(    
~%@	A	A	A ( (i'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (    9+    (1++CIII&&			222%s{III>>>! ! ! ! !Y- ! ! ! 
BIOOAq))	*	*B29??1--..4d;;;;;s   AAAc                     t           j                            dd          dt           j                            dd          z  z   } t           j                            dd          }t          j        |           }t          j        |          }||z   }||z   }t          |j        t           j                   t          |j        t           j                   d S )Nr                 ?)	r   r  randrU   r   r   r^   r   r_   )mat_complexmat_realcomplex_operatorreal_operatorsum_complexsum_reals         r   test_dtypes_of_operator_sumr    s     )..1%%RY^^Aa-@-@(@@Ky~~a""H 1+>>.x88M"%55K},H,,,"BM22222r   c                  p    dgfd} t          j        d|            t          d         d           d S )Nr   c                 (    dxx         dz  cc<   | S )Nr   r   r<   )v
call_counts    r   r,   z#test_no_double_init.<locals>.matvec  s    1r   r   r   r,   r   )rU   rV   r   )r,   r  s    @r   test_no_double_initr    sU    J     VF3333A"""""r   c                     t          j        dgg          } t          j        |           }d|z  }d| z  }t          j        dg          }t	          |                    |          |                    |                     t	          |j                            |          |j                                                            |                     d S Nr  r   )	r   r   rU   r   r   r"   rX   r*   r+   re   r   r   Yr  s        r   test_adjoint_conjugater    s    
2$A"1%%A
QA
QA
!Aq15588$$$QSXXZZ^^A../////r   c                      t          j        dgg          } t          j        |           }t	          |j        d           d S )Nr   r   )r   r   rU   r   r   r   )re   r   s     r   	test_ndimr    s;    
1#A"1%%Ar   c                     t          j        dgg          } t          j        |           }d|z  }d| z  }t          j        dg          }t	          |                    |          |                    |                     t	          |j                            |          |j                            |                     d S r  )r   r   rU   r   r   r"   r*   r  s        r   test_transpose_noconjugater     s    
2$A"1%%A
QA
QA
!Aq15588$$$QSWWQZZ(((((r   c                  :   t          j        dd           } t          j        d          }d}t	          t
          |          5  | |z   d d d            n# 1 swxY w Y   t	          t
          |          5  || z   d d d            n# 1 swxY w Y   t	          t                    5  | t          j        d          z   d d d            n# 1 swxY w Y   t	          t                    5  t          j        d          | z   d d d            d S # 1 swxY w Y   d S )Nr  c                     | S r/   r<   r   s    r   r'   z.test_sparse_matmat_exception.<locals>.<lambda>  s    ! r   r  r   z9Unable to multiply a LinearOperator with a sparse matrix.rD   r   )rU   rV   r   identityr`   r   ra   r   )r   r   rh   s      r   test_sparse_matmat_exceptionr$    s
    <<<AA
EC	y	,	,	,  	A              	y	,	,	,  	A              	z	"	"  	BKNN              	z	"	"  
A                 sH   AAA7B		BB(CCC+DDD)%__doc__	functoolsr   	itertoolsr   rx   pytestr   r`   r   numpy.testingr   r   numpyr   scipy.sparser   scipy.sparse.linalg._interfacelinalg
_interfacerU   scipy.sparse._sputilsr	   r   r   r   r   r   r,   r   r  r  r  r  r  r   r$  r<   r   r   <module>r0     s                 1 1 1 1 1 1 1 1 / / / / / / / /           2 2 2 2 2 2 2 2 2 2 2 2 ( ( ( ( ( ({9 {9 {9 {9 {9 {9 {9 {9|C5 C5 C5 C5 C5 C5 C5 C5L7 7 7: : :( ( (  	7 	7 	7< < <:3 3 3
# 
# 
#
0 
0 
0  

) 
) 
)    r   