
    _-Ph                         d Z ddlZddlmZmZmZmZmZm	Z	 ddl
mZmZmZmZmZ ddlZddlmZmZmZmZmZmZmZmZ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$ G d de          Z%dS )zTest utils.    N)
csr_matrix
csc_matrix
isspmatrix
bsr_matrixisspmatrix_bsrspdiags)TestCaseassert_equalassert_almost_equalassert_array_almost_equalassert_array_equal)diag_sparseprofile_solverto_type	type_prepget_diagonal
scale_rowsscale_columnsget_block_diagsymmetric_rescalingsymmetric_rescaling_safilter_operatorscale_Tget_Cpt_paramscompute_BtBinveliminate_diag_dom_nodes)relaxation_as_linear_operatorc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )	TestUtilsc                    t          j        dgg          }t          t          t	          |                    dg           t          j        g dg dg          }t          t          t	          |                    ddg           t          j        ddgddgg          }t          t          t	          |                    ddg           t          j        g dg d	g d
g          }t          t          t	          |                    g d           t          j        dgg          }t          t          t          j        dg                                                    t	          |                                                     t          j        ddgddgg          }t          t          t          j        ddg                                                    t	          |                                                     t          j        ddgddgg          }t          t          t          j        ddg                                                    t	          |                                                     t          j        g dg dg dg          }t          t          t          j        g d                                                    t	          |                                                     d S )N   r   )   r   r#   r&   r   r$   )?gr   )gףp=
      @r   )	   r   r%   )r'   r(   r%   )r'   r   r   )r   r(   r   )r   r   r%   nparrayr
   r   r   toarrayselfAs     [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/util/tests/test_utils.pytest_diag_sparsezTestUtils.test_diag_sparse   s   HrdV[A//"666Hjjj***-..[A//!Q888Hq!fq"g&''[A//!R999HnnnooozzzBCC[A//@@@ HrdV[2$0088::]]**,,	. 	. 	. Hq!fq!f%&&[1a&!1!122::<<]]**,,	. 	. 	. Hq!fq"g&''[1b'!2!233;;==]]**,,	. 	. 	. Hkkk;;;


;<<[...!9!9::BBDD]]**,,	. 	. 	. 	. 	.    c                    t          j        g dg dg dg          }t          j        g d          }t          j        g dg dg dg          }t          |          }t          ||          }t	          |                                |           t          |          }t          ||          }t	          |                                |           d S N)        r#   r   )   r      )   r&      )      @   r)   )r6      r   )   r      )$   -   6   )r+   r,   r   r   r
   r-   r   r/   AorigvAscaledr0   s        r1   test_scale_rowszTestUtils.test_scale_rows6   s    +++yyy)))<==H[[[!!(KKKlllCDD uq!QYY[['*** uq!QYY[['*****r3   c                    t          j        g dg dg dg          j        }t          j        g d          }t          j        g dg dg dg          j        }t          |          }t	          ||          }t          |                                |           t          |          }t	          ||          }t          |                                |           d S r5   )r+   r,   Tr   r   r
   r-   r   rC   s        r1   test_scale_columnszTestUtils.test_scale_columnsE   s    +++yyy)))<==?H[[[!!(KKKlllCDDF u!QQYY[['*** u!QQYY[['*****r3   c                 0   g }|                     t          t          j        g d                               |                     t          t          j        g d                               t          j        g dg dg dg          }t	          |          }|                     |           t          g d          }|                     ||z  |z             t          g d          }|                     ||z  |z             t          g d          }|                     ||z  |z             t          |          }|                     |           |D ]}t          |          \  }}}t          t          |          d	k    t          |                     t          t          |          ||z             t          |          t          |          }}t          ||z  |z                                  |                                           d S )
N)r#   r7   r8   r9   )r#   r   r8   r9   )r(         @333333@)       @#@      ?)      @@g@)r#   r   r#   r   r#   r   )r#   r#   r   )	appendr   r+   r,   r   r   r   r   r-   r/   casesr0   PD_sqrt
D_sqrt_invDADs          r1   test_symmetric_rescalingz"TestUtils.test_symmetric_rescalingT   s   [,,,!7!788999[,,,!7!788999Hooo$nn%oo' ( (
 qMMQ			""QqSU			""QqSU


##QqSU qMMQ 	/ 	/A&9!&<&<#FJA 2K4D4DEEEC 0 0&2CDDD!,V!4!4k*6M6MJFAj!8 A A C C #/ / / /	/ 	/r3   c                 ,   g }t          j        d                                          }d|z  d|z  d|z  g}t          |g ddd                                          }|                                                    dd          }t          j        g dg dg d	g d
g dg          }t          j        d|                    dd          z            }|	                    ||d ||d f           |                                }d|_
        |	                    ||                                |                                |||f           |                                }	d|	_
        |	                    |	|                                d ||d f           t          j        |                                d|                                z  f          }
t          j        d          |
z  }|                                }d|_
        |	                    ||
|
                                |||f           |D ]e}|\  }}}}}}t          |||          \  }}}t          |                                |           t          ||           |t          ||           fd S )Nr&   r#   rT   r7   rT   r   r#   r&   r#         ?      r6   r6   r6   rb   ra   rb   r6   r6   r6   rb   ra   rb   r6   r6   r6   rb   ra   rb   r6   r6   r6   rb   ra   nonsymmetric	hermitianBH)r+   onesravelr   tocsrcopyreshaper,   sqrtrU   symmetryhstackr   r   r-   )r/   rW   edatar0   B
DAD_answer	DB_answerA2A3B4
DB4_answerA4caserj   
DBH_answerr[   DBDBHs                      r1   test_symmetric_rescaling_saz%TestUtils.test_symmetric_rescaling_sau   s   GFOO!!##1ac2a4 D***a++1133FFHHR##X555777777777555	7 8 8

 GAaiiA...//	aD*i>??? VVXX$b!&&((AFFHHj)! 	" 	" 	" VVXX!b!&&((D*iFGGG Y!AFFHH*-..WQZZ]
VVXX$b"bggiiZLMMM 	; 	;D<@9Q2z9j3AqR@@@NS"c%ckkmmZ@@@%b)444%)#z:::	; 	;r3   c                     ddl m} ddlm} ddlm}  |dd          } ||          }g }|                    i            t          |dd	          }|                    |           |D ]}t          |fi |}	~	d S )
Nr   cgpoissonsmoothed_aggregation_solverd   r   csrformat绽|=accelrtolatol)	scipy.sparse.linalgr   pyamg.galleryr   pyamg.aggregationr   rU   dictr   
r/   r   r   r   r0   mloptsnextoptkwargs	residualss
             r1   test_profile_solverzTestUtils.test_profile_solver   s    ******))))))AAAAAAGJu---((++BRe!444G 	5 	5F&r44V44IIIIr3   c                 t   t          t          j        ddt                                        dd                    }t          |dd          }t          t          j        |          |                                           t          |dd          }t          j	        dd	gd
