o
    5ήc                     @   s   d dl Zd dlmZmZ d dlmZ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dS )    N)assert_array_almost_equalassert_)
csr_matrixhstackc                 C   s>   || |f }|| |f }t || d  tt|tu  d S )Nr   )r   toarrayr   typer   )islXXcsrnp_slice	csr_slice r   B/tmp/pip-target-vg8gfxp4/lib/python/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   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   getrowr   r   r   r   )r   r
   r   r   arr_row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   getcolr   r   r   r   )r   r
   r   r   arr_col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 jd d }|}|d }|dkr+| ||d d f j j}| ||d d f j j}n9|dkrH| d d ||f j j}| d d ||f j j}n|dkrd| ||||f j j}| ||||f j j}||ksjJ ||kspJ d S )Nr   r   r+   )Ashape)matrix_inputaxisexpected_shapeslice_1slice_2slice_3actual_shape_1actual_shape_2r   r   r   test_csr_empty_slices<   s   r7   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)datalist_indices1array_indices1list_indices2array_indices2list_indices3array_indices3slice_list1slice_array1slice_list2slice_array2slice_list3slice_array3r   r   r   test_csr_bool_indexinga   s    

rJ   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)   csr)formatN)r   iinfoint32maxr   indicesdtypeindptrr   int64r.   )	max_int32r=   rowmax_indices_1max_indices_2col_1col_2X_1X_2X_hs	X_1_empty	X_2_empty
X_hs_emptycol_3X_3X_hs_32r   r   r   test_csr_hstack_int64t   s4   

&&&

rc   )numpyr   numpy.testingr   r   scipy.sparser   r   pytestr   r   r#   r(   markparametrizer7   rJ   rc   r   r   r   r   <module>   sL    
