
    _-PhP3                         d Z ddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZ  G d	 d
e          Z G d de          ZdS )zTest internal linalg.    N)linalg)
csr_matrix)svdpinv)TestCaseassert_almost_equalassert_equalassert_array_almost_equal)approximate_spectral_radiusinfinity_normnormcondestcondishermitian
pinv_array)galleryc                        e Zd Zd Zd Zd ZdS )
TestLinalgc                    g }|                     d           |                     d           |                     d           |                     d           |                     d           |                     ddg           |                     ddg           |D ]1}t          t          |          t          j        |                     2d S )	N   g      @y      @      @y      @       y      ?      @   y      @       )appendr   r   r   )selfcasesAs      \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/util/tests/test_linalg.py	test_normzTestLinalg.test_norm   s    QRSVVfa[!!!ff%&&& 	9 	9AQQ8888	9 	9    c           	      (   t           j                            d           g }|                    t          j        dgg                     |                    t          j        ddgddgg                     |                    t          j        ddgddgg                     |                    t          j        g dg dg d	g                     t          dd
          D ]5}|                    t           j                            ||                     6|D ]}|                    t                    }t          |          }t          j        |          \  }}t          j        |          }||                                k                                    d         }||         }|d d |f         }	t          t!          |          |           t          t!          |          |           t!          |d          d         }
t#          t%          |	|
z             t%          |	|
z
                      }|t%          |	          z  }t          |dd           t!          |d          d         }
t#          t%          |	|
z             t%          |	|
z
                      }|t%          |	          z  }t          |dd           |D ]}||                                z   }|                    t                    }t          |          }t          j        |          \  }}t          j        |          }||                                k                                    d         }||         }|d d |f         }	t          t!          |          |           t          t!          |          |           t!          |d          d         }
t#          t%          |	|
z             t%          |	|
z
                      }|t%          |	          z  }t          |dd           t!          |d          d         }
t#          t%          |	|
z             t%          |	|
z
                      }|t%          |	          z  }t          |dd           g }t)          j        dd          }|                    |df           t(          j                            dd          d         }|                    |df           |D ]\  }}t!          |dd
d          }|`t!          |ddd          }|`t3          t          ||z
            dt          ||z
            z  k     d           t!          |ddd          }|`t!          |ddd          }|`t3          t          ||z
            dt          ||z
            z  k     d           t!          |ddd
          }|`t3          t          ||z
            t          |          z  dk     d           t!          |ddd
          }|`t3          t          ||z
            t          |          z  dk     d           t3          t          ||z
            dt          ||z
            z  k     d           d S )Ni     r      )d   r   r   )r   e   r   )r   r   c      Treturn_vector        r   decimal)2   r.   csr)formatgM/2;@)    r1   bsrg()_ AgؗҜ<)tolmaxiterrestart         ?
   g?g?gMbP?)nprandomseedr   arrayrangerandastypefloatr   r   eigabsmaxnonzeror   r   minr   	transposer   poisson
elasticitylinear_elasticityrhor	   )r   r   ir   AspEVlargest_eigexpected_eigexpected_vecvecminnormdiffA1A2expectedans1ans2s                     r    test_approximate_spectral_radiusz+TestLinalg.test_approximate_spectral_radius    sc   
	tRXtf%%&&&RX1v1v.//000RXAwA/00111RX{{{KKKDEEFFFq! 	/ 	/ALL1--....  	6 	6AAQ--CZ]]FQq		A<002215K[>LQQQ^,L ;A > >MMM ;C @ @,OOO-atDDDQGC$|c122D9K4L4LMMGT,///Dc15555-cFFFqIC$|c122D9K4L4LMMGT,///Dc155555  	6 	6AAKKMM!AAQ--CZ]]FQq		A<002215K[>LQQQ^,L ;A > >MMM ;C @ @,OOO-atDDDQGC$|c122D9K4L4LMMGT,///Dc15555-cFFFqIC$|c122D9K4L4LMMGT,///Dc155555 _Xe444b-()))11(51II!Lb-()))  	P 	PKAx.qeQ78: : :D.qeR78: : :DTH_--Cx4H4H0HH$OOO.qeR78: : :D.qeR78: : :DTH_--Cx4H4H0HH$OOO.qc278: : :DTH_--c(mm;cA4HHH.qeR78: : :DTH_--c(mm;eCTJJJTH_--Cx4H4H0HH$OOOO5	P 	Pr   c                 $   t          j        dgg          }t          t          t	          |                    d           t          j        g dg dg          }t          t          t	          |                    d           t          j        ddgddgg          }t          t          t	          |                    d	           t          j        g d
