
    _-Ph.                       d Z ddlZddlZddlmZmZ ddlZddlm	Z	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 dd	lmZmZm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'm(Z( ddl)m*Z*  ej+        de           d Z, G d de          Z- G d de          Z. G d de          Z/ G d de          Z0 G d de          Z1dS )zTest relaxation.    N)TestCaseassert_almost_equal)spdiags
csr_matrix
bsr_matrixeye)SparseEfficiencyWarning)solve)RS)ruge_stuben_solver)poissonsprand
elasticity)gauss_seideljacobiblock_jacobiblock_gauss_seidel	jacobi_neschwarzsorgauss_seidel_indexed
polynomialgauss_seidel_negauss_seidel_nrjacobi_indexed	cf_jacobi	fc_jacobicf_block_jacobifc_block_jacobi)get_block_diagignorec                 ^    	  ||i | |j         }t          | d          # | $ r Y d S w xY w)Nz should throw an error)__name__	Exception)errorfargskwargsfnames        f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/relaxation/tests/test_relaxation.pycheck_raisesr+      s`    :	46 
5888999	    s   # ,,c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestCommonRelaxationc                    g | _         | j                             t          di f           | j                             t          di f           | j                             t          di f           | j                             t
          di f           | j                             t          di f           | j                             t          di f           | j                             t          di f           | j                             t          ddgfi f           | j                             t          ddgfi f           | j                             t          ddgfi f           d S )N )      ?   r   g333333?皙?)casesappendr   r   r   r   r   r   r   r   r   r   )selfs    r*   setUpzTestCommonRelaxation.setUp#   sE   

<R0111
62r*+++
<R0111
-r26777
9b"-...
7B+,,,
3+,,,
/1a&B?@@@
:c
}b9:::
>QF9b9:::::    c                     | j         D ]^\  }}}t          dd                              d          }t          j        |j        d         d          }d|z  } ||||g|R i | _d S )N   csrformatfloat32r   dtyper3   r   astypenparangeshaper5   methodr'   r(   Abxs          r*   test_single_precisionz*TestCommonRelaxation.test_single_precision0       $(J 	- 	- FD&U+++229==A	!'!*I666AAAF1a,T,,,V,,,,		- 	-r7   c                     | j         D ]^\  }}}t          dd                              d          }t          j        |j        d         d          }d|z  } ||||g|R i | _d S )Nr9   r;   r<   float64r   r?   rA   rF   s          r*   test_double_precisionz*TestCommonRelaxation.test_double_precision8   rL   r7   c                 4   | j         D ]\  }}}t          dd                              d          }t          j        |j        d         d          }t          j        d|j        d         z            ddd         }t          t          ||||g|R i | dS )	z%Non-contiguous x should raise errors.r9   r;   r<   rN   r   r?      N)	r3   r   rB   rC   rD   rE   zerosr+   
ValueErrorrF   s          r*   test_strided_xz#TestCommonRelaxation.test_strided_x@   s    $(J 	G 	G FD&U+++229==A	!'!*I666AQWQZ((1-AVQ1FtFFFvFFFF		G 	Gr7   c                 z   | j         D ]1\  }}}t          dd                              d          }t          j        |j        d         d          }d|z  }t          dd                              d          }t          j        |j        d         d          }d|z  }	t          t          ||||g|R i | t          t          |||	|g|R i | t          t          ||||g|R i | t          t          |||	|g|R i | t          t          |||	|g|R i | t          t          ||||g|R i | 3dS )	z.Mixed precision arguments should raise errors.r9   r;   r<   r>   r   r?   rN   N)r3   r   rB   rC   rD   rE   r+   	TypeError)
r5   rG   r'   r(   A32b32x32A64b64x64s
             r*   test_mixed_precisionz)TestCommonRelaxation.test_mixed_precisionH   s   $(J 	L 	L FD&$u---44Y??C)CIaL	:::Cc'C$u---44Y??C)CIaL	:::Cc'CFCcKDKKKFKKKFCcKDKKKFKKKFCcKDKKKFKKKFCcKDKKKFKKKFCcKDKKKFKKKFCcKDKKKFKKKK	L 	Lr7   c                 l   | j         D ]\  }}}t          dd                              d          }t          j        dd          }d|z  }t          j        dd          }d|z  }t          t          ||||g|R i | t          t          ||||g|R i | t          t          ||||g|R i | d	S )
z+Incorrect vector sizes should raise errors.r9   r;   r<   rN   r:   r?   r      N)r3   r   rB   rC   rD   r+   rS   )	r5   rG   r'   r(   rH   b4x4b5x5s	            r*   test_vector_sizesz&TestCommonRelaxation.test_vector_sizesZ   s    $(J 		I 		I FD&U+++229==A1I...BRB1I...BRBVQBHHHHHHHVQBHHHHHHHVQBHHHHHHHH		I 		Ir7   c                 4   | j         D ]\  }}}t          dd                              d          }|d d         }t          j        |j        d         d          }t          j        |j        d         d          }t          t          ||||g|R i | d S )	Nr9   r;   r<   rN      r   r?   r1   )	r3   r   rB   rC   rD   rE   onesr+   rS   rF   s          r*   test_non_square_matrixz+TestCommonRelaxation.test_non_square_matrixg   s    $(J 	G 	G FD&U+++229==A"1"A	!'!*I666A
)444AVQ1FtFFFvFFFF	G 	Gr7   N)
r#   
__module____qualname__r6   rK   rO   rT   r]   rd   rh   r/   r7   r*   r-   r-   "   s        ; ; ;- - -- - -G G GL L L$I I IG G G G Gr7   r-   c                   h    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S )TestRelaxationc                 *   d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j                  }|                                }t          j        ||j                  }|||z  z
  }t          |||dg           t          ||d|z  z
             |                                }t          |||d	d
g           t          ||d	|z  |z  z   |z
             |                                }t          |||d	d
g           t          ||d	|z  |z  z   |z
             |                                }t          |||g d           t          ||d|z  |z  |z  z
  ||z  z   d|z  z
             d|z  }t          |||dg           t          |d|z             d|z  }t          |||g d           t          |d|z  |z  |z  ||z  z   d|z  z
             d S )Nrf   rQ   r   r1   r;   r<   r?   gUUUUUUտUUUUUU?皙?ro   )gvi&$I¿      ?g       gvi&$I?r   )	r   rC   rg   rD   r@   copyrR   r   r   )r5   NrH   x0rJ   rI   rs          r*   test_polynomialzTestRelaxation.test_polynomials   s?   Q^bgajj[271::+>


Aq " " "Yq(((GGIIHQag&&&RZ1aZL)))ArIM1222GGII1aS"I&&&ArC!GaK/!3444GGII1aS"I&&&ArC!GaK/!3444GGII1a222333ArJNQ$6$::QUBQUJKKK F1aXJ'''Awqy)))bD1a222333Az!|A~a/!A#5!;<<<<<r7   c           	      	   d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |          }t          j        |                              t          j                  }t          |||           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||           t          |t          j	        g d	                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        
          }t          j	        dg|j
        
          }t          |||           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        
          }t          j	        g d|j
        
          }t          |||           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        
          }|                                }t          j	        g d|j
        
          }t          |||d           t          |d|z  dt          j	        g d          z  z              d S )Nr1   rQ   rn   r;   r<   r   rf           r0   rr   r0   rr   r0   r?   
   r_   r|         )      @g      &@g      /@rp   omegaUUUUUU?)r   rC   rg   rD   rB   rN   rR   r   r   arrayr@   rs   )r5   rt   rH   rJ   rI   x_copys         r*   test_jacobizTestRelaxation.test_jacobi   s-   Qrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKKq!QArx}}---Qrwqzz\BGAJJ;<jjj!Q " " "HQKKIaLL
++q!QArx88999Qrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKKq!QArx88999Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''HbT)))q!QArx}}---Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''H\\\111q!QArx(9(9(9::;;;Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''H\\\111q!Qg&&&&A#FNWRX>O>O>O5P5P-PP	R 	R 	R 	R 	Rr7   c           
        
 g }dD ]t}|                     t          dt          j        |          z  t          j        |           t          j        |           gg d||                                                     |                     t          j        ||f          d                                                    t          t          j        	                    ||                    }|                     ||j
                                        z             t          |dz  |dz  d          t          |dz  |dz            z   }|                     ||j
                                        z             v|D ]

fdt          d
j        d         dz             D             }t          j        
j        d                                       t          j                  }|dz  }t'          
||           |D ]w}
                    ||f          }t          j        |j        d                                       t          j                  }	t'          ||	|           t+          |	|           xd S )	Nr1   rQ   rf   r:   r_      r|   rQ   rn   r   333333?c                 <    g | ]}j         d          |z  d k    |S r   rE   .0nrH   s     r*   
