
    e!h^R                        d Z ddlmZ ddlmZ ddl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 ddlmZmZ  G d	 d
      Z G d d      Zd Zd Zd Zd Zd Z ejB                  jD                  d        Z#d Z$d Z%ejL                  ejN                  ejP                  ejR                  fZ*ejV                  ejX                  ejZ                  fZ.ej^                  ej`                  ejb                  fZ2e.e2z   Z3e*e3z   Z4ejB                  jk                  de4      d        Z6d Z7d Z8d Z9d Z:d Z;d Z<ejB                  j{                  ed      d        Z>y) z7Test functions for the sparse.linalg._interface module
    )partial)productN)raiseswarns)assert_assert_equal)matrix)assert_deallocatedIS_PYPYc                       e Zd Zd Zd Zd Zy)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      | _        y )	N                  r   r   r   r   r   r   )nparrayABC)selfs    p/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/sparse/linalg/tests/test_interface.pysetup_methodzTestLinearOperator.setup_method   si    7"$ %Aa5a5a5" # Aa5a5" #    c                 "   d } || j                         D ]  }t        j                  di |t        j                  dk(         t        j                  t        j                  g d            ddg       t        j                  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        j                  t        j                  g d            ddg       t        j                  t        j                  dgdgdgg            dgdgg       t        j                  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        j                  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  j                  ddg      g d       t        dz  j                  j                  ddg      g d       t        dz  j                         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  j                  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   j                  ddg      g d       t        z   j                  j                  ddg      g d       t        z   j                         j                  ddg      g d       t        z   dgdgdggz  d
gdgg       t        z   j                  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  j                  |      t        j                  d| j                   z  j                   |             t        dz  j                  |      t        j                  | j                   dz  j                   |             t        dz  j                  |      t        j                  d| j                   z  j                   j#                         |             t        dz  j                  |      t        j                  | j                   dz  j                   j#                         |             t        z   j                  |      t        j                  | j                   | j                   z   j                   |             t        dz  z   j                  |      t        j                  | j                   d| j                   z  z   j                   j#                         |             t         j                  |      t        j                  | j                    j                   |             t        z
  j                  |      t        j                  | j                   | j                   z
  j                   |             t        dz  j                  d|z        t        j                  d| j                   z  j                   j#                         d|z               z   }t        t%        |j                        dk(  xr$ |j                  d   u xr |j                  d   u        dz  }t        t%        |j                        dk(  xr% |j                  d   u xr |j                  d   dk(         t        t'        j                  g d      t        j(                               t        t'        j                  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'        j                  t        j                  g d            t        j(                               t        t'        j                  t        j                  dgdgdgg            t        j(                               t        t'        j                  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'        j                  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        j0                  k(         d}t3        t4        |      5  t        j                  ddg      z   d d d        t3        t4        j                  t        j                  ddg             t3        t4        j                  t        j                  g d             t3        t4        j                  t        j                  dgdgg             t3        t4        j                  t        j                  dgdgdgdgg             t3        t4        fd       t3        t4        fd        t7         || j                          || j8                              D ]i  \  }}	t        j                  di |t        j                  di |	| j                   j                  | j8                        }
