
    _-PhL3                         d Z ddlZddlZddlmZmZmZmZ ddl	m
Z
mZmZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ  G d
 de          Z G d de          Zd Zd ZdS )zTest classical AMG.    N)TestCaseassert_equalassert_almost_equalassert_array_almost_equal)
csr_matrix
coo_matrixSparseEfficiencyWarning)poissonload_example) classical_strength_of_connection)split)ruge_stuben_solver)direct_interpolationclassical_interpolationc                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestRugeStubenFunctionsc           	      0   g | _         t          j                            d           dD ]G}| j                             t          t          j                            ||                               HdD ],}| j                             t          |fd                     -dD ]-}| j                             t          ||fd                     .dD ]C}t          |          }| j                             |d         	                                           Dd S )	Nr   )         )r   r   r      
         csrformat)r   r   r   r   r   r   )knotairfoilbarA)
casesnprandomseedappendr   randr
   r   tocsr)selfNnameexs       d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/classical/tests/test_classical.pysetUpzTestRugeStubenFunctions.setUp   s   
 		q 	@ 	@AJj1)=)=>>???? * 	; 	;AJgqd5999::::% 	= 	=AJgq!fU;;;<<<<. 	/ 	/Dd##BJbgmmoo....	/ 	/    c                 2   | j         D ]}t          |d          }t          j        |          }|                                dk    sJ t          |                                d           d|j        d d <   |||z  z                                   dk    sJ d S N        r      )r"   r   r   RSminr   maxdatar)   r!   S	splittings       r-   test_RS_splittingz)TestRugeStubenFunctions.test_RS_splitting'   s     	7 	7A0C88AI==??a''''!,,,AF111I )+0022Q66666	7 	7r/   c                 2   | j         D ]}t          |d          }t          j        |          }|                                dk    sJ t          |                                d           d|j        d d <   |||z  z                                   dk    sJ d S r1   )r"   r   r   CLJPr5   r   r6   r7   r8   s       r-   test_cljp_splittingz+TestRugeStubenFunctions.test_cljp_splittingP   s     	7 	7A0C88A
1I==??a''''!,,,AF111I )+0022Q66666	7 	7r/   c                 2   | j         D ]}t          |d          }t          j        |          }|                                dk    sJ t          |                                d           d|j        d d <   |||z  z                                   dk    sJ d S r1   )r"   r   r   CLJPcr5   r   r6   r7   r8   s       r-   test_cljpc_splittingz,TestRugeStubenFunctions.test_cljpc_splitting^   s     	7 	7A0C88AAI==??a''''!,,,AF111I )+0022Q66666	7 	7r/   c                    | j         D ]|}t          |d          }t          j        |          }t	          |||          }t          |||          }t          |                                |                                           }d S )Nr2   )r"   r   r   r4   r   reference_direct_interpolationr   toarray)r)   r!   r9   r:   resultexpecteds         r-   test_direct_interpolationz1TestRugeStubenFunctions.test_direct_interpolationl   s     	F 	FA0C88AI)!Q	::F5aIFFH 0 0(2B2B2D2DEEEE	F 	Fr/   c                 j   | j         D ])}t          d|j        d                   }|                                d|d d f         d d d|f                                         }t	          |d          }t          j        |d          }t          |||d          }t          |||          }||z
  }t          |j
                  |_
        dt          |j
                  z  |_
        |                    |          }d|j
        |j
        d	k     <   |                                 |j        dk    sJ +d S )
Nd   r   r2   T)second_passF)modified      ?gHz>)r"   r5   shaper(   r   r   r4   r   !reference_classical_interpolationabsr7   multiplyeliminate_zerosnnz)r)   r!   minir9   r:   rE   rF   Diffs           r-   test_classical_interpolationz4TestRugeStubenFunctions.test_classical_interpolationw   s/    	# 	#AsAGAJ''D''))AdFAAAI&1T6	299;;A0C88A555I,Q9uMMMF8AyIIH H$DDIDIs8=111HM==**D*-DIdi$&'  """HMMMMM%	# 	#r/   c                    ddl m} t          t          j        g dg dg dg dg dg dg                    }t          j        g d	|j        j        
          }|                    d|j        |j        |j	        |           t          j        g dg dg dg dg dg dg          }t          |                                |           d S )Nr   amg_core)       @rL   r2   r2   r2   r2   )rL   rY   rL   rL   r2   r2   )r2   rL   rY   r2   r2   r2   )r2   rL   r2   rY   rL   rL   )r2   r2   r2   rL   rY   rL   )r2   r2   r2   rL   rL   rY   )r3   r   r3   r   r3   r   dtype   )rL   rY   rL   r2   r2   r2   )r2   r2   r2   rY   rL   rL   )pyamgrX   r   r#   arrayindicesr[   remove_strong_FF_connectionsindptrr7   r   rD   )r)   rX   Cr:   exacts        r-   !test_remove_strong_FF_connectionsz9TestRugeStubenFunctions.test_remove_strong_FF_connections   s)   """""" rx!9!9!9!9!9!9!9!9!9!9!9!9!9!9!9!9!9!9!; < < = = H///qyGGG	--a19./fi	A 	A 	A 2222222222222222224 5 5 	"!))++u55555r/   N)