<listcomp>z2TestRelaxation.test_jacobi_bsr.<locals>.<listcomp>   s-    JJJqagaj1n6I6I6I6I6Ir7   r1   	blocksize)r4   r   rC   rg   tocsrr   linear_elasticityr   randomrandT	conjugater   r   rangerE   rD   rB   rN   r   tobsrr   )r5   r3   rt   Cdivisorsx_csrrI   DBx_bsrrH   s             @r*   test_jacobi_bsrzTestRelaxation.test_jacobi_bsr   s8   ' 	, 	,ALL!BGAJJ,bgajj[!I!+Q3 338577< < <LL5q!f==a@FFHHIII29>>!Q//00ALL13==??*+++qsAaC%%AaC15ALL13==??*++++ 	2 	2AJJJJE!QWQZ\22JJJ  Iagaj))00<<EqA1eQ 2 2GGq!fG--	!'!*--44RZ@@q%####E51111	2	2 	2r7   c           
         g d}g }dD ]t}|                     t          dt          j        |          z  t          j        |           t          j        |           gg d||                                                     |                     t          j        ||f          d                                                    t          t          j        	                    ||                    }|                     ||j
                                        z             t          |dz  |dz  d          t          |dz  |dz            z   }|                     ||j
                                        z             v|D ]|D ]}fdt          dj        d         dz             D             }t          j        j        d                                       t          j                  }|dz  }t'          |||	           |D ]y}	                    |	|	f
          }
t          j        |
j        d                                       t          j                  }t'          |
|||	           t+          ||           zd S )Nforwardbackward	symmetricr   rQ   rn   r   r   c                 <    g | ]}j         d          |z  d k    |S r   r   r   s     r*   r   z8TestRelaxation.test_gauss_seidel_bsr.<locals>.<listcomp>   s-    NNN1!'!*q.A:M:MQ:M:M:Mr7   r1   sweepr   )r4   r   rC   rg   r   r   r   r   r   r   r   r   r   r   r   rE   rD   rB   rN   r   r   r   )r5   sweepsr3   rt   r   r   r   r   rI   r   r   r   rH   s               @r*   test_gauss_seidel_bsrz$TestRelaxation.test_gauss_seidel_bsr   sa   555' 	, 	,ALL!BGAJJ,bgajj[!I!+Q3 338577< < <LL5q!f==a@FFHHIII29>>!Q//00ALL13==??*+++qsAaC%%AaC15ALL13==??*++++ 	6 	6A 6 6NNNNaA 6 6NNN  	!'!*--44RZ@@1HQq6666! 6 6A1a&11AIagaj1188DDE E1E::::'u5555	66	6 	6r7   c                    t           j                            d           g }|                    t	          dd                     |                    t	          dd                     t           j                            dd          }|                    t          |j                            |                               d }|D ]+}t           j                            |j	        d         d          }t           j                            |j	        d         d          }|
                                }t          |||dd	
           t          | ||||dd	
                     |
                                }t          |||dd
           t          | ||||dd
                     |
                                }t          |||dd
           t          | ||||dd
                     -d S )Nr   r9   r;   r<   r:   r:   r:   c                 Z   |                                  } t          j        | d          }t          j        t          j        |                     }t          j        | d          }t          |          D ]}|dk    r*t          ||z   ||                    |          z
            }2|dk    r*t          ||z   ||                    |          z
            }bt          ||z   ||                    |          z
            }t          ||z   ||                    |          z
            }|S Nro   kr1   r   r   toarrayrC   trildiagtriur   r
   dot	rH   rJ   rI   
iterationsr   Lr   U_is	            r*   goldz3TestRelaxation.test_gauss_seidel_gold.<locals>.gold     		AR   A

##AQAJ'' 5 5I%%a!ea!%%((l44AAj((a!ea!%%((l44AAa!ea!%%((l44Aa!ea!%%((l44AAHr7   r1   r   r   r   r   r   )rC   r   seedr4   r   r   r   r   r   rE   rs   r   r   r5   r3   tempr   rH   rI   rJ   r   s           r*   test_gauss_seidel_goldz%TestRelaxation.test_gauss_seidel_gold   s   
	qWT%000111WVE222333y~~a##Z

4 0 011222	 	 	"  	< 	<A	qwqz1--A	qwqz1--AVVXXFAqQi@@@@4461.7$9 $9 $9 : : : VVXXFAqQjAAAA4461.8$: $: $: ; ; ; VVXXFAqQkBBBB4461.9$; $; $; < < < <#	< 	<r7   c                    d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||d	
           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||d	
           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
                  }t          j	        dg|j
                  }t          |||           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
                  }t          j	        g d|j
                  }t          |||           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |          }t          j        |          }t          |||dd           t          j                            ||z  d          }t          j        |          }t          |||dd	           t          j                            ||z  d          }|dk     sJ |dk     sJ t          ||           d S )Nr1   rQ   rn   r;   r<   r   rf   r0   g      ?g      ?r   r   g      ?g      ?r0   r?   r|   r_   r}   )r   g     +@g     5@d      r   r   g{Gz?)r   rC   rg   rD   rB   rN   rR   r   r   r   r@   linalgnormr5   rt   rH   rJ   rI   resid1resid2s          r*   test_gauss_seidel_csrz$TestRelaxation.test_gauss_seidel_csr+  s   Qrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKKQ1Arx}}---Qrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKKQ1Arx(C(C(CDDEEEQrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKKQ1J////Arx}}---Qrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKKQ1J////Arx(C(C(CDDEEEQrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''HbT)))Q1Arx}}---Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''H\\\111Q1Arx(E(E(EFFGGG Qrwqzz\BGAJJ;<jjj!Q " " "GAJJHQKKQ1I>>>>!Q''GAJJQ1J????!Q''}}}}}}}}FF+++++r7   c                 z	   d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||dg           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||g d           t          |t          j	        g d	                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||g d
d           t          |t          j	        g d	                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||g dd           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |          }t          j        |          }t          |||ddg           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |          }t          j        |          }t          |||ddg           t          |t          j	        g d                     d S )Nr1   rQ   rn   r;   r<   r   rf   r   r1   rQ   r   rQ   r1   r   r   r   r   r:   r0   rr   rr   r0   r0   rr   rr   rr   )
r   rC   rg   rD   rB   rN   rR   r   r   r   r5   rt   rH   rJ   rI   s        r*   test_gauss_seidel_indexedz(TestRelaxation.test_gauss_seidel_indexedl  s   Qrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKKQ1qc***Arx}}---Qrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKKQ1iii000Arx(C(C(CDDEEEQrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKKQ1iiizBBBBArx(C(C(CDDEEEQrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKKQ1iiizBBBBArx(C(C(CDDEEEQrwqzz\BGAJJ;<jjj!Q " " "GAJJHQKKQ1q!f---Arx(D(D(DEEFFFQrwqzz\BGAJJ;<jjj!Q " " "GAJJHQKKQ1q!f---Arx(@(@(@AABBBBBr7   c                    d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||dg           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||g d           t          |t          j	        g d	                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||g d
           t          |t          j	        g d	                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |          }t          j        |          }t          |||ddg           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |          }t          j        |          }t          |||ddg           t          |t          j	        g d                     d S )Nr1   rQ   rn   r;   r<   r   rf   r   r{   r   r:   r   r   )
r   rC   rg   rD   rB   rN   rR   r   r   r   r   s        r*   test_jacobi_indexedz"TestRelaxation.test_jacobi_indexed  sS   Qrwqzz\BGAJJ;<jjjq( ( (IaLL
++HQKKq!Q$$$Arx}}---Qrwqzz\BGAJJ;<jjjq( ( (IaLL
++HQKKq!Q			***Arx88999Qrwqzz\BGAJJ;<jjjq( ( (IaLL
++HQKKq!Q			***Arx88999Qrwqzz\BGAJJ;<jjjq( ( (GAJJHQKKq!QA'''Arx(<(<(<==>>>Qrwqzz\BGAJJ;<jjj!Q " " "GAJJHQKKq!QA'''Arx(@(@(@AABBBBBr7   c                 	   d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |          }t          j        |                              t          j                  }t          |||           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||           t          |t          j	        g d	                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        
          }t          j	        dg|j
        
          }t          |||           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        
          }t          j	        g d|j
        
          }t          |||           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        
          }|                                }t          j	        g d|j
        
          }t          |||d           d|z  dt          j	        g d          z  z   }t          ||           d S )Nr1   rQ   rn   r;   r<   r   rf   gUUUUUUſggDDDDDD?)皙?gffffff?皙?r?   r|   r_   r}   )g?g?g"@rp   r   r   )r   rC   rg   rD   rB   rN   rR   r   r   r   r@   rs   )r5   rt   rH   rJ   rI   r   xtrues          r*   test_jacobi_nezTestRelaxation.test_jacobi_ne  s7   Qrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKK!QArx}}---Qrwqzz\BGAJJ;<jjj!Q " " "HQKKIaLL
++!QArx(B(B(BCCDDDQrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKK!QArx(=(=(=>>???Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''HbT)))!QArx}}---Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''H\\\111!QArx(G(G(GHHIIIQrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''H\\\111!Q))))2Q2Q2Q)R)R!RRAu%%%%%r7   c                    dD ]<t          dt          j                  z  t          j                   t          j                   gg d                                          }fdt	          ddz             D             }t          j                                      t          j                  }|dz  }t          |||           |D ]l}|	                    ||f          }t          j                                      t          j                  }t          |||           t          ||           m>d S )Nr   rQ   rn   c                 &    g | ]}|z  d k    |S r   r/   r   r   rt   s     r*   r   z;TestRelaxation.test_gauss_seidel_ne_bsr.<locals>.<listcomp>  "    ???aAEQJJJJJr7   r1   r   )r   rC   rg   r   r   rD   rB   rN   r   r   r   	r5   rH   r   r   rI   r   r   r   rt   s	           @r*   test_gauss_seidel_ne_bsrz'TestRelaxation.test_gauss_seidel_ne_bsr  s8   ' 	2 	2A271::