t        j                  ddgddgg      }t        z  j                  |      t        j                  |
j                   |             t        dz  z  j                  |      t        j                  d|
z  j                   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  j                  dgdgg      dgdgg       t        z  j                  ddg      ddg       t        z  j                  j                  ddg      ddg       t        z  j                         j                  ddg      ddg       t        t'        z  t        j:                               t3        t4        fd       t3        t4        fd       z  }t        t%        |j                        dk(  xr$ |j                  d   u xr |j                  d   u        l  || j<                        D ]  }t        j                  di |}t        j                  ddgddgg      }t        |j                  |      t        j                  | j<                  j                   |             t        |dz  j                  |      t        j                  t        j                  | j<                  | j<                        j                   |             t        |dz  ddgz  d d!g       t        |dz  j                  ddg      d"dg       t        |dz  j                  j                  ddg      d"dg       t        |dz  j                         j                  ddg      d"dg       t        |dz  j                  dgdgg      d gd!gg       t        t'        |dz  t        j>                                y # 1 sw Y   exY w)#Nc                 l      j                    fd fdd j                    fd fd fd fddgS )	Nc                 h    t        j                  |       j                  j                  d         S Nr   )r   dotreshapeshapexr   s    r   <lambda>zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>!   s$    BFF1aL,@,@,L r   c                     t        j                  j                  j                         |       j	                  j
                  d         S Nr   )r   r$   Tconjr%   r&   r'   s    r   r)   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>"   s4    RVVACCHHJ45.77>wqwwqz7J r   )r&   matvecrmatvecc                 0    t        j                  |       S Nr   r$   r'   s    r   r)   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>'       BFF1aL r   c                 `    t        j                  j                  j                         |       S r1   r   r$   r,   r-   r'   s    r   r)   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>(       RVVACCHHJ-B r   c                 `    t        j                  j                  j                         |       S r1   r5   r'   s    r   r)   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>)   r6   r   c                 0    t        j                  |       S r1   r2   r'   s    r   r)   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>*   r3   r   r&   r.   r/   rmatmatmatmat)r&   r   s   `r   get_matvecsz3TestLinearOperator.test_matvec.<locals>.get_matvecs   s<    !""L$K "#"8#B#B"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 r1   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 r1   r>   )r   r   s   r   r)   z0TestLinearOperator.test_matvec.<locals>.<lambda>   rJ   r   c                       dz  S rL   r>   r<   s   r   r)   z0TestLinearOperator.test_matvec.<locals>.<lambda>   rM   r      %      ) r   	interfaceLinearOperatorr   argsr   r.   r   r   r$   r	   r/   Hadjointr;   r:   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   	 #466* c	4G((373AAFFbL!"((7"34r"g>"((QCQC="9:bT2$KHRXXg..B8RXXsA3sm44tRDkBrxx01Br7;rxx!aS!672$tE&1#qc1#"78B4+FVaS!aSM22bT2$K@vsA3sm45bT{C!A#wB0!a%!Q0,?!A#1.=!A#//16E!A#QC},tRDk:!a%!qcA38B4",G!A#wB0!A#QC},tRDk:"Q$#c3!A#wR1!a%!Q0,?!A#1.=!A#//16E!A#QC},tbTl;!A#sA3sm4tbTlC1"g3x01"sA3sm+rdC5\:!A#w1.!a%QC!qc?2aS1#J?1a&1a&)*A!a%+RVVQZNNA-FG!a%+RVVTVVaZNNA-FG"q&))!,dff 4 4 6:<!b&))!," 4 4 6:<!a%+$&& 3 3Q79!b1f*--a0"tvv+!5 8 8 = = ?CE1"a"&&466'a*@A!a%+$&& 3 3Q79"q&))"q&1dff 4 4 6Q?A !ACK1$JaJAFF1INK!ACK1$JaJAFF1INKJqxx	2BJJ?@Jqxx1#qc1#(?@"**MNJq288G#44bjjABJq288aS!aSM#::BJJGHJquuRXXg%67DEJquuRXXsA3sm%<=rzzJKJqxxQC}(=>

KLJq6A3sA3-#88"**EFJquuVaS!aSM%:;RZZHIJqsI$C$CDEJr!tY%D%DEFJqsI$@$@ABJr9#B#BCDJqsI$@$@ABJqsI$C$CDEJqtY%D%DEFa!eq[&&q)Q./ ),,FAAAARXXi00&9RTLLBMM12 CCz5 %BHHaV$$% *ahh!A@*ahh0CD*ahh1#qc0CD*ahh1#qc1#qc9J0KL*k2*l3Gc	4J #*+dff*=*5dff*=#? 	LHh((484A((484Affjj(G1a&1a&)*A!a%+RVVWKK-CD"q&1*--a0g 0 0 5 5 7;= !A#!ur#h/!A#QCyB4,7!A#sA3i0B4,?!a%!Q02r(;!a%))1a&1B8<!a%*111a&9B8DJqsI$D$DEF*k2*l3!ACK1$JaJAFF1INK5	L8 $DFF+ 	FH((484A1a&1a&)*A1rvvtvvjj!'<=!Q$*!7 : :A>@ !Q$12w/!Q$A/"b:!Q$!Q02r(;!Q$)00!Q82r(C!Q$QCy1RD";?Jq!tY%C%CDE	FO% %s   AEEAE	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                  ||j                  d
d            ||j                  d
d      z         t        t        j                  ||      ||z         t        t        j                  ||j                        ||j                  z         t        t        j                  ||j                               ||j                         z         t        t        j                  |j                  dd
      |j                        |j                  dd
      |j                  z         t        t        j                  |j                  dd
      |j                               |j                  dd
      |j                         z         t        t        j                  ||j                        ||j                  z         t        t        j                  ||j                               ||j                         z         t        t        t        j                  |d       t        t        t        j                  d|       y )Nc                     t        j                  j                  |       j                  j                  j                  d         S r#   )r   r$   r   r%   r&   r(   r   s    r   r)   z0TestLinearOperator.test_matmul.<locals>.<lambda>   s-    !2!:!:466<<?!K r   c                     t        j                  j                  j                  j	                         |       j                  j                  j                  d         S r+   )r   r$   r   r,   r-   r%   r&   rs   s    r   r)   z0TestLinearOperator.test_matmul.<locals>.<lambda>   s<    "&&)*#,,3GDFFLLO,D r   c                 t    t        j                  j                  j                  j	                         |       S r1   )r   r$   r   r,   r-   rs   s    r   r)   z0TestLinearOperator.test_matmul.<locals>.<lambda>   s     "&&!"< r   c                 D    t        j                  j                  |       S r1   )r   r$   r   rs   s    r   r)   z0TestLinearOperator.test_matmul.<locals>.<lambda>   s    !2 r   r9   )y      ?      ?r   r   r   )      	   r   r   r   r>   )r   r&   rW   rX   r   r   r   operatormatmulr%   rZ   r[   rc   rd   )r   Dr   r   bs   `    r   test_matmulzTestLinearOperator.test_matmul   s   ffllKE<24 $$)q)HHn! " aDX__Q*AE2X__Q		"a(891qyyQ?O;OPX__Q*AE2X__Q,a!##g6X__Q		4a!))+oFX__QYYq"%5qss;QYYq"=MPQPSPS=STX__QYYq"%5qyy{CYYq"%		3	5X__Q,a!##g6X__Q		4a!))+oFj(//1a8j(//1a8r   N)__name__
