
    _-Ph+W                         d Z ddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddl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 G d de	          ZdS )zTest rootnode solver.    N)sparse)SparseEfficiencyWarning)TestCaseassert_approx_equalassert_array_almost_equal)diag_sparse)poissonlinear_elasticitygauge_laplacianload_example)rootnode_solverc                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestParametersc                    g | _         | j                             t          dd          d f           | j                             t          dd          d f           | j                             t          dd                     d S )Nd   csrformat
   r      r   bsr)casesappendr	   r
   )selfs    e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/aggregation/tests/test_rootnode.pysetUpzTestParameters.setUp   s    

76%888$?@@@
78E:::DABBB
+F5AAABBBBB    c                    | j         D ]\  }}t          ||fddi|}t          j                            d           t          j                            |j        d                   }|t          j                            |j        d                   z  }g }|                    ||dd|          }~|d         |d         z  dt          |          z  z  }	|	d	k     sJ d S )
N
max_coarse   r      绽|=x0maxitertol	residuals      ??	r   r   nprandomseedrandshapesolvelen
r   optsABmlxbr*   x_solconvergence_ratios
             r   	run_caseszTestParameters.run_cases   s    J 	+ 	+DAq A<<!<t<<BINN1	qwqz**ABINN171:...AIHHQ1be'0  2 2E21-3Y3GH $s*****	+ 	+r    c                 >    dD ]}|                      d|i           d S )N)	symmetric	evolutionstrengthr?   r   rC   s     r   test_strength_of_connectionz*TestParameters.test_strength_of_connection*   s5    2 	3 	3HNNJ12222	3 	3r    c                 >    dD ]}|                      d|i           d S N)standardlloyd	aggregaterD   r   rK   s     r   test_aggregation_methodz&TestParameters.test_aggregation_method.   5    . 	5 	5INNK34444	5 	5r    c                 >    dD ]}|                      d|i           d S )N)energysmoothrD   r   rQ   s     r   test_prolongation_smootherz)TestParameters.test_prolongation_smoother2   s5      	/ 	/FNNHf-....	/ 	/r    c                     g }|                     d           |                     dddif           |D ]}|D ]}|                     ||d            d S )Ngauss_seidelsweeprA   presmootherpostsmootherr   r?   r   	smootherspreposts       r   test_smootherszTestParameters.test_smoothers6   s    	(((.7K*@ABBB 	K 	KC! K KsDIIJJJJK	K 	Kr    c                 h   g }|                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |D ]}|                     d|i           d S )	NsplulucgrU   block_gauss_seidelgauss_seidel_nrjacobicoarse_solverrZ   r   solverssolvers      r   test_coarse_solversz"TestParameters.test_coarse_solvers@   s    vtt~&&&+,,,()))x    	6 	6FNNOV45555	6 	6r    c                     g }|                     dddif           |                     dddif           |                     d           |                     d           |D ]}|                     d|i           d S NFthetag?Tdiagonal_dominancerZ   r   ro   dds      r   test_diagonal_dominancez&TestParameters.test_diagonal_dominanceM       !!57C."9:::!!4'3"8999!!$'''!!%((($ 	7 	7BNN0"56666	7 	7r    N__name__
__module____qualname__r   r?   rF   rM   rS   r_   rk   rr    r    r   r   r      s        C C C+ + +"3 3 35 5 5/ / /K K K6 6 67 7 7 7 7r    r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestComplexParametersc                    g | _         t          dd          }|dt          j        |j        d         |j        d                   z  z   }| j                             |d f           t          dd          }|dt          j        |j        d         |j        d                   z  z   }| j                             |d f           d S )Nr   r   r                 ?r      r   )r   r	   r   eyer3   r   )r   r8   s     r   r   zTestComplexParameters.setUpY   s    
 F5)))vz!'!*agaj9999
