
    _-PhO                         d 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mZ d Z G d d	e          Z G d
 de          ZdS )zTest MultilevelSolver class.    N)TestCaseassert_almost_equalassert_equal)sparse)poisson)coarse_grid_solverMultilevelSolverc                     t          j        |           } |                                | z  }t          j        t          j        |                                 |                    S )z#Calculate preconditioner norm of v.)npravelaspreconditionersqrtdot	conjugate)vmlws      [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/tests/test_multilevel.pyprecon_normr   
   sI    
A
aA726!++--++,,,    c                   &    e Zd Zd Zd Zd Zd ZdS )TestMultilevelc                 `   g }|                     t          j        t          j        t          j        ddt                                                   |                     t          dd                     |                     t          dd                     dd	lm	 fd
}|D ]}dddddd|fD ]u}t          |          }t          j        |j        d         |j                  } |||          }t          ||z  |            |||          }t          ||z  |           vd S )N      dtype   csrformatr   r   r   cgc                 (     | |          d         S )Nr    )Abr%   s     r   fnz2TestMultilevel.test_coarse_grid_solver.<locals>.fn   s    2a88A;r   splupinvpinv2lucholeskyr%   )appendr   
csr_matrixr   diagarangefloatr   pyamg.krylovr%   r   shaper   r   )	selfcasesr*   r(   solversr)   xr%   s	           @r   test_coarse_grid_solverz&TestMultilevel.test_coarse_grid_solver   s^   V&rwryAU/K/K/K'L'LMMNNNWT%000111WVE222333######	 	 	 	 	  	, 	,A!67D*% , ,&v..Iagaj888AaGG#AaC+++ AaGG#AaC++++,	, 	,r   c           	         ddl m} ddlm} ddlm} t          j                            d           t          dd          }t          j        
                    |j        d                   } ||          }d	D ]Y}|                    |
          } ||||ddd          \  }	}
t          |||	z  z
  |          dt          ||          z  k     sJ ZdD ]y}|                    |
          }g } |||dd||          \  }	}
t          j                            |||	z  z
            dt          j                            |          z  k     sJ zd S )Nr   smoothed_aggregation_solverr$   )fgmresiYO2   rB   r    r!   )VWFcycle:0yE>   )Mrtolmaxiteratol)AMLI)tolrL   rJ   	residuals)pyamgr?   scipy.sparse.linalgr%   r5   r@   r   randomseedr   randr6   r   r   linalgnorm)r7   r?   r%   r@   r(   r)   r   rG   rJ   r;   inforess               r   test_aspreconditionerz$TestMultilevel.test_aspreconditioner-   s   555555******''''''
	z"""HU+++INN171:&&((++$ 	F 	FE##%#00AbArBBBGAtq1Q3w++d;q"3E3E.EEEEEE 	D 	DE##%#00ACfQtR1LLLGAt9>>!ac'**T")..2C2C-CCCCCC	D 	Dr   c                 0   ddl m} ddlm}m} t
          j                            d           t          dd          }t
          j        	                    |j
        d                   } ||          }d|fD ]u}g }|                    |d	d
||          }	t          |||	z  z
  |          d
t          ||          z  k     sJ t          t          |||	z  z
  |          |d                    vdd|fD ]}g }|                    |d	d
||          }	t
          j                            |||	z  z
            d
t
          j                            |          z  k     sJ t          t
          j                            |||	z  z
            |d                    d S )Nr   r>   )r%   bicgstabirA   r    r!   r%   rI   rH   )rL   rO   rP   accelr\   cgs)rQ   r?   r5   r%   r\   r   rS   rT   r   rU   r6   solver   r   rV   rW   )
r7   r?   r%   r\   r(   r)   r   r]   rP   r;   s
             r   
test_accelzTestMultilevel.test_accelE   s   555555--------
	x   HU+++INN171:&&((++ BZ 	I 	IEIBDIUSSAq1Q3w++d;q"3E3E.EEEEEA!GR 8 8)B-HHHH !%2 	H 	HEIBDIUSSA9>>!ac'**T")..2C2C-CCCCC	q1Q3w 7 72GGGG		H 	Hr   c                  	   g }|                     t          j                               t          j        t          j        d                    |d         _        t          j        t          j        d                    |d         _        |                     t          j                               t          j        t          j        d                    |d         _        t          j        t          j        d                    |d         _        |                     t          j                               t          j        t          j        d                    |d         _        t          j        t          j        d	                    |d         _        |                     t          j                               t          j        t          j        d
                    |d         _        t          |d d                   }t          |
                    d          d           t          |
                    d          d           t          |
                    d          d           t          |
                    d          d           t          |d d                   }t          |
                    d          d           t          |
                    d          d           t          |
                    d          d           t          |
                    d          d           t          |d d                   }t          |
                    d          d           t          |
                    d          d           t          |
                    d          d           t          |
                    d          d           t          |d d                   }t          |
                    d          d           t          |
                    d          d           t          |
                    d          d           t          |
                    d          d           d S )N)
   rc   r   )rc   r   )r   r   r   )r      )rd   rd      )rd   re   )re   re   rd   rC   rF   g      ?rD   rN   rE   g      @gQ@gq=
ףp	@r   g(\@g
ףp=
@gHzG@)r0   r	   Levelr   r1   r   onesr(   Pr   cycle_complexity)r7   levelsmgs      r   test_cycle_complexityz$TestMultilevel.test_cycle_complexity]   s   &,..///'(9(9::q	'(8(899q	&,..///'88q	'88q	&,..///'88q	'88q	&,..///'88q	 fRaRj))R((s(33[AAAR((s(33[AAAR((v(66DDDR((s(33[AAA fRaRj))R((s(33[AAAR((s(33[AAAR((v(66DDDR((s(33[AAA fRaRj))R((s(33[AAAR((s(33[AAAR((v(66DDDR((s(33[AAA fRaRj))R((s(33[AAAR((s(33[AAAR((v(66DDDR((s(33[AAAAAr   N)__name__
__module____qualname__r<   rZ   ra   rl   r'   r   r   r   r      s[        , , ,6D D D0H H H0)B )B )B )B )Br   r   c                       e Zd Zd ZdS )TestComplexMultilevelc           
      \   g }|                     t          j        t          j        t          j        dd                                         |                     t          dd                     |                     t          dd                     d |D             }d |D             }|D ]z}d	D ]u}t          |          }t          j        |j        d
         |j	                  } |||          }t          ||z  |            |||          }t          ||z  |           v{d S )Nr   r   r   r    r!   r#   c                     g | ]
}|d |z  z   S )y        h㈵>r'   .0Gs     r   
<listcomp>zATestComplexMultilevel.test_coarse_grid_solver.<locals>.<listcomp>   s     ***q57***r   c                 L    g | ]!}d ||j                                         z   z  "S )g      ?)Tr   rt   s     r   rw   zATestComplexMultilevel.test_coarse_grid_solver.<locals>.<listcomp>   s,    :::qa!#--//)*:::r   )r+   r,   r-   r.   r/   r%   r   r   )r0   r   r1   r   r2   r3   r   r   r6   r   r   )r7   r8   r(   r9   r:   r)   r;   s          r   r<   z-TestComplexMultilevel.test_coarse_grid_solver   sA   V&rwryA'?'?@@AAAWT%000111WVE222333 +*E***::E:::  	, 	,AK 
, 
,&v..Iagaj888AaGG#AaC+++ AaGG#AaC++++
,	, 	,r   N)rm   rn   ro   r<   r'   r   r   rq   rq      s#        , , , , ,r   rq   )__doc__numpyr   numpy.testingr   r   r   scipyr   pyamg.galleryr   pyamg.multilevelr   r	   r   r   rq   r'   r   r   <module>r      s    " "     E E E E E E E E E E       ! ! ! ! ! ! A A A A A A A A- - -uB uB uB uB uBX uB uB uBp, , , , ,H , , , , ,r   