dggddgddggddgddggg          }t          t          j        |          t          j        |                     t          |dd          }t          j	        ddgddggddgddggddgdd ggg          }t          t          j        |          t          j        |          d!"           t          t          j	        g d#                              dd          d$%          }t          |dd          }t          j	        d&d'gd(d)ggd*d+gd*d+ggd,d,gd,d,ggg          }t          t          j        |          t          j        |          d!"           t          t          j	        g d-                              dd          d.%          }t          |dd          }t          j	        d,d,gd,d,ggd,d,gd,d,ggdd/gd0dggg          }t          t          j        |          t          j        |          d!"           d S )1Nr#   %   dtyper:   F)	blocksizeinv_flagr7   ra   rN   r;          @      .@      0@      5@      6@      =@g      >@g     A@g      B@TgDpTUUgQUU?gI?gK}\UUſgUUUgUUU@rL   g      g            @g.UUU@g.UUUr8   )decimal)$ra   rN         @      @r6   r6   r   g      @r;   r   r6   r6   g      "@g      $@      &@r   g      (@g      *@g      ,@r   r   r   g      2@g      3@g      4@r   r         7@r6   r6   g      :@g      ;@      <@r   r6   r6   )r8   r8   r   g      rP   g      ?g      пg+?gԼ?r6   )$r6   r6   r   r   r6   r6   r6   r6   r;   r   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r   r   r6   r6   r6   r6   r   r   r7   r7   r   r   )r   r+   arangefloatro   r   r   rl   diagonalr,   r   )r/   r0   
block_diaganswerblock_diag_invs        r1   test_get_block_diagzTestUtils.test_get_block_diag   sP   ryBe444<<QBBCC#AUCCC
!"(:"6"6

EEE#AUCCC
RHH& #J #J( #J #J(	) * * 	""(:"6"68H8HIII'QFFF[*5'57(*5 $K) "I'57	8 9 9 	""(>":":BHV<L<L*+	- 	- 	- 	- rx != != != > >
 ?Fgamm!') ) ) (QFFFT3K!5M+'4'46HH&	' ( ( 	""(>":":BHV<L<L*+	- 	- 	- 	- rx !; !; !; < <
 =DGAqMM!') ) ) (QGGGRHH&HH& #J #J(	) * * 	""(>":":BHV<L<L*+	- 	- 	- 	- 	- 	-r3   c           	      B   g }g }g }g d}i ddig}|                     t          j                            dd                     |                     dt          j                            dd          z             |                     dt          j        j                            d          d	         z             |                     t          j        j                            d          d	                    |D ]e}|j        d
k    r|                     t          j        	                    |j
        d	         d          dt          j        	                    |j
        d	         d          z  z              |                     t          j        	                    |j
        d	         d          dt          j        	                    |j
        d	         d          z  z              |                     t          j        	                    |j
        d	         d                     |                     t          j        	                    |j
        d	         d                     g|D ]9}|D ]2}t          |||          D ]\  }}	}
t          |          }|t          i           k    rt          |||
          }n||f}t          |||
          }||	z  }t          t          j        j        |          }|	                                }d}t          |          }|                    d          r!t%          |          rd}|j        d	         |d<   |                    d          r|rd|j        z  |d<   nd|j        z  |d<    ||||
fi | t/          ||           4;d S )N)gauss_seideljacobiblock_gauss_seidelblock_jacobi
iterationsr7   
   r   r   r                 ?)   r   r   complexr#   FblockTr   r   ra   omega)rU   pyamggalleryr   
