
    _-Ph,/                        d 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ZddlmZ ddlmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlZ G d	 d
e          Z G d de          Zej                             d           ej!        "                    dd          Z#ej        $                    e#j%        d                   Z&ej'        (                    deeeeeeeeeg	          d             Z)dS )zTest Krylov methods.    N)TestCaseassert_array_almost_equalassert_equalassert_almost_equal)solve)norm)bicgstabcgcgnecgnrcrfgmresgmressteepest_descent)gmres_householder)	gmres_mgsc                       e Zd Zd Zd ZdS )TestStoppingCriteriac                    g | _         t          j                            d           d}t          j                            ||          }t          j                            |          }t          j                            |          }d||j        z   z  |t          j        ||          z  z   }| j                             |||dd           | j                             t          j	        |          ||dd           d S )NiI 
   g      ?g:0yE>)Abx0tol)
casesnprandomseedrandTeyeappendsparse
csr_matrix)selfnr   r   r   s        ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/krylov/tests/test_krylov.pysetUpzTestStoppingCriteria.setUp   s    

	wINN1a  INN1Y^^A1qs7Oaq!n,
DAABBB
 1! 4 41BtTTUUUUU    c                    t           dft          dft          dft          dft          dft
          dffD ]\  }}|D ]}| j        D ]}|d         }|d         }d }|j        dk    rd} ||||d         |d	         ||
          \  }}	t          |	dd|j         d           t          t          j                            |||z  z
            ddd|j         d           d S )N)rrrr+MrMrrMr)r+   r,   )r+   r,   r-   r   r   r   d   r   r   )r   r   criteriamaxiterr   zProblem in .err_msg           )decimalr4   )r
   r	   r   r   r   r   r   __name__r   r   r   linalgr   )
r%   methodcritsr0   caser   r   r1   x1infos
             r'   test_stoppingcriteriaz*TestStoppingCriteria.test_stoppingcriteria   sZ   78=)7878./!'CDF 	R 	RMFE " R R J R RDS	AS	A"G*<<<"%%vatDztE{/7 J  J  JHB q2R2R2R2RSSSS'	q1r6z(B(BC010Pfo0P0P0PR R R R RRR	R 	Rr)   N)r8   
__module____qualname__r(   r?    r)   r'   r   r      s:        
V 
V 
VR R R R Rr)   r   c                        e Zd Zd Zd Zd ZdS )
TestKrylovc                    g | _         g | _        g | _        t          t          t
          t          t          g| _        t          g| _
        t          g| _        t          g| _        t          g| _        t#          j        dgg          }t#          j        dg                              dd          }t#          j        d          }| j                             |||dddd           | j                            |||dddd           | j                            |||dddd           t#          j        g d	g d
g dg dg          }t#          j        g d                              dd          }t#          j        d          }| j                             |||dddd           | j                            |j                            |          ||dddd           | j                            |j        |z   ||dddd           t#          j        |t0                    }|dxx         dz  cc<   |dxx         dz  cc<   |dxx         dz  cc<   |dxx         dz  cc<   t#          j        g d                              dd          }t#          j        d          }| j                             |||dddd           | j                            |                                j                            |          ||dddd           | j                            |                                j        |z   ||dddd           t#          j        g dg dg dg dg dg dg dg d g d!g d"g
          }t#          j        g d#                              dd          }t#          j        d$          }d%|d<   d&|d'<   | j                             |||dd(d)d           | j                            ||j        z   ||dd(d)d           | j                            t6          j                            d*                                          ||dd(d)d           d S )+N333333?333333@   )rI   rI   gؗҜ<g|=)r   r   r   r   r1   reduction_factor)rF   r5   r5   r5   )r5         @       @g      @)r5   r5   g"@g{Gz)      r5   r5   g      &)      ?rG   r5   Gz)   rI   rP   )dtype)r   r   y        @)   rR   y        q=