{RWQZZK@***1 #egg  @???5AaC==???HIaLL''
33EqAAua((( 2 2GGq!fG--	!++BJ775!,,,#E51111	2	2 	2r7   c                    t           j                            d           g }|                    t	          dd                     |                    t	          dd                     t           j                            dd          }|                    t          |j                            |                               d }|D ]+}t           j                            |j	        d         d          }t           j                            |j	        d         d          }|
                                }t          |||dd	
           t          | ||||dd	
                     |
                                }t          |||dd
           t          | ||||dd
                     |
                                }t          |||dd
           t          | ||||dd
                     -d S )Nr   r9   r;   r<   r   r:   c                    |                                  } |                     | j                  }t          j        |d          }t          j        |d          }t          |          D ]}|dk    rB|| j                            t          |||                     |          z
                      z   }K|dk    rB|| j                            t          |||                     |          z
                      z   }|| j                            t          |||                     |          z
                      z   }|| j                            t          |||                     |          z
                      z   }|S Nr   r   r   r   )r   r   r   rC   r   r   r   r
   )	rH   rJ   rI   r   r   AAr   r   r   s	            r*   r   z5TestRelaxation.test_gauss_seidel_ne_new.<locals>.gold  s@   		AqsBa   Aa   AJ'' > >I%%ACGGE!a!%%((l$<$<===AAj((ACGGE!a!%%((l$<$<===AAACGGE!a!%%((l$<$<===AACGGE!a!%%((l$<$<===AAHr7   r1   r   r   r   r   )rC   r   r   r4   r   r   r   r   r   rE   rs   r   r   r   s           r*   test_gauss_seidel_ne_newz'TestRelaxation.test_gauss_seidel_ne_new
  s   
	qWT%000111WVE222333y~~a##Z

4 0 011222	 	 	"  	< 	<A	qwqz1--A	qwqz1--AVVXXFAq!CCCC4461.7$9 $9 $9 : : : VVXXFAq!DDDD4461.8$: $: $: ; ; ; VVXXFAq!EEEE4461.9$; $; $; < < < <#	< 	<r7   c                    d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              t          j                  }t          j        |          }t          |||           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        	          }t          j        ||j
        	          }t          |||d
           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        	          }t          j        ||j
        	          }t          |||d
           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        	          }t          j	        dg|j
        	          }t          |||           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        	          }t          j	        dg|j
        	          }t          |||d
           t          |t          j	        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        ||j
        	          }t          j	        g d|j
        	          }t          |||           t          |t          j	        g d                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |          }t          j        |          }t          |||dd           t          j                            ||z  d          }t          j        |          }t          |||dd
           t          j                            ||z  d          }|dk     sJ |dk     sJ t          ||           d S )Nr1   rQ   rn   r;   r<   r   rf   g?g?r   r?   r   r   r   r   g333333?r|   r_   r}   )皙ٿr   g-@r   r   r   r   rq   )r   rC   rg   rD   rB   rN   rR   r   r   r   r@   r   r   r   s          r*   test_gauss_seidel_ne_csrz'TestRelaxation.test_gauss_seidel_ne_csr:  s   Qrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKK1a   Arx}}---Qrwqzz\BGAJJ;<jjj!Q " " "IaLL
++HQKK1a   Arx(>(>(>??@@@Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''HQag&&&1az2222Arx}}---Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''HQag&&&1az2222Arx(=(=(=>>???Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''HbT)))1a   Arx}}---Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''HbT)))1az2222Arx}}---Qrwqzz\BGAJJ;<jjj!Q " " "Iaqw'''H\\\1111a   Arx(F(F(FGGHHH Qrwqzz\BGAJJ;<jjj!Q " " "GAJJHQKK1aCyAAAA!Q''GAJJ1aCzBBBB!Q''||||||||FF+++++r7   c                    dD ]<t          dt          j                  z  t          j                   t          j                   gg d                                          }fdt	          ddz             D             }t          j                                      t          j                  }|dz  }t          |||           |D ]l}|	                    ||f          }t          j                                      t          j                  }t          |||           t          ||           m>d S )Nr   rQ   rn   c                 &    g | ]}|z  d k    |S r   r/   r   s     r*   r   z;TestRelaxation.test_gauss_seidel_nr_bsr.<locals>.<listcomp>  r   r7   r1   r   )r   rC   rg   r   r   rD   rB   rN   r   r   r   r   s	           @r*   test_gauss_seidel_nr_bsrz'TestRelaxation.test_gauss_seidel_nr_bsr  s8   ' 	2 	2A271::

{RWQZZK@"

Aq* **/%''  @???5AaC==???HIaLL''
33EqAAua((( 2 2GGq!fG--	!++BJ775!,,,#E51111	2	2 	2r7   c                    t           j                            d           g }|                    t	          dd                     |                    t	          dd                     t           j                            dd          }|                    t          |                     t           j                            dd          }|                    t          |                     t           j                            dd          }|                    t          |                     d	 }|D ]+}t           j                            |j        d         d          }t           j                            |j        d         d          }|                                }t          |||dd
           t          | ||||dd
                     |                                }t          |||dd           t          | ||||dd                     |                                }t          |||dd           t          | ||||dd                     -d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |          }t          j        |          }t          |||dd
           t           j                            ||z  d          }	t          j        |          }t          |||dd           t           j                            ||z  d          }
|	dk     sJ |
dk     sJ t          |	|
           d S )Nr   r9   r;   r<   r   r1   rQ   r:   c                    |                                  } |                                 j        }|                    |           }t	          j        |d          }t	          j        |d          }t          |          D ]}	|dk    r=|t          ||                    ||                     |          z
                      z   }F|dk    r=|t          ||                    ||                     |          z
                      z   }|t          ||                    ||                     |          z
                      z   }|t          ||                    ||                     |          z
                      z   }|S r   	r   conjr   r   rC   r   r   r   r
   
rH   rJ   rI   r   r   AHr   r   r   r   s
             r*   r   z1TestRelaxation.test_gauss_seidel_nr.<locals>.gold  sE   		ABBa   Aa   AJ'' = =I%%U1bffQq\&:&:;;<AAj((U1bffQq\&:&:;;<AAU1bffQq\&:&:;;<AU1bffQq\&:&:;;<AAHr7   r   r   r   r   r   rn   r   rq   )rC   r   r   r4   r   r   r   rE   rs   r   r   r   rg   rR   r   r   )r5   r3   r   r   rH   rI   rJ   r   rt   r   r   s              r*   test_gauss_seidel_nrz#TestRelaxation.test_gauss_seidel_nr  sY   
	qWT%000111WVE222333y~~a##Z%%&&&y~~a##Z%%&&&y~~a##Z%%&&&	 	 	$  	< 	<A	qwqz1--A	qwqz1--AVVXXFAq!CCCC4461.7$9 $9 $9 : : : VVXXFAq!DDDD4461.8$: $: $: ; ; ; VVXXFAq!EEEE4461.9$; $; $; < < < <
 Qrwqzz\BGAJJ;<JJ1U4 4 4GAJJHQKK1aCyAAAA!Q''GAJJ1aCzBBBB!Q''||||||||FF+++++r7   c                    t           j                            d           g }|                    t	          dd                     |                    t	          dd                     t	          dd          }d|j        d<   d|j        d	<   d|j        d
<   |                    |           t           j                            d	d	          }|                    t          |j        	                    |                               t           j                            dd          }|                    t          |j        	                    |                               t           j                            dd          }|                    t          |j        	                    |                               dd}|D ]+}t           j                            |j
        d         d	          }t           j                            |j
        d         d	          }|                                }t          |||d	d           t          | ||||d	d                     |                                }t          |||d	d           t          | ||||d	d                     |                                }t          |||d	d           t          | ||||d	d                     -d S )Nr   r9   r;   r<   r      r   g      $@g      r1   rf   rQ   r:   r   c           
          t                       j        d         } fdt          |          D             }g }t          t          |                    D ]~} ||         d d f                                         }	|	d d ||         f                                         }	t          j                            |	          }
