o
    i                     @   s4  d dl Zd dlmZmZmZ d dlmZmZm	Z	m
Z
mZ d dlmZ d dlZdd Zdd Zd	d
 Zdd Zejdeg dg dg dgd dfeg dg dg dgddfeg dg dg dgddfeg dg dg dgd dfgdd Zdd Zdd Zejd ee	ee
gd!d" Zd#d$ ZdS )%    N)assert_array_almost_equalassert_assert_array_equal)
csr_matrix
csc_matrix	csr_array	csc_arrayhstack)sparsec                 C   s>   || |f }|| |f }t || d  tt|tu  d S )Nr   )r   toarrayr   typer   )islXXcsrZnp_sliceZ	csr_slice r   U/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/sparse/tests/test_csr.py_check_csr_rowslice   s   r   c                  C   s   d} t jd t j| | f}d||dk< t|}td d d td d dtdddtdddg}t| D ]}|D ]	}t|||| q8q4d S )N
   r   ffffff?      )nprandomseedr   sliceranger   )Nr   r   Zslicesr   r   r   r   r   test_csr_rowslice   s   



r    c                  C   s   d} t jd t j| | f}d||dk< t|}t| D ]"}|||d d d f }||}t||  tt	|tu  qd S Nr   r   r   r   )
r   r   r   r   r   Zgetrowr   r   r   r   )r   r   r   r   Zarr_rowZcsr_rowr   r   r   test_csr_getrow       
r"   c                  C   s   d} t jd t j| | f}d||dk< t|}t| D ]"}|d d ||d f }||}t||  tt	|tu  qd S r!   )
r   r   r   r   r   Zgetcolr   r   r   r   )r   r   r   r   Zarr_colZcsr_colr   r   r   test_csr_getcol/   r#   r$   z"matrix_input, axis, expected_shape)r   r   r   r   )r   r   r   r   )r   r      r   )r      r   )r%   r   both)r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r%   r   )r      c                 C   s   |   jd d }|}|d }|dkr.| ||d d f   j}| ||d d f   j}n=|dkrM| d d ||f   j}| d d ||f   j}n|dkrk| ||||f   j}| ||||f   j}||ksqJ ||kswJ d S )Nr   r   r'   )r   shape)Zmatrix_inputZaxisZexpected_shapeZslice_1Zslice_2Zslice_3Zactual_shape_1Zactual_shape_2r   r   r   test_csr_empty_slices=   s   r*   c                  C   s   t g dg dg dg} g d}t|}g dg dg dg}t|}g dg df}t|d t|d f}| |  }| |  }| | }	| | }
| | }| | }||k s`J |	|
k shJ ||k spJ d S )Nr   r   r   )r%   r&   r(   )         )FTFr   r   )r   r   arrayr   all)dataZlist_indices1Zarray_indices1Zlist_indices2Zarray_indices2Zlist_indices3Zarray_indices3Zslice_list1Zslice_array1Zslice_list2Zslice_array2Zslice_list3Zslice_array3r   r   r   test_csr_bool_indexingb   s    

r2   c                  C   s  t t jj} dg}dg}| d }d}|d g}|d g}t|||ff}t|||ff}t|d |d | k s:J |jj|jj  krJt jksMJ  J |jj|jj  kr]t jks`J  J t||gdd}	|	j || d ksuJ || d | ksJ |	jj|	jj  krt j	ksJ  J t|j
}
t|j
}t|
|gdd}|j
|	j
ksJ |jjt j	ksJ | | d g}t|||ff}t||gdd}|jjt jksJ |j | d ksJ dS )z
    Tests if hstack properly promotes to indices and indptr arrays to np.int64
    when using np.int32 during concatenation would result in either array
    overflowing.
    g      ?r   r   r%   Zcsr)formatN)r   ZiinfoZint32maxr   indicesZdtypeindptrr	   int64r)   )Z	max_int32r1   rowZmax_indices_1Zmax_indices_2Zcol_1Zcol_2ZX_1ZX_2ZX_hsZ	X_1_emptyZ	X_2_emptyZ
X_hs_emptyZcol_3ZX_3ZX_hs_32r   r   r   test_csr_hstack_int64u   s4   

&&&

r9   clsc                 C   s   t jd}| tjdd|dd}| }| }|jt j|_|jt j|_|||fD ]8}t j	
|ddgd d f  |ddgd d f   t j	
|d d ddgf  |d d ddgf   q.d S )Nr   2   g?)Zrandom_stateZdensityr   r   )r   r   Zdefault_rngr
   copyr6   Zastyper7   r5   Ztestingr   r   )r:   rngZbase_mtxZindptr_64bitZindices_64bitZmtxr   r   r   #test_mixed_index_dtype_int_indexing   s    r>   c                  C   s  t g d} t dg}t d}t| d}t|d}t|d}t|d}t|d}t| t | d t| t |d t| t |d t| t |d t| t |d tj	t
d	d
 tg dg dgjdd W d    n1 sw   Y  tj	t
d	d
 tg dgjdd W d    n1 sw   Y  tj	t
d	d
 tg djdd W d    d S 1 sw   Y  d S )N)r   r   r   r%   )r   )r   r%   )r&   )r   r&   )r   )r&   r   zcannot be broadcast)match)r   r   r   )r%   r   r   )r   r   )r)   r+   )r%   r   )r   r/   Zzerosr   Z_broadcast_tor   r   Zbroadcast_topytestZraises
ValueErrorr   )abeZres_aZres_bZres_cZres_dZres_er   r   r   test_broadcast_to   s,   
"rE   )numpyr   Znumpy.testingr   r   r   Zscipy.sparser   r   r   r   r	   Zscipyr
   r@   r   r    r"   r$   markZparametrizer*   r2   r9   r>   rE   r   r   r   r   <module>   sT    
7