ףp?)rI   rR   y              ?)rI      )y      ?      y       @333333r5   rO   )
gr5   r5   r5   rG   r5   r5   g      &@g      r5   )
r5   rK   g333333@r5   r5   g333333@r5   r5   r5   r5   )
r5   r5         "@r5   r5   g?rN   gr5   rT   )
rM   r5   r5   r5   r5   r5   rL   g@r5   r5   )
r5   r5   r5   g      5@r5   皙?r5   r5   r5   r5   )
r5   r5   r5   r5   gr5   r5   r5   r5   r5   )
g @g      @g      6@r5   r5   r5   r5   r5   r5   r5   )
r5   r5   r5   g      A@r5   r5   r5   r5   g(r5   )
r5   g333333@r5   r5   r5   g333333ӿr5   r5   r5   r5   )
rT   r5   r5   r5   g     U@r5   r5   r5   r5   gffffff&)
rN   r5   g?g       @r5   gffffffg&@r5   rU   r5   )r   rI   g333333&@g          rS   g\(\?r   )r   	spd_cases
symm_casesr   r   r   r   r   obliquer   symm_obliquer   orthr	   inexactr
   spd_orthr   arrayreshapezerosr"   r    dotcomplexonesconjpyamggallerypoissontoarray)r%   r   r   r   s       r'   r(   zTestKrylov.setUp6   sT   

 *9eVTJDF	 z HseWHcUOO##B**Xf
E&'UD D 	E 	E 	EAAR*+H H 	I 	I 	IQQb+,% I  I 	J 	J 	J H'''&&&***)))+ , , H)))**222q99Xf
E&'UD D 	E 	E 	EACGGAJJQb*+H H 	I 	I 	IQS1W1Bu+,% I  I 	J 	J 	J HQg&&&	$4	$5	$4	$4H77788@@QGGWV__
E&'UD D 	E 	E 	EAFFHHJNN1$5$5ARPU*+H H 	I 	I 	IQVVXXZ!^!2e+,% I  I 	J 	J 	J HCCC@@@BBBBBBAAABBBBBBDDDBBBDDD	F 	G 	G H * * * + ++272q>> 	
Xg11
E&'TC C 	D 	D 	DQW1Bu+,$ H  H 	I 	I 	I$}44U;;CCEE$%R!379 9 	: 	: 	: 	: 	:r)   c                    t           j                            d           dD ]}t          | j        | j                  D ]\  }}|d         }|d         }|d         }|d         }|d         }|d         }	t          |||t          |j        d         |                    \  }
}t          |||t          |j        d         |                    \  }}d}t          |
t          |
          z  |t          |          z  |           d	}t          |||           |j        d         d
k    rg }t          |||	|d |          \  }}g }t          |||	t          |j        d         |          |          \  }}t          j        |          }t          j        |          }d}t          |t          |          z  |t          |          z  |           d}t          |t          |          z  |t          |          z  |           ːd S )Nr   )rI   rS   rR   r   r   r   )r   r1   zGHouseholder GMRES and MGS GMRES gave different results for small matrixr3   zUHouseholder GMRES and MGS GMRES returned different convergence flags for small matrixrI   )r   r1   restart	residuals)r   r1   rl   z-CR and GMRES yield different residual vectorsz$CR and GMRES yield different answers)r   r   r   zipr   rY   r   minshaper   r   r   r   r   r_   )r%   r1   r<   	symm_caser   r   r   A_symmb_symmx0_symmxflagx2flag2r4   
residuals2
residuals3x3s                     r'   
test_gmreszTestKrylov.test_gmres   sk   
	q
 ! ,	? ,	?G#&tz4?#C#C +? +?iII$Z"3"3#D/ .ar69!'!*g6N6NP P P	D'1SAH>J >J K K KU@)!DGG)RR[29; ; ; ;JT5':::: <?Q&&!#J"+FFw4;486@#B #B #BKR "$J"$VV-0W-E-E/9#; #; #;KR "$*!5!5J!#*!5!5JMG-jj9I9I.I.8j9I9I.I6=? ? ? ? EG-bbk2d2hh;6=? ? ? ?U+?,	? ,	?r)   c                 x   | j         D ]}| j        D ]}|d         }|d         }|d         }|d         } |||||d         |d                   \  }}|                    dd	          }t          t	          ||                    |          z
            t	          ||                    |          z
            z  |k     d
