o
    ?Hhq                     @   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npzeros)empty1dempty2dempty_nd r   [/home/air/sanwanet/gpt-api/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arr4dres4darr9dres9d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(   res3darr7dres7dr   r   r   !test_dense_constructor_with_shape7   s     r3   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   ($r>   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   r@   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"   r?   r   r   r   test_1d_tuple_constructorn   s   rC   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   r7   r/   )r   r   r    r   rA   rB   r   r   r   $test_1d_tuple_constructor_with_shapet   s   rD   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 assignmentr5   r   r   r   z''coo_array' object is not subscriptabler   )r   r;   r<   	TypeError)coo_2dr   r   r   test_non_subscriptabilityy   s   
"rH   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   int32)dtypegffffff
@r/   r   int64)r   r"   r   reshapecoordsrJ   )MNrM   ABCr   r   r   test_reshape_overflow   s   (rS   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	   r8   r   r   r
   r   r
   zcannot reshape arrayr5   r
   r
   )r
   r   r   r   r   r   r   r
   r   )r   )r   r   r   r   r   r
   )r   r
   r   r   )
r   r   rL   r   r   r   r"   r;   r<   r=   )arr1dcol_vecrow_vecarr2dflat	to_3d_arrr   r   r   test_reshape   s2   
 


0"r_   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 )NrT   r	   r   rW   rX   r   r
   )r   r   nnzrY   r\   r   r   r   test_nnz   s   rb   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 )
NrT   r	   rW   rX   r   r   r   r   r
   )r   Tr   r   r   r   r"   ra   r   r   r   test_transpose   s   *rd   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 )NrT   r   axesr	   rW   rX   r   r   r   "axes don't match matrix dimensionsr5   repeated axis in transposer   r   )
r   	transposer   r   r   r   r"   r;   r<   r=   ra   r   r   r   test_transpose_with_axis   s    "rm   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 attributer5   )r   r   colr   r"   row
zeros_likerJ   flags	writeablelenrM   r;   r<   r=   rB   r   r   r   test_1d_row_and_col   s   
"rx   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 )Nrn   zCannot convertr5   )r   tobsrtocsctodiatolilr;   r<   r=   tocootocsrtodokr   r   )r?   fr   r   r   test_1d_toformats   s   r   arg)r   r   r   r   r    c                 C   P   t g d}t|}|j| dd ||  |j|jksJ t| | d S )Nrn   Frefcheckr   r"   r   resizer   r   r   r   denr?   r   r   r   test_1d_resize   s   
r   r   r   r
   r   c                 C   r   )NrT   Fr   r   r   r   r   r   test_1d_to_2d_resize   s   
r   )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 )NrT   r   r   r   Fr   r   r   r   r   r   test_2d_to_1d_resize  s   
r   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   r   r   r   r   r
   )r   r`   r   r   r   r"   sum_duplicates)rY   r)   expected
arr_nodupsr   r   r   test_sum_duplicates  s*   (>>r   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   r   r
   r   r   )
r   r`   count_nonzeror   r   r   r"   eliminate_zerosrr   rs   )rY   r   r   r   test_eliminate_zeros1  s   r   c                  C   sR   t g d} t g d}| | }t| | }t|t|u s"J t|| d S Nr   ro   rp   r   r   )r   r"   r   typer   den_aden_bexpr?   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   r   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   r   r
   r   r   r   )r   r"   rc   r   r   r   )r   otherr   r?   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 )
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   rc   r   r   list)r   r\   r   r?   r   r   rY   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 dimensionsr5   )r   r"   r;   r<   r=   r   diagonal)r   r   r   r   test_1d_diagonal  s   "r   r   )re   r   )r   r   r   r   r   )r
   r   r   rT   )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   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_arrr?   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   r?   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 dimensionr5   r   r    r   r   r   )r
   r   r   r/   )r   r   r   r
   )r;   r<   r=   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rngrJ   )	r   r#   default_rngr   intr   r   rL   r   )r   r   r   r)   den4dexp_arr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   r`   r   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   r:   )
r   r#   r   r   r   r   rc   rl   r   r   )r   r   r   r   	trans_arrr   r   r   test_nd_transpose  s   
r   )r   	axis_perm))r	   re   )r   rh   ))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   rf   )r   r#   r   r   r   rl   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 )
Nri   r5   rT   rh   rf   rj   rW   rX   rk   )r;   r<   r=   r   rl   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   r   )r   r   r   r
   )r   r   r   r   )r   r   r   r   r   )r   r`   r   r   r   r   r"   r   rr   rs   rM   )arr3drM   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   r?   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   rp   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 broadcastr5   r   r#   r   r   r   r;   r<   r=   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   r4   r5   r   r   r   r   r   +test_nd_sub_sparse_with_inconsistent_shapes_  s   
"r   )	)r   r
   r   r   r   rE   re   ))r   r
   r   r   r    )r    )r   r   r   r   re   )r   r   r
   r   r   r   r   )r   r   r   r   )r   r   )r	   r8   )r7   r7   )	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   r?   r   r   r   test_nd_matmul_vectorv  s   
r   ))r   )r   r
   r   r   r   r   )r   r    r
   r	   )r  r8   )r   r   r
   ))r   r
   r   r   )r   r   r   r   r
   ))r   r   r   r   r   )r   r
   r   r
   )r7   )r   r   r
   )r	   )r   r   r   r
   r   )r7   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   random_staterJ   r   )	r  r  r   r   r   r   r   r   r?   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 signaturer5   )r   r   r
   r   z&Batch dimensions are not broadcastable)	r   r#   r   r   r   r;   r<   r=   r   )r   r   r   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   r?   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  r?   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 dotr5   )r   r;   r<   r=   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 typer5   zarg not supported typezunsupported operand type)r   r;   r<   rF   r  	tensordot)r   r   r   r   test_matmul_dot_not_implemented  s   

"r  )
)rV   rV   )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   r?   r   r   r   test_dot_nd  s   


r  r  r  r   r  r   r
   r   r  r  r  r  )r   r   r   r    r   rq   )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   rg   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  rf   )r   r#   r   r   r   r  r   r   r   r   r   )r   r   rg   r   r   r   r   r?   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 matchr5   rf   )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   r;   r<   r=   r  )r   r   r   rg   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   )rU   )r   r   r
   ))r   r    r   )r   r    r   )r8   )r
   r   ))r   r   )r9   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   _broadcast_tobroadcast_tor   r   )r  r  r   r   r?   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  ro   c                    s"   g | ]} |d d d d f qS r   r   ).0ireshaped_arrayr   r   
<listcomp>D  s   " z#test_block_diag.<locals>.<listcomp>)r   r#   r   r   r   r   prodr   rL   ranger   r   r   )r   r   r   r   
num_slicesmatricesr   r?   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   r?   r   r   r   test_extract_block_diagL  s   r,  )Pnumpyr   numpy.testingr   r;   scipy.linalgr   scipy.sparser   r   _coor   r   r   r.   r3   r>   r@   rC   rD   rH   rS   r_   rb   rd   rm   rx   r   markparametrizer   r   ziptupler   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_vec_shapesr   mat_mat_shapesr  r
  r  r  r  r  
dot_shapesr  tensordot_shapes_and_axesr  r  r!  r+  r,  r   r   r   r   <module>   s     %

		
					!



	




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

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

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