
    _-Pha                         d Z ddlZddlZddlmZmZmZ ddlm	Z	 ddl
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 smoothed aggregation solver.    N)TestCaseassert_approx_equalassert_array_almost_equal)sparse)SparseEfficiencyWarning)diag_sparse)poissonlinear_elasticitygauge_laplacianload_example)smoothed_aggregation_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    h/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/aggregation/tests/test_aggregation.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   iO@pr      绽|=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,QHHaH4HHBINN:&&&	qwqz**ABINN171:...AIHHQ1beyHQQE!*21!=s9~~AU V$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)jacobi
richardsonenergysmoothrD   r   rS   s     r   test_prolongation_smootherz)TestParameters.test_prolongation_smoother.   s5    8 	/ 	/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_smoothers2   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cgrW   block_gauss_seidelgauss_seidel_nrrP   coarse_solverr\   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_dominancer\   r   rp   dds      r   test_diagonal_dominancez&TestParameters.test_diagonal_dominanceI       !!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   rU   ra   rl   rs    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.setUpU   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#   ikM.r   r}   r$   r%   r&   r+   r,   r-   r.   r6   s
             r   r?   zTestComplexParameters.run_casesd   s    J 	+ 	+DAq,QHHaH4HHBINN9%%%	qwqz**TBINN171:4N4N-NNABINN171:...AIHHQ1beyHQQE!*21!=s9~~AU V$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_connections   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_methodx   rN   r    c                 X    ddddddfdddiffD ]}|                      d	|i           d S )
NrP   rQ   rR   cgnrdiagonalkrylov	weightingr   gmresrS   rD   rT   s     r   rU   z0TestComplexParameters.test_prolongation_smoother|   s[     V*"M"MN 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 )NrW   rX   rA   gauss_seidel_nerg   rY   r\   r]   s       r   ra   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 )Nrc   rd   re   pinvrh   r\   ri   s      r   rl   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 rn   r\   rq   s      r   rs   z-TestComplexParameters.test_diagonal_dominance   rt   r    Nru   ry   r    r   r{   r{   T   s        % % %+ + +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 )
TestSolverPerformancec           
      @   g | _         t          dd          }| j                             |d dddddiff           | 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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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   omegaUUUUUU?rR   r   re   g      ?r   <   r   gzG?r   r   r   2   r   r   g{Gz?g)\(?)r   r	   r   r
   )r   r8   r9   s      r   r   zTestSolverPerformance.setUp   s}   
GE***
1dC$w	&:;= 	> 	> 	>
1dC$x&679 	: 	: 	:
1dC$x&9:< 	= 	= 	= HU+++
1dD+$w	&:;= 	> 	> 	>
1dD+$x&679 	: 	: 	:
1dD+$4>'@ '@ AB 	C 	C 	C !%8881
1a{$w	&:;= 	> 	> 	>
1a{$x&679 	: 	: 	:
1a{$4>'@ '@ AB 	C 	C 	C 	
1a{$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   symmetryrS   r"   l   ?(f r      r%   r&   r+   r,   Nr.   r   r8   r9   c_factorr   rS   r:   r;   r<   r*   r=   avg_convergence_ratios               r   
test_basicz TestSolverPerformance.test_basic   s    04
 	4 	4,Aq(Hf,QH4:rK K KB INN:&&&	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~      rc   )r"   
max_levelsrh   g-q=r&   r+   g      ?)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   sW   HU+++INN171:&&INN171:&&bgbR")..2L2L-Lq-P&QRRRSSGGIIC!&L)) GQWQZO$$ !"VLL(QEAIHHHH	q"%9MM r]Yq\)sS^^/CD 	
 %t++++++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 )Nrf      rA   )
iterationsrX   l   ^ r   r   r   )=   r   r   )i  r~   r-   g      r   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<   icr:   r*   r=   rhos                   r   test_improve_candidatesz-TestSolverPerformance.test_improve_candidates   s    ([*Q*QRS#U 		z"""*8EBBBghu555gl++S2 	3 	3 	3ffc*+++!& 	# 	#Q9H
A..B	qwqz1--A- # #0A"DFH H H	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|dz   d                              dd          }t          j        |df          t          j        t          j        |df          |f          g}|D ]}|D ]}t          ||d||          }|                                }	t          j        	                    d           t          j        
                    |          }
t          j        
                    |          }t          j        |	|