elasticitylinear_elasticityr   r+   randomrandshapezipr   r   getattr
relaxationrn   
startswithr   r   endswithrho_block_D_inv	rho_D_invr   )r/   Asbsxsmethodsparamsr0   methodr   xbkwargs_linoprelaxfmethodx_linoprelax2x_gold	blockflagkwargs_golds                      r1   "test_relaxation_as_linear_operatorz,TestUtils.test_relaxation_as_linear_operator   s   # # #|Q'(
		%-'''??@@@
		$u},,Xe,DDDEEE
		$u}/AA(KKANNOOO
		%-*<<XFFqIJJJ 	9 	9Aw)##		")..Q77 29>>!'!*a#@#@@A B B B		")..Q77 29>>!'!*a#@#@@A B B B B 		")..Q77888		")..Q778888  	?  	?F  ? ?!$RR ? ?IQ1#'<<L#tBxx// =fa K K#)<"8 =gq! L L#aiG %U%5%@&IIFVVXXF %I"&v,,K((11 BnQ6G6G B$(	34;q>K0 x00 C$ C36q7H3HK0036q{?K0F1fa77;777-gv>>>>=?? 	?  	?r3   c           	      H   t          t          j        dgg                    }t          t          j        dgg                    }t          j        dgg          }t          j        dgg          }t          ||||                                          }t          j        dgg          }t          ||           t          t          j        dgg                    }t          ||||                                          }t          j        dgg          }t          ||           t          t          j        dgg                    }t          t          j        dgg                    }t          ||||                                          }t          j        dgg          }t          ||           t          t          j        ddgg                    }t          t          j        ddgg                    }t          j        dgdgg          }t          j        dgg          }t          ||||                                          }t          j        ddgg          }t          ||           t          t          j        ddgg                    }t          ||||                                          }t          j        ddgg          }t          ||           t          t          j        ddgg                    }t          ||||                                          }t          j        ddgg          }t          ||           t          t          j        dgdgg                    }t          t          j        dgdgg                    }t          j        dgg          }t          j        dgd	gg          }t          ||||                                          }t          j        dgd
gg          }t          ||           t          t          j        dgdgg                    }t          ||||                                          }t          j        dgd
gg          }t          ||           t          t          j        dgdgg                    }t          ||||                                          }t          j        dgdgg          }t          ||           t          t          j        ddgddgg                    }t          t          j        ddgddgg                    }t          j        ddgddgg          }t          j        ddgddgg          }t          ||||                                          }t          j        ddgddgg          }t          ||           t          t          j        ddgddgg                    }t          ||||                                          }t          j        ddgddgg          }t          ||           |                    d          }|                    d          }t          ||||                                          }t          j        ddgddgg          }t          ||           t          j        g dg dg dg dg dg dg          }t          j        g dg dg dg dg dg dg          }t          j        d          }t          j        d          }t          t          |          t          |          ||          }|                                }t          j        g dg dg dg dg dg dg          }t          ||           t          j        |t          j	        |j
        d                                       dd          f          }t          j        |t          j	        |j
        d                                       dd          f          }t          t          |          t          |          ||          }|                                }t          j        g dg dg dg dg dg d g          }t          ||           dd!lm}  |d"d#$          }|                                }d|j        t          j	        d|j        d%          <   |                                 t          j        |j
        d         df          }t          j        |j
        d         df          }t          ||||          }t          ||z  |           t          j        |t          j	        |j
        d                                       dd          f          }t          j        |t          j	        |j
        d                                       dd          f          }t          ||||          }t          ||z  |           d S )&N333333?ra   rP         ?r   r6   g?gffffff?皙?皙?皙?gHzG?r   )ra   r#   r#   r#   r#   r#   rS   r   r   r#   )ra   r#   r   r#   r#   r   r8   r#   r:   r#   )rP   rP   r6   r6   ra   r6   r6   r6   ra   r   rT   r#   ra   r6   r6   )r6   r   r6   )r6   rN   r6   )r6   r6   g?)r6   r6   g@r   r   r   r   r&   )r   r+   r,   r   r-   r   tobsrrk   rr   r   r   ro   r   r   rn   rt   nnzeliminate_zeros)r/   r0   Cru   BfA_filterA_knownr   s           r1   test_filter_operatorzTestUtils.test_filter_operator%  s[	    rx#(())rx"''((HseWXug"1aB//7799(SE7##!'8444rx"''(("1aB//7799(SE7##!'8444rx"''((rx"''(("1aB//7799(SE7##!'8444 rx#r,,--rx"b
++,,HsecU^$$Xug"1aB//7799(S#J<((!'8444rx"b
++,,"1aB//7799(RH:&&!'8444rx"b
++,,"1aB//7799(RH:&&!'8444 rx#..//rx"t--..HseWXusen%%"1aB//7799(RD3%=))!'8444rx"t--.."1aB//7799(RD2$<((!'8444rx"t--.."1aB//7799(RD2$<((!'8444 rx#sb#Y 78899rx#sb"X 67788HsCj3*-..XSzC:.//"1aB//7799(RHtRj122!'8444rx"bB8 45566"1aB//7799(RHtRj122!'8444GGFOOGGFOO"1aB//7799(RHr2h/00!'8444 Hjjjiiiiiiiiii! " " Hjjjiiiiiiiiii! " " GFOOWV__":a==*Q--BGG##%%(NNN*NN(LL(LL(LL(LL* + + 	"'8444Iq")AGAJ//77A>>?@@YBIbhqk22::2qAABCC":a==*Q--BGG##%%(LLL(LL)MM(LL)MM)MM+ , , 	"'8444 	*)))))GHU+++FFHH),ryAE1%%&	GQWQZO$$Wagaj!_%%"1aB//!(1*b111Iq")AGAJ//77A>>?@@YBIbhqk22::2qAABCC"1aB//!(1*b11111r3   c                    ddl m} t          j        dgg          }t          j        dgg          }t          j        dgg          }t	           ||           ||           ||                    }|                                }t          j        dgg          }t          ||           t          j        dgg          }t          j        dgg          }t          j        dgg          }t	           ||           ||           ||                    }|                                }t          j        dgg          }t          ||           t          j        dgg          }t          j        dgg          }t          j        dgg          }t	           ||           ||           ||                    }|                                }t          j        dgg          }t          ||           t          j        dgdgg          }t          j        dgdgg          }t          j        ddgddgg          }t	           ||           ||           ||                    }|                                }t          j        dgdgg          }t          ||           t          j        dgdgg          }t          j        dgdgg          }t          j        ddgddgg          }t	           ||           ||           ||                    }|                                }t          j        dgdgg          }t          ||           t          j        dgdgg          }t          j        dgdgg          }t          j        ddgddgg          }t	           ||           ||           ||                    }|                                }t          j        dgdgg          }t          ||           t          j        dgdgg          }t          j        dgdgg          }t          j        ddgddgg          }t	           ||           ||           ||                    }|                                }t          j        dgdgg          }t          ||           t          j        d	dgddgg          }t          j        ddgddgg          }t          j        ddgddgg          }t	           ||d
           ||d
           ||d
                                                    }t          j        ddgddgg          }t          ||           t          j        d	dgddgg          }t          j        ddgddgg          }t          j        ddgddgg          }t	           ||d           ||d           ||d                                                    }t          j        ddgddgg          }t          ||           t          j        d	dgddgg          }t          j        ddgddgg          }t          j        ddgddgg          }t	           ||d           ||d           ||d                                                    }t          j        d	dgddgg          }t          ||           t          j        g dg dg dg dg dg dg          }t          j        g dg dg dg dg dg dg          }t          j        g dg dg dg dg dg dg          }t          j        g dg dg dg dg dg dg          }t	           ||           ||           ||                    }|                                }t          ||           t          j        g dg dg dg dg dg dg d g d!g          }t          j        g d"g d"g dg dg d#g d$g d"g d"g          }t          j        g d%g d&g d'g d'g d'g d'g d(g d)g          }t          j        g dg dg dg dg d#g d$g d*g d+g          } ||d          } ||d          } ||d          }t	          |||                                          }t          ||           t          j        g dg dg dg dg dg dg d g d!g          }t          j        g d"g d"g dg dg d#g d$g d"g d"g          }t          j        g d%g d&g d'g d'g d'g d'g d(g d)g          }t          j        g d,g d-g dg dg d#g d$g d*g d+g          } ||d          } ||d          } ||d          }t	          |||                                          }t          ||           d S ).Nr   )r   r   ra   r6   r   r   r   rN   r#   r#   r   r   r   )rP   r6   r6   r   )r6   rP   r6   r   r6   r6         ?r6   r6   r6   ra   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   ra   r6   r6   r6   r6   r6   r6   ra   r6   )rN   r6   r6   )r6   r6   r   ra   ra   r6   r6   rP   ra   r6   r6   ra   r6   r6   r6   r6   ra   r6   r6   )r6   r6   rN   ra   )r6   r6   r   ra   )r6   r6   r   ra   )r6   r6   rN   r6   r6   r6   r6   r6   r6   r6   ra   r6   r6   r6   r6   ra   ra   r6   r6   r6   r6   r6   r6   r6   r6   ra   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   r6   ra   r6   r6   r6   r6   r6   r6   r6   r6   ra   )r6   r6         rN   )r6   r6   g       rN   )rP   rP   r6   r6   )      ?r  r6   r6   )scipy.sparser   r+   r,   r   r-   r   )r/   r   rI   P_II_FT_scaledT_answers          r1   test_scale_TzTestUtils.test_scale_T  s7   ++++++ HseWhwhw::a==**S//::c??KK##%%8cUG$$!(H555HseWhwhw::a==**S//::c??KK##%%8cUG$$!(H555HseWhwhw::a==**S//::c??KK##%%8bTF##!(H555 HsecU^$$hrd|$$hR2r(+,,::a==**S//::c??KK##%%8bTC5M**!(H555HrdSE]##hrd|$$hR2r(+,,::a==**S//::c??KK##%%8bTB4L))!(H555HrdRD\""hrd|$$hR2r(+,,::a==**S//::c??KK##%%8bTB4L))!(H555HrdRD\""hrd|$$hR2r(+,,::a==**S//::c??KK##%%8bTB4L))!(H555 Hr2hR)**hR2r(+,,hR2r(+,,::a6:::%:cV<<<%:cV<<<> >>Egii 	 8b"XBx011!(H555Hr2hR)**hR2r(+,,hR2r(+,,::a6:::%:cV<<<%:cV<<<> >>Egii 	 8b"XBx011!(H555Hr2hR)**hR2r(+,,hR2r(+,,::a6:::%:cV<<<%:cV<<<> >>Egii 	 8b"XBx011!(H555 Hmmm#mm"ll#mm"ll$nn& ' ' h$$$$$& ' ' h0000000000000000002 3 3 8\\\)\\)\\*]])\\)\\+ , , ::a==**S//::c??KK##%%!(H555 H''''''&&&&&&&&&&&&&&&&&&( ) ) h((((((((((((((((((((((((* + + h888888888888888888888888: ; ; 8---...------------......0 1 1 JqF+++j///j///1c3''//11!(H555 H''''''&&&&&&&&&&&&&&&&&&( ) ) h((((((((((((((((((((((((* + + h888888888888888888888888: ; ; 8///333------------......0 1 1 JqF+++j///j///1c3''//11!(H55555r3   c                 ,   ddl m} ddlm}m}  |t          j        dgg                    }t          j        dg          } |t          j        dgg                    }|                                                                }t          ||||          } |t          j        dgg          d          }	 |t          j        dgg          d          }
 |t          j        dgg          d          }t          t          j        dg          |d	                    t          t          j        g           |d
                    t          |	j        |d         j                   t          |	j        |d         j                   t          |	j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          |j        |d         j                    |t          j        dgg                    }t          j        g           } |t          j        dgg                    }|                                                                }t          ||||          } |t          j        dgg          d          }	 |t          j        dgg          d          }
 |t          j        dgg          d          }t          t          j        g           |d	                    t          t          j        dg          |d
                    t          |	j        |d         j                   t          |	j        |d         j                   t          |	j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          |j        |d         j                    |t          j        ddgddgg                    }t          j        dg          } |t          j        dgdgg                    }|                                                                }t          ||||          } |t          j        ddgddgg          d          }	 |t          j        ddgddgg          d          }
 |t          j        dgdgg          d          }t          t          j        dg          |d	                    t          t          j        dg          |d
                    t          |	j        |d         j                   t          |	j        |d         j                   t          |	j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          j        ddg          } |t          j        ddgddgg                    }|                                                                }t          ||||          } |t          j        ddgddgg          d          }	 |t          j        ddgddgg          d          }
 |t          j        ddgddgg          d          }t          t          j        ddg          |d	                    t          t          j        g           |d
                    t          |	j        |d         j                   t          |	j        |d         j                   t          |	j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          j        g           } |t          j        dgdgg                    }|                                                                }t          ||||          } |t          j        ddgddgg          d          }	 |t          j        ddgddgg          d          }
 |t          j        dgdgg          d          }t          t          j        g           |d	                    t          t          j        ddg          |d
                    t          |	j        |d         j                   t          |	j        |d         j                   t          |	j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   |                    d          }t          j        dg          } |t          j        dgg                    } |t          j        ddgddgg          d          }t          ||||          } |t          j        ddgddgg          d          }	 |t          j        ddgddgg          d          }
 |t          j        ddgddgg          d          }t          t          j        ddg          |d	                    t          t          j        g           |d
                    t          |	j        |d         j                   t          |	j        |d         j                   t          |	j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          j        g           } |t          j        dgg                    } |t          j        ddgddgg          d          }t          ||||          } |t          j        ddgddgg          d          }	 |t          j        ddgddgg          d          }
 |t          j        ddgddgg          d          }t          t          j        g           |d	                    t          t          j        ddg          |d
                    t          |	j        |d         j                   t          |	j        |d         j                   t          |	j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          |j        |d         j                    |dd          }t          j        ddg          }ddgddgddgddgddgddgddgddgddgddgg
} ||          }|                                                                }t          ||||          } |t          j        dggdggg          t          j        ddg          t          j        g d          fd          }	 |t          j        dggdggdggdggdggdggdggdggg          t          j        g d          t          j        g d          fd          }
t          j        ddgddgddgddgddgddgddgddgddgddgg
          } ||d          }t          j        g d          }t          ||d	                    t          ||d
                    t          |	j        |d         j                   t          |	j        |d         j                   t          |	j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   |                    d          }t          j        ddg          }ddgddgddgddgddgg} ||          }t          j        |                                |                                f          d d g df         } ||d          }t          ||||          } |t          j        ddgddggddgddggg          t          j        ddg          t          j        g d          fd          }	 |t          j        ddgddggddgddggddgddggg          t          j        g d          t          j        g d          fd          }
t          j        g dg dg d g d!g dg dg d"g d#g dg dg
          } ||d          }t          j        g d$          }t          j        g d%          }t          ||d	                    t          ||d
                    t          |	j        |d         j                   t          |	j        |d         j                   t          |	j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |
j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   t          |j        |d         j                   d S )&Nr   r   )r   r   r   ra   r   r   r6   CptsFptsI_Cr  r  r#   r   rN   )r   r   r   r8   r=   )r   r   r   r   r#   r#   r#   r#   r7   r7   r7   r   )r   )r   r#   r7   r9   r&   r:   r<   r)   )r   r#   r7   r8   r8   r9   r&   r:   r:   r=   r<   )r   r7   r#   r8   )r   r   r#   r#   r7   r7   )r   r7   r9   )r   r#   r#   r7   r7   r8   r	  r  r  r
  r  )r   r#   r9   r&   r<   r)   )r7   r8   r:   r=   )r   r   r  r   r   r+   r,   rn   r   r   r
   indptrindicesrt   rr   r-   )r/   r   r   r   r0   r  AggOprI   r   r  r  r  r  s                r1   test_get_Cpt_paramszTestUtils.test_get_Cpt_paramsr  s   ))))))77777777 Jrx#(())x}}
28bTF++,,JJLL  422jB4&))V<<<jB4&))V<<<jB4&))V<<<RXqc]]F6N333RXb\\6&>222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222Jrx#(())x||
28bTF++,,JJLL  422jB4&))V<<<jB4&))V<<<jB4&))V<<<RXb\\6&>222RXqc]]F6N333SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222 Jrx"bB8 45566x}}
28bTB4L1122JJLL  422jB8b"X"6776JJJjB8b"X"6776JJJjB4",//6BBBRXqc]]F6N333RXqc]]F6N333SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222xA
28b!Wr2h$78899JJLL  422jB8b"X"6776JJJjB8b"X"6776JJJjB8b"X"6776JJJRXq!f%%vf~666RXb\\6&>222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222x||
28bTB4L1122JJLL  422jB8b"X"6776JJJjB8b"X"6776JJJjB4",//6BBBRXb\\6&>222RXq!f%%vf~666SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222GGfG%%x}}
28bTF++,,Jrx"bB8 455HHH422jB8b"X"6776JJJjB8b"X"6776JJJjB8b"X"6776JJJRXq!f%%vf~666RXb\\6&>222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222x||
28bTF++,,Jrx"bB8 455HHH422jB8b"X"6776JJJjB8b"X"6776JJJjB8b"X"6776JJJRXb\\6&>222RXq!f%%vf~666SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222 GE%(((xAr(r(r(r(r(r(r(r(r(r(	 
5!!JJLL    422j"(bTFbTF#344(Aq6**(#D#D#DEEG  () ) ) j"(bTFbTFbTFbTF&(TFbTFbTFbTF$D E E(#;#;#;<<(#D#D#DEEG  (	) ) )
 hRRRRRRRRRR	" 	# 	# j///x00011T6&>***T6&>***SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222 GGfG%%xAr(r(r(r(r(	
 
5!!Iqyy{{AIIKK011!!!\\\/BJqF+++422j"(b"XBx$8&("XBx$8$: ; ;(Aq6**(#5#5#5668  (	) ) )
 j"(b"XBx$8&("XBx$8&("XBx$8$: ; ; (999--(#5#5#566	8
  () ) ) h((((((((((((((((((((((((((((((	* 	+ 	+ j///x***++x%%T6&>***T6&>***SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}1222SZ!5666S[&-"7888SXve}122222r3   c                 	   t          j        dgg          }t          |d          }t          j        dgg          }t          ||          }t          j        dggg          }t	          ||           t          j        dgg          }t          |d          }t          j        dgg          }t          ||          }t          j        dggg          }t	          ||           t          j        dgg          }t          |d          }t          j        dgg          }t          ||          }t          j        dggg          }t	          ||           t          j        ddgddgg          }t          |d          }t          j        dgdgg          }t          ||          }t          j        dggdggg          }t	          ||           t          j        ddgddgg          }t          |d          }t          j        dgdgg          }t          ||          }t          j        dggdggg          }t	          ||           t          j        ddgddgg          }t          |d          }t          j        dgdgg          }t          ||          }t          j        d	ggg          }t	          ||           t          j        ddgddgddgdd	gg          }t          |d          }t          j        dgdgg          }t          ||          }t          j        dggdggd	ggd	ggg          }t	          ||           t          j        ddgdd	gg          }t          |d          }t          j        ddgddgg          }t          ||          }t          j        d	d	gd	d	ggd
dgddggg          }t	          ||           t          j        ddgdd	gg          }t          |d          }t          j        ddgddgg          }t          ||          }t          j        ddgddggg          }t	          ||           t          j        g dg dg dg dg          }t          |d          }t          j        ddgddgddgddgg          }t          ||          }t          j        ddgddggddgddggg          }t	          ||           d S )Nra   r   r   r6   rP   r   r   rN   r   g{Gz?g{Gz?g{Gz?g      ?r  )r6   r6   rP   rP   )r6   r6   r   r   r   r   g      g      @r  r+   r,   r   r   r   r/   rI   ru   BtBinvr   s        r1   test_compute_BtBinvzTestUtils.test_compute_BtBinve  sj    HrdVqF+++HrdV1%%RD6(##!&&111HrdVqF+++HrdV1%%RD6(##!&&111HrdVqF+++HseW1%%RD6(##!&&111 Hr2hR)**qF+++HrdRD\""1%%RD6SE7+,,!&&111Hr2hR)**qF+++HrdRD\""1%%RD6RD6*++!&&111Hr2hR)**qF+++HrdRD\""1%%TF8*%%!&&111Hr2hR2hS	+ , ,qF+++HrdRD\""1%%RD6RD6!F8tfX/ 0 0!&&111Hr2hS	*++qF+++Hr2hR)**1%%T4L4,7!4L4,79 : :!&&111Hr2hS	*++qF+++Hr2hR)**1%%UEN"EN, - . .!&&111 H&&&&&&(((***, - - qF+++Hr2hR2r(RH=>>1%%RIRy1 #Jc
35 6 6!&&11111r3   c                    ddl m}  |dd          }t          ||                                d          }t	          j        g dg dg d	g d
g          }t          |                                |           ddl m}  |dd          }d|j        d<   |	                    d          } |dd          }t          ||d          }t	          j        g dg dg dg          }t          |                                |           d S )Nr   r   r9   r   r   r   r  r6   rN   r  r6   r6   r  rN   r6   r  r:   r   r8   r   r8   r   r6   rN   r  r6   r  rN   )
r   r   r   rn   r+   r,   r   r-   rt   r   r/   r   r0   r   r   s        r1   test_eliminate_diag_dom_nodesz'TestUtils.test_eliminate_diag_dom_nodes  sF   ))))))GD'''$Q#66+++,,,,,,+++- . . 	"!))++v666 	*)))))GD'''q	GGFOOGD'''$Q3//<<<(==(==* + + 	"!))++v66666r3   c                     ddl m} ddlm}  |dd          } ||          }t	          j        g dg dg d	g d
g          }t          |                                |           d S )Nr   r   remove_diagonalr'  r   r   r6   r  r6   r6   r  r6   r  r6   r6   r  r6   r  r6   r6   r  r6   r   r   pyamg.util.utilsr2  r+   r,   r   r-   r/   r   r2  r0   r   exacts         r1   test_remove_diagonalzTestUtils.test_remove_diagonal  s    ))))))444444GD'''OA+++,,,,,,+++- . . 	"!))++u55555r3   c                 0   ddl m} ddlm}  |dd          }t	          j        |j        t                    |_        d|j        d	<    ||          }t	          j        g d
g dg dg dg          }t          |	                                |           d S )Nr   r   scale_rows_by_largest_entryr'  r   r   r   r   r#   )r   ra   r6   r6   )rb   ra   rb   r6   r6   rb   ra   rb   )r6   r6   rb   ra   
r   r   r8  r>  r+   r,   rt   r   r   r-   r/   r   r>  r0   r:  s        r1    test_scale_rows_by_largest_entryz*TestUtils.test_scale_rows_by_largest_entry  s    ))))))@@@@@@GD'''!&000q	''**,,,......,,,. / / 	"!))++u55555r3   c                    ddl m} t          t          j        g dg dg dg                    } ||d          }t          j        g dg dg dg          }t          |                                |           |                                } ||dd	
           t          j        g dg dg dg          }t          |                                |           |                                } ||dd	d	           t          j        g dg dg dg          }t          |                                |           d S )Nr   )filter_matrix_rows)Q?rb   r6   r6   )ra   ra   \(\?r6   r?  rP   r6   rb   r6   r6   r  T)r   )r   lump)ra   gףp=
?r6   r6   )r8  rD  r   r+   r,   r   r-   rn   )r/   rD  r0   rx   r:  s        r1   test_filter_matrix_rowsz!TestUtils.test_filter_matrix_rows  s   777777rx!5!5!5!3!3!3!5!5!5!7 8 8 9 9  3''---***...0 1 1 	""**,,666VVXX2sT2222...+++...0 1 1 	""**,,666VVXX2sT====...---...0 1 1 	""**,,66666r3   c           	         ddl m} t          t          j        g dg dg dg dg                    } ||d          }t          j        g dg dg d	g dg          }t          |                                |           d S )
Nr   )filter_matrix_columns)rE  ra   r6   )rb   ra   rb   )r6   rF  ra   )r6   r6   rb   rP   r   r   )r8  rK  r   r+   r,   r   r-   )r/   rK  r0   r:  s       r1   test_filter_matrix_columnsz$TestUtils.test_filter_matrix_columns  s    ::::::rx!1!1!1!/!/!1 2 2 3 3 "!!S)),,,***&,,(..* + + 	"!))++u55555r3   c                    ddl m} t          t          j        g dg dg dg                    }|                                } ||d          }t          |                                |                                           |                                } ||d          }t          j        g dg dg dg          }t          |                                |           |                                } ||d	          }t          j        g dg d
g dg          }t          |                                |           |                                } ||d          }t          j        g dg dg dg          }t          |                                |           |                                } ||d          }t          j        g dg dg dg          }t          |                                |           d S )Nr   )truncate_rows)gQοrb   r6   r6   )ra   皙rF  g?)r6   r   ra   rP   r9   r8   )ra   rO  rF  r6   r7   )ra   rO  r6   r6   )r6   r6   ra   rP   r#   rG  )r6   rO  r6   r6   r
  r	  )r8  rN  r   r+   r,   rn   r   r-   )r/   rN  r0   Acopyr:  s        r1   test_truncate_rowszTestUtils.test_truncate_rows  s;   222222rx!6!6!6!6!6!6!3!3!3!5 6 6 7 7 eQ''!!))++u}}???eQ''///...,,,. / / 	"%--//5999eQ''///,,,+++- . . 	"%--//5999eQ'',,,,,,***, - - 	"%--//5999eQ''*********, - - 	"%--//599999r3   c                 ^   ddl m} ddlm}  |dd          } ||d          \  }}t	          j        g dg d	g d
g dg          }t	          j        g dg dg dg dg          }t          |                                |           t          |                                |           d S )Nr   r   scale_block_inverser'  r   r   r7   ra   r6   UUUUUUտr6   r6   ra   UUUUUUr6   r6   rX  ra   r6   r6   rV  r6   ra   UUUUUU?UUUUUU?r6   r6   r]  r\  r6   r6   r6   r6   r\  r]  r6   r6   r]  r\  )r   r   r8  rT  r+   r,   r   r-   r/   r   rT  r0   DinvA_storedDinv_storeds          r1   test_scale_block_inversez"TestUtils.test_scale_block_inverse3  s   ))))))888888GD'''%%a++487777777777779 : : h < < < < < < ? ? ? ? ? ? A B B 	"!))++x888!$,,..+>>>>>r3   N)__name__
__module____qualname__r2   rG   rJ   r\   r   r   r   r   r   r  r   r%  r/  r;  rB  rI  rL  rQ  re   r3   r1   r   r      sF       . . .>+ + ++ + +/ / /B); ); );V  $:- :- :-x5? 5? 5?nE2 E2 E2ND6 D6 D6Lq3 q3 q3fQ2 Q2 Q2f7 7 7.	6 	6 	66 6 67 7 746 6 6#: #: #:J? ? ? ? ?r3   r   c                   b    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )TestComplexUtilsc                    t          j        dgg          }t          t          t	          |                    dg           t          j        g dg dg          }t          t          t	          |                    ddg           t          j        dgg          }t          t          t          j        dg                                                    t	          |                                                     t          j        ddgddgg          }t          t          t          j        ddg                                                    t	          |                                                     d S )Ny            r"   )r%         @       r   r#   rm  y            ?r   r*   r.   s     r1   r2   z!TestComplexUtils.test_diag_sparseE  sD   Hwi[!![A//';;;Hjjj///233[A//!V=== Hwi[!![7)!4!455==??]]**,,	. 	. 	. Hq!fq&k*++[1f+!6!677??AA]]**,,	. 	. 	. 	. 	.r3   c           	         g }t          j        g dg dg dg          }t          |          }|                    |           t	          g d          }|                    ||z  |z             t	          g d          }|                    ||z  |z             |D ]}t          |          \  }}}t          t	          |          dk    t          j        t	          |                               t          t	          |          ||z             t	          |          t	          |          }}t          ||z  |z                                  |                                           d S )N)y      @      ?rL   rM   )rN   rO   y      ?       )rQ   rR   y@      ?)r#   r   r   )r         ?      ?r   r   )	r+   r,   r   rU   r   r   r   realr-   rV   s          r1   r\   z)TestComplexUtils.test_symmetric_rescalingV  ss   H***)))***, - - qMMQ%%QqSU''QqSU 	/ 	/A&9!&<&<#FJA! 3RW[=M=M5N5NOOOC 0 0&2CDDD!,V!4!4k*6M6MJFAj!8 A A C C #/ / / /	/ 	/r3   c                    g }dt          j        d                                          z  }d|z  d|z  d|z  g}dt          |g ddd                                          z  }|                                                    dd          }t          j        g dg d	g d
g dg dg          }t          j        d          dz  |                    dd          z  }|	                    ||d ||d f           |D ]e}|\  }}}	}}}
t          |||	          \  }}}t          |                                |           t          ||           |
t          ||
           fd S )Nr   r^   rT   r7   r_   r&   r#   r`   rc   rd   re   rf   ri   )r+   rk   rl   r   rm   rn   ro   r,   rp   rU   r   r   r-   )r/   rW   rs   rt   r0   ru   rv   rw   r}   rj   r~   r[   r   r   s                 r1   r   z,TestComplexUtils.test_symmetric_rescaling_sak  s   &&(((1ac2a4 zzz1a0066888FFHHR##X555777777777555	7 8 8

 GAJJtOAIIb!$4$44	aD*i>??? 	; 	;D<@9Q2z9j3AqR@@@NS"c%ckkmmZ@@@%b)444%)#z:::	; 	;r3   c                 T   g }t          dd          D ]}t          j                            ||          }|dt          j                            ||          z  z   }|                    t          |                     |                    t          |                     |D ]}t          |dd          }t          |dd          }t          |dd          }t          |dd          }t          |dd          }	t          |dd          }