|	                    |
           |dk    r"t          j        t          |                    }n|dk    r't          j        t          |          dz
  dd          }nc|dk    r]t          j        t          |                    }t          j        t          |          dz
  dd          }t          j        ||f          }t          |          D ]L}|D ]G}||         }t          j        ||         ||          |d d f         |z  z
            ||         z   ||<   HM|S )Nr   c                 `    g | ]*}j         j        |         j        |d z                     +S r1   indicesindptrr   irH   s     r*   r   zBTestRelaxation.test_schwarz_gold.<locals>.gold.<locals>.<listcomp>  5    HHH!18A;qx!}45HHHr7   r   r   r1   ro   r   )r   rE   r   lentocscr   scipyr   pinvr4   rC   rD   concatenater   )rH   rJ   rI   r   r   r   
subdomains	subblocksr  blkAblkAinvr   indices1indices2_jsis   `               r*   r   z.TestRelaxation.test_schwarz_gold.<locals>.gold  s   1A
A
 IHHHuQxxHHH  I3z??++ * **Q-*+2244AAAz!},-5577,++D11  ))))	!!)C
OO44*$$)C
OOA$5r2>>+%%9S__559S__Q%6B??.(H)=>> J'' O O  O OA#ABF9Q<!B%!BE(1*2DFF2NAbEEO Hr7   r   r   r   )r   )rC   r   r   r4   r   datar   r   r   r   rE   rs   r   r   )r5   r3   rH   r   r   rI   rJ   r   s           r*   test_schwarz_goldz TestRelaxation.test_schwarz_gold  s   
	qWT%000111WVE222333F5)))q	q	q	Qy~~a##Z

4 0 011222y~~a##Z

4 0 011222y~~a##Z

4 0 011222 	  	  	  	D  	< 	<A	qwqz1--A	qwqz1--AVVXXFAq!;;;;4461.7$9 $9 $9 : : : VVXXFAq!<<<<4461.8$: $: $: ; ; ; VVXXFAq!====4461.9$; $; $; < < < <#	< 	<r7   N)r#   ri   rj   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r/   r7   r*   rl   rl   r   s       = = =B1R 1R 1Rf2 2 226 6 66.< .< .<`?, ?, ?,B/C /C /Cb'C 'C 'CR1& 1& 1&f2 2 2".< .< .<`G, G, G,R2 2 2$E, E, E,NJ< J< J< J< J<r7   rl   c                   V    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S )TestComplexRelaxationc                    d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }t          j        |                              |j                  }t          |||           t          |t          j
        dg                     t          j
        dg          }t          j
        d	g          }d
}t          ||||           t          |t          j
        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }t          j        |                              |j                  }|d|z  z   }t          j
        g d          }t          |||           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }t          j        |                              |j                  }t          j
        g d          }t          |||           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }t          j
        dg                              |j                  }t          |||           t          |t          j
        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }t          j
        g d                              |j                  }t          j
        g d          }t          |||           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }|                                }t          j
        g d                              |j                  }d|z  dt          j
        g d          z  z   }t          |||d           t          ||           d S )Nr1   rQ   rn   r;   r<                 ?r         ?      ?y            ?y      @      r   g      rf   ry   )      ?      ?r  r  r|         @      r}   )      @       y      @      y       @      r   rp   )r   rC   rg   r  rD   rB   r@   rR   r   r   r   rs   )r5   rt   rH   rJ   rI   r   solnr   s           r*   r   z!TestComplexRelaxation.test_jacobi+  s   Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((HQKKqw''q!QArx}}---Hj\""Hk]##q!Qe$$$$Arx//000Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%HQKKqw''IaLL((QJx((q!QAt$$$Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((QJHQKKqw''x:::;;q!QAt$$$Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((HbTNN!!!'**q!QArx55666Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((QJH\\\""))!'22x66677q!QAt$$$Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((QJH\\\""))!'22v~1O1O1O(P(P PPq!Qg&&&&At$$$$$r7   c           	         g }dD ]}t          dt          j        |          z  t          j        |           t          j        |           gg d||                                          }|j        dt          j                            |j        j        d                   z  z   |_        |                    |           |                    dt          j
        ||f          d                                         z             t          t          j                            ||          dt          j                            ||          z  z             }|                    ||j                                        z             t          |dz  |dz  d          dt          |dz  |dz  d          z  z   t          |dz  |dz            z   }|                    ||j                                        z             |D ]}|j        d         fdt!          d	d	z             D             }t          j                  dt          j                                      z  z                       |j                  }|                                }|dz  }t+          |||           |D ]O}	|                    |	|	f
          }
|                                }t+          |
||           t/          ||           Pd S )Nr   rQ   rn           MbP?r   r  r   c                 &    g | ]}|z  d k    |S r   r/   r   r  r   s     r*   r   z9TestComplexRelaxation.test_jacobi_bsr.<locals>.<listcomp>  r   r7   r1   r   )r   rC   rg   r   r  r   r   rE   r4   r   r   r   r   r   r   r   r   rD   rB   r@   rs   r   r   r   )r5   r3   rt   r   rH   r   ru   r   rI   r   r   r   r   s               @r*   r   z%TestComplexRelaxation.test_jacobi_bsrq  s   ' 	, 	,A271::

{RWQZZK@***1 #egg Vi	qv|A(H(HHHAFLLOOOLLj:Aq6BB1EKKMMMNNN29>>!Q//$ry~~a7K7K2KKLLALL13==??*+++qsAaC%%VAaC1c-B-B(BBAaC1ALL13==??*++++ 	2 	2A
A????5AaC==???H)A,,29>>!+=+=!==EEagNNBGGIIEqA1eQ 2 2GGq!fG--		q%####E51111	2	2 	2r7   c           	         g d}g }dD ]}t          dt          j        |          z  t          j        |           t          j        |           gg d||                                          }|j        dt          j                            |j        j        d                   z  z   |_        |                    |           |                    dt          j
        ||f          d                                         z             t          t          j                            ||          dt          j                            ||          z  z             }|                    ||j                                        z             t          |dz  |dz  d          dt          |dz  |dz  d          z  z   t          |dz  |dz            z   }|                    ||j                                        z             |D ]}|j        d         |D ]}fd	t!          d
d
z             D             }t          j                  dt          j                                      z  z                       |j                  }|                                }	|	dz  }
t+          ||	|
|           |D ]Q}|                    ||f          }|                                }t+          |||
|           t/          ||	           Rd S )Nr   r   rQ   rn   r  r   r  r   c                 &    g | ]}|z  d k    |S r   r/   r   s     r*   r   z?TestComplexRelaxation.test_gauss_seidel_bsr.<locals>.<listcomp>  s"    CCC!A

A


r7   r1   r   r   )r   rC   rg   r   r  r   r   rE   r4   r   r   r   r   r   r   r   r   rD   rB   r@   rs   r   r   r   )r5   r   r3   rt   r   rH   r   r   ru   r   rI   r   r   r   r   s                 @r*   r   z+TestComplexRelaxation.test_gauss_seidel_bsr  s   555' 	, 	,A271::

{RWQZZK@***1 #egg Vi	qv|A(H(HHHAFLLOOOLLj:Aq6BB1EKKMMMNNN29>>!Q//$ry~~a7K7K2KKLLALL13==??*+++qsAaC%%VAaC1c-B-B(BBAaC1ALL13==??*++++ 	6 	6A
A 6 6CCCCuQ!}}CCCillYry~~a/A/A%AAII!'RR		1HQq6666! 6 6A1a&11AGGIIE E1E::::'u5555	66	6 	6r7   c           
      b   t           j                            d           g }t          dd          }|j        dt           j                            |j        j        d                   z  z   |_        |                    |           t          dd          }|j        dt           j                            |j        j        d                   z  z   |_        |                    |           t           j                            dd          dt           j                            dd          z  z   }|                    t          |	                                j
                            |                               t           j                            d	d	          dt           j                            d	d	          z  z   }|                    t          |	                                j
                            |                               t           j                            d
d
          dt           j                            d
d
          z  z   }|                    t          |	                                j
                            |                               d }|D ]}|j        d         }t           j                            |d          dt           j                            |d                              |j                  z  z   }t           j                            |d          dt           j                            |d                              |j                  z  z   }|                                }t          |||d           t!          | ||||d                     d S )Nr   r9   r;   r<   r  r   r1   r  rQ   r:   c           
          t                       j        d         } fdt          |          D             }g }t          t          |                    D ]~} ||         d d f                                         }|d d ||         f                                         }t          j                            |          }	|	                    |	           t          |          D ]f}