1d)$$$HU+++vz!'!*agaj9999
1d)$$$$$r    c                    | j         D ]\  }}t          ||fddi|}t          j                            d           t          j                            |j        d                   dt          j                            |j        d                   z  z   }|t          j                            |j        d                   z  }g }|                    ||dd|          }~|d         |d         z  d	t          |          z  z  }	|	d
k     sJ d S )Nr"   r#   r   r|   r$   r%   r&   r+   r,   r-   r.   r6   s
             r   r?   zTestComplexParameters.run_casesg   s
   J 	+ 	+DAq A<<!<t<<BINN1	qwqz**TBINN171:4N4N-NNABINN171:...AIHHQ1be'0  2 2E21-3Y3GH $s*****	+ 	+r    c                 r    t          j        dt                     dD ]}|                     d|i           d S )Nignore)	classicalrA   rC   )warningssimplefilterr   r?   rE   s     r   rF   z1TestComplexParameters.test_strength_of_connectionx   sI    h(?@@@2 	3 	3HNNJ12222	3 	3r    c                 >    dD ]}|                      d|i           d S rH   rD   rL   s     r   rM   z-TestComplexParameters.test_aggregation_method}   rN   r    c                 T    ddddfdddiffD ]}|                      d|i           d S )NrP   cgnrdiagonalkrylov	weightingr   gmresrQ   rD   rR   s     r   rS   z0TestComplexParameters.test_prolongation_smoother   s]     V0:#< #< = 8W"568 	/ 	/F NNHf-....	/ 	/r    c                    g }|                     d           |                     dddif           |                     dddif           |                     dddif           |D ]}|D ]}|                     ||d            d S )NrU   rV   rA   gauss_seidel_nere   rW   rZ   r[   s       r   r_   z$TestComplexParameters.test_smoothers   s    	(((.7K*@ABBB+g{-CDEEE+g{-CDEEE 	K 	KC! K KsDIIJJJJK	K 	Kr    c                     g }|                     d           |                     d           |                     d           |                     d           |D ]}|                     d|i           d S )Nra   rb   rc   pinvrg   rZ   rh   s      r   rk   z)TestComplexParameters.test_coarse_solvers   s    vttv 	6 	6FNNOV45555	6 	6r    c                     g }|                     dddif           |                     dddif           |                     d           |                     d           |D ]}|                     d|i           d S rm   rZ   rp   s      r   rr   z-TestComplexParameters.test_diagonal_dominance   rs   r    Nrt   rx   r    r   rz   rz   X   s        % % %+ + +"3 3 3
5 5 5/ / /	K 	K 	K6 6 67 7 7 7 7r    rz   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestSolverPerformancec           
      n   g | _         t          dd          }| j                             |d dddddiff           | j                             |d ddddd	iff           t          d
d          }| j                             |d dddddiff           | j                             |d ddddddff           t          dd          \  }}| j                             ||dddddiff           | j                             ||ddddddff           | j                             ||ddddd	iff           d S )Ni  r   r   皙?rA   rP   r   rc   r   K   r   gp=
ף?g333333?r   r   r   2   r   r   )r   r	   r   r
   )r   r8   r9   s      r   r   zTestSolverPerformance.setUp   s   
GE***
1dC$x&679 	: 	: 	:
1dC$x&9:< 	= 	= 	= HU+++
1dD+$x&679 	: 	: 	:
1dD+$4>'@ '@ AB 	C 	C 	C !%8881
1ak$x&679 	: 	: 	:
1ak$4>'@ '@ AB 	C 	C 	C 	
1ak$x&9:< 	= 	= 	= 	= 	=r    c                    | j         D ]\  }}}}}t          ||||d          }t          j                            d           t          j                            |j        d                   }|t          j                            |j        d                   z  }g }	|                    ||dd|	          }
~
|	d         |	d         z  dt          |	          z  z  }||k     sJ d	S )
1Check that method converges at a reasonable rate.r   symmetryrQ   r"   r      r%   r&   r+   r,   Nr.   r   r8   r9   c_factorr   rQ   r:   r;   r<   r*   r=   avg_convergence_ratios               r   
test_basicz TestSolverPerformance.test_basic   s    04
 	4 	4,Aq(Hf A,.0 0 0B INN1	qwqz**ABINN171:...AIHHQ1be'0  2 2E 21-3Y3GH "
 )833333'	4 	4r    c                    t          dd          }t          j                            |j        d                   }t          j                            |j        d                   }t          dt          j        ddt          j                            |j        d                   z  dz
  z            z            }|                                }t          d|j        z            }t          j	        |j        d         d	f          }d	d
