o
    iy7                     @   s  d dl Z d dlZd dlmZ d dlZd dlm	  m
Z dZdd eD Zeg dg dg dgZed dgd	d ggZejg d
g dg dg dgedZdd eD Zdd eD Zdd eD Ze jjdeedZe jjdeedZe jjdeedZedd Zedd Zedd Zedd Zedd Zed d! Z ed"d# Z!ed$d% Z"ed&d' Z#ed(d) Z$ed*d+ Z%ed,d- Z&ee jj'd.d/ Z(ed0d1 Z)ed2d3 Z*ed4d5 Z+ed6d7 Z,ed8d9 Z-ed:d; Z.ed<d= Z/ed>d? Z0ed@dA Z1edBdC Z2edDdE Z3e jdFdGdHgdIdJ Z4edKdL Z5ee jdMg dNdOdP Z6ee jdMdQdRgdSdT Z7edUdV Z8edWdX Z9edYdZ Z:d[d\ Z;d]d^ Z<e jd_ej	j=d`dagfej	j>d`dagfej	j?dbdcgfge jddej@ejAgdedf ZBdgdh ZCdidj ZDdkdl ZEdmdn ZFdodp ZGdqdr ZHdsdt ZIdudv ZJdwdx ZKe jdyej	jLej	jMfdzd{ ZNd|d} ZOd~d ZPdd ZQdd ZRe jddej	jSfdej	jTfdHej	jUfdGej	jVfdej	jWfdej	jXfdej	jYffdd ZZdS )    N)bsrcoocsccsrdiadoklilc                 C   s   g | ]}t tj| d qS )_array)getattrscipysparse).0T r   [/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/sparse/tests/test_array_api.py
<listcomp>
   s    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   dtypec                 C      g | ]}|t qS r   Ar   sparrayr   r   r   r   !       c                 C   r   r   Br   r   r   r   r   "   r   c                 C   r   r   )Xr   r   r   r   r   #   r   r   )Zidsr   r    c                 C   sL   t | jddtjrJ d| jddjdksJ | jddjdks$J d S )Nr   ZaxisExpected array, got matrix)r   r   )r   )
isinstancesumnpmatrixshaper   r   r   r   test_sum0   s
   r(   c                 C   s    t | jddtjrJ dd S )Nr   r!   r"   )r#   meanr%   r&   r   r   r   r   	test_mean8   s   r*   c                 C   s   t | drt| jddtjrJ dt | dr&t| jddtjr&J dt | dr9t| jddtjr9J dt | drLt| jddtjrNJ dd S d S )Nminr   r!   r"   maxargminargmax)hasattrr#   r+   r%   r&   r,   r-   r.   r   r   r   r   test_min_max>   s$   



r0   c                 C   s   t |  tjrJ dd S Nr"   )r#   todenser%   r&   r   r   r   r   test_todenseO   s   r3   c                 C   s   | j jd d dv rd S | dd d f | d d df | dddgf | ddgdf | dg | d d ddgf | ddgd d f | dddggf | ddggdf f	}|D ]}t|tjjsdJ d|jj qRd S )Nr   )r   r   r   r   r   r   zExpected sparse array, got )	__class____name__r#   r   r   r   Z_class__)r   Zall_resresr   r   r   test_indexingU   s"   r7   c                 C   s*   t j| j}t| | t jrJ dd S r1   )r%   randomr'   r#   r&   )r   r    r   r   r   test_dense_additionk   s   r9   c                 C   s   t | |  tjjsJ dd S r1   r#   r   r   r   r   r   r   r   test_sparse_additionq      r;   c                 C   s(   t | |   | d ksJ d S )Nr   )r%   allr2   powerr   r   r   r   test_elementwise_mulv   s   (r?   c                 C   s   t t d |   W d    n1 sw   Y  t t tdtjt	d
dd  W d    n1 s;w   Y  td|  |  d ksOJ t|  |  |  d ks`J d S )Nr      r   )pytestraises	TypeError
ValueErrorr%   eyer   r   	csr_arrayarangereshaper=   r2   r   r   r   r   test_elementwise_rmul{   s   
&&rI   c                 C   s,   t | | j  | | j ksJ d S N)r%   r=   r   r2   dotr   r   r   r   test_matmul   s   ,rL   c                 C   sr   t | d tjjsJ dt| d  |  d  tjt	dd | d  W d    d S 1 s2w   Y  d S )Nr   r"   z
zero power)matchr   )
r#   r   r   r   nptZassert_equalr2   rA   rB   NotImplementedErrorr   r   r   r   test_power_operator   s
   
"rP   c                 C   s   t | |  tjs
J d S rJ   )r#   r%   Zndarrayr   r   r   r   test_sparse_divide   s   rQ   c                 C   sJ   t t t| |   tjjsJ W d    d S 1 sw   Y  d S rJ   )rA   ZwarnsRuntimeWarningr#   r2   r   r   r   r   r   r   r   test_sparse_dense_divide   s   "rS   c                 C   s   t | d tjjsJ dd S )Nr   r"   r:   r   r   r   r   test_dense_divide   r<   rT   c                 C   6   t t | j W d    d S 1 sw   Y  d S rJ   )rA   rB   AttributeErrorr   r   r   r   r   test_no_A_attr      "rW   c                 C   rU   rJ   )rA   rB   rV   Hr   r   r   r   test_no_H_attr   rX   rZ   c                 C   s4   t | dtjjsJ t | dtjjsJ d S )Nr   )r#   Z_getcolr   r   r   Z_getrowr   r   r   r   test_getrow_getcol   s   r[   c                 C   s*   t | }t|g d | g d  d S )Nr   r   r   r   )splaZaslinearoperatorrN   assert_allclose)r   Lr   r   r   test_as_linearoperator   s   
 r`   c                 C   sT   | j jd d dkrd S t| }t|tjjsJ t	|
 tj| 
  d S Nr   r   )r4   r5   r]   invr#   r   r   r   rN   r^   r2   r%   linalgr   Cr   r   r   test_inv   s
   
 rf   c                 C   s^   | j jd d dkrd S tj| }t| }t|tjjs J t	
