o
    iq                     @   sl  d dl Zd dlmZ d dlZd dlmZ d dlmZm	Z	 ddl
mZmZ dd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zejd%g d&d%efd'd(Zejd%e g d)g d)d%e!eef fd*d+Z"ejd%g d,d%efd-d.Z#d/d0 Z$d1d2 Z%d3d4 Z&d5d6 Z'd7d8 Z(d9d: Z)d;d< Z*d=d> Z+ejd?g d@dAdB Z,ejd?g d@dCdD Z-ejd?g d@dEdF Z.ejd?g d@dGdH Z/dIdJ Z0ejdKg dLdMdN Z1ejd?g d@dOdP Z2ejd?g d@dQdR Z3ejdSg dTdUdV Z4dWdX Z5dYdZ Z6ejd?g d@d[d\ Z7ejd?g d@d]d^ Z8d_d` Z9ejdag dbdcdd Z:ejd?g d@dedf Z;ejd?g d@dgdh Z<didj Z=ejdag dbdkdl Z>g dmZ?ejdne?dodp Z@g dqZAejdreAdsdt ZBdudv ZCdwdx ZDdydz ZEd{d| ZFd}d~ ZGg dZHejdaeHdd ZIdddgd gffdddgd gffddd gdgffddd dgddgffddg dg dffddddg dg dffgZJejdeJdd ZKdd ZLejdg ddd ZMejd?g ddd ZNejd?g ddd ZOdS )    N)assert_equal)
block_diag)	coo_arrayrandom_array   )_block_diag_extract_block_diagc                  C   s   t d} | jdksJ t|  td t d}|jdks J t| td t d}|jdks5J t| td d S )N   r
   r   )r   r
            r   shaper   toarraynpZzeros)empty1dZempty2dZempty_nd r   U/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/sparse/tests/test_coo.pytest_shape_constructor	   s   r   c                  C   s  t g d} | jdksJ t|  tg d t g dg dg}|jdks*J t| tg dg dg tddgddggd	d
gddgggddgddggdd
gdd	gggddgddggddgddgggg}t |}|jdkswJ t| | tjd tjddddd	d
ddd	}t |}|jdksJ t| | t dtj	ggddggd
d	ggg}|jdksJ t| tdtj	ggddggd
d	ggg d S )N   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   arrayrandomseedrandnnan)res1dres2darr4dZres4dZarr9dZres9dZnan_3dr   r   r   test_dense_constructor   s*    ""2r'   c               	   C   s  t g ddd} | jdksJ t|  tg d t g dg dgdd}|jdks.J t| tg dg dg t dggdgggdd}|jdksQJ t| tdggdggg tjd	 tjd
dddddd
}t |dd}|jdksJ t| | d S )Nr   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%   Zres3dZarr7dZres7dr   r   r   !test_dense_constructor_with_shape7   s     r)   c                   C   s*  t jtdd tg ddd W d    n1 sw   Y  t jtdd tg ddd W d    n1 s9w   Y  t jtdd tg dgdd W d    n1 sYw   Y  t jtdd tdggd	gggd
d W d    n1 s|w   Y  t jtdd tdgdgffdd W d    n1 sw   Y  t jtdd tddgddgddgddgffdd W d    n1 sw   Y  t jtdd tdgdgff W d    n1 sw   Y  t jtdd tdgdgdgdgff W d    d S 1 sw   Y  d S )Ninconsistent shapesmatchr   r   r(   r
   r   r	   r
   r   r   r   r   z)axis 0 index 2 exceeds matrix dimension 2r   r   )r   z)axis 1 index 3 exceeds matrix dimension 3r   )r   r
   r   znegative axis 0 index: -1znegative axis 2 index: -1)pytestraises
ValueErrorr   r   r   r   r   .test_dense_constructor_with_inconsistent_shapeK   s8   ($r4   c                  C   s6   t d} t | }|jdksJ t| td d S )Nr	   r   )r   resr   r   r   test_1d_sparse_constructorg   s   r6   c                  C   s@   t ddgddgff} | jdksJ t|  tg d d S )Nr   r   r   r   r	   )r   r   r   r   r   r   r   r   r   r5   r   r   r   test_1d_tuple_constructorn   s   r9   c                  C   sD   t ddgddgffdd} | jdksJ t|  tg d d S )Nr   r   r   r   r-   r(   )r   r   r   r   r7   r8   r   r   r   $test_1d_tuple_constructor_with_shapet   s   r:   c                  C   s   t d} tjtdd d| d< W d    n1 sw   Y  tjtdd | dd d f  W d    d S 1 s:w   Y  d S )N)r   r   z3'coo_array' object does not support item assignmentr+   r   r   r   z''coo_array' object is not subscriptabler   )r   r1   r2   	TypeError)Zcoo_2dr   r   r   test_non_subscriptabilityy   s   
"r=   c                  C   s   d\} }t j| d gddt j|d gddf}tdg|f| |fd}|| | df}|jd jt dks9J |jd d | | d ksHJ ||| }|jd jt dks[J |jd d |d kshJ d S )	N)i i r   Zint32)dtypegffffff
@r(   r   Zint64)r   r   r   reshapecoordsr>   )MNr@   ABCr   r   r   test_reshape_overflow   s   (rF   c                  C   s  t g d} | jdksJ | d}|jdksJ t| tdgdgdgg | d}|jdks5J t| tg dg tjt	dd	 | d
 W d    n1 sYw   Y  tjt	dd	 | d W d    n1 suw   Y  t g dg dg}|jdksJ |d}|jdksJ t| tg d |d}|jdksJ t| tdgdgdggdgdgdggg tjt	dd	 |d W d    d S 1 sw   Y  d S )Nr   r   r
   r	   r.   r   r   r
   r   r
   zcannot reshape arrayr+   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   r1   r2   r3   )arr1dZcol_vecZrow_vecarr2dZflatZ	to_3d_arrr   r   r   test_reshape   s2   
 


0"rN   c                  C   s\   t g d} | jdksJ | jdksJ t g dg dg}|jdks%J |jdks,J d S )NrG   r	   r   rJ   rK   r   r
   )r   r   nnzrL   rM   r   r   r   test_nnz   s   rQ   c                  C   s   t g dj} | jdksJ t|  tg d t g dg dgj}|jdks,J t| tddgddgdd	gg d S )
NrG   r	   rJ   rK   r   r   r   r   r
   )r   Tr   r   r   r   r   rP   r   r   r   test_transpose   s   *rS   c                  C   s  t g djdd} | jdksJ t|  tg d t g dg dgjdd}|jdks2J t| tg dg dg tjt	d	d
 t g djdd W d    n1 s^w   Y  tjt	dd
 t g dg dgjdd W d    d S 1 sw   Y  d S )NrG   r   axesr	   rJ   rK   r   r   r   "axes don't match matrix dimensionsr+   repeated axis in transposer   r   )
r   	transposer   r   r   r   r   r1   r2   r3   rP   r   r   r   test_transpose_with_axis   s    "r\   c                  C   s   t g d} t| jtg d t| jt| j | jj| jjks%J | jjj	du s.J g d| _t
| jdks<J t| jtg d | jj| jjksQJ tjtdd g d| _W d    d S 1 siw   Y  d S )Nr   r   r   r   Fr   r   zcannot set row attributer+   )r   r   colr   r   rowZ
zeros_liker>   flagsZ	writeablelenr@   r1   r2   r3   r8   r   r   r   test_1d_row_and_col   s   
"re   c               	   C   s   t g d} | j| j| j| jfD ]}tjtdd |  W d    n1 s'w   Y  q| j| j	| j
fD ]}t|  |   q5d S )Nr]   zCannot convertr+   )r   ZtobsrZtocscZtodiaZtolilr1   r2   r3   ZtocooZtocsrZtodokr   r   )r5   fr   r   r   test_1d_toformats   s   rg   arg)r   r   r   r   r   c                 C   P   t g d}t|}|j| dd ||  |j|jksJ t| | d S )Nr]   FZrefcheckr   r   r   resizer   r   r   rh   denr5   r   r   r   test_1d_resize   s   
ro   r   r   r
   r   c                 C   ri   )NrG   Frj   rk   rm   r   r   r   test_1d_to_2d_resize   s   
rq   )r   r   r   r   c                 C   sX   t g dg dg}t|}|j| dd ||  |j|jks#J t| | d S )NrG   r   r   r   Frj   rk   rm   r   r   r   test_2d_to_1d_resize  s   
rs   c               	   C   s  t g dg dff} | jdksJ t|  tddg |   | jdks)J t|  tddg t g dg dg dg dg dff}|jdksPJ td	d	gd	d	gd	d	ggd	d	gd	d	gd	d	ggd	d	gd	d	gdd	gggd	d	gd	d
gd	d	ggd	d	gd	d	gd	d	ggd	d	gd	d	gd	d	gggg}t| | |  |jdksJ t| | t g dg dff}|jdksJ |  |jdksJ d S )N)r   r   r   r   r   r   r
   r   r   )r   r
   r   )r   r   r   )r   r   r   r   r   rp   r   r   r   r
   )r   rO   r   r   r   r   Zsum_duplicates)rL   r&   expectedZ
arr_nodupsr   r   r   test_sum_duplicates  s*   (>>rw   c                  C   s   t g dg dff} | jdksJ |  dksJ t|  tddg |   | jdks1J |  dks9J t|  tddg t| jtdg t| j	tdg d S )N)r   r   r   rt   r
   r   r   )
r   rO   count_nonzeror   r   r   r   eliminate_zerosra   rb   )rL   r   r   r   test_eliminate_zeros1  s   rz   c                  C   sR   t g d} t g d}| | }t| | }t|t|u s"J t|| d S Nr   r^   r_   r   ru   )r   r   r   typer   den_aden_bexpr5   r   r   r   test_1d_add_dense>  s   r   c                  C   sF   t g d} t g d}| | }t| t| }t||  d S r{   )r   r   r   r   r   r   r   	dense_sum
sparse_sumr   r   r   test_1d_add_sparseG  s
   r   c                  C   sP   t g d} t g d}| | }t| | }t |dks!J t|| d S )Nr|   ru   r   )r   r   r   ndimr   r~   r   r   r   test_1d_matmul_vectorP  s   r   c                  C   s\   t g d} t g dg dgj}| | }t| | }t|t|u s'J t|| d S )Nr|   ru   r
   r   r   r   )r   r   rR   r   r}   r   )rn   otherr   r5   r   r   r   test_1d_matmul_multivectorY  s   r   c                  C   s&  t g dg dg} t| }| | j }||j }t| | t g dg dg} t| }| | j }|| j }t|| t g dg dg}t g d}t|}||j }||j }t|| t g d}t dgdgd	gg}|| }t|| }t|| t|t| }t|| d S )
Nru   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   rR   r   r   list)rn   rM   r   r5   r   r   rL   r   r   r   test_2d_matmul_multivectorb  s.   








r   c                  C   sN   t g d} tjtdd t|   W d    d S 1 s w   Y  d S )Nr|   z diagonal requires two dimensionsr+   )r   r   r1   r2   r3   r   Zdiagonal)rn   r   r   r   test_1d_diagonal  s   "r   r   )rT   r   )r   r   r   r   r   )r
   r   r   rG   )r   r   r
   r   r   r   c                 C   s4   t jd t jjdd| d}tt| | d S )Nr   r   r   )lowhighsize)r   r    r!   randintr   r   Ztodense)r   arrr   r   r   test_nd_todense  s   r   c                 C   s6   t | }t |}|j| ksJ t| t|  d S Nr   )r   	empty_arrr5   r   r   r   test_nd_sparse_constructor  s   r   c                 C   s@   t jd t jj|  }t|}|j| ksJ t| | d S )Nr   r   r    r!   r"   r   r   r   r   r   r   r5   r   r   r   test_nd_tuple_constructor  s
   r   c                 C   sD   t jd t jj|  }t|| d}|j| ksJ t| | d S )Nr   r(   r   r   r   r   r   $test_nd_tuple_constructor_with_shape  s
   r   c                  C   s   t jtdd tddgddgddgddgffdd	 W d    n1 s%w   Y  tg g g g g ffd
d	} t|  td
 d S )Nzexceeds matrix dimensionr+   r   r   r   r   r   )r
   r   r   r(   )r   r   r   r
   )r1   r2   r3   r   r   r   r   empty)r   r   r   r   (test_tuple_constructor_for_dim_size_zero  s
   (r   )r   	new_shape))r   r   r   r   )r
   r      r   )r   )$      )r   )i8  )r   )r   r
   r   r   r
   r   r
   c                 C   sf   t jd}t| d|td}|j| ksJ | }||}||}|j|ks*J t| | d S N4e333333?densityrngr>   )	r   r    default_rngr   intr   r   r?   r   )r   r   r   r&   Zden4dexp_arrZres_arrr   r   r   test_nd_reshape  s   

r   c                 C   s8   t jd}t| d|td}|jt | ksJ d S r   )r   r    r   r   r   rO   rx   r   )r   r   r   r   r   r   test_nd_nnz  s   r   c                 C   sX   t jd}t| d|td}| j}| }|j| d d d ks#J t	||  d S )Nr   r   r   r0   )
r   r    r   r   r   r   rR   r[   r   r   )r   r   r   r   	trans_arrr   r   r   test_nd_transpose  s   
r   )r   	axis_perm))r	   rT   )r   rW   ))r   r   r
   r   r   r
   )r   r   r   r   r
   r   c                 C   sH   t jd}t| d|td}|j|d}t| t j| |d d S )Nr   r   r   rU   )r   r    r   r   r   r[   r   r   )r   r   r   r   r   r   r   r   test_nd_transpose_with_axis  s    r   c                   C   s   t jtdd tg djdd W d    n1 sw   Y  t jtdd tg dg dgjd	d W d    d S 1 sBw   Y  d S )
NrX   r+   rG   rW   rU   rY   rJ   rK   rZ   )r1   r2   r3   r   r[   r   r   r   r   %test_transpose_with_inconsistent_axis  s   "r   c               	   C   s  t g dg dg dg dff} | jdksJ |  dks J t|  tg dg dgg dg dgg dg d	gg |   | jdksJJ |  dksRJ t|  tg dg dgg dg dgg dg d	gg g dg dg dg d
g df}t g d|f}|jdksJ | dksJ |  |jdksJ | dksJ t|jtg  t|j	tg  t|j
g g g g g f d S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   rr   )r   r   r   r
   )r   r   r   r   )r   r   r   r   r   )r   rO   rx   r   r   r   r   ry   ra   rb   r@   )Zarr3dr@   Zarr5dr   r   r   test_nd_eliminate_zeros  s,   ""r   c                 C   sp   t jd}t| d|td}t| d|td}| | }}|| }|| }t|t|u s1J t|| d S r   r   r    r   r   r   r   r}   r   r   r   sp_xsp_yden_xden_yr   r5   r   r   r   test_nd_add_dense     r   c                 C   s`   t jd}t| d|td}t| d|td}| | }}|| }|| }t||  d S r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   test_nd_add_sparse  s   r   c                  C   sh   t dgt jggdgdggg} t dgdggdgdggg}| | }t| t| }t||  d S Nr   r_   r   r   r
   )r   r   infr   r   r   r   r   r   r   test_add_sparse_with_inf%  
    r   )a_shapeb_shape))r   )r   )r   r   )r   r   )r   r   r
   r   )r   r   r   r
   c                 C   sh   t jd}t| d|td}t|d|td}tjtdd ||  W d    d S 1 s-w   Y  d S )Nr   r   r   z6(Incompatible|inconsistent) shapes|cannot be broadcastr+   r   r    r   r   r   r1   r2   r3   r   r   r   arr_aarr_br   r   r   +test_nd_add_sparse_with_inconsistent_shapes.  s   