t          t          |                    D ]G}||         }t          j        ||         ||          |d d f         |z  z
            ||         z   ||<   Hg|S )Nr   c                 `    g | ]*}j         j        |         j        |d z                     +S r   r   r  s     r*   r   zITestComplexRelaxation.test_schwarz_gold.<locals>.gold.<locals>.<listcomp>  r  r7   )r   rE   r   r  r  r   r  r   r  r4   rC   r   )rH   rJ   rI   r   r   r
  r  r  r  r  r  r  s   `           r*   r   z5TestComplexRelaxation.test_schwarz_gold.<locals>.gold  sa   1A
A
 IHHHuQxxHHH  I3z??++ * **Q-*+2244AAAz!},-5577,++D11  )))) J'' O Os:// O OA#ABF9Q<!B%!BE(1*2DFF2NAbEEO Hr7   )r   )rC   r   r   r   r  r   rE   r4   r   r   r   r   rB   r@   rs   r   r   	r5   r3   rH   r   r   r   rI   rJ   r   s	            r*   r  z'TestComplexRelaxation.test_schwarz_gold  s   
	qD''')BINN16<?$D$DDDQF5))))BINN16<?$D$DDDQy~~a##d29>>!Q+?+?&??Z		 1 1$ 7 788999y~~a##d29>>!Q+?+?&??Z		 1 1$ 7 788999y~~a##d29>>!Q+?+?&??Z		 1 1$ 7 788999	 	 	0  
	E 
	EA
A	q!$$RY^^Aq))00999:A	q!$$RY^^Aq))00999:A VVXXFAq!****4461#C#C#CDDDD
	E 
	Er7   c                    t           j                            d           g }t          dd          }|j        dt           j                            |j        j        d                   z  z   |_        |                    |           t          dd          }|j        dt           j                            |j        j        d                   z  z   |_        |                    |           t           j                            dd          dt           j                            dd          z  z   }|                    t          |	                                j
                            |                               d	 }|D ]}|j        d         }t           j                            |d
          dt           j                            |d
                              |j                  z  z   }t           j                            |d
          dt           j                            |d
                              |j                  z  z   }|                                }t          |||d
d           t!          | ||||d
d                     |                                }t          |||d
d           t!          | ||||d
d                     |                                }t          |||d
d           t!          | ||||d
d                     |                                }t#          |||t          j        |j        d                   d
d           t!          | ||||d
d                     |                                }t#          |||t          j        |j        d                   d
d           t!          | ||||d
d                     |                                }t#          |||t          j        |j        d                   d
d           t!          | ||||d
d                     d S )Nr   r9   r;   r<   r  r   r:   r  c                 Z   |                                  } t          j        | d          }t          j        t          j        |                     }t          j        | d          }t          |          D ]}|dk    r*t          ||z   ||                    |          z
            }2|dk    r*t          ||z   ||                    |          z
            }bt          ||z   ||                    |          z
            }t          ||z   ||                    |          z
            }|S r   r   r   s	            r*   r   z9TestComplexRelaxation.test_gauss_seidel_new.<locals>.gold  r   r7   r1   r   r   r   r   )r   r   r   )rC   r   r   r   r  r   rE   r4   r   r   r   r   rB   r@   rs   r   r   r   rD   r&  s	            r*   test_gauss_seidel_newz+TestComplexRelaxation.test_gauss_seidel_new  sB   
	qD''')BINN16<?$D$DDDQF5))))BINN16<?$D$DDDQy~~a##d29>>!Q+?+?&??Z		 1 1$ 7 788999	 	 	"  '	< '	<A
A	q!$$tBINN1a,@,@,G,G,P,P'PPA	q!$$tBINN1a,@,@,G,G,P,P'PPA VVXXFAqQi@@@@4461.7$9 $9 $9 : : : VVXXFAqQjAAAA4461.8$: $: $: ; ; ; VVXXFAqQkBBBB4461.9$; $; $; < < <
 VVXXF Aq")AGAJ2G2G,-Y@ @ @ @4461.7$9 $9 $9 : : : VVXXF Aq")AGAJ2G2G,-ZA A A A4461.8$: $: $: ; ; ; VVXXF Aq")AGAJ2G2G,-[B B B B4461.9$; $; $; < < < <M'	< '	<r7   c                 `   d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }t          j        |                              |j                  }t          |||           t          |t          j
        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }t          j
        g d	          }|d|z  z   }t          j        |                              |j                  }t          |||           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }t          j        |                              |j                  }t          |||d
           t          |t          j
        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }t          j
        g d          }|d|z  z   }t          j        |                              |j                  }t          |||d
           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }t          j
        dg                              |j                  }t          |||           t          |t          j
        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j
        g d          }t          j        |                              |j                  }|d|z  z   }t          j
        g d                              |j                  }t          |||           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }t          j        |                              |j                  }t          |||dd           t          j                            ||z  d          }t          j        |                              |j                  }|d|z  z   }t          |||dd
           t          j                            ||z  d          }|dk     sJ |dk     sJ t          ||           d S )Nr1   rQ   rn   r;   r<   r  r   rf   r   r   r   r   r|   r  )r  y      @      y     &@      $r}   r   r   r   r   gQ?)r   rC   rg   r  rD   rB   r@   rR   r   r   r   r   r   r5   rt   rH   rJ   rI   r  r   r   s           r*   r   z+TestComplexRelaxation.test_gauss_seidel_csr7  s   Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((QJHQKKqw''Q1Arx}}---Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((QJx33344d4iHQKKqw''Q1At$$$Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((QJHQKKqw''Q1J////Arx}}---Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((QJx33344d4iHQKKqw''Q1J////At$$$Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((HbTNN!!!'**Q1Arx55666Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%x???@@IaLL((QJH\\\""))!'22Q1At$$$ Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%GAJJag&&QJHQKKqw''Q1I>>>>!Q''GAJJag&&QJQ1J????!Q''}}}}}}}}FF+++++r7   c                 V   d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }t          j        |                              |j                  }t          |||           t          |t          j
        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j
        g d	          }t          j        |                              |j                  }t          j        |                              |j                  }|d|z  z   }t          |||           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j
        g d
          }t          j        |                              |j                  }|d|z  z   }t          j        |                              |j                  }t          |||           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }t          j
        dg                              |j                  }t          |||           t          |t          j
        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j
        g d          }t          j        |                              |j                  }|d|z  z   }t          j
        g d                              |j                  }t          |||           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }t          j
        g d                              |j                  }|                                }t          j
        g d          }d|z  d|z  z   }t          |||d           t          ||           d S )Nr1   rQ   rn   r;   r<   r  r   rf   r   )y??yffffff?ffffff?y??r|   r  )ywwwwww??ywwwwww? @y@DDDDDDr}   r   rp   r   )r   rC   rg   r  rD   rB   r@   rR   r   r   r   rs   )r5   rt   rH   rJ   rI   r  r   solnparts           r*   r   z$TestComplexRelaxation.test_jacobi_ne  so   Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((HQKKqw''!QArx}}---Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%x22233HQKKqw''IaLL((QJ!QAt$$$Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%xKKKLLIaLL((QJHQKKqw''!QAt$$$Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((HbTNN!!!'**!QArx55666Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%x . . . / / IaLL((QJH\\\""))!'22!QAt$$$Qrwqzz\BGAJJ;<jjj!Q " " "$qv+%IaLL((QJH\\\""))!'228 2 2 2 3 3 v~ 00!Q))))At$$$$$r7   c                 0  	 dD ]	t          dt          j        	          z  t          j        	           t          j        	           gg d		                                          }|j        dt          j                            |j        j        d                   z  z   |_        	fdt          d	dz             D             }t          j	        	          dt          j                            	          z  z   
                    |j                  }|                                }|dz  }t          |||           |D ]O}|                    ||f          }|                                }t          |||           t          ||           Pd S )	Nr   rQ   rn   r  r   c                 &    g | ]}|z  d k    |S r   r/   r   s     r*   r   zBTestComplexRelaxation.test_gauss_seidel_ne_bsr.<locals>.<listcomp>  r   r7   r1   r   )r   rC   rg   r   r  r   r   rE   r   rD   rB   r@   rs   r   r   r   
r5   rH   r   r   r   rI   r   r   
x_bsr_temprt   s
            @r*   r   z.TestComplexRelaxation.test_gauss_seidel_ne_bsr  s   ' 	7 	7A271::

{RWQZZK@***1 #egg Vi	qv|A(H(HHHAF????5AaC==???HYq\\IbinnQ.@.@$@@HHQQEJJLLEqAAua((( 7 7GGq!fG--"ZZ\\
:q111#J6666	7	7 	7r7   c                 B   t           j                            d           g }t          dd          }|j        dt           j                            |j        j        d                   z  z   |_        |                    |           t          dd          }|j        dt           j                            |j        j        d                   z  z   |_        |                    |                    d                     t           j                            d	d	          d
t           j                            d	d	          z  z   }|                    t          |j
                            |                               d }|D ]}|j        d         }t           j                            |d          d