| t|  d S ra   )r4   r5   r   r   Z
csc_matrixr]   expmr#   r   rN   r^   r2   )r   ZBmatre   r   r   r   	test_expm   s   
rh   c              	   C   sH   | j jd d dkrd S tt| tddgt| ddg  d S Nr   r   r   r   )	r4   r5   rN   r^   r]   Zexpm_multiplyr%   arrayrg   r   r   r   r   test_expm_multiply   s   rk   c                 C   s&   t | }t|tj|   d S rJ   )r]   normrN   r^   r%   rc   r2   )r   re   r   r   r   	test_norm   s   
rm   c                 C   s(   t | }t|tj|  d d S )Nr   )r]   Z
onenormestrN   r^   r%   rc   rl   r2   rd   r   r   r   test_onenormest   s   
rn   c                 C   sF   | j jd d dvrd S tt| ddgtj| 	 ddg d S )Nr   )r   r   r   r   )
r4   r5   rN   r^   r]   Zspsolver%   rc   solver2   r   r   r   r   test_spsolve   s   rp   fmtr   r   c                 C   sR   g dg dg dg dg}| dkrt j|}nt j|}t|g d d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r\   )r   r   rF   	csc_arrayr]   Zspsolve_triangular)rq   Zarrr    r   r   r   test_spsolve_triangular   s   rw   c                 C   sR   | j jd d dkrd S t| }t|tddgtj	| 
 ddg d S ri   )r4   r5   r]   Z
factorizedrN   r^   r%   rj   rc   ro   r2   )r   LUr   r   r   test_factorized  s   
ry   solver)
ZbicgZbicgstabZcgZcgsZgmresZlgmresminresZqmrZgcrotmkZtfqmrc                 C   s`   |dkri }nddi}t t|| tddgfi |\}}|dks$J tj|ddgdd d S )	Nr{   atolgh㈵>r   r   r   g?r|   )r
   r]   r%   rj   rN   r^   )r   rz   kwargsxinfor   r   r   test_solvers  s   &r   ZlsqrZlsmrc                 C   s0   t t|| g d^}}t| | g d d S )Nr   r   r   )r
   r]   rN   r^   )r   rz   r   _r   r   r   test_lstsqr+  s   r   c                 C   s.   t j| dd\}}t| | |d |  d S Nr   kr   )r]   ZeigsrN   r^   r    evr   r   r   	test_eigs5  s
   
r   c                 C   s8   | | j  } tj| dd\}}t| | |d |  d S r   )r   r]   ZeigshrN   r^   r   r   r   r   
test_eigsh>  s   

r   c                 C   sZ   t j| dd\}}}tj|  \}}}t|}t|d d }tj||dd d S )Nr   r   gMbP?r}   )	r]   Zsvdsr%   rc   Zsvdr2   sortrN   r^   )r    usZvhu2s2Zvh2r   r   r   	test_svdsH  s
   
r   c                  C   d   t jg dg dg dg dg} t| }tj|t	g dtj
g dtjdddd	 d S 
Nrr   rs   rt   ru   r\   r   g+=gMg<)Zrtolr|   )r   r   rv   r]   ZsplurN   r^   ro   r%   rj   asarrayfloat64r    rx   r   r   r   	test_spluQ     

r   c                  C   r   r   )r   r   rv   r]   ZspilurN   r^   ro   r%   rj   r   r   r   r   r   r   
test_spilu`  r   r   zcls,indices_attrsindicesindptrrowcolexpected_dtypec           	      C   s  t jtddd}|j|j||j	|ff}| |}|D ]}t
||j|ks.J q"| |dd}|D ]}t
||j|ksCJ q7t| t jjjr| }|j|j||j|f}| |}|D ]}t
||j|kspJ qd| |dd}|D ]}t
||j|ksJ qyd S d S )N	   r   )r   r   )r'   )r   r   	coo_arrayr%   rG   rH   datar   Zastyper   r
   r   