t          j        |                                          }t          ||           d|z  }t          ||           t          j        |j
                                        |z                                            }t          ||           d|z  }t          ||           t          j        ||j
                                        z                                            }t          ||	           d|z  }t          ||
           d S )	Nr#   r:   r   F)norm_eqinvTr7   ra   )ranger+   r   r   rU   r   r   diagr-   r   rI   	conjugate)r/   rW   ir0   AiD_AD_A_invD_AAD_AA_invD_AA2	D_AA_inv2Ds               r1   test_get_diagonalz"TestComplexUtils.test_get_diagonal  s   q! 	) 	)A	q!$$AT")..A....BLLA'''LLB(((( 	. 	.Aq%U;;;C"1e>>>G1%888D#Aqd;;;H A5999E$Qt<<<I		$$A3'''AA7+++*335566A4(((AA8,,,13==??*335566A5)))AA9----+	. 	.r3   c                 d   ddl m} ddlm} ddlm}  |dd          }|j        dt          j        	                    |j
                  z  z   |_         ||          }g }|                    i            t          |d	d
          }|                    |           |D ]}t          |fi |}	~	d S )Nr   r   r   r   r   r   r   gh㈵>r   r   )r   r   r   r   r   r   rt   r+   r   r   r   rU   r   r   r   s
             r1   r   z$TestComplexUtils.test_profile_solver  s    ******))))))AAAAAAGJu---$ry~~ae4444((++BRe!444G 	5 	5F&r44V44IIIIr3   c           
         d}t          j        d          }t           j                            dd          }t	          t           j                            dd                    }||||g}t          t          |          }t          t          |                    D ]}||         j	        t          k    sJ t          ||                   r.t          j        ||         j        ||         j        z
            }n||         ||         z
  }t          t          t          j        t          j        |                              d           d S Nr   r^   r8   r7   r6   )r+   rk   r   r   r   r   r   ru  lenr   r   rl   rt   r
   maxabs	r/   wr   yzinlistoutrx  diffs	            r1   test_to_typezTestComplexUtils.test_to_type  s   GFOOINN1a  ry~~a++,,Q1gv&&s3xx 	; 	;Aq6<7****#a&!! *xAfQin <==1vq	)RVBHTNN3344c::::	; 	;r3   c           
         d}t          j        d          }t           j                            dd          }t	          t           j                            dd                    }||||g}t          t          |          }t          t          |                    D ]}||         j	        t          k    sJ t          j
        ||                   rJ t          ||                   r.t          j        ||         j        ||         j        z
            }n||         ||         z
  }t          t          t          j        t          j        |                              d           d S r  )r+   rk   r   r   r   r   r   ru  r  r   isscalarr   rl   rt   r
   r  r  r  s	            r1   test_type_prepzTestComplexUtils.test_type_prep  s-   GFOOINN1a  ry~~a++,,Q1((s3xx 	; 	;Aq6<7****{3q6*****#a&!! *xAfQin <==1vq	)RVBHTNN3344c::::	; 	;r3   c           	         t          j        g dg dg dg dg dg dg          }t          j        g dg dg dg dg dg dg          }t          j        d          dz   }t          j        d	          d
t          j        d	          z  z   }t          t	          |          t	          |          ||          }|                                }t          j        g dg dg dg dg dg dg          }t          ||           t          j        |t          j        |j	        d                   
                    dd          f          }t          j        |j	        d                   
                    dd          d