__module____qualname__r   rp   r   r>   r   r   r   r      s    #_FB9r   r   c                       e Zd Zd Zd Zd Zy)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                    ||j                  t        j
                        D cg c]0  \  }}t        j                  |      j                  |j                  f2 c}}z  c_         | xj                    ||j                  t        j
                        D cg c]>  \  }}t        j                  |      j                  |j                  j                         f@ c}}z  c_         | xj                    ||j                  t        j
                        D cg c]B  \  }}t        j                  |      j                         |j                  j                         fD c}}z  c_         t        j                  g dg dg      }| xj                    ||t        j                        z  c_         | xj                    ||j                  t        j                        D cg c]0  \  }}t        j                  |      j                  |j                  f2 c}}z  c_         | xj                    ||j                  t        j                        D cg c]>  \  }}t        j                  |      j                  |j                  j                         f@ c}}z  c_         | xj                    ||j                  t        j                        D cg c]B  \  }}t        j                  |      j                         |j                  j                         fD c}}z  c_         y c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w )Nc                     g }|j                  t         |       f       |j                  t        j                   |       f       |j                  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|      }|j                   ||       f       |j                   ||       f       |j                   ||       f       |S )Nra   c                 ~    j                  |       }t        | j                        dk(  r|j                  dd      }|S )Nr   rz   r   )r$   r\   r&   r%   )r(   ra   yoriginals      r   mvzATestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.mv   s5    LLOqww<1$		"a(Ar   c                 V    j                   j                         j                  |       S r1   r,   r-   r$   )r(   ra   r   s     r   rmvzBTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.rmv   s    zz(,,Q//r   c                   &    e Zd ZdZfdZ fdZy)JTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.BaseMatliker>   c                 \    t        j                  |      | _        j                  | _        y r1   )r   ra   r&   )r   ra   r   s     r   __init__zSTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.BaseMatlike.__init__   s    !#%DJ!)DJr   c                 *     || j                         S r1   r   )r   r(   r   s     r   _matveczRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.BaseMatlike._matvec   s    a,,r   N)r   r   r   rY   r   r   )r   r   s   r   BaseMatliker      s    0-r   r   c                       e Zd ZdZ fdZy)ITestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatvecr>   c                 *     || j                         S r1   r   )r   r(   r   s     r   _rmatveczRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatvec._rmatvec   s    q$**--r   N)r   r   r   rY   r   )r   s   r   
HasRmatvecr      s    .r   r   c                       e Zd ZdZ fdZy)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/   ra   r&   )r&   r   ra   rW   rX   )r   r&   r.   r/   r   r   s       r   _adjointzRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasAdjoint._adjoint  sa     JJqM4::a=8E$S