dd}t          ||z  |z  ||z  fi |}g }	|                    ||dd|	          }
~
|	d         |	d         z  dt          |	          z  z  }|dk     sJ d S )Nr   r   r   r   r,   r         r}      ra   )r"   
max_levelsrg   g-q=r&   r+   r   )r	   r/   r0   r2   r3   r   sqrttocsrdataonesr   r4   r5   )r   r8   r;   r<   DD_invr9   kwargssar*   r=   r   s               r   test_DADzTestSolverPerformance.test_DAD   s^   HU+++INN171:&&INN171:&&"'"rBINN171:$>$>>BCDDD
 
 GGIIC!&L)) GQWQZO$$ !"VLLQUQY	<<V<<	q"%9MM r]Yq\)sS^^/CD 	
 %s******r    c           	         d ddddfgg}t           j                            d           g }t          dd          \  }}|                    t          d	d
          t          j        d          df           |                    ||df           |D ]\  }}}d}t           j                            |j        d         d          }	t           j                            |j        d         d          }
|D ]l}t          ||d|          }g }|
                    |
|	dd|          }~|d         |d         z  dt          |          z  z  }|dk    r|}_|||z  k     sJ |}md S )Nrd      rA   )
iterationsrV   r   <   r   r   r   r   r   )i  r}   r-   g      r}   r   )r"   improve_candidatesr   r%   r&   r+   r,   )r/   r0   r1   r
   r   r	   r   r2   r3   r   r4   r5   )r   improve_candidates_listr   A_elasB_elasr8   r9   	rho_scalelast_rhor'   r<   r   r:   r*   r=   rhos                   r   test_improve_candidatesz-TestSolverPerformance.test_improve_candidates   s   
 $(%945%L%L%N $O#P 		q*8EBBBghu555gl++S2 	3 	3 	3ffc*+++!& 	# 	#Q9H
A..B	qwqz1--A&= # #"$Qb8JL L L	r25+4 ! 6 6 }y|3s9~~9MNt##"HH X!55555"HH!#		# 	#r    c           
         d}t          |fd          }dddifdddifdddifd	d
g}t          j        |df          t          j        t          j        |df          t          j        d|dz   d                              dd          f          g}|D ]}|D ]}t          ||d||          }|                                }t          j        	                    |          }	t          j        	                    |          }
t          t          j        ||	z  |
          t          j        |	||
z                       d S )N  r   r   rU   rV   rA   schwarzrd   rf   block_jacobir}   float)dtyper+   r   )r"   rX   rY   )r	   r/   r   hstackarangereshaper   aspreconditionerr0   r2   r   dot)r   nr8   r\   Bssmootherr9   r:   Pr;   ys              r   test_symmetryz#TestSolverPerformance.test_symmetry   sx    QD'''$w&<=';!78*Wk,BC~/	 gq!fooi!Q1a!e7;;;CCBJJL M MN " 	H 	HH H H$Qb192:< < < ''))INN1&&INN1&&#BF1q5!$4$4bfQA6F6FGGGGH	H 	Hr    c           
         t          d          }|d                                         }|d         }t          j                            d           t          j                            |j        d                   }|t          j                            |j        d                   z  }dddif}d	d