t          j        |j	        d                   
                    dd          z  z   }t          j        ||f          }t          t	          |          t	          |          ||          }|                                }t          j        g dg dg dg dg dg dg          }t          ||           d S )N)      ?        r#   r#   r   rS   r   )r  r#   r   r   r                   r   r   )      ?      ?r  r  )r  ro  r  )r  r  ro  r   rT   r#   )ro  r  r  )r  y      ?      ?r  )r  y       @       @r  )r  r  y??)r  r  y@@)r+   r,   rk   r   r   r-   r   rr   r   r   ro   )r/   r0   r   ru   r   r   r   wws           r1   r   z%TestComplexUtils.test_filter_operator  sh    HnnniiiiiIII7 8 8HnnniiiiiIII7 8 8GFOOc!WV__tbgfoo55":a==*Q--BGG##%%(9999997777777777779 : : 	"'8444
 Iq")AGAJ//77A>>?@@Yrx{##++B2228A;''//A6667YBx  ":a==*Q--BGG##%%(777777888777888888: ; ; 	"'844444r3   c                    t          j        g dg dg dg dg dg dg          }t          j        g dg dg d	g d
g dg dg          }t          j        g dg dg dg dg dg dg          }t          j        g dg dg dg dg dg dg          }t          t          |          t          |          t          |                    }|                                }t          ||           t          j        g dg dg dg dg dg dg dg dg          }t          j        g dg dg dg dg dg dg dg dg          }t          j        g dg dg dg dg dg dg dg d g          }t          j        g d!g d"g d#g d$g d%g d&g d'g d'g          }t          |d()          }t          |d()          }t          |d()          }t          |||                                          }t          ||           d S )*Nr   )              ?r6   r6   r   )r6   r  r6   )r6   r6   r   r   )y               r  r  )r  r  r  )r  r  r  )r  r  r  )r  r  y              @)r  r  r  r   r   r  r  r  r  )r   ra   r6   r6   r  r  r  )r6   r6                  @r6   r  )r6   r6   ra   ra   r	  r
  r  r  r  r  r  )r   r  r  r  )      ?        r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r  r  r  )r  r                r  r   r   )r+   r,   r   r   r-   r   )r/   rI   r  r  r  r  s         r1   r  zTestComplexUtils.test_scale_T  sR   Hmmm$nn"ll#mm#mm$nn& ' ' 85555555556665555557 8 8 h$$$$$& ' ' h0000000000000000002 3 3 :a==*S//:c??KK##%%!(H555 H''''''&&&&&&'''&&&&&&&&&( ) ) h((((((((((((((((((((((((* + + h888888888888888888888888: ; ; 8AAAAAAAAAAAAAAAAAABBBBBBD E E qF+++//////1c3''//11!(H55555r3   c                 >   t          j        ddgddgddgddgg          }t          |d          }t          j        dgd	gg          }t          ||          }t          j        d
