
    Ph3                     l   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j0                  ej2                  gZeez   ez   Z G d d	      Z G d
 d      Z G d d      Zy)    N)assert_array_equalassert_allclose)diagscsgraph)eigh)LaplacianNd)Sakurai)
MikotaPairc                      e Zd ZdZej
                  j                  dg d      d        Zd Zej
                  j                  dg d      ej
                  j                  dg d      d               Z	ej
                  j                  dg d      ej
                  j                  dg d      d	               Z
ej
                  j                  dg d      ej
                  j                  dg d      d
               Zej
                  j                  de      ej
                  j                  dg d      ej
                  j                  dg d      d                      Zej
                  j                  de      ej
                  j                  dg d      ej
                  j                  dg d      d                      Zd Zy)TestLaplacianNdz
    LaplacianNd tests
    bc)neumann	dirichletperiodicc           	      X   t        d|      }|j                         }|dk(  r(t        j                  g dg dg dg dg dg d	g      }nT|d
k(  r(t        j                  g dg dg dg dg dg dg      }n't        j                  g dg dg dg dg dg dg      }t	        ||       y )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as        C:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\scipy/sparse/linalg/tests/test_special_sparse_arrays.pytest_1d_specific_shapez&TestLaplacianNd.test_1d_specific_shape   s    UC{{}?''''''	A ;''''''	A ''''''	A 	1d#    c                    d}t        t        j                  |dz
        dd      }t        j                  |dd      }t        j                  |dd      }|f}d	}t        ||
      }t         |t        j                  |             |t        j                  |                    t        |j                         |j                                 t        |j                         j                         |j                                 y )Nr   r   dia)formatTfunction)symmetrizedformr   r   r   )
r   r   onesr   	laplacianr   r   eyer   tosparse)r   nGLfLar   r   r   s           r!   test_1d_with_graph_laplacianz,TestLaplacianNd.test_1d_with_graph_laplacian>   s    "''!a%.!E2qdDqdAT
*"=3rvvay>BrvvayM>:3;;=2::<-83<<>113bjjl]Cr#   r   )r   )      )r4   r5      c                    t        ||t        j                        }|j                         }t	        |d      }t        j
                  |      }|j                         }|j                  }||z  t        j                  |      j                  z  }	t        |||	       t        j                  d|dz         D ]!  }
t        |j                  |
      ||
 d         # y )Nr   dtypeT)eigvals_onlyatolr   )r   r   float64r   r   prodeigenvaluesr9   finfoepsr   aranger   )r   r   r   r   Leigvalsr/   r?   r9   r<   ms              r!   test_eigenvaluesz TestLaplacianNd.test_eigenvaluesK   s     *"BJJOKKMqt,GGJoo'!!1urxx***W481a!e$Asq1;rs3CD %r#   c                 V   t        ||t        j                        }t        j                  |      }|j	                         }|j                         }|j                  }||z  t        t        j                  |      j                  t        j                  t        j                        j                        z  }t        j                  |      D ]M  }	|j                         |d d |	f   z  |d d |	f   ||	   z  z
  }
t        |
t        j                  |
      |       O t        j                  d|dz         D ]q  }|j	                  |      }|j                  |      }|j                         |z  |t        j                  |      z  z
  }
t        |
t        j                  |
      |       s y )Nr8   r;   r   )r   r   r=   r>   r?   eigenvectorsr9   maxr@   rA   doublerB   r   r   
zeros_likediag)r   r   r   r   r/   r?   rH   r9   r<   irrE   eevs                 r!   test_eigenvectorsz!TestLaplacianNd.test_eigenvectors[   sF    *"BJJOGGJoo''')""1us288E?..0C0G0GHH1AQT 22\!Q$5G+VW.5XXAAr}}Q/d;  1a!e$A"A!!!$B"R"''!*_4AAr}}Q/d;	 %r#   c                    t        ||      }t        j                  |      }t        |j	                          |t        j
                  |                   t        |j                         j	                         |j	                                y )Nr*   )r   r   r>   r   r   r-   r.   )r   r   r   r   r/   s        r!   !test_toarray_tosparse_consistencyz1TestLaplacianNd.test_toarray_tosparse_consistencyo   sY     *"=GGJ3;;=#bffQi.93<<>113S[[]Cr#   r9   c                    t        |||      }t        j                  |      }|j                  ||fk(  sJ |j                  |k(  sJ t        t        |||      j                         t        ||      j                         j                  |             t        t        |||      j                         j                         t        ||      j                         j                         j                  |             y )Nr8   r*   )	r   r   r>   shaper9   r   r   astyper.   )r   r   r   r9   r   r/   s         r!   test_linearoperator_shape_dtypez/TestLaplacianNd.test_linearoperator_shape_dtypew   s     *"EJGGJyyQF"""yyE!!!%gi
;WYVE]	
 	
%HXZWY
;XZWYVE]	
r#   c                 H   t        ||      }t        j                  |      }t        j                  |      }|j	                  d      }t        j                  d|z        j	                  |df      }|||g}	|	D ]  }
|j                  |
j                  |            }|
j                  |j                  k(  sJ |j                  |k(  sJ |
j                  dk(  s_|j                         |
j                  |      z  }|j                  |k(  sJ t        j                  ||        y)E Test the dot-product for type preservation and consistency.
        r*   r   r   r4   N)r   r   r>   rB   reshapedotrV   rU   r9   ndimr   array_equal)r   r   r   r9   r   r/   x0x1x2	input_setxyyys                r!   test_dotzTestLaplacianNd.test_dot   s     *"=GGJYYq\ZZ YYq1u%%q!f-RL	A(A77agg%%%77e###vv{[[]QXXe_4xx5(((q"% r#   c                 ~    t        j                  t        d      5  t        dd       d d d        y # 1 sw Y   y xY w)NzUnknown value 'robin')matchr   robinr   )pytestraises
ValueErrorr   )r   s    r!   $test_boundary_conditions_value_errorz4TestLaplacianNd.test_boundary_conditions_value_error   s(    ]]:-DE5gF FEEs   3<N)__name__
__module____qualname____doc__rj   markparametrizer"   r3   rF   rQ   rS   	ALLDTYPESrW   rf   rm    r#   r!   r   r      s    [[T#GH$$ I$$LD [[\+EF[[T#GHE I GE [[\+EF[[T#GH< I G<$ [[\+EF[[T#GHD I GD [[Wi0[[\+EF[[T#GH
 I G 1
. [[Wi0[[\+EF[[T#GH& I G 1&$Gr#   r   c                       e Zd ZdZd Zej                  j                  de      d        Z	ej                  j                  de      ej                  j                  de      d               Z
y)TestSakuraiz
    Sakurai tests
    c           	         t        d      }t        |j                          |t        j                  d                   t        j
                  g dg dg dg dg dg dg      }t        j                  ||j                                t        j                  |j                         j                         |j                                t        j
                  g dg d	g d
g      }t        j                  ||j                                t        j
                  g d      }t        j                  ||j                                t        j                  |d d |j                  d             y )Nr   )   r   r   r   r   )rz   r   rz   r   r   r   )r   rz   r   rz   r   r   )r   r   rz   r   rz   r   )r   r   r   rz   r   rz   )r   r   r   r   rz   ry   )r   r   r   r   r   r   )rz   rz   rz   rz   rz   rz   )ry   r   r   r   r   ry   )g|$g?g۝{0%?gA9W@g,@gH%@g{Qq,@r4   )
r	   r   r   r   r-   r   r^   r.   tobandedr?   )r   sakr    abrO   s        r!   test_specific_shapezTestSakurai.test_specific_shape   s    aj3;;=#bffQi.9HH((((((	
 	q#++-(
s||~--/?XX(((
 	r3<<>*HH+ 	q#//+,
q!ucooa01r#   r9   c                    d}t        ||      }|j                  ||fk(  sJ |j                  |k(  sJ t        |j	                         t        |      j	                         j                  |             t        |j                         j	                         t        |      j                         j	                         j                  |             y N   r9   )r	   rU   r9   r   r   rV   r.   )r   r9   r/   r|   s       r!   rW   z+TestSakurai.test_linearoperator_shape_dtype   s    au%yyQF"""yyE!!!3;;='!**<*<*>*E*Ee*LM3<<>113"1:..088:AA%H	Jr#   argument_dtypec                 F   t        j                  ||      }d}t        |      }t        j                  |      }|j	                  d      }t        j                  d|z        j	                  |df      }|||g}	|	D ]$  }
|j                  |
j                  |            }|
j                  |j                  k(  sJ t        j                  |j                  |      sJ |
j                  dk(  sq|j                         |
j                  |      z  }t        j                  ||       t        j                  |j                  |      sJ |j                         |
j                  |      z  }t        j                  ||       t        j                  |j                  |      r%J  y)rY   ry   rZ   r4   N)r   promote_typesr	   rB   r[   r\   rV   rU   can_castr9   r]   r   r^   r.   )r   r9   r   result_dtyper/   r|   r_   r`   ra   rb   rc   rd   yayss                 r!   rf   zTestSakurai.test_dot   sC   
 ''>ajYYq\ZZ YYq1u%%q!f-RL	A01A77agg%%%;;qww555vv{[[]QXXn%==q"%{{288\:::\\^ahh~&>>q"%{{288\::: r#   N)rn   ro   rp   rq   r~   rj   rr   rs   rt   rW   rf   ru   r#   r!   rw   rw      ss    2@ [[Wi0J 1J [[Wi0[[-y9; : 1;r#   rw   c                       e Zd ZdZeez   Zd Zej                  j                  de      d        Zej                  j                  de      ej                  j                  de      d               Zy)TestMikotaPairz
    MikotaPair tests
    c           	         d}t        |      }|j                  }|j                  }t        |j	                          |t        j                  |                   t        |j	                          |t        j                  |                   t        j                  g dg dg dg dg dg dg      }t        j                  ||j	                                t        j                  |j                         j	                         |       t        j                  g dg d	g      }t        j                  ||j                                t        j                  d
|d
z         }t        j                  t        j                  d|z        |j	                                t        j                  |j                         j	                         |j	                                t        j                  d|z  |j                                t        j                  g d      }t        j                  ||j                                t        j                  |d d |j                  d             y )Nr   )   r   r   r   r   )r   	   rz   r   r   r   )r   rz   r   r   r   )r   r   r   ry   r   r   )r   r   r   r   r5   r   )r   r   r   r   r   r   )r   r   rz   r   r   r   )r   r   r   ry   r5   r   r   g      ?)r   r6   r         $   r4   )r
   krE   r   r   r   r-   r   r^   r.   r{   rB   rL   r?   )	r   r/   mikmik_kmik_mr   kbminvrO   s	            r!   r~   z"TestMikotaPair.test_specific_shape   s   m5==?E"&&),<=5==?E"&&),<=HH((((((	
 	q%--/*
u~~'//115XX((
 	r5>>+,yyAE"
rwwrDy)5==?;
u~~'//15==?C
rDy%.."23HH-.
q#//+,
q!ucooa01r#   r9   c                    d}t        ||      }|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(  sJ |j                  t
        j                  k(  sJ |j                  ||fk(  sJ |j                  t
        j                  k(  sJ t        |j                         |j                         j                  |             t        |j                         j                         |j                         j                         j                  |             y r   )r
   r   rE   rU   r9   r   r=   r   r   rV   r.   )	r   r9   r/   r   r   r   mik_default_dtypemikd_kmikd_ms	            r!   rW   z.TestMikotaPair.test_linearoperator_shape_dtype!  sK   %({{q!f$$${{e###{{q!f$$${{e###&qM"$$"$$||1v%%%||rzz)))||1v%%%||rzz)))5==?!>>+2259	;5>>+335!??,446==eD	Fr#   r   c                    t        j                  ||      }d}t        ||      }|j                  }|j                  }t        j
                  |      }|j                  d      }	t        j
                  d|z        j                  |df      }
||g}||	|
g}|D ]-  }|D ]$  }|j                  |j                  |            }|j                  |j                  k(  sJ t        j                  |j                  |      sJ |j                  dk(  sq|j                         |j                  |      z  }t        j                  ||       t        j                  |j                  |      sJ |j                         |j                  |      z  }t        j                  ||       t        j                  |j                  |      r%J  0 y)rY   ry   r   rZ   r4   N)r   r   r
   r   rE   rB   r[   r\   rV   rU   r   r9   r]   r   r^   r.   )r   r9   r   r   r/   r   r   r   r_   r`   ra   lo_setrb   lorc   rd   r   r   s                     r!   rf   zTestMikotaPair.test_dot7  sk   
 ''>%(YYq\ZZ YYq1u%%q!f-RL	BFF188N34ww!''))){{177L99966Q;(@@BNN1b);;rxx>>>.)AABNN1b);;rxx>>>  r#   N)rn   ro   rp   rq   REAL_DTYPESCOMPLEX_DTYPEStested_typesr~   rj   rr   rs   rW   rt   rf   ru   r#   r!   r   r      s     /L#2J [[Wl3F 4F* [[Wl3[[-y9? : 4?r#   r   )rj   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float32r=   r   	complex64
complex128r   rt   r   rw   r   ru   r#   r!   <module>r      s      = '  + > Aggrxx2884
zz2::&,,.$~5	VG VGrE; E;N_? _?r#   