t           j                            |d                              |j                  z  z   }t           j                            |d          d
t           j                            |d                              |j                  z  z   }|                                }t          |||dd           t!          | ||||dd                     |                                }t          |||dd           t!          | ||||dd                     |                                }t          |||dd           t!          | ||||dd                     d S )Nr   r9   r;   r<   r  r   rQ   rQ   r   r:   r  c                    |                                  } |                                 j        }|                     |          }t	          j        |d          }t	          j        |d          }t          |          D ]}	|dk    r=||                    t          |||                     |          z
                      z   }F|dk    r=||                    t          |||                     |          z
                      z   }||                    t          |||                     |          z
                      z   }||                    t          |||                     |          z
                      z   }|S r   r   r   s
             r*   r   z<TestComplexRelaxation.test_gauss_seidel_ne_new.<locals>.gold  sE   		ABrBa   Aa   AJ'' = =I%%BFF5Qq\#;#;<<<AAj((BFF5Qq\#;#;<<<AABFF5Qq\#;#;<<<ABFF5Qq\#;#;<<<AAHr7   r1   r   r   r   r   )rC   r   r   r   r  r   rE   r4   r   r   r   r   rB   r@   rs   r   r   r&  s	            r*   r   z.TestComplexRelaxation.test_gauss_seidel_ne_new  s   
	qD''')BINN16<?$D$DDDQF5))))BINN16<?$D$DDDQWWvW..///y~~a##d29>>!Q+?+?&??Z

4 0 011222	 	 	$  	< 	<A
A	q!$$RY^^Aq))00999:A	q!$$RY^^Aq))00999:A VVXXFAq!CCCC4461.7$9 $9 $9 : : : VVXXFAq!DDDD4461.8$: $: $: ; ; ; VVXXFAq!EEEE4461.9$; $; $; < < < <'	< 	<r7   c                 `   d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }t          j        |                              |j                  }|d|z  z   }|j        d|j        z  z   |_        t          j        |                              |j                  }t          |||           t          |t          j
        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j
        g d	          }|d|z  z   }t          j        |                              |j                  }|d|z  z   }t          j        |                              |j                  }t          |||           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }t          j        |                              |j                  }t          |||d
           t          |t          j
        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j
        g d          }|d|z  z   }t          j        |                              |j                  }|d|z  z   }t          j        |                              |j                  }t          |||d
           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }t          j
        dg                              |j                  }t          |||           t          |t          j
        dg                     d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j
        g d          }t          j        |                              |j                  }|d|z  z   }t          j
        g d                              |j                  }t          |||           t          ||           d}t          dt          j        |          z  t          j        |           t          j        |           gg d||d          }|j        d|j        z  z   |_        t          j        |                              |j                  }|d|z  z   }t          j        |                              |j                  }t          |||dd           t          j                            ||z  d          }t          j        |                              |j                  }|d|z  z   }t          |||dd
           t          j                            ||z  d          }|dk     sJ |dk     sJ t          ||           d S )Nr1   rQ   rn   r;   r<   r  r   rf   r   r   r   r   r|   r  )y333333?y333333?@y333333@r}   r   r   r   r   r   )r   rC   rg   rD   rB   r@   r  rR   r   r   r   r   r   r+  s           r*   r   z.TestComplexRelaxation.test_gauss_seidel_ne_csr  s   Qrwqzz\BGAJJ;<jjjq( ( (IaLL((QJ$qv+%HQKKqw''1a   Arx}}---Qrwqzz\BGAJJ;<jjjq( ( ($qv+%x...//d4iIaLL((QJHQKKqw''1a   At$$$Qrwqzz\BGAJJ;<jjjq( ( ($qv+%IaLL((QJHQKKqw''1az2222Arx}}---Qrwqzz\BGAJJ;<jjjq( ( ($qv+%x---..d4iIaLL((QJHQKKqw''1az2222At$$$Qrwqzz\BGAJJ;<jjjq( ( ($qv+%IaLL((HbTNN!!!'**1a   Arx55666Qrwqzz\BGAJJ;<jjjq( ( ($qv+%x:::;;IaLL((QJH\\\""))!'221a   At$$$ Qrwqzz\BGAJJ;<jjjq( ( ($qv+%GAJJag&&QJHQKKqw''1aCyAAAA!Q''GAJJag&&QJ1aCzBBBB!Q''||||||||FF+++++r7   c                 0  	 dD ]	t          dt          j        	          z  t          j        	           t          j        	           gg d		                                          }|j        dt          j                            |j        j        d                   z  z   |_        	fdt          d	dz             D             }t          j	        	          dt          j                            	          z  z   
                    |j                  }|                                }|dz  }t          |||           |D ]O}|                    ||f          }|                                }t          |||           t          ||           Pd S )	Nr   rQ   rn   r  r   c                 &    g | ]}|z  d k    |S r   r/   r   s     r*   r   zBTestComplexRelaxation.test_gauss_seidel_nr_bsr.<locals>.<listcomp>v  r   r7   r1   r   )r   rC   rg   r   r  r   r   rE   r   rD   rB   r@   rs   r   r   r   r0  s
            @r*   r   z.TestComplexRelaxation.test_gauss_seidel_nr_bsrp  r2  r7   c                 
   t           j                            d           g }t          dd          }|j        dt           j                            |j        j        d                   z  z   |_        |                    |           t          dd          }|j        dt           j                            |j        j        d                   z  z   |_        |                    |                    d                     t           j                            d	d	          d
t           j                            d	d	          z  z   }|                    t          |                     t           j                            dd          d
t           j                            dd          z  z   }|                    t          |                     t           j                            dd          d
t           j                            dd          z  z   }|                    t          |                     d }|D ]}|j        d         }t           j                            |d	          d
t           j                            |d	          
                    |j                  z  z   }t           j                            |d	          d
t           j                            |d	          
                    |j                  z  z   }|                                }t          |||d	d           t          | ||||d	d                     |                                }t          |||d	d           t          | ||||d	d                     |                                }t          |||d	d           t          | ||||d	d                     d}	t          dt          j        |	          z  t          j        |	           t          j        |	           gg d|	|	d          }|j        d
|j        z  z   |_        t          j        |	          
                    |j                  }|d
|z  z   }t          j        |	          
                    |j                  }t          |||dd           t           j                            ||z  d          }
t          j        |	          
                    |j                  }|d
|z  z   }t          |||dd           t           j                            ||z  d          }|
dk     sJ |dk     sJ t          |
|           d S )Nr   r9   r;   r<   r  r   r4  r   r1   r  rQ   r:   c                    |                                  } t          j        |           j        }|                    |           }t          j        |d          }t          j        |d          }t          |          D ]}	|dk    r=|t          ||                    ||                     |          z
                      z   }F|dk    r=|t          ||                    ||                     |          z
                      z   }|t          ||                    ||                     |          z
                      z   }|t          ||                    ||                     |          z
                      z   }|S r   )	todenserC   r   r   r   r   r   r   r
   r   s
             r*   r   z8TestComplexRelaxation.test_gauss_seidel_nr.<locals>.gold  sF   		Aa"BBa   Aa   AJ'' = =I%%U1bffQq\&:&:;;<AAj((U1bffQq\&:&:;;<AAU1bffQq\&:&:;;<AU1bffQq\&:&:;;<AAHr7   r   r   r   r   r   rn   r   r   )rC   r   r   r   r  r   rE   r4   r   r   rB   r@   rs   r   r   r   rg   rR   r   r   )r5   r3   rH   r   r   r   rI   rJ   r   rt   r   r   s               r*   r   z*TestComplexRelaxation.test_gauss_seidel_nr  s   
	qD''')BINN16<?$D$DDDQF5))))BINN16<?$D$DDDQWWvW..///y~~a##d29>>!Q+?+?&??Z%%&&&y~~a##d29>>!Q+?+?&??Z%%&&&y~~a##d29>>!Q+?+?&??Z%%&&&	 	 	$  	< 	<A
