U
    /‰d  ã                   @   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dd d d gd d d d gd ddd ggƒd dfedd d d gd d d d gd ddd ggƒddfedd d d gd d d d gd ddd ggƒddfed dd d d gd d d d d gd d ddd g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kƒ d S )Nr   )r   Útoarrayr   Útyper   )ÚiÚslÚXÚXcsrZnp_sliceZ	csr_slice© r   ú?/tmp/pip-unpacked-wheel-9gxwnfpp/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||||ƒ qpqhd 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 d …f }| |¡}t|| ¡ ƒ tt	|ƒtkƒ 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   s    
r   c                  C   s†   d} t j d¡ t j | | f¡}d||dk< t|ƒ}t| ƒD ]D}|d d …||d …f }| |¡}t|| ¡ ƒ tt	|ƒtkƒ 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.   s    
r   z"matrix_input, axis, expected_shaper   r   é   )r   é   )r   r   Úboth)r   r   )r   é   c                 C   sä   | j jd d }|}|d }|dkrV| ||…d d …f j j}| ||…d d …f j j}nr|dkr| d d …||…f j j}| d d …||…f j j}n8|dkrÈ| ||…||…f j j}| ||…||…f j j}||ksÔt‚||ksàt‚d S )Nr   r   r!   )ÚAÚshapeÚAssertionError)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 dddgdddgddd	ggƒ} d
dd
g}t |¡}d
dd
gd
dd
gd
dd
gg}t |¡}d
dd
gd
dd
gf}t |d ¡t |d ¡f}| |  ¡ }| |  ¡ }| | }	| | }
| | }| | }||k ¡ sÒt‚|	|
k ¡ sât‚||k ¡ sòt‚d S )Nr   r   r   r   r    r"   é   é   é   FT)r   r   Úarrayr   Úallr%   )Ú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_indexinga   s      


r-   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 stt‚|jj|jj  kr’t jks˜n t‚|jj|jj  kr¶t jks¼n t‚t	||gdd}	|	j ¡ || d ksæt‚|| d | ksút‚|	jj|	jj  krt j
ks"n t‚t|jƒ}
t|jƒ}t	|
|gdd}|j|	jksXt‚|jjt j
kslt‚| | d g}t|||ffƒ}t	||gdd}|jjt jks®t‚|j ¡ | d ksÆt‚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   r%   ÚindicesZdtypeZindptrr   Zint64r$   )Z	max_int32r,   Ú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_int64t   s4    

$$(

r2   )Znumpyr   Znumpy.testingr   r   Zscipy.sparser   r   Zpytestr   r   r   r   ÚmarkZparametrizer&   r-   r2   r   r   r   r   Ú<module>   sR   

þ ý

þ ý

þ ýþ ýôÿ
