o
    Yi62                     @   s   d dl Z d dlZd dl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 ejejejejgZejejgZejejgZee e ZG dd	 d	ZG d
d dZG dd dZdS )    N)assert_array_equalassert_allclose)diagscsgraph)eigh)LaplacianNd)Sakurai)
MikotaPairc                   @   s2  e Zd ZdZejdg ddd Zdd Zejdg d	ejdg dd
d Z	ejdg d	ejdg ddd Z
ejdg d	ejdg ddd Zejdeejdg d	ejdg ddd Zejdeejdg d	ejdg ddd Zdd ZdS )TestLaplacianNdz
    LaplacianNd tests
    bc)neumann	dirichletperiodicc              	   C   s   t d|d}| }|dkr&tg dg dg dg dg dg d	g}n3|d
krBtg dg dg dg dg dg dg}ntg dg dg dg dg dg dg}t|| d S )N   
grid_shapeboundary_conditionsr   )   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   toarraynparrayr   )selfr   laplapaa r   [/tmp/pip-target-1s0edx8b/lib/python/scipy/sparse/linalg/tests/test_special_sparse_arrays.pytest_1d_specific_shape   s@   

z&TestLaplacianNd.test_1d_specific_shapec                 C   s   d}t t|d ddd}tj|ddd}tj|ddd}|f}d	}t||d
}t|t||t|  t| |   t|	  |   d S )Nr   r   dia)formatTfunction)symmetrizedformr   r   r   )
r   r   onesr   	laplacianr   r   eyer   tosparse)r   nGLfLar   r   r   r   r   r   test_1d_with_graph_laplacian>   s    z,TestLaplacianNd.test_1d_with_graph_laplacianr   )r   )      )r0   r1      c                 C   s   t ||tjd}| }t|dd}t|}| }|j}|| t|j	 }	t
|||	d td|d D ]}
t||
||
 d   q7d S )Nr   dtypeT)eigvals_onlyatolr   )r   r   float64r   r   prodeigenvaluesr4   finfoepsr   aranger   )r   r   r   r   Leigvalsr+   r:   r4   r7   mr   r   r   test_eigenvaluesK   s   
z TestLaplacianNd.test_eigenvaluesc                 C   s  t ||tjd}t|}| }| }|j}|| tt|j	ttj
j	 }t|D ]$}	| |d d |	f  |d d |	f ||	   }
t|
t|
|d q/td|d D ]#}||}||}| | |t|  }
t|
t|
|d q\d S )Nr3   r6   r   )r   r   r8   r9   r:   eigenvectorsr4   maxr;   r<   doubler=   r   r   
zeros_likediag)r   r   r   r   r+   r:   rB   r4   r7   irr@   eevr   r   r   test_eigenvectors[   s   
$0

z!TestLaplacianNd.test_eigenvectorsc                 C   sH   t ||d}t|}t| |t| t|  |  d S )Nr&   )r   r   r9   r   r   r)   r*   )r   r   r   r   r+   r   r   r   !test_toarray_tosparse_consistencyo   s   
z1TestLaplacianNd.test_toarray_tosparse_consistencyr4   c                 C   s   t |||d}t|}|j||fksJ |j|ksJ tt |||d t ||d | tt |||d  t ||d  | d S )Nr3   r&   )	r   r   r9   shaper4   r   r   astyper*   )r   r   r   r4   r   r+   r   r   r   test_linearoperator_shape_dtypew   s,   


z/TestLaplacianNd.test_linearoperator_shape_dtypec                 C   s   t ||d}t|}t|}|d}td| |df}|||g}	|	D ]4}
||
|}|
j|jks:J |j|ksAJ |
j	dkr\|
 |
| }|j|ksVJ t|| q(dS )E Test the dot-product for type preservation and consistency.
        r&   r   r   r0   N)r   r   r9   r=   reshapedotrN   rM   r4   ndimr   array_equal)r   r   r   r4   r   r+   x0x1x2	input_setxyyyr   r   r   test_dot   s    