"r   c                 C   sp   t jd}t| d|td}t| d|td}| | }}|| }|| }t|t|u s1J t|| d S r   r   r   r   r   r   test_nd_sub_dense;  r   r   c                 C   s`   t jd}t| d|td}t| d|td}| | }}|| }|| }t||  d S r   r   r   r   r   r   test_nd_sub_sparseH  s   r   c                  C   sh   t dgt jggdgdggg} t dgdggdgdggg}| | }t| t| }t||  d S r   )r   r   r#   r   r   r   r   r   r   r   test_nd_sub_sparse_with_nanV  r   r   c                 C   sh   t jd}t| d|td}t|d|td}tjtdd ||  W d    d S 1 s-w   Y  d S )Nr   r   r   r*   r+   r   r   r   r   r   +test_nd_sub_sparse_with_inconsistent_shapes_  s   
"r   )	)r   r
   r   r   r   r;   rT   ))r   r
   r   r   r   )r   )r   r   r   r   rT   )r   r   r
   r   r   r   r   )r   r   r   r   )r   r   )r	   r.   )r-   r-   )	mat_shape	vec_shapec           	      C   sr   t jd}t| d|td}t|d|td}| | }}|| }|| }t|| |t| }t|| d S r   r   r    r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r5   r   r   r   test_nd_matmul_vectorv  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   r   r   r   r   )r   r
   r   r
   )r-   )r   r   r
   )r	   )r   r   r   r
   r   )r-   r   r   )