g dg dg          }t          t          t	          |                    d           d S )Nr!   r   )r#   r   r$   r(   r      r   r#   r\   r(   )g?gr   )gףp=
g      @r   )	   r   r$      r9   r<   r	   r   r   r   r   s     r   test_infinity_normzTestLinalg.test_infinity_norm}   s    HrdV]:a==111555Hjjj***-..]:a==111555Hq!fq"g&'']:a==111555HnnnooozzzBCC]:a==11266666r   N)__name__
__module____qualname__r   rZ   rc    r   r   r   r      sH        9 9 9[P [P [Pz7 7 7 7 7r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestComplexLinalgc                 
   g }|                     t          j        dgg                     |                     t          j        dgg                     |                     t          j        ddgddgg                     |                     t          j        ddgddgg                     |                     t          j        g dg d	g d
g                     t          dd          D ]k}|                     t          j        t          j                            ||          dt          j                            ||          z  z                        l|D ]}t          |          }t          j        |          \  }}t          j	        |          }||
                                k                                    d         }||         }t          t          |          |           t          t          |          |           t          |d          d         }	|                    |	          }
t          j        |
          }
t          j        |	          }	t          t          j        |
|	          t          j        |	|	          z            }t          ||d           t          |d          d         }	||	z  }t          j        |          }t          j        |	          }	t          t          j        ||	          t          j        |	|	          z            }t          ||d           |                                j                            |          }t          |          }t          j        |          \  }}t          j	        |          }||
                                k                                    d         }||         }t          t          |          |           t          t          |          |           t          |d          d         }	|                    |	          }t          j        |          }t          j        |	          }	t          t          j        ||	          t          j        |	|	          z            }t          ||d           t          |d          d         }	||	z  }t          j        |          }t          j        |	          }	t          t          j        ||	          t          j        |	|	          z            }t          ||d           d S )Ny            y      ffffff @y       @333333r   g      ?y       333333g\(\?)y      Y@      ?r   r   )r   y     @Y@      r   )r   r   y     X@#@r#   r                 ?Tr)   r   r,   )r   r9   r<   r=   r:   r>   r   r   rA   rB   rC   rD   r   r   dotravelconjT)r   r   rK   r   rL   rM   rN   rO   rP   rR   AvecrayleighAspvecAAAAspAAvecAAspvecs                    r   rZ   z2TestComplexLinalg.test_approximate_spectral_radius   s   RXyk**+++RXyk**+++RX!}q#h788999RX	1~4y9::;;;RX//////.0 1 1 	2 	2 	2 q! 	S 	SALL")..A"6"6tBINN1a<P<P7P"PQQRRRR  .	C .	CAQ--CZ]]FQq		A<002215K[>L   ;A > >MMM ;C @ @,OOO-atDDDQGC55::D8D>>D(3--C26$,,rvc3/?/??@@H,BBBB-cFFFqIC3YFXf%%F(3--C26&#..S1A1AABBH,BBBB""Bb>>DZ^^FQq		A<002215K[>L   ;B ? ? ,. . . ;D A A ,. . .-bEEEaHCFF3KKEHUOOE(3--C26%--sC0@0@@AAH,BBBB-d$GGGJCSjGhw''G(3--C26'3//"&c2B2BBCCH,BBBBB].	C .	Cr   c                    t          j        dgg          }t          t          t	          |                    d           t          j        g dg dg          }t          t          t	          |                    d           t          j        ddgddgg          }t          t          t	          |                    d           d S )	Ny            g      @)r#   r   y      @      r]   r^   r   r#   y            @ra   rb   s     r   rc   z$TestComplexLinalg.test_infinity_norm   s    Hwi[!!]:a==113777H&&&