d           | j        D ]}| j        D ]}|d         }|d         }|d         }|d         } |||||d         |d                   \  }}|                    dd	          }t          t	          ||                    |          z
            t	          ||                    |          z
            z  |k     d
d           | j        D ]}| j        D ]}|d         }|d         }|d         }|d         } |||||d         |d                   \  }}|                    dd	          }t          ||          }	t          t	          |	|z
            t	          |	|z
            z  |k     d
d           | j
        D ]}| j        D ]}|d         }|d         }|d         }|d         } |||||d         |d                   \  }}|                    dd	          }t          ||          }	t          t	          |	|z
            t	          |	|z
            z  |k     d
d           | j        D ]}| j        D ]}|d         }|d         }|d         } |||||d         |j        d                   \  }}|                    dd	          }t          t	          ||                    |          z
            t	          ||                    |          z
            z  dk     d
d           d S )Nr   r   r   rJ   r   r1   )r   r   r1   rH   rI   Tz!Oblique Krylov Method Failed Testr3   z&Symmetric oblique Krylov Method Failedz$Orthogonal Krylov Method Failed Testr   gffffff?z!Inexact Krylov Method Failed Test)rZ   r   r`   r   r   rb   r[   rY   r\   r   r^   rX   r]   ro   )
r%   r:   r<   r   r   r   factorxNew_solns
             r'   test_krylovzTestKrylov.test_krylov   s   l 
	P 
	PF
 	P 	PII$Z01 &A"$u+)-i: : :a||B**d1quuT{{?33d1quuRyy=6I6IIVS!+NP P P P P	P ' 
	U 
	UF 	U 	UII$Z01 &A"$u+)-i: : :a||B**d1quuT{{?33d1quuRyy=6I6IIVS!+SU U U U U	U i 	S 	SF
 
S 
SII$Z01 &A"$u+)-i: : :a||B**Q{{d4$;//$tby//AVK!+QS S S S S
S m 	S 	SF 
S 
SII$Z01 &A"$u+)-i: : :a||B**Q{{d4$;//$tby//AVK!+QS S S S S
S l 		P 		PF
 P PII$Z &A"$u+)*5 5 5a||B**d1quuT{{?33d1quuRyy=6I6IITQ!+NP P P P PP		P 		Pr)   N)r8   r@   rA   r(   r{   r   rB   r)   r'   rD   rD   5   sP        M: M: M:^3? 3? 3?jBP BP BP BP BPr)   rD   i,rW   csr)formatr:   c                      | t           t                    \  }}|dk    sJ t          j                            t          t           |z  z
            t          j                            t                    k     sJ d S )Nr   )r   r   r   r9   r   )r:   rt   r>   s      r'   test_defaultsr     s_     fQllGAt199999>>!a!e)$$ry~~a'8'8888888r)   )*__doc__numpyr   numpy.testingr   r   r   r   scipy.linalgr   scipy.sparser#   rf   pyamg.util.linalgr   pyamg.krylovr	   r
   r   r   r   r   r   r   pyamg.krylov._gmres_householderr   pyamg.krylov._gmres_mgsr   pytestr   rD   r   r   rg   rh   r   r   ro   r   markparametrizer   rB   r)   r'   <module>r      s        > > > > > > > > > > > >              " " " " " " V V V V V V V V V V V V V V V V V V V V = = = = = = - - - - - - !R !R !R !R !R8 !R !R !RHGP GP GP GP GP GP GP GPT 	y   	M%..INN171: FI7H%$,b$b$B C C9 9C C9 9 9r)   