mat_shape1
mat_shape2c           	      C   s   t jd}t| d|td}t|d|td}| | }}|| }|| }t| | || }t|| |t| }t|| || }t|| d S Nr   r   r   Zrandom_stater>   r   )	r   r   r   r   r   r   r   r   r5   r   r   r   test_nd_matmul  s   

r   c                  C   s"  t jd} tdd| td}tdd| td}tjtdd ||  W d    n1 s,w   Y  tjtdd ||   W d    n1 sIw   Y  tdd| td}tjtd	d ||  W d    n1 slw   Y  tjtd	d ||   W d    d S 1 sw   Y  d S )
Nr   )r   r   r   r   r
   r   r   )r   r   r
   r   r   z)matmul: dimension mismatch with signaturer+   )r   r   r
   r   z&Batch dimensions are not broadcastable)	r   r    r   r   r   r1   r2   r3   r   )r   r   r   Zsp_zr   r   r   .test_nd_matmul_sparse_with_inconsistent_arrays  s    

"r   c                  C   s\   t g d} t g d}t|  | }| |}t|| | | }t|| d S )Nr   r   )r   r   dotr   r   )abr   r5   r   r   r   test_dot_1d_1d  s   

r   c                  C   sJ   t ddgddgddgg} d}| |}t|  |}t| | d S )Nr   r   r
   r   r   r   )r   r   r   r   r   )r   r   r5   r   r   r   r   test_dot_sparse_scalar  s
   