__name__
__module____qualname__r.   r;   r>   rA   rG   rU   rd    r/   r-   r   r      s        / / /$7 7 7R7 7 77 7 7	F 	F 	F# # #*6 6 6 6 6r/   r   c                       e Zd Zd Zd ZdS )TestSolverPerformancec           	      v   g }|                     d           |                     d           |                     d           |D ]}t          |d          }dddd	ifddd
iffD ]}t          j                            d           t          j                            |j        d                   }|t          j                            |j        d                   z  }t          ||d          }g }|                    ||dd|          }	~	|d         |d         z  dt          |          z  z  }
|
dk     sJ Ԍd S )N)i  )   rl   )   rm   rm   r   r   direct	classicalrK   FTr   2   )interpolation
max_coarse   g-q=)x0maxitertol	residualsrL   g?)
r&   r
   r#   r$   r%   r'   rM   r   solvelen)r)   r"   caser!   interpxbmlresx_solavg_convergence_ratios              r-   test_poissonz"TestSolverPerformance.test_poisson   s\   VZ   \""" 	6 	6DU+++A#'*e)<='*d);<> 6 6 	q!!!INN171:..binnQWQZ000'BOOOq"%+. ! 0 0),RQ3s3xx<(H%-44444!6	6 	6r/   c                    t          j        dt                     t          dd          }|                    d          g}|                    |                                           |                    |                                           t          |d          }|D ]}t          |d          }|j	        d	         j
                                        }|j	        d	         j
                                        }t          j        t          j        ||z
                                                      d
k     sJ |}d S )Nignore)r   r   r   r   )r3   r3   )	blocksizer   )rr   rx   g{Gz?)warningssimplefilterr	   r
   tobsrr&   tocscrD   r   levelsr!   r#   rO   ravelr6   )r)   r!   r"   rs_oldAArs_newAc_oldAc_news           r-   test_matrix_formatsz)TestSolverPerformance.test_matrix_formats   s#   h(?@@@ F5)))6**+QWWYYQYY[[!!!#A"555 	 	B'r:::F]2&(0022F]2&(0022F6"(6F?334488::TAAAAFF	 	r/   N)re   rf   rg   r   r   rh   r/   r-   rj   rj      s2        6 6 68    r/   rj   c                 *	   |                                 }d|j        d d <   |                    |           }t          |           } t          |          }|j        |j        k    }|j        |         |_        |j        |         |_        |j        |         |_        ||j                 dk    }t          |j        |         |j        |         |j        |         ff|j                  }| j        dk    | j        | j        k    z  }t          | j        |         | j        |         | j        |         ff| j                  }| j        dk     | j        | j        k    z  }t          | j        |         | j        |         | j        |         ff| j                  }|j        dk    }t          |j        |         |j        |         |j        |         ff| j                  }| }t          |j        |         |j        |         |j        |         ff| j                  }	t          j        |	                    d                    }
t          j        |		                    d                    }t          j        |	                    d                    }t          j        |	                    d                    }| 
                                }|dk    }t          j        |          }||         ||         z  ||<   |
dk    }t          j        |          }||         |
|         z  ||<   |
dk    }||xx         ||         z  cc<   d||<   |	xj        ||	j                  ||	j                 z  z  c_        |xj        ||j                  ||j                 z  z  c_        |                                d         }t          t          j        t          |                    ||ff| j                  }|	                                |                                z   |                                z   }t          j        dgt          j        |          f          }t#          |j        ||j                 |j        f|j        d         |d         f          }|S )NrL   r3   )rM   r   )axisr2   rx   )copyr7   rP   r   rowcolrM   r#   r   sumdiagonal
zeros_likenonzeroonesr(   concatenatecumsumr   r_   ra   )r!   r9   r:   maskc_maskC_sA_posA_negC_s_posC_s_negsum_strong_possum_strong_negsum_all_possum_all_negdiagalphabetaC_rowsC_injectPsplitting_maps                        r-   rC   rC      s   
 	