zTestLaplacianNd.test_dotc                 C   s@   t jtdd tddd W d    d S 1 sw   Y  d S )NzUnknown value 'robin')matchr   robinr   )pytestraises
ValueErrorr   )r   r   r   r   $test_boundary_conditions_value_error   s   "z4TestLaplacianNd.test_boundary_conditions_value_errorN)__name__
__module____qualname____doc__r`   markparametrizer    r/   rA   rK   rL   	ALLDTYPESrO   r]   rc   r   r   r   r   r
      s.    
&r
   c                   @   sR   e Zd ZdZdd Zejdedd Z	ejdeejdedd	 Z
d
S )TestSakuraiz
    Sakurai tests
    c              	   C   s   t d}t| |td tg dg dg dg dg dg dg}t||  t|  |  tg dg d	g d
g}t||  tg d}t||	  t|d d |	d d S )Nr   )   r   r   r   r   )rm   r   rm   r   r   r   )r   rm   r   rm   r   r   )r   r   rm   r   rm   r   )r   r   r   rm   r   rm   )r   r   r   r   rm   rl   )r   r   r   r   r   r   )rm   rm   rm   rm   rm   rm   )rl   r   r   r   r   rl   )g|$g?g۝{0%?gA9W@g,@gH%@g{Qq,@r0   )
r   r   r   r   r)   r   rU   r*   tobandedr:   )r   sakr   abrI   r   r   r   test_specific_shape   s2   zTestSakurai.test_specific_shaper4   c                 C   st   d}t ||d}|j||fksJ |j|ksJ t| t | | t|  t |  | d S N   r4   )r   rM   r4   r   r   rN   r*   )r   r4   r+   ro   r   r   r   rO      s   z+TestSakurai.test_linearoperator_shape_dtypeargument_dtypec                 C   s   t ||}d}t|}t |}|d}t d| |df}|||g}	|	D ]P}
||
|}|
j|jks;J t |j	|sDJ |
j
dkry| |
| }t || t |j	|saJ | |
| }t || t |j	|syJ q)dS )rP   rl   rQ   r0   N)r   promote_typesr   r=   rR   rS   rN   rM   can_castr4   rT   r   rU   r*   )r   r4   ru   result_dtyper+   ro   rV   rW   rX   rY   rZ   r[   yaysr   r   r   r]      s(   



zTestSakurai.test_dotN)rd   re   rf   rg   rq   r`   rh   ri   rj   rO   r]   r   r   r   r   rk      s     
	rk   c                   @   sZ   e Zd ZdZee Zdd Zej	
dedd Zej	
deej	
dedd	 Zd
S )TestMikotaPairz
    MikotaPair tests
    c           	   	   C   sR  d}t |}|j}|j}t| |t| t| |t| tg dg dg dg dg dg dg}t||  t|	  | tg dg d	g}t||
  td
|d
 }ttd| |  t|	  |  td| |
  tg d}t||  t|d d |d d S )Nr   )   r   r   r   r   )r}   	   rm   r   r   r   )r   rm   rs   r   r   )r   r   r   rl   r   r   )r   r   r   r   r1   r   )r   r   r   r   r   r   )r   r}   rm   r   r   r   )r|   r~   rs   rl   r1   r   r   g      ?)r   r2   r~         $   r0   )r	   kr@   r   r   r   r)   r   rU   r*   rn   r=   rF   r:   )	r   r+   mikmik_kmik_mr   kbminvrI   r   r   r   rq      s<   
z"TestMikotaPair.test_specific_shaper4   c           	      C   s   d}t ||d}|j}|j}|j||fksJ |j|ksJ |j||fks'J |j|ks.J t |}|j}|j}|j||fksAJ |jtjksIJ |j||fksRJ |jtjksZJ t| | 	| t|
  |
  	| d S rr   )r	   r   r@   rM   r4   r   r8   r   r   rN   r*   )	r   r4   r+   r   r   r   mik_default_dtypemikd_kmikd_mr   r   r   rO   !  s*   z.TestMikotaPair.test_linearoperator_shape_dtyperu   c                 C   s  t ||}d}t||d}|j}|j}t |}|d}	t d| |df}
||g}||	|
g}|D ]U}|D ]P}|||}|j	|j	ksKJ t 
|j|sTJ |jdkr| || }t || t 
|j|sqJ | || }t || t 
|j|sJ q9q5dS )rP   rl   rt   rQ   r0   N)r   rv   r	   r   r@   r=   rR   rS   rN   rM   rw   r4   rT   r   rU   r*   )r   r4   ru   rx   r+   r   r   r   rV   rW   rX   lo_setrY   lorZ   r[   ry   rz   r   r   r   r]   7  s2   



zTestMikotaPair.test_dotN)rd   re   rf   rg   REAL_DTYPESCOMPLEX_DTYPEStested_typesrq   r`   rh   ri   rO   rj   r]   r   r   r   r   r{      s    %
r{   )r`   numpyr   numpy.testingr   r   scipy.sparser   r   scipy.linalgr   scipy.sparse.linalgr   *scipy.sparse.linalg._special_sparse_arraysr   r	   int8int16int32int64
INT_DTYPESfloat32r8   r   	complex64
complex128r   rj   r
   rk   r{   r   r   r   r   <module>   s      G