r   c                  C   sb   t ddggddggg} t g d}tjtdd | | W d    d S 1 s*w   Y  d S )Nr   r   r
   r   r   znot aligned for n-D dotr+   )r   r1   r2   r3   r   )r   r   r   r   r   !test_dot_with_inconsistent_shapes  s
   "r   c                  C   s   t ddgddgg} tjtdd | d  W d    n1 s!w   Y  tjtdd | d  W d    n1 s=w   Y  tjtdd | d   W d    n1 sXw   Y  tjtdd d |   W d    d S 1 stw   Y  d S )	Nr   r   r
   r   zargument not supported typer+   zarg not supported typezunsupported operand type)r   r1   r2   r<   r   	tensordot)r   r   r   r   test_matmul_dot_not_implemented  s   

"r   )
)rI   rI   )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   c                 C   s   t jd}t| d|td}t|d|td}t | | }|| }t|| |t| }t|| ||}t| | d S r   )	r   r    r   r   r   r   r   r   r   )r   r   r   r   r   r   r5   r   r   r   test_dot_nd  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
   r   r   r   r   r
   ))r   r   r   )r   r
   r   r   )r   r
   r   )r   r   rV   c                 C   s   t jd}t| d|td}t|d|td}t j| | |d}|j| |d}t|| |jt| |d}t|| |j||d}t	|t