AAF111I	

1A1A1A 5AE>DE$KAEE$KAEVD\AF qu"F
afVnquV}aeFm&DE7$ $ $C FQJ15AE>*DtquT{AE$K&@AW& & &EFQJ15AE>*DtquT{AE$K&@AW& & &E 8a<D#(4.374=#'$-*HI w( ( (G5D#(4.374=#'$-*HI w( ( (G Xgkkqk1122NXgkkqk1122N(599!9,,--K(599!9,,--K::<<Dc!DM+&&Ed#nT&::E$Kc!D=%%DT"^D%99DJQDJJJ+d##JJJDJLLU7;''W[(999LLLLT'+&&tGK'888LL  #F273y>>22VV4DE !) ) )H 	'--//)HNN,<,<<ANQC9)=)=#>??MAFM!)4ah?'!*mB&78	: 	: 	:A Hr/   c           
      N   ddl m} |                                }d|j        d d <   |                    |           }t          j        | j                  }|                    | j	        d         |j        |j
        ||           |d         }t          j        ||j                  }t          j        || j                  }|                                }d}	d}
t          | j	        d                   D ]}||         |
k    r||||         <   d|||         <   &| j        |         }| j        |dz            }|j        |         }|j        |dz            }t          | j        ||                   }|t          |j        ||                   z  }|||         z  }||         }t          ||          D ]]}|j
        |         }||         |
k    r@||k    r9|||<   |j        |         }t          ||          D ]}|j
        |         }||         |	k    r||k    rd}t          ||          D ]n}|j
        |         }||         |
k    rS||k    rMt          | j        |         | j        |dz                      D ]#}| j
        |         |k    r|| j        |         z  }$ot          | j        |         | j        |dz                      D ]:}| j
        |         |k    r'|dk    r!||j        |         | j        |         z  |z  z  };	| |z  ||<   |dz  }_t          j        | j	        d         f          }d}t          | j	        d                   D ]}|||<   |||         z  }t          || j	        d                            D ]}|||                  ||<   t#          |||f          S )Nr   rW   rL   rx   rZ   r3   r2   )r]   rX   r   r7   rP   r#   
empty_likera   rs_direct_interpolation_pass1rM   r_   emptyr[   r   ranger   zerosr   )r!   r9   r:   rX   PprR   PjPxSDF_NODEC_NODEi	rowstartArowendA	rowstartSrowendSdenominatorjjSj	numeratorkkSkinner_denominatorllSl
search_indreorder
cumulatives                               r-   rN   rN   $  s   
 	AAF111I	

1A	qx	 	 B**171:qx+4b: : :
R&C	#RX	&	&	&B	#QW	%	%	%B	
BFF 171: + +aLF""Br!uIBr!uII IhqsmGIhqsmG afYw%6788K3qvi&78999K2a5 K Q%CIw//  Yr]bMV++"'' BsG !r
I#Iw77 Z ZYr]%bMV33"''03-&+Iw&?&? T T%&Yr]$-bMV$;$;"''6;AHRL!(SUVWSW.6Y6Y %T %T
,-Ij,AR,G,G,=
AS,S,=.3AHRL!(2a4..Q.Q Z Z
$%Ij$9R$?$?$5$<$<$-)*AF:4F)FGX)X%ZI  )j4BsG1HC/2 h
}%%GJ171: # #
il"

2agaj>""  11r2rl###r/   )__doc__r   numpyr#   numpy.testingr   r   r   r   scipy.sparser   r   r	   pyamg.galleryr
   r   pyamg.strengthr   pyamg.classicalr   pyamg.classical.classicalr   pyamg.classical.interpolater   r   r   rj   rC   rN   rh   r/   r-   <module>r      s                     I H H H H H H H H H / / / / / / / / ; ; ; ; ; ; ! ! ! ! ! ! 8 8 8 8 8 8       L6 L6 L6 L6 L6h L6 L6 L6^, , , , ,H , , ,`M M MbJ$ J$ J$ J$ J$r/   