A	q!$$tBINN1a,@,@,G,G,P,P'PPA	q!$$tBINN1a,@,@,G,G,P,P'PPAVVXXFAq!CCCC4461.7$9 $9 $9 : : : VVXXFAq!DDDD4461.8$: $: $: ; ; ; VVXXFAq!EEEE4461.9$; $; $; < < < <
 Qrwqzz\BGAJJ;<jjjq( ( ($qv+%GAJJag&&QJHQKKqw''1aCyAAAA!Q''GAJJag&&QJ1aCzBBBB!Q''||||||||FF+++++r7   N)r#   ri   rj   r   r   r   r  r)  r   r   r   r   r   r   r   r/   r7   r*   r  r  *  s        D% D% D%L2 2 2B!6 !6 !6F7E 7E 7ErG< G< G<RR, R, R,hD% D% D%L7 7 7&5< 5< 5<nS, S, S,j7 7 7&K, K, K, K, K,r7   r  c                       e Zd Zd Zd ZdS )TestBlockRelaxationc                 ^   t           j                            d           g }t          t          j        d                    }|                    |df           t          t           j                            dd                    }|                    |df           t          t          j        d                    }|                    |df           |                    |df           t          t           j                            dd                    }|                    |df           |                    |df           t          t          j        d                    }|                    |df           |                    |df           t          t           j                            dd                    }|                    |df           |                    |df           t          dd	
          }|                    |df           |                    |df           |                    |df           t          j        g dg dg dg dg dg dg          }t          |          }|                    |df           |                    |df           |                    |df           d }|D ]\  }}t           j                            |j	        d                   }t           j                            |j	        d                   }|
                                }t          ||||dd           t          | |||||d          d           t          dd	
          }t           j                            |j	        d                   }t           j                            |j	        d                   }|
                                }t          |||ddd           t          |||dd           t          ||d           g }t          t           j                            dd          dt           j                            dd          z  z             }|                    |df           |                    |df           t          dd	
          }|j        dt           j                            |j        j	        d                   z  z   |_        |                    |df           |                    |df           |                    |df           t          j        g dg dg dg dg dg dg          }t          |          }|                    |df           |                    |df           |                    |df           |D ]\  }}t           j                            |j	        d                   dt           j                            |j	        d                   z  z   }t           j                            |j	        d                   dt           j                            |j	        d                   z  z   }|
                                }t          ||||dd           t          | |||||d          d           d S )Nr   r1   r1   r1   r4  rQ   rf   rf   rf   r   r;   r<   r:   333333"@g#@333333#@rz   @rz   g3333332@g3@rz   rz   333333?ffffff@rz   rz   rz   rz   rz   rz   rz   rz   rz   @rr   皙?rz   rz   rB  rz   rz   g"@c                 ,   t          |           } |                                }t          | |d          }t          | |d          }t          j        |j        d                   }t          j        |j        d         dz             }	| t          |||	f| j                  z
  }
t          |
          }
t          d| j        d         |          D ]}|
|||z   d d f         |z  }t          j        ||||z                      t          j        |          z
  	                    dd          }|t          ||z            d d d d f                             |          }d|z
  ||||z            z  |t          j        |          z  z   ||||z   <   |S )	NTr   inv_flagFr   r1   r   ro   rr   )r   rs   r    rC   rD   rE   r   r   ravelreshapeintr   )rH   rJ   rI   r   r   r   Dinvr   I0I1A_no_Dr  rv   r   s                 r*   r   z3TestBlockRelaxation.test_block_jacobi.<locals>.gold  s   1A6688D!!y4HHHDqIFFFA4:a=))B4:a=1,--BQBKqw????F''F1agaj)44 ] ]1a	k?AAA-.5Xa1Y;011BHQKK?HHQOOQy[))111aaa/044Q77&)Ek41Y;3H%H5QSQYZ[Q\Q\K\%\!Qy[/""Hr7   rK  )r   r   r   decimalr:   r_   )r   r   r  y        333333"@y        #@rC  rz   rD  rz   y        3333332@y        3@rz   rz   rF  rG  rz   rz   rz   rJ  r  rK  )rC   r   r   r   rR   r4   r   r   r   rE   rs   r   r   r   r  )r5   r3   rH   r   r   rI   rJ   r   s           r*   test_block_jacobiz%TestBlockRelaxation.test_block_jacobi  s=   
	q rx''((aVry~~a++,,aVrx''((aVaVry~~a++,,aVaVrx''((aVaVry~~a++,,aVaVF5)))aVaVaVH222444......0000002 3 3 qMMaVaVaV	 	 	& " 	+ 	+LAy	qwqz**A	qwqz**AVVXXFAqI!3OOOO4461i#E#E()+ + + + + F5)))INN171:&&INN171:&&Q1asCCCCq&!5555Avq1111 ry~~a++d29>>!Q3G3G.GGHHaVaVF5)))$ry~~afl1o>>>>aVaVaVH444666......2220002 3 3 qMMaVaVaV! 	+ 	+LAy	qwqz**T")..2L2L-LLA	qwqz**T")..2L2L-LLAVVXXFAqI!3OOOO4461i#E#E()+ + + + +	+ 	+r7   c                    t           j                            d           g }t          t          j        d                    }|                    |df           t          t           j                            dd                    }|                    |df           t          t          j        d                    }|                    |df           |                    |df           t          t           j                            dd                    }|                    |df           |                    |df           t          t          j        d                    }|                    |df           |                    |df           t          t           j                            dd                    }|                    |df           |                    |df           t          dd	
          }|                    |df           |                    |df           |                    |df           t          j        g dg dg dg dg dg dg          }t          |          }|                    |df           |                    |df           |                    |df           fd|D ]\  }}t           j                            |j	        d                   }t           j                            |j	        d                   }|
                                }t          |||dd|           t          | ||||d          d           t           j                            |j	        d                   }|
                                }t          |||dd|           t          | ||||d          d           t           j                            |j	        d                   }|
                                }t          |||dd|           t          | ||||d          d           t          dd	
          }t           j                            |j	        d                   }t           j                            |j	        d                   }|
                                }t          |||ddd           t          |||dd           t          ||d           t           j                            |j	        d                   }|
                                }t          |||ddd           t          |||dd           t          ||d           t           j                            |j	        d                   }|
                                }t          |||ddd           t          |||dd           t          ||d           g }t          t           j                            dd          dt           j                            dd          z  z             }|                    |df           |                    |df           t          dd	
          }|j        dt           j                            |j        j	        d                   z  z   |_        |                    |df           |                    |df           |                    |df           t          j        g dg dg dg dg dg dg          }t          |          }|                    |df           |                    |df           |                    |df           |D ]>\  }}t           j                            |j	        d                   dt           j                            |j	        d                   z  z   }t           j                            |j	        d                   dt           j                            |j	        d                   z  z   }|
                                }t          |||dd|           t          | ||||d          d           t           j                            |j	        d                   dt           j                            |j	        d                   z  z   }|
                                }t          |||dd|           t          | ||||d          d           t           j                            |j	        d                   dt           j                            |j	        d                   z  z   }|
                                }t          |||dd|           t          | ||||d          d           @d S )Nr   r?  r1   r4  rQ   r@  rf   r   r;   r<   r:   rA  rE  rH  rI  rL  c                 v   t          |           } t          | |d          }t          | |d          }t          j        |j        d                   }t          j        |j        d         dz             }| t          |||f| j                  z
  }	t          |	          }	|dk    r  | |||d          } | |||d	          }|S |dk    rd| j        d         |}}}
n|d	k    r| j        d         |z
  | | }}}
t          |
||          D ]}|	|||z   d d f         |z  }t          j        ||||z                      t          j        |          z
                      d