u rVt| | d S t|| d S )Nr   r   r   rU   )r   r    r   r   r   r   r   r   r   r}   r   )r   r   rV   r   r   r   r   r5   r   r   r   test_tensordot  s   

r   c                  C   s   t jd} tdd| td}tdd| td}dgdgf}tjtdd |j||d	 W d    n1 s5w   Y  td
d| td}tdd| td}g dddgf}tjtdd |j||d	 W d    d S 1 slw   Y  d S )Nr   )r
   r   r   r   r   )r
   r   r   r   z*sizes of the corresponding axes must matchr+   rU   )r   r   r   r
   r   )r   r   r
   r   )r   r   r   r   r
   z,axes lists/tuples must be of the same length)	r   r    r   r   r   r1   r2   r3   r   )r   r   r   rV   r   r   r    test_tensordot_with_invalid_args  s   "r   )actual_shapebroadcast_shape)	))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   )rH   )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   c                 C   sH   t jd}t| d|td}||}t | |}t| | d S r   )	r   r    r   r   r   Z_broadcast_toZbroadcast_tor   r   )r   r   r   r   r5   r   r   r   r   test_broadcast_to+  s
   
r   ))r   r   r   r   r   r   r   )r   r   r   r
   r   c                    s   t jd}t| d|td}| }tt |jd d }||f|jdd     fddt	|D }t
| }t|}t| | d S )Nr   r   r   r^   c                    s"   g | ]} |d d d d f qS r   r   ).0iZreshaped_arrayr   r   
<listcomp>D  s   " z#test_block_diag.<locals>.<listcomp>)r   r    r   r   r   r   prodr   r?   ranger   r   r   )r   r   r   r   Z
num_slicesZmatricesr   r5   r   r   r   test_block_diag9  s   r  c                 C   s@   t jd}t| d|td}tt|| }t| |  d S r   )	r   r    r   r   r   r   r   r   r   )r   r   r   r5   r   r   r   test_extract_block_diagL  s   r  )Pnumpyr   Znumpy.testingr   r1   Zscipy.linalgr   Zscipy.sparser   r   Z_coor   r   r   r'   r)   r4   r6   r9   r:   r=   rF   rN   rQ   rS   r\   re   rg   markZparametrizer   ro   ziptuplerq   rs   rw   rz   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   Zmat_vec_shapesr   Zmat_mat_shapesr   r   r   r   r   r   Z
dot_shapesr   Ztensordot_shapes_and_axesr   r   r   r  r  r   r   r   r   <module>   s     %

		
					!



	






	



	
	






	