ggd
ggdggdggg          }t	          ||           t          j        g dg dg dg dg          }t          |d          }t          j        ddgddgddgddgg          }t          ||          }t          j        ddgddggddgdd
ggg          }t	          ||           d S )Nr   r6   ra   rP   r   r   r   ro  r  r  y      ?        )ra   r6   r6   ra   )r6   r6   rP   r6   )r6   r6   r   r6   r   r   r   rN   y      ?        r  r  y?        y      @        y              ?y              r"  r#  s        r1   r%  z$TestComplexUtils.test_compute_BtBinv@  s   HsBi"b2hS	+ , ,qF+++Hvh&''1%%XJ<8*%J<8*7 8 8!&&111 H&&&&&&'''(((* + + qF+++HsBi#rS"IRyABB1%%Wh/(G1DE$h/(G1DEG H H!&&11111r3   c                    ddl m}  |dd          }t          j        |j        t
                    |_        d|j        d<   t          ||                                d          }t          j        g d	g d
g dg dg          }t          |	                                |           ddl m}  |dd          }t          j        |j        t
                    |_        d|j        d<   |
                    d          } |dd          }t          ||d          }t          j        g dg dg dg          }t          |	                                |           d S )Nr   r   r'  r   r   r   y      ?      @r   r  r(  r)  r  r*  r8   r   r+  r   r,  r-  )r   r   r+   r,   rt   r   r   rn   r   r-   r   r.  s        r1   r/  z.TestComplexUtils.test_eliminate_diag_dom_nodesW  s   ))))))GD'''!&000q	$Q#66+++,,,,,,+++- . . 	"!))++v666 	*)))))GD'''!&000q	GGFOOGD'''$Q3//<<<(==(==* + + 	"!))++v66666r3   c                     ddl m} ddlm}  |dd          } |d|z            }t	          j        g dg d	g d
