o
    ×?HhÇ  ã                   @   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ÚXcsrÚnp_sliceÚ	csr_slice© r   ú[/home/air/sanwanet/gpt-api/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   Ú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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   r0   )r   Ú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   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/   r1   )é   é   é   )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_indexingb   s    

rO   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s’J ‚ J ‚t|j
ƒ}
t|j
ƒ}t|
|gdd}|j
|	j
ks¬J ‚|jjt j	ksµJ ‚| | d g}t|||ffƒ}t||gdd}|jjt jksÕJ ‚|j ¡ | d ksàJ ‚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	   Úint64r2   )Ú	max_int32rB   Ú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_int64u   s4   

&&&

rh   Ú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š™™™™™¹?)Úrandom_stateÚdensityr   r   )r   r   Údefault_rngr
   ÚcopyrW   ÚastyperX   rU   Útestingr   r   )ri   ÚrngÚbase_mtxÚindptr_64bitÚindices_64bitÚmtxr   r   r   Ú#test_mixed_index_dtype_int_indexing¬   s    þþûrv   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 sŒw   Y  tj	t
d	d
 tg d¢gƒjdd W d   ƒ n1 s®w   Y  tj	t
d	d
 tg d¢ƒjdd W d   ƒ d S 1 sÐw   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   )r2   r<   )r.   r   )r   r@   Úzerosr   Ú_broadcast_tor   r   Úbroadcast_toÚpytestÚraisesÚ
ValueErrorr   )ÚaÚbÚeÚres_aÚres_bÚres_cÚres_dÚres_er   r   r   Útest_broadcast_toÀ   s,   
ÿÿ"ÿr†   )Únumpyr   Únumpy.testingr   r   r   Úscipy.sparser   r   r   r   r	   Úscipyr
   r{   r   r#   r(   r-   ÚmarkÚparametrizer;   rO   rh   rv   r†   r   r   r   r   Ú<module>   sT    þýþýþýþýôÿ
7