z  |          t          j        |
|	|z            f}t          |d         |d                    Ԍd S )N  r   r   rW   rX   rA   schwarzrf   rP   block_jacobir~   float)dtyper+   r   )r"   rZ   r[   l   "J r   )r	   r/   arangereshaper   hstackr   aspreconditionerr0   r1   r2   dotr   )r   nr8   r^   rngBssmootherr9   r:   Pr;   youts                r   test_symmetryz#TestSolverPerformance.test_symmetry  s    QD'''$w&<=';!78*Wk,BC~/	 i1q500088Q??gq!foory"'1a&//3)?@@A " 	4 	4H 
4 
40A"=E>FH H H ''))	z***INN1&&INN1&&va!eQ''1q5)9)9:#CFCF3333
4	4 	4r    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   i3r   rR   r   r      r   nonsymmetricr"   rh   r   Vr   :0yE>cycler(   r)   rB   r   g       @kepsilonrg   rA   r~   rX   r   r   )r9   rS   r   rC   rZ   r[   r'   r*   r+   r,   g?r'   r*   accelg?)   r   r   r   r   r9   rS   rC   rZ   r[   r   )r   r   r/   r0   r1   r2   r3   r   r4   arrayr5   r	   r   ziplevelsr   r8   toarray)r   r   r8   r9   r'   r<   rS   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?  s<   M**IOOI
	y!!!Y^^AGAJ''	qwqz***Xw/0')F%35 5"%"TBB c":":;<%A'N'NO0)4AFFHIMO ) :a<N2:5=6>	: :
 ,9: : 	BHQD2DDmDDHY''	r]Yq\)sS^^/CD 	$t++++	BHQ &2' & &$& &HY''	r]Yq\)sS^^/CD 	$t++++ HU+++$2j!0 Bbgqwqz1o6N6N8>:B=E>FDHB B 4AB B
 %0j!-a ?27AGAJ?3K3K5;7?:B;CAE? ? 1>? ? (+:+<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~   rP   r   r$   rW   )rW   rP   re   r)   g      $@r   rtolr,   r   )rh   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_opts  s    HU+++INN171:q)) "*L"+= >IJ""^lB5G$H$2$4 	5 	5 	5""#=>>>""D4%*?#@AAA""FVfc],C#DEEE 3 
	+ 
	+GWBB-aw9<> > >C-aw9<> > >C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
                                        }t          j        t          j        ||z
                                                      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Ac_oldAc_news           r   test_matrix_formatsz)TestSolverPerformance.test_matrix_formats  s#   h(?@@@ F5)))6**+QWWYYQYY[[!!!,Q2>>> 	 	B0CCCF]2&(0022F]2&(0022F6"(6F?334488::TAAAAFF	 	r    N)rv   rw   rx   r   r   r   r   r   r   r   r
  ry   r    r   r   r      s        = = =>4 4 40, , ,<%# %# %#N4 4 4@?? ?? ??B+ + +8    r    r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestComplexSolverPerformancezTest imaginary examples.

    Notes
    -----
    Examples 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           | 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iff           | j                             |d ddddddff           t          dd          }d|z  }| j                             |d ddd	d
diff           | j                             |d dddddddff           | j                             |d dddddddff           t          ddd          }| j                             |d ddd	d
diff           | j                             |d ddddd iff           d S )!Nr   r   r   r}   r   r~   gQ?rA   rP   r   r   rR   r   r   )G   r  y             @O@gMbP?r   r   r   r   g333333?g333333?   )r   r(   r   F   r,   g=
ףp=?)spacingbetar   	hermitianre   )r   r	   r   r   r3   r   r   )r   r8   Ais      r   r   z"TestComplexSolverPerformance.setUp  s   
 GE***
171:qwqz::::
2tT;$w	&:;= 	> 	> 	>
2tT;$x&9:< 	= 	= 	= HU+++$vz!'!*agaj'I'III
2tT;$w	&:;= 	> 	> 	>
2tT;$j&Q&QRT 	U 	U 	U HU+++AX
2tS+$w	&:;= 	> 	> 	>
2tS+$A4>'@ '@ AB 	C 	C 	C 	
2tS+$Q4>'@ '@ AB 	C 	C 	C B$777
1dC$w	&:;= 	> 	> 	>
1dC$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   iA ~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,QH4:rK K KB INN:&&&	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   ir   r}   rR   r   r   r   r   rA   r   r   r   r   r   rB   r   g       @r   rg   r~   r   )r9   rS   rC   rZ   r[   r   r+   r,   g333333?r   gffffff?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<   rS   r   r   rC   r   r   r*   r;   r   r   r   r   r   s                      r   test_nonhermitianz.TestComplexSolverPerformance.test_nonhermitian  sG   N++IOOI
	x   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( :a2:5=6>: : ,9	: :
 	BHQD2DDmDDHY''	r]Yq\)sS^^/CD 	$t++++	BHQ &2' & &$& &HY''	r]Yq\)sS^^/CD 	$s**** $2j!0 Bbgqwqz1o6N6N8>:B=E>FDHB B 4AB B
 %0j!-a ?27AGAJ?3K3K5;7?:B;CAE? ? 1>? ? (+:+<gn'M'M 	? 	?#X{%hj&8&8&:&:&1m&;&;&=&=? ? ? ?	? 	?r    c                    t           j                            d           t          dt           j        d          }t           j                            |j        d                                       |j                  }t          |          }t           j                            |j        d                                       |j                  }|
                    ||d          }t           j                            d           t          dt           j        d          }t           j                            |j        d                                       |j                  }t          |          }t           j                            |j        d                                       |j                  }|
                    ||d          }t          ||d	           d
S )zaCheck single precision.

        Test that x_32 == x_64 up to single precision tolerance
        l   {x r   r   )r   r   r   r~   )r'   r(   r#   )decimalN)r/   r0   r1   r	   float64r2   r3   astyper   r   r4   float32r   )r   r8   r<   r:   r;   x32x64s          r   test_precisionz+TestComplexSolverPerformance.test_precision8  s_   
 		z"""HBJu===INN171:&&--ag66(++INN171:&&--ag66hhqQh**
	z"""HBJu===INN171:&&--ag66(++INN171:&&--ag66hhqQh**!#sA666666r    N)rv   rw   rx   __doc__r   r   r  r!  ry   r    r   r  r    s\         &: &: &:P4 4 44;? ;? ;?z7 7 7 7 7r    r  )r"  r   numpyr/   numpy.testingr   r   r   scipyr   scipy.sparser   pyamg.util.utilsr   pyamg.galleryr	   r
   r   r   pyamg.aggregation.aggregationr   r   r{   r   r  ry   r    r   <module>r*     s   ' '                     0 0 0 0 0 0 ( ( ( ( ( (" " " " " " " " " " " " E E E E E EB7 B7 B7 B7 B7X B7 B7 B7JK7 K7 K7 K7 K7H K7 K7 K7\I I I I IH I I IX]7 ]7 ]7 ]7 ]78 ]7 ]7 ]7 ]7 ]7r    