d          }|t          ||z            d d d d f         
                    |          }t          j        |          ||||z   <   |S )NTrN  Fr   r1   r   r   r   r   ro   )r   r    rC   rD   rE   r   r   rP  rQ  rR  r   )rH   rJ   rI   r   r   rS  r   rT  rU  rV  startstopstepr  rv   r   r   s                   r*   r   z9TestBlockRelaxation.test_block_gauss_seidel.<locals>.gold`  s   1A!!y4HHHDqIFFFA4:a=))B4:a=1,--BQBKqw????F''F##DAq)Y77DAq)Z88)##%&
ITt*$$WQZ)+iZ) "t 5$-- 1 11a	k?AAA-.q0Xa1Y;011BHQKK?HHQOOQy[))111aaa/044Q77%'Xa[[!Qy[/""Hr7   r   )r   r   r   rW  r   r   rY  r   r  rZ  r[  r\  )rC   r   r   r   rR   r4   r   r   r   rE   rs   r   r   r   r  )r5   r3   rH   r   rI   rJ   r   r   s          @r*   test_block_gauss_seidelz+TestBlockRelaxation.test_block_gauss_seidel;  s	   
	q rx''((aVry~~a++,,aVrx''((aVaVry~~a++,,aVaVrx''((aVaVry~~a++,,aVaVF5)))aVaVaVH222444......0000002 3 3 qMMaVaVaV	 	 	 	 	8 " 	+ 	+LAy	qwqz**A	qwqz**AVVXXFq!Q1I)24 4 4 44461i#K#K()+ + + + 	qwqz**AVVXXFq!Q1J)24 4 4 44461i#L#L()+ + + + 	qwqz**AVVXXFq!Q1K)24 4 4 44461i#M#M()+ + + + +
 F5)))INN171:&&INN171:&&1aq	%&	( 	( 	( 	(QayAAAAAvq1111INN171:&&1aq
%&	( 	( 	( 	(QazBBBBAvq1111INN171:&&1aq%&	( 	( 	( 	(Qa{CCCCAvq1111 ry~~a++d29>>!Q3G3G.GGHHaVaVF5)))$ry~~afl1o>>>>aVaVaVH444666......2220002 3 3 qMMaVaVaV! 	+ 	+LAy	qwqz**T")..2L2L-LLA	qwqz**T")..2L2L-LLAVVXXFq!Q1I)24 4 4 44461i#K#K()+ + + + 	qwqz**T")..2L2L-LLAVVXXFq!Q1J)24 4 4 44461i#L#L()+ + + + 	qwqz**T")..2L2L-LLAVVXXFq!Q1K)24 4 4 44461i#M#M()+ + + + ++	+ 	+r7   N)r#   ri   rj   r]  rc  r/   r7   r*   r=  r=    s;        d+ d+ d+L^+ ^+ ^+ ^+ ^+r7   r=  c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestJacobiIndexedz4Test indexed Jacobi routines against other routines.c           	      v   t          dd          }|j        d         }t          j                            d           t          j                            |          }t          j                            |          }|                                }|                                }t          j        |          }t          |||d           t          ||||d           t          ||           |                                }|                                }t          j        |dz
  |          }t          |||d           t          ||||d           t          |d	d          |d	d                     t          j                            d
           |                    t          j                  }|                    t          j                  }t          j                            |          }|                                                    t          j                  }|                                                    t          j                  }|j        d d xx         dt          j                            t          |j                            z  z  cc<   |j        d d xx         dt          j                            t          |j                            z  z  cc<   t          j        |          }t          |||d           t          ||||d           t          ||           t          d                              d          }|j        d         }t          j                            d           t          j                            |          }t          j                            |          }|                                }|                                }t          j        dt          j                  }t          |||           t          ||||           t          ||           d S )Nr   r;   r<   r   i#2r   r   r_   i%r2   y        ?)r   r4  r   i	$r:   r?   )r   rE   rC   r   r   r   rs   rD   r   r   r   rB   
complex128r  randnr  r   int32)r5   rH   r   ru   rI   x_jx_jir   s           r*   %test_compare_jacobi_indexed_to_jacobiz7TestJacobiIndexed.test_compare_jacobi_indexed_to_jacobi  sV   F5)))GAJ
	y!!!Y^^AINN1 ggiiwwyy)A,,q#q$$$$q$7#6666C&&& ggiiwwyy)AaC##q#q$$$$q$7#6666CHd233i000 		y!!!HHR]##HHR]##Y^^Aggiir}--wwyy..	qqq			S29??3qv;;7777				qqq			X	AF < <<<			)A,,q#q$$$$q$7#6666C&&& ENN  6 22GAJ
	x   Y^^AINN1ggiiwwyy)ARX...q#qq$7+++C&&&&&r7   c                 Z   t          dd          }t          |          }t          j        |dk              d         }t          j        |dk              d         }t          j                            d           |j        d         }t          j                            |          }t          j                            |          }|                                }|                                }	|                                }
d||<   d|	|<   d|
|<   t          ||
||d           t          |||||d           t          |
|         ||                    d||<   d|	|<   d|
|<   t          ||
||d           t          ||	|||d           t          |
|         |	|                    d	S )
z$Compare CF/FC relaxation to indexed.r|   r|   r;   r<   r   r1   j5Xffffff?r   N)r   r   rC   wherer   r   rE   r   rs   r   r   r   r   )r5   rH   	splittingf_ptsc_ptsr   ru   rI   x_cfx_fcrl  s              r*   test_compare_cf_fc_jacobiz+TestJacobiIndexed.test_compare_cf_fc_jacobi  s   HU+++qEE	a((+a((+
	z"""GAJY^^AINN1wwyywwyywwyy UUUq$54444!T1eU#6666DKe555 UUUq$54444!T1eU#6666DKe55555r7   c                    t          d                              d          }t          j        g dt          j                  }t          j        |dk              d         }t          j        |dk              d         }t          j                            d           |j        d         }t          j        	                    |          }t          j        	                    |          }|j
        d         }|                                }	|                                }
t          |          D ]}d|	||z  |z   <   d|
||z  |z   <   t          ||
||d	
           t          ||	|||d	
           t          |j
        d                   D ]*}t          |
||z  |z            |	||z  |z                       +|                                }	|                                }
t          |          D ]}d|	||z  |z   <   d|
||z  |z   <   t          ||
||d	
           t!          ||	|||d	
           t          |j
        d                   D ]*}t          |
||z  |z            |	||z  |z                       +dS )z+Compare CF/FC relaxation to indexed in bsr.r|   r4  r   r1   r   r1   r   r1   r?   r   r1   rp  rq  r   N)r   r   rC   r   rj  rr  r   r   rE   r   r   rs   r   r   r   r   r   )r5   rH   rs  rt  ru  r   ru   rI   bsrJ   rl  r  s               r*   test_compare_bsr_cf_fc_jacobiz/TestJacobiIndexed.test_compare_bsr_cf_fc_jacobi1  sp   ENN  6 22H___BH===	a((+a((+
	z"""GAJY^^AINN1[^ GGIIwwyyr 	! 	!AAeBhqjM Dr!q$54444!Q5%s3333q{1~&& 	A 	AAU2XaZ 0!E"HQJ-@@@@ GGIIwwyyr 	! 	!AAeBhqjM Dr!q$54444!Q5%s3333q{1~&& 	A 	AAU2XaZ 0!E"HQJ-@@@@	A 	Ar7   c           	         t          d                              d          }t          j        g dt          j                  }t          j        |dk              d         }t          j        |dk              d         }t          j                            d           |j        d         }t          j        	                    |          }t          j        	                    |          }|j
        d         }|                                }	|                                }
t          |          D ]}d|	||z  |z   <   d|
||z  |z   <   t          ||
|d	d
           t          ||	|||d	d
           t          |j
        d                   D ]*}t          |
||z  |z            |	||z  |z                       +|                                }	|                                }
t          |          D ]}d|	||z  |z   <   d|
||z  |z   <   t          ||
|d	d
           t!          ||	|||d	d
           t          |j
        d                   D ]*}t          |
||z  |z            |	||z  |z                       +dS )z)Compare CF/FC relaxation to block Jacobi.rz  r4  r   r{  r?   r   r1   rp  rQ   rq  )r   r   N)r   r   rC   r   rj  rr  r   r   rE   r   r   rs   r   r   r   r   r   )r5   rH   rs  rt  ru  r   ru   rI   r|  rJ   rk  r  s               r*   test_compare_block_cf_fc_jacobiz1TestJacobiIndexed.test_compare_block_cf_fc_jacobiU  sn   ENN  6 22H___BH===	a((+a((+
	z"""GAJY^^AINN1[^ GGIIggiir 	  	 AAeBhqjMCb
OOQQ!377771a#FFFFq{1~&& 	@ 	@AE"HQJ58A:???? GGIIggiir 	  	 AAeBhqjMCb
OOQQ!377771a#FFFFq{1~&& 	@ 	@AE"HQJ58A:????	@ 	@r7   c                    t          dd          }ddd}t          |d|fd|f          }|j        rJ t          |d	|fd|f          }|j        sJ t          j                            d
           t          j                            |j        d                   }t          j                            |j        d                   }d}|                    |||dd          \  }}t          j	        
                    |||z  z
            t          j	        
                    |||z  z
            z  |k     sJ |dk    sJ dS )z)Test CF/FC relaxation within a hierarchy.ro  r;   r<   gUUUUUU?rQ   )r   r   r   )presmootherpostsmootherr   iLlr   gh㈵>r   T)ru   tolmaxiterreturn_infoN)r   r   symmetric_smoothingrC   r   r   r   rE   r
   r   r   )	r5   rH   optsmlru   rI   r  rJ   infos	            r*    test_integrated_cf_fc_relaxationz2TestJacobiIndexed.test_integrated_cf_fc_relaxationy  sR   HU+++ 22-8$,?.94-@B B B ))))-8$,?.94-@B B B %%%%
	z"""Y^^AGAJ''INN171:&&((1ct(LL4	q1q5y))")..QV*D*DDKKKKqyyyyyyr7   N)	r#   ri   rj   __doc__rm  rx  r}  r  r  r/   r7   r*   re  re    sn        >>1' 1' 1'f6 6 6>"A "A "AH"@ "@ "@H    r7   re  )2r  warningsnumpyrC   numpy.testingr   r   r  scipy.sparser   r   r   r   r	   scipy.linalgr
   pyamg.classical.splitr   pyamg.classicalr   pyamg.galleryr   r   r   pyamg.relaxation.relaxationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   pyamg.util.utilsr    simplefilterr+   r-   rl   r  r=  re  r/   r7   r*   <module>r     s          7 7 7 7 7 7 7 7  = = = = = = = = = = = = 0 0 0 0 0 0       $ $ $ $ $ $ . . . . . . 5 5 5 5 5 5 5 5 5 5K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K
 , + + + + +  h 7 8 8 8: : :MG MG MG MG MG8 MG MG MG`t
< t
< t
< t
< t
<X t
< t
< t
<pd
, d
, d
, d
, d
,H d
, d
, d
,RF+ F+ F+ F+ F+( F+ F+ F+Rq q q q q q q q q qr7   