issubclassZ_compressedZ
_cs_matrixZtocsrr   r   )	clsZindices_attrsr   Zinput_arrayZ	coo_tupleresultattrZinput_array_csrZ	csr_tupler   r   r   test_index_dtype_compressedo  s4   



r   c                  C   s&   t jg d} t| t jjrJ d S )N)r   r   r   )r   r   Zdiagsr#   r   mr   r   r   test_default_is_matrix_diags  s   r   c                  C   "   t jd} t| t jjrJ d S Nr   )r   r   rE   r#   r   r   r   r   r   test_default_is_matrix_eye     r   c                  C   s,   t jg dddd} t| t jjrJ d S )Nr   r   r   )r   r   Zspdiagsr#   r   r   r   r   r   test_default_is_matrix_spdiags  s   r   c                  C   r   r   )r   r   identityr#   r   r   r   r   r   test_default_is_matrix_identity  r   r   c                  C   sH   t jtddgddggtddgddgg} t| t jjr"J d S )Nr   r   r   r   r   r   Zkronr%   rj   r#   r   r   r   r   r   !test_default_is_matrix_kron_dense     (r   c                  C   sH   t jtddgddggtddgddgg} t| t jjr"J d S )Nr   r   r   r   r   r   r   r   r   r   "test_default_is_matrix_kron_sparse  r   r   c                  C   sH   t jtddgddggtddgddgg} t| t jjr"J d S )Nr   r   )r   r   Zkronsumr%   rj   r#   r   r   r   r   r   test_default_is_matrix_kronsum  r   r   c                  C   $   t jdd} t| t jjrJ d S r   )r   r   r8   r#   r   r   r   r   r   test_default_is_matrix_random     r   c                  C   r   r   )r   r   Zrandr#   r   r   r   r   r   test_default_is_matrix_rand  r   r   fnc                 C   sL   t jtd}t jddgddgg}| ||g}t|t jjr$J dS )zbSame idea as `test_default_construction_fn_matrices`, but for the
    stacking creation functions.r   r   r   N)r   r   
coo_matrixr%   rE   r#   r   )r   r   r   r   r   r   r   test_default_is_matrix_stacks  s   r   c                  C   s   t jtd} t jdgdgg}t jdgg}t j| ||f}t|t jjr-J t j| dgd|gg}t|t jjrBJ dS )z]Same idea as `test_default_construction_fn_matrices`, but for the block
    creation functionr   r   r   N)	r   r   r   r%   rE   Z
block_diagr#   r   Zbmat)r   r   re   r   r   r   r   ,test_blocks_default_construction_fn_matrices  s   r   c               	   C   sz   t D ]8} ttj|  d}|ddgg}|j| ksJ |j| ks"J tt d|_W d    n1 s5w   Y  qd S )Nr	   r   r   Zqqq)	sparray_typesr
   r   r   format_formatrA   rB   rV   )rq   Zarr_clsMr   r   r   test_format_property  s   r   c                  C   s   t jd} t j| }t| t jjrJ t|t jjsJ t j|s&J t j| s.J t j| r8J t j|  rBJ d S r   )r   r   rE   rF   r#   r   issparser2   r   ar   r   r   test_issparse     r   c                  C   s   t jd} t j| }t| t jjrJ t|t jjsJ t j|r&J t j| s.J t j| r8J t j|  rBJ d S r   )r   r   rE   rF   r#   r   Z
isspmatrixr2   r   r   r   r   test_isspmatrix
  r   r   )rq   r   r   r   r   r   r   c                 C   s   t jjd| d}t j|| }t|t jjrJ t|t jjs#J ||r)J ||s/J || r7J || r?J d S )Nr   )r   )r   r   rE   rF   Zasformatr#   r   r2   )rq   r   r   r   r   r   r   test_isspmatrix_format  s   r   )[rA   numpyr%   Znumpy.testingZtestingrN   Zscipy.sparser   Zscipy.sparse.linalgr   rc   r]   r   Zsparray_classesrj   r   r   floatr    ZsparraysZsquare_sparraysZeig_sparraysmarkZparametrizeZparametrize_sparraysZparametrize_square_sparraysZparametrize_eig_sparraysr(   r*   r0   r3   r7   r9   r;   r?   rI   rL   rP   rQ   Zthread_unsaferS   rT   rW   rZ   r[   r`   rf   rh   rk   rm   rn   rp   rw   ry   r   r   r   r   r   r   r   rF   rv   r   Zint64Zint32r   r   r   r   r   r   r   r   r   r   ZhstackZvstackr   r   r   r   r   Zisspmatrix_bsrZisspmatrix_cooZisspmatrix_cscZisspmatrix_csrZisspmatrix_diaZisspmatrix_dokZisspmatrix_lilr   r   r   r   r   <module>   s2   





























	
#
	