dd}dddd}ddddfg}	ddddf}
ddddfd g}t          |f||||	|
|
d|}g } |j        |f||d|}t          j	        |          }|d         |d         z  dt          |          z  z  }|dk     sJ g } |j        |f||dd|}~t          j	        |          }|d         |d         z  dt          |          z  z  }|d k     sJ t          d!d"#          }d}	d|d$<   t          |ft          j        |j        d         df          ||	|
|
d d%|}d|d$<   t          |ft          j        |j        d         df          ||	|
|
d d%|}t          |j        |j                  D ]C\  }}t          |j                                        |j                                                   Dd S )&Nrecirc_flowr8   r9   q  r   rP   r   r      r   nonsymmetricr"   rg   r   Vr   :0yE>cycler(   r)   rB   r   g       @kepsilonre   rA   r}   rV   r   r   )r9   rQ   r   rC   rX   rY   r'   r*   r+   r,   gffffff?r'   r*   accelg?)   r   r   r   r   r9   rQ   rC   rX   rY   r   )r   r   r/   r0   r1   r2   r3   r   r4   arrayr5   r	   r   ziplevelsr   r8   toarray)r   r   r8   r9   r'   r<   rQ   SA_build_argsSA_solve_argsrC   r   r   r   r*   r;   r   
sa_nonsymmsa_symmsymm_lvlnonsymm_lvls                       r   test_nonsymmetricz'TestSolverPerformance.test_nonsymmetric:  sQ   M**IOOI
	sY^^AGAJ''	qwqz***Xw/0')F%35 5"%"TBB c":":;<%A'N'NO0KAB3D 3D EFJL Q E!F0B&.)1*2	E E 7D	E E
 	BHQD2DDmDDHY''	r]Yq\)sS^^/CD 	 %s****	BHQ &2' & &$& &HY''	r]Yq\)sS^^/CD 	 %t++++ HU+++$2j!$Q O"'171:q/*B*B,2.6192:8<O O
 ANO O
 %0j!!! Lrw
A'?'?+3/759L L >KL L (+:+<gn'M'M 	? 	?#X{%hj&8&8&:&:&1m&;&;&=&=? ? ? ?	? 	?r    c                 f   t          dd          }t          j                            |j        d         d          }dddifdfg}|                    d	ddifd	f           |                    d
           |                    ddddiff           |                    ddddiff           |D ]\  }}g }g }t          ||d          }t          ||d          }	|                    ||          }
|	                    ||          }~
~t          |          dz   t          |          k     sJ d S )N)r$   r$   r   r   r   r}   rf   r   r$   rU   )rU   rf   rc   r)   g      $@r   rtolr,   r   )rg   r"   )r*   r#   )	r	   r/   r0   r2   r3   r   r   r4   r5   )r   r8   r<   coarse_solver_pairscoarse1coarse2r1r2sa1sa2x1x2s               r   test_coarse_solver_optsz-TestSolverPerformance.test_coarse_solver_optsx  sz    HU+++INN171:q)) "*L"+= >IJ""^&2B%7%9:H$J 	K 	K 	K""#=>>>""D4%*?#@AAA""FVfc],C#DEEE 3 	+ 	+GWBB!!7sKKKC!!7sKKKC1++B1++BBGGaK3r77*****	+ 	+r    c                    t          j        dt                     t          dd          }|                    d          g}|                    |                                           |                    |                                           t          |d          }|D ]}t          |d          }|j	        d	         j
                                        |j	        d	         j
                                        z
  }t          j        t          j        |                                                    d
k     sJ |}d S )Nr   r   r   r   )r}   r}   )	blocksizer   )r"   r+   g{Gz?)r   r   r   r	   tobsrr   tocscr   r   r   r8   r/   absravelmax)r   r8   r   sa_oldAAsa_newdffs          r   test_matrix_formatsz)TestSolverPerformance.test_matrix_formats  s   h(?@@@ F5)))6**+QWWYYQYY[[!!! r222 	 	B$RB777F-#%--//&-2C2E2M2M2O2OOC6"(3--((,,..5555FF		 	r    N)ru   rv   rw   r   r   r   r   r   r   r   r  rx   r    r   r   r      s        = = =44 4 4.+ + +@%# %# %#NH H H4<? <? <?|+ + +4    r    r   c                   $    e Zd ZdZd Zd Zd ZdS )TestComplexSolverPerformancezTest complex examples.

    Notes
    -----
    Examples are from
        "Algebraic Multigrid Solvers for Complex-Valued Matrices",
            Maclachlan, Oosterlee,
         Vol. 30, SIAM J. Sci. Comp, 2008
    c                    g | _         t          dd          }|dt          j        |j        d         |j        d                   z  z   }| j                             |d ddd	d
diff           t          dd          }|dt          j        |j        d         |j        d                   z  z   }| j                             |d ddd	dddff           t          dd          }d|z  }| j                             |d ddd	ddddff           | j                             |d ddd	dddff           t          ddd          }| j                             |d ddd	d
diff           d S )Nr   r   r   r|   r   r}   gQ?rA   rP   r   r   )G   r	  y             @O@gMbP?r   r   r   r   gffffff?   )r   r   r(   )r   r(   F   r,   g=
ףp=?)spacingbetag      ?	hermitianrc   )r   r	   r   r~   r3   r   r   )r   r8   Ais      r   r   z"TestComplexSolverPerformance.setUp  s   
 GE***
171:qwqz::::
2tT;$x&9:< 	= 	= 	= HU+++&Jqwqz171:../ /
2tT;$4>'@ '@ AB 	C 	C 	C
 HU+++AX
2tT;$4>1'N 'N OP 	Q 	Q 	Q 	
2tT;$Q&G&GHJ 	K 	K 	K
 B$777
1dD+$x&679 	: 	: 	: 	: 	:r    c                 T   | j         D ]\  }}}}}t          j        |          }t          ||||d          }t          j                            d           t          j                            |j        d                   dt          j                            |j        d                   z  z   }|t          j                            |j        d                   z  }g }	|	                    ||dd|	          }
~
|	d         |	d         z  d	t          |	          z  z  }||k     sJ  d
S )r   r   r   r   r|   r   r%   r&   r+   r,   N)r   r   
csr_matrixr   r/   r0   r1   r2   r3   r4   r5   r   s               r   r   z'TestComplexSolverPerformance.test_basic  s*   04
 	4 	4,Aq(Hf!!$$A A,.0 0 0B INN1	qwqz**TBINN171:4N4N-NNABINN171:...AIHHQ1be'0  2 2E 21-3Y3GH " )833333-	4 	4r    c           
      j   t          d          }|d                                         }|d         }t          j                            d           t          j                            |j        d                   dt          j                            |j        d                   z  z   }|t          j                            |j        d                   z  d|t          j                            |j        d                   z  z  z   }ddd	if}d
ddd}dddd}ddddfg}	ddddf}
t          |f|||	|
|
d|}g } |j        |f||d|}t          j	        |          }|d         |d         z  dt          |          z  z  }|dk     sJ g } |j        |f||d	d|}~t          j	        |          }|d         |d         z  dt          |          z  z  }|dk     sJ d}	d |d!<   t          |ft          j        |j        d         df          ||	|
|
d d"|}d|d!<   t          |ft          j        |j        d         df          ||	|
|
d d"|}t          |j        |j                  D ]C\  }}t          |j                                        |j                                                   Dd S )#Nhelmholtz_2Dr8   r9   r   r   r|   rP   r   r   r   r   rA   r   r   r   r   r   rB   r   g       @r   re   r}   r   )r9   rQ   rC   rX   rY   r   r+   r,   gq=
ףp?r   g?r   r   r   )r   r   r/   r0   r1   r2   r3   r   r4   r   r5   r   r   r   r   r8   r   )r   r   r8   r9   r'   r<   rQ   r   r   rC   r   r   r*   r;   r   r   r   r   r   s                      r   test_nonhermitianz.TestComplexSolverPerformance.test_nonhermitian  sR   N++IOOI
	sY^^AGAJ''$
1K1K*KK	qwqz***TQPQ
9S9S5S-TTXw/0')F%02 2"%"TBB c":":;<%A'N'NOQ E!F&.H*2E E6CE E 	BHQD2DDmDDHY''	r]Yq\)sS^^/CD 	 %t++++	BHQ &2' & &$& &HY''	r]Yq\)sS^^/CD 	 %s**** $2j!$Q O"'171:q/*B*B,2.6H2:8<	O O AN	O O

 %0j!!! Lrw
A'?'?)/+3/759	L L >K	L L
 (+:+<gn'M'M 	? 	?#X{%hj&8&8&:&:&1m&;&;&=&=? ? ? ?	? 	?r    N)ru   rv   rw   __doc__r   r   r  rx   r    r   r  r    sL         : : :@4 4 447? 7? 7? 7? 7?r    r  )r  r   numpyr/   scipyr   scipy.sparser   numpy.testingr   r   r   pyamg.util.utilsr   pyamg.galleryr	   r
   r   r   pyamg.aggregation.rootnoder   r   rz   r   r  rx   r    r   <module>r     s                0 0 0 0 0 0          ) ( ( ( ( (            7 6 6 6 6 6D7 D7 D7 D7 D7X D7 D7 D7NL7 L7 L7 L7 L7H L7 L7 L7^y y y y yH y y yx|? |? |? |? |?8 |? |? |? |? |?r    