;F%b

;G$336<C:>**:?A Ar   N)r   r   r   rY   r   )r   r   s   r   
HasAdjointr      s    Ar   r   c                   "    e Zd Z fdZ fdZy)ITestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatmatc                 &    j                  |      S r1   )r$   r   r(   r   s     r   _matmatzQTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatmat._matmat  s    #<<?*r   c                 V    j                   j                         j                  |      S r1   r   r   s     r   _rmatmatzRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatmat._rmatmat  s    #::??,0033r   N)r   r   r   r   r   )r   s   r   
HasRmatmatr     s    +4r   r   )appendr	   r   r   sparse	csr_arrayrW   rX   )	r   ra   casesr   r   r   r   r   r   s	   `      @@r   
make_casesz5TestAsLinearOperator.setup_method.<locals>.make_cases   s    ELL&7BCLL"((8598DELL&**85A8LM0-i66 -.[ .
A[ 
A4Z 4 LL*U+X67LL*U+X67LL*U+X67Lr   r   r   r   rE                 @)y              @y              @r   )r   r   r   int32float32float64r,   rW   aslinearoperatorrZ   r-   r[   rb   )r   r   r   Mr   s        r   r   z!TestAsLinearOperator.setup_method   s   
8	t 88Wg./

j28844


j2::66


j2::66


#-hjj"**#EG1a "221577= G 	G


#-hjj"**#EG1a "221577D G 	G


#-hjj"**#EG1a "2215==?L G 	G
 88[+67

j2==99


#-hjj"--#HJ1a "221577= J 	J


#-hjj"--#HJ1a "221577D J 	J


#-hjj"--#HJ1a "2215==?L J 	J
GGG
JJJs(   5O

AO
AO
	5O
9AO"
7AO(
c                    | j                   D ]a  \  }}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(  rh|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 ]J  }t        |j                  |      |j                  |             t        ||z  |j                  |             L t        |j                  |      |j                  |             t        ||z  |j                  |             |D ]  }	t        |j                  |	      |j                  j                         j                  |	             t        |j                  j                  |	      |j                  j                  |	             t        |j                  j                  |	      |j                  j                         j                  |	             t        |j!                         j                  |	      |j                  j                         j                  |	             " |D ]/  }	|	j"                  dk  rt        |j%                  |	      |j                  j                         j                  |	             t        |j                  j                  |	      |j                  j                  |	             t        |j                  j                  |	      |j                  j                         j                  |	             t        |j!                         j                  |	      |j                  j                         j                  |	             2 t'        |d      r t        |j                  |j                         t)        t'        |d             d y )Nr   r   r   r   r   rE   r   r   r   r   ra   rY   )r   rW   r   r&   r   r   ra   rb   r   r.   r$   r;   r/   r,   r-   rZ   r[   ndimr:   hasattrr   )
r   r   A_arrayr   Nxsysx2r(   r   s
             r   
test_basiczTestAsLinearOperator.test_basic+  s;   ** '	(JAw**1-A''CAa((9%((QC!qc?+-B((Aq6"BHHqcA3Z$89Bww"--'rxx,xx!rdRD 124 4rxxB("((QC";*?@@Aq6Aq6Aq623B 4QXXa['++a.9QUGKKN34 "w{{27RR1 MQYYq\799>>+;+?+?+BCQSSZZ]GIIMM!,<=QSSZZ]GIINN,<,@,@,CDQYY[//2GIINN4D4H4H4KL	M  M66A:QYYq\799>>+;+?+?+BCQSSZZ]GIIMM!,<=QSSZZ]GIINN,<,@,@,CDQYY[//2GIINN4D4H4H4KLM q!QWWagg.GAv&'O'	(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        |j                  |      |j                  |             t        |j                  |      |j                  |             t        |j                  |      |j                  |              y )Nr   r   r   r   r   r   r   )r   rW   r   r&   r   r   r   r$   )r   r   r   r   r   x0x1r   s           r   test_dotzTestAsLinearOperator.test_dotV  s    ** 
	5JAw**1-A''CAa)$BA3aS/*BAq6Aq6Aq623BrGKKO4rGKKO4rGKKO4
	5r   N)r   r   r   r   r   r   r>   r   r   r   r      s    OJb)(V5r   r   c                  f    t        j                  dd       } t        |       }t        d|v|       y )N)r   r   c                      yr+   r>   r(   s    r   r)   ztest_repr.<locals>.<lambda>f  s    r   r&   r.   zunspecified dtype)rW   rX   reprr   )r   repr_As     r   	test_reprr   e  s-      vkBA!WFv-v6r   c                  L   t        j                  d      } t        | g dz  g d       t        | j                  t	        j
                  d      j                  dd            j                         t	        j
                  d             t        t        | j                  g d       y )Nr   r   r   ry   r   rH   )rW   IdentityOperatorr   r$   r   aranger%   ravelrc   rd   r.   )idents    r   test_identityr   k  sj    &&v.E"I.299Q<//156<<>		!M*ellL9r   c            
         t        j                  t        j                  d      j	                  dd            } d }t        j
                  d|      }| || |z  | |z  | j                  | j                         | | z   ||z   | dz  g	}|D ]A  }t        t        |d             t        t        |d             t        t        |d             C y )	N   r   c                     t        j                  |       } t        | j                  dk(  xs | 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_onesv  s;    JJqM44177f#45wwqzr   )r   r   r   ra   r&   r   )
rW   r   r   r   r%   rX   rZ   r[   r   r   )r   r   r   opsops        r   test_attributesr   s  s    ""299R=#8#8A#>?A
 	  v6FGAaQAqssAIIKQAq!t
DC (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.     s    88A;r   c            	      $   dd l } t        | j                  dz         D ]q  }t        j                  dt
              }| j                  ||      }| j                  |      }|j                  D ]"  }t        t        ||      t        ||             $ s y )Nr   r   r   )protocol)picklerangeHIGHEST_PROTOCOLrW   rX   r.   dumpsloads__dict__r   getattr)r   r   r   sr   ks         r   test_pickler     s~    &11A56 7$$VV4LLXL.LLO 	7AA16	77r   c                  ^    G d dt         j                        } t        t        d      5  t	        t
        |        d d d         G d dt         j                        } |d      }t        |j                  g d      g d       t	        t        |j                  g d	        G d
 dt         j                        } |t        j                  j                  dd            }t        |j                  t        j                  j                  d            j                  d       y # 1 sw Y   xY w)Nc                       e Zd Zy)test_inheritance.<locals>.EmptyN)r   r   r   r>   r   r   Emptyr     s    r   r   zshould implement at leastrF   c                   $     e Zd Z fdZd Z xZS )"test_inheritance.<locals>.Identityc                 ,    t         |   d ||f       y )N)ra   r&   )superr   )r   n	__class__s     r   r   z+test_inheritance.<locals>.Identity.__init__  s    G41v6r   c                     |S r1   r>   r   r(   s     r   r   z*test_inheritance.<locals>.Identity._matvec  s    Hr   )r   r   r   r   r   __classcell__r   s   @r   Identityr     s    	7	r   r   r   r   r   c                   $     e Zd Z fdZd Z xZS )$test_inheritance.<locals>.MatmatOnlyc                 \    t         |   |j                  |j                         || _        y r1   r   r   ra   r&   r   r   r   r   s     r   r   z-test_inheritance.<locals>.MatmatOnly.__init__  !    GQWWagg.DFr   c                 8    | j                   j                  |      S r1   )r   r$   r   s     r   r   z,test_inheritance.<locals>.MatmatOnly._matmat  s    66::a= r   )r   r   r   r   r   r   r   s   @r   
MatmatOnlyr     s    		!r   r   r   )r   )rW   rX   r   RuntimeWarningrc   	TypeErrorr   r.   NotImplementedErrorr/   r   randomrandnr&   )r   r   id3r   mms        r   test_inheritancer    s    	((  
~%@	A (i'(9++  1+CI&	2%s{{I>!Y-- ! 
BIIOOAq)	*B299??1-.44d;/( (s   D##D,c                     t         j                  j                  dd      dt         j                  j                  dd      z  z   } t         j                  j                  dd      }t        j                  |       }t        j                  |      }||z   }||z   }t        |j                  t         j                         t        |j                  t         j                         y )Nr                 ?)	r   r   randrW   r   r   ra   r   rb   )mat_complexmat_realcomplex_operatorreal_operatorsum_complexsum_reals         r   test_dtypes_of_operator_sumr    s     ))..1%RYY^^Aa-@(@@Kyy~~a"H 11+>..x8M"%55K},H,""BMM2r   c                  b    dgfd} t        j                  d|        t        d   d       y )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   )rW   rX   r   )r.   r  s    @r   test_no_double_initr    s/    J VF3A"r   
test_dtypec                     t        j                  d|       fd}t        j                  d|      }|j                  t        j                  |       k(  sJ y )Nr   r   c                 D    t        j                  | d   z  | d   g      S r  r   r   )r  scalars    r   r   z/test_determine_lo_dtype_from_matvec.<locals>.mv  s#    xx!A$!-..r   r  r  )r   r   rW   rX   ra   )r  r   lor  s      @r   #test_determine_lo_dtype_from_matvecr    sI     XXaz*F/ 
	!	!&	4B88rxx
++++r   c                  `    d } t        j                  d|       }|j                  t        v sJ y )Nc                 B    t        j                  d| d   z  | d   g      S )N   r   r   r  )r  s    r   r   z+test_determine_lo_dtype_for_int.<locals>.mv  s"    xxqtQqT*++r   r  r  )rW   rX   ra   
INT_DTYPES)r   r  s     r   test_determine_lo_dtype_for_intr"    s-    , 
	!	!&	4B88z!!!r   c                  (   t        j                  dgg      } t        j                  |       }d|z  }d| z  }t        j                  dg      }t	        |j                  |      |j                  |             t	        |j                  j                  |      |j                  j                         j                  |             t	        |j                         j                  |      |j                  j                         j                  |             y Nr  r   )