344]:a==111555Hq!fq)n-..]:a==11377777r   c                 ,   t           j                            d           g }t          j        dgg          }|                    |           t          j        dgg          }|                    |           t          j        dgg          }|                    |           t          dd          D ]}t           j                            ||          }|                    |           |                    d|z             |dt           j                            ||          z  z   }|                    |           |D ]S}t          |          \  }}}t          |          t          |          z  }t          |          }t          ||           Td S )Nr   Q@        Q@333333Q@r#   r   rk   )r9   r:   r;   r<   r   r=   r>   r   rC   rE   r   r   	r   r   r   rK   USigmaVhexactcs	            r   	test_condzTestComplexLinalg.test_cond   sc   
	q HtfXQHugYQH|n%&&Qq! 	 	A	q!$$ALLOOOLLa   D1----ALLOOOO 	* 	*Aq66LAubJJs5zz)EQAq))))		* 	*r   c                 f   t           j                            d           g }t          j        dgg          }|                    |           t          j        dgg          }|                    |           t          j        dgg          }|                    |           t          dd          D ]}t           j                            ||          }d|                                j        |z   z  }|                    |           |dt           j                            ||          z  z   }d|                                j        |z   z  }|                    |           |D ]U}t          |          \  }}}t          |          t          |          z  }t          |d	
          }t          ||           Vg }t          dd          D ]}t           j                            ||          }|                    |           |                    d|z             |dt           j                            ||          z  z   }|                    |           |D ]U}t          |          \  }}}t          |          t          |          z  }t          |d
          }t          ||           Vd S )Nr   ry   rz   r{   r#   r   r7   rk   T)	symmetricF)r9   r:   r;   r<   r   r=   r>   rn   ro   r   rC   rE   r   r   r|   s	            r   test_condestzTestComplexLinalg.test_condest   se   
	q HtfXQHugYQH|n%&&Qq! 	 	A	q!$$AqvvxxzA~&ALLOOOD1----AqvvxxzA~&ALLOOOO 	* 	*Aq66LAubJJs5zz)ET***Aq))))q! 	 	A	q!$$ALLOOOLLa   D1----ALLOOOO 	* 	*Aq66LAubJJs5zz)EU+++Aq))))		* 	*r   c                    t           j                            d           g }g }|                    t           j                            dd                     |                    dt           j                            dd          z             t          j        ddgddgg          }d|z  }|                    |           |                    |           ||z   }|                    |           |                    ||                                j        z              t           j                            dd          }dt           j                            dd          z  }|                    |           |                    |           ||z   }|                    |           |                    ||                                j        z              |D ]}t          t          |d	          d
           t          t          |d
	          d
           t          |          }t          t          |d	          d
           t          t          |d
	          d
           |D ]}t          t          |d	          d           t          t          |d
	          d           t          |          }t          t          |d	          d           t          t          |d
	          d           d S )Nr   r#   rk   g      ?r+   g       @   F)
fast_checkT)r9   r:   r;   r   r>   r<   	conjugatero   rn   r	   r   r   )r   casesTcasesFr   Ais        r   test_ishermitianz"TestComplexLinalg.test_ishermitian  s   
	qbinnQ**+++d29>>!Q///000HsCj3*-..!VabFaa!++--/)***INN1a  ")..A&&&abFaa!&&((*n%%% 	@ 	@AQ59994@@@Q4888$??? 1AQ59994@@@Q4888$???? 	A 	AAQ59995AAAQ4888%@@@ 1AQ59995AAAQ4888%@@@@	A 	Ar   c           	         g }|                     t          j                            ddd                     |                     t          j                            ddd                     |                     t          j                            ddd                     |                     t          j                            ddd                     |                     t          j                            ddd                     |                     t          j                            ddd                     t          j                            ddd          }|ddd d f         |ddd d f<   |                     |           |                     t          j                            ddd          dt          j                            ddd          z  z              |                     t          j                            ddd          dt          j                            ddd          z  z              |                     t          j                            ddd          dt          j                            ddd          z  z              |                     t          j                            ddd          dt          j                            ddd          z  z              |                     t          j                            ddd          dt          j                            ddd          z  z              |                     t          j                            ddd          dt          j                            ddd          z  z              t          j                            ddd          dt          j                            ddd          z  z   }|ddd d f         |ddd d f<   |                     |           |D ]l}t          j        |          }t          |j        d                   D ]}t          ||                   ||<   t          |           t          ||d           md S )Nr#   r   r"   r   rk   r   r,   )
r   r9   r:   r>   
zeros_liker=   shaper   r   r
   )r   testsr   test	pinv_testrK   s         r   test_pinv_arrayz!TestComplexLinalg.test_pinv_arrayH  s   RY^^Aq!,,---RY^^Aq!,,---RY^^Aq!,,---RY^^Aq!,,---RY^^Aq!,,---RY^^Aq!,,---INN1a##q!QQQwZ!Q'
QRY^^Aq!,,tBINN1a4K4K/KKLLLRY^^Aq!,,tBINN1a4K4K/KKLLLRY^^Aq!,,tBINN1a4K4K/KKLLLRY^^Aq!,,tBINN1a4K4K/KKLLLRY^^Aq!,,tBINN1a4K4K/KKLLLRY^^Aq!,,tBINN1a4K4K/KKLLLINN1a##d29>>!Q+B+B&BBq!QQQwZ!Q'
Q 	B 	BDd++I9?1-.. - -#DG}}	!t%dIqAAAAA	B 	Br   N)	rd   re   rf   rZ   rc   r   r   r   r   rg   r   r   ri   ri      s|        ?C ?C ?CB8 8 8* * *8&* &* &*P+A +A +AZB B B B Br   ri   )__doc__numpyr9   scipyr   scipy.sparser   scipy.linalgr   r   numpy.testingr   r   r	   r
   pyamg.util.linalgr   r   r   r   r   r   r   pyamgr   r   ri   rg   r   r   <module>r      sx               # # # # # # " " " " " " " "6 6 6 6 6 6 6 6 6 6 6 68 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8      w7 w7 w7 w7 w7 w7 w7 w7tZB ZB ZB ZB ZB ZB ZB ZB ZB ZBr   