g dg          }t          |                                d|z             d S )Nr   r   r1  r'  r   r   r   r3  r4  r5  r6  r7  r9  s         r1   r;  z%TestComplexUtils.test_remove_diagonalq  s    ))))))444444GD'''ODF##+++,,,,,,+++- . . 	"!))++tEz:::::r3   c                 0   ddl m} ddlm}  |dd          }t	          j        |j        t                    |_        d|j        d	<    ||          }t	          j        g d
g dg dg dg          }t          |	                                |           d S )Nr   r   r=  r'  r   r   r   y      @       @r#   )yB?        y'?B?r6   r6   )              r  r  r  )r  r  r  r  )r  r  r  r  r@  rA  s        r1   rB  z1TestComplexUtils.test_scale_rows_by_largest_entry|  s    ))))))@@@@@@GD'''!&000q	''**KKKNNNNNNMMMO P P 	"!))++u55555r3   c                    ddl m} ddlm}  |ddt                    }d|j        z  |_         ||d          \  }}t          j        g d	g d
g dg dg          }dt          j        g dg dg dg dgt                    z  }t          |	                                |           t          |	                                |           d S )Nr   r   rS  r'  r   )r   r   r   r7   rU  rW  rY  rZ  y             r[  r^  r_  r`  r   )
r   r   r8  rT  r   rt   r+   r,   r   r-   ra  s          r1   re  z)TestComplexUtils.test_scale_block_inverse  s   ))))))888888GDg666af%%a++487777777777779 : : BH&B&B&B&B&B&B&E&E&E&E&E&E&G ,3	4 4 4 4
 	"!))++x888!$,,..+>>>>>r3   N)rf  rg  rh  r2   r\   r   r  r   r  r  r   r  r%  r/  r;  rB  re  ri  r3   r1   rk  rk  D  s        . . ."/ / /*; ; ;2. . .>  &; ; ; ; ; ;""5 "5 "5HC6 C6 C6J2 2 2.7 7 74	; 	; 	;6 6 6? ? ? ? ?r3   rk  c                       e Zd Zd Zd ZdS )TestLevelizec                    ddl m}  |di fgd          }t          |d t          d          D                         |dd          }t          |d t          d          D                         |di fd          }t          |d t          d          D                         |di fd gd          }t          |di fd d d d g           d S )Nr   )%levelize_smooth_or_improve_candidatesr   r&   c                     g | ]}d i fS r   ri  .0rx  s     r1   
<listcomp>zKTestLevelize.test_levelize_smooth_or_improve_candidates.<locals>.<listcomp>      ???xn???r3   c                     g | ]}d S r  ri  r  s     r1   r  zKTestLevelize.test_levelize_smooth_or_improve_candidates.<locals>.<listcomp>  s    9991h999r3   c                     g | ]}d i fS r  ri  r  s     r1   r  zKTestLevelize.test_levelize_smooth_or_improve_candidates.<locals>.<listcomp>  r  r3   )r8  r  r
   ru  )r/   r  results      r1   *test_levelize_smooth_or_improve_candidatesz7TestLevelize.test_levelize_smooth_or_improve_candidates  s	   JJJJJJ6627GKKV??eAhh???@@@66xCCV99a999:::66"~qIIV??eAhh???@@@6627M78: :VxndD$EFFFFFr3   c                    ddl m} ddlm}  |dd          } |di fgdd          \  }}}t	          |d	 t          d
          D                        t	          |d           t	          |d            |ddd          \  }}}t	          |d t          d
          D                        t	          |d           t	          |d            |di fdd          \  }}}t	          |d t          d
          D                        t	          |d           t	          |d            |di fd gdd          \  }}}t	          |di fd d d g           t	          |d           t	          |d            |dd|ifdd          \  }}}t          |dd|ifg           t	          |d           t	          |d            |dd|ifdd|ifgdd          \  }}}t          |dd|ifdd|ifg           t	          |d           t	          |d            |d dd          \  }}}t	          |d t          d
          D                        t	          |d           t	          |d           d S )Nr   ) levelize_strength_or_aggregationr   )r   r   r   	symmetricr&   c                     g | ]}d i fS r  ri  r  s     r1   r  zFTestLevelize.test_levelize_strength_or_aggregation.<locals>.<listcomp>      BBBA{B/BBBr3   r9   c                     g | ]}d S r  ri  r  s     r1   r  zFTestLevelize.test_levelize_strength_or_aggregation.<locals>.<listcomp>  s    <<<ak<<<r3   c                     g | ]}d i fS r  ri  r  s     r1   r  zFTestLevelize.test_levelize_strength_or_aggregation.<locals>.<listcomp>  r  r3   
predefinedr   r7   r8   c                     g | ]}d i fS )Nri  r  s     r1   r  zFTestLevelize.test_levelize_strength_or_aggregation.<locals>.<listcomp>  s    ;;;QtRj;;;r3   )r8  r  r   r   r
   ru  r   )r/   r  r   r0   
max_levels
max_coarser  s          r1   %test_levelize_strength_or_aggregationz2TestLevelize.test_levelize_strength_or_aggregation  s;   EEEEEE))))))GF5))) -,{B.?-@!QGG 	'
JVBBqBBBCCCZ###Z### -,[!Q?? 	'
JV<<588<<<===Z###Z### -,k2->1EE 	'
JVBBqBBBCCCZ###Z### -,{B.?-F1MM 	'
JV{B/tTBCCCZ###Z### -,lS!H-Eq!LL 	'
J6\C8$<#=>>>Z###Z### -,|c1X.F/;c1X.F.HIJAO O 	'
J 	6\C8$<%1C8$<$> 	? 	? 	?Z###Z### -,T1a88 	'
JV;;%((;;;<<<Z###Z#####r3   N)rf  rg  rh  r  r  ri  r3   r1   r  r    s5        G G G /$ /$ /$ /$ /$r3   r  )&__doc__numpyr+   r  r   r   r   r   r   r   numpy.testingr	   r
   r   r   r   r   r8  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   pyamg.relaxation.utilsr   r   rk  r  ri  r3   r1   <module>r     sK        # # # # # # # # # # # # # # # #J J J J J J J J J J J J J J X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X A @ @ @ @ @k? k? k? k? k? k? k? k?\!U? U? U? U? U?x U? U? U?v
A$ A$ A$ A$ A$8 A$ A$ A$ A$ A$r3   