r   r   rW   r   r   r$   rZ   r,   r-   r[   rh   r   r   Yr  s        r   test_adjoint_conjugater'    s    
2$A""1%A
QA
QA
!Aq1558$QSSXXZ^^A./#QSSXXZ^^A%67r   c                      t        j                  dgg      } t        j                  |       }t	        |j
                  d       y )Nr   r   )r   r   rW   r   r   r   )rh   r   s     r   	test_ndimr)    s1    
1#A""1%Ar   c                  l   t        j                  dgg      } t        j                  |       }d|z  }d| z  }t        j                  dg      }t	        |j                  |      |j                  |             t	        |j                  j                  |      |j                  j                  |             y r$  )r   r   rW   r   r   r$   r,   r%  s        r   test_transpose_noconjugater+    s    
2$A""1%A
QA
QA
!Aq1558$QSSWWQZ(r   c                  j    G d dt         j                        }  | t        j                  ddgddgg            }t        j                  ddg      }t        j                  ddgd	d
gg      }|j	                  dd      }t        j                  ddgddgg      }t        ||z  ||z         t        |j                  |z  |j                  |z         t        |j                  |z  |j                  |z         t        ||z  ||z         t        |j                  |z  |j                  |z         t        |j                  |z  |j                  |z         t        ||z  ||z         t        |j                  |z  |j                  |z         t        |j                  |z  |j                  |z         y )Nc                   *     e Zd Z fdZd Zd Z xZS )/test_transpose_multiplication.<locals>.MyMatrixc                 \    t         |   |j                  |j                         || _        y r1   r   r   s     r   r   z8test_transpose_multiplication.<locals>.MyMatrix.__init__  r   r   c                      | j                   |z  S r1   r<   r   others     r   r   z7test_transpose_multiplication.<locals>.MyMatrix._matmat	  s    %"7r   c                 4    | j                   j                  |z  S r1   )r   r,   r1  s     r   r   z8test_transpose_multiplication.<locals>.MyMatrix._rmatmat
  s    $&&((U*:#:r   )r   r   r   r   r   r   r   r   s   @r   MyMatrixr.    s    	 	8:r   r4  r   r   r   r   rC      rB   (   rz   )rW   rX   r   r   r%   r   r,   )r4  r   rh   r   X2r&  s         r   test_transpose_multiplicationr8    s`   ;9++ ; 	Aq6Aq6*+,A
!QA
2r(RH%&A	
2q	B
1a&1a&!"AQAq!##'"q!##'"QAq!##'"q!##'"RR 244!8$r1338$r   c                     t        j                  dd       } t        j                  d      }d}t	        t
        |      5  | |z   d d d        t	        t
        |      5  || z   d d d        t	        t              5  | t        j                  d      z   d d d        t	        t              5  t        j                  d      | z   d d d        y # 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   RxY w# 1 sw Y   y xY w)Nr  c                     | S r1   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.rF   r   )	rW   rX   r   	eye_arrayrc   r   rd   r   identity)r   r   rk   s      r   test_sparse_matmat_exceptionr=    s      <AA
EC	y	, 	A	y	, 	A	z	" 	BKKN	z	" 
A     s0   C C=C'-C3CC$'C03C<zTest not meaningful on PyPy)reasonc                      t        j                  d      } t        t        j                  |       5 }|j                          ~d d d        y # 1 sw Y   y xY wrL   )r   eyer
   rW   MatrixLinearOperatorr[   )r   r   s     r   "test_MatrixLinearOperator_refcyclerB  *  sD     	q	A	I::A	> "


  s   AA)?__doc__	functoolsr   	itertoolsr   r{   pytestr   rc   r   numpy.testingr   r   numpyr   scipy.sparser   scipy.sparse.linalg._interfacelinalg
_interfacerW   scipy.sparse._sputilsr	   scipy._lib._gcutilsr
   r   r   r   r   r   r   r.   r   markthread_unsafer  r  r  int8int16r   int64r!  r   r   
longdoubleREAL_DTYPES	complex64rb   clongdoubleCOMPLEX_DTYPESINEXACTDTYPES	ALLDTYPESparametrizer  r"  r'  r)  r+  r8  r=  skipifrB  r>   r   r   <module>r]     s\       1 /   2 2 ( ;C9 C9LI5 I5X7:( 	7 < <:3
# ggrxx2884
zz2::r}}5,,r~~>n,&	 y1, 2,"8

)%0 G$AB Cr   