o
    `^hQ                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
 ddlmZ ee	gZe jdd ZejdeG d	d
 d
ZejdeG dd dZdS )    N)assert_allcloseassert_equal)	csr_array	dok_arraySparseEfficiencyWarning   )toarrayc                 c   sF    dV  t | dr| jsdS | j }d| _|   t|| jd dS )zDChecks that sorted indices property is retained through an operationNhas_sorted_indicesFz'Expected sorted indices, found unsorted)hasattrr	   indicescopysort_indicesr   )Xr    r   `/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/scipy/sparse/tests/test_indexing1d.pycheck_remains_sorted   s   
r   	spcreatorc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestGetSet1Dc                 C   s   t g d}||}|jd }t| |D ]1}t||d f  ||d f  t|d |f  |d |f  t|d d |f  |d d |f  qd S )N      r   r   )nparrayshaperanger   r   )selfr   DANjr   r   r   test_None_index   s   
$zTestGetSet1D.test_None_indexc                 C   s  |t ddd}|d jdksJ |dddf jdks!J |d dddf jd	ks/J |d
 jdks8J |d jd	ksAJ |d jdksJJ |d jdksSJ |d dd d f jdksaJ |dd d d f jdksoJ |dd d d f jdks}J tjtdd |d  W d    n1 sw   Y  tjtdd |d ddd df  W d    n1 sw   Y  tjtdd |dddd d f  W d    n1 sw   Y  tjtdd |dd dd d f  W d    d S 1 sw   Y  d S )N   r   r   )r      r   r   r"   r   )r   r   )Nr   r"   )Nr   r"   N)Nr   )r   r   )r   N)r   r   zOnly 1D or 2D arraysmatch)Nr"   r   NN)r   arangereshapendimr   pytestraises
IndexErrorr   r   r   r   r   r   test_getitem_shape%   s.   
"zTestGetSet1D.test_getitem_shapec              	   C   s   t g d}||}|jd }t| |D ]}t|| ||  qdD ]}tjtdd || W d    n1 s=w   Y  q$|d dksKJ tjtdd |d W d    d S 1 scw   Y  d S )	Nr   r   )r   z index (.*) out of (range|bounds)r$   )r   r   r   )	r   r   r   r   r   r)   r*   r+   __getitem__)r   r   r   r   r   r   ijr   r   r   test_getelement=   s   
"zTestGetSet1D.test_getelementc              
   C   s   t j}|d|d}t j Y}|td |d|d< |d|d< |d|d< |d	|d
< d|d< |d|d< |d|d< dD ]}tjtdd |	|d W d    n1 sYw   Y  q?W d    d S 1 sjw   Y  d S )Nr!   dtype2Changing the sparsity structure of .* is expensiver   r   r   g      "@      	      )ir#   )   r<   )   zout of (range|bounds)r$        ^@)
r   float64testingsuppress_warningsfilterr   r)   r*   r+   __setitem__)r   r   r5   r   supr1   r   r   r   test_setelementO   s*   "zTestGetSet1D.test_setelementN)__name__
__module____qualname__r    r-   r2   rG   r   r   r   r   r      s
    
r   c                   @   s   e Z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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/d0 Zd1S )2TestSlicingAndFancy1Dc              	   C   sr   t g d}||}t|d  |d  dD ]}tjtdd || W d    n1 s1w   Y  qd S )Nr   r   )r   r   r   z"out of (range|bounds)|many indicesr$   )r   r   r   r   r)   r*   r+   r0   )r   r   r   r   r1   r   r   r   test_get_array_indexj   s   z*TestSlicingAndFancy1D.test_get_array_indexc              
   C   s&  t j}|d|d}t j {}|td |d|t d< |d|t d< t| g d dD ]}t	j
td	d
 ||d W d    n1 sLw   Y  q2ddg dt g dfD ]!}d}t	j
t|d
 |d| W d    n1 s{w   Y  q_W d    d S 1 sw   Y  d S )Nr3   r4   r6   g      @   g       @)r   r   r   r   r   r   r"   r   r   r   r   r   )r>   )r=   zindex .* out of (range|bounds)r$   r@   r   rL   )r   r"   r   &Trying to assign a sequence to an itemr   )r   rA   rB   rC   rD   r   r   r   r   r)   r*   r+   rE   
ValueError)r   r   r5   r   rF   r1   vmsgr   r   r   test_set_array_indexs   s.   "z*TestSlicingAndFancy1D.test_set_array_indexc                 C   sf   t |dtjddd jtj t |dtjdddd jtj t |dtjdd d  jtj d S )N
   r4   r   r;   )rO   r   r"   )r   r   int16r5   int32int64)r   r   r   r   r   test_dtype_preservation   s    "$z-TestSlicingAndFancy1D.test_dtype_preservationc                 C   s  t d}||}t|d d  |d d    t|dd |dd   t g d}||}t|dd |dd   t g d}||}t|dd |dd   t|dd  |dd    t|d d  |d d    t|td  |td    d S )	Ng      I@r"   r;   )	r   r   rO   r   r   r   r   r   r   r   r   )r   r   r   r   r   r9   )r   r&   r   r   r   slice)r   r   Br   Cr   EFr   r   r   test_get_1d_slice   s   
"z'TestSlicingAndFancy1D.test_get_1d_slicec                 C   s  t d}||}t|d |d  t|d |d  t|t d |d  t|d d   |d d   t|dd  |dd  t|ddd  |ddd  tt dt dd }t||  |dd  t j}|d d |d	d |dd  |dd d |d
d |dd |ddd |dd d |d dd dd	|d d  |d	d dddt dt dg}t|D ]/\}}|| }	|| }
|
j	dkrt|	|
t
| q|	jdkr|
jdkrqt|	 |
t
| qd S )N2   r"   r9   r;   r!   r   r   r         r7   r   r   )r   r&   r   r   r   r[   int8s_	enumerater   reprsize)r   r   r\   r   srh   slicesr   axyr   r   r   test_slicing_idx_slice   s4   
"*$
z,TestSlicingAndFancy1D.test_slicing_idx_slicec                 C   sB   t d}||}t|d  |d  t|d  |d  d S )Nra   .).)r   r&   r   r   r   r   r\   r   r   r   r   test_ellipsis_1d_slicing   s   
z.TestSlicingAndFancy1D.test_ellipsis_1d_slicingc                 C   s   |d}t d}t j 4}|td ||fD ]!}d|dd< d|dd< d|dd< d|dd < d|dd d	< qW d    n1 sEw   Y  t| | d S )
Nr;   r6   r   r   r   r"   r:   r   rb   )r   zerosrB   rC   rD   r   r   r   )r   r   r   r\   rF   r]   r   r   r   test_slice_scalar_assign   s    
z.TestSlicingAndFancy1D.test_slice_scalar_assignc              	   C   s   d}t dt d ddt ddfD ]<}||}tj }|td d||< W d    n1 s0w   Y  t|}d||< d	|}t| ||d
 qd S )NrU   r   rV   r   r;   r9   r6   r   zidx=)err_msg)	r[   r   rB   rC   rD   r   ru   r   r   )r   r   r   idxr   rF   r\   rS   r   r   r   test_slice_assign_2   s    


z)TestSlicingAndFancy1D.test_slice_assign_2c                 C   s  |d}t j y}|td d|d< d|d< d|d< d|d< |d }|d d  |d d < t|d d   |d d    |d }|d d |d d < tt d|d  |  |d }|dd  |d d< t|dd   |d d   W d    d S 1 sw   Y  d S )	Nrt   r6   r"   r   r   r   rV   rb   )r   rB   rC   rD   r   r   r   ru   )r   r   r\   rF   r   r   r   r   test_self_self_assignment   s(   "$"z/TestSlicingAndFancy1D.test_self_self_assignmentc                 C   s   |d}t g d}ddg}t j 9}|td d|d< d|d< || |d d < t| | t||d d< t| d d | W d    d S 1 sPw   Y  d S )	Nr/   )rV   r   r?   r   r"   r   r6   r;   r   r8   )	r   r   rB   rC   rD   r   r   r   r   )r   r   r\   expectedblockrF   r   r   r   test_slice_assignment	  s   "z+TestSlicingAndFancy1D.test_slice_assignmentc           
      C   s  |d}t dt}t j}|d d |dd |dd  |dd d |ddd |dd d	 |d dd d
d|d d  |dd dd	dt dt dg}t j F}|t	d t
|D ]\}}|||< |||< t| |t| q]tddd|ddd< tddd|ddd< t| | W d    n1 sw   Y  ttd}	tjtdd |d
|	 W d    n1 sw   Y  tjtdd |td |	 W d    d S 1 sw   Y  d S )Nrt   r;   r"   r   r   r7   rb   r   r9   r   re   rf   r6   rV   d   rP   r$   zcould not be broadcast together)r   ru   floatrh   r   rg   rB   rC   rD   r   ri   r   r   rj   r   listr)   r*   rQ   rE   r[   )
r   r   r   r\   rh   rm   rF   r   rn   toobigr   r   r   test_set_slice  s8   *$"z$TestSlicingAndFancy1D.test_set_slicec                 C   s8   |t d}|d}||d d< t| g d d S )Nr   r"   r"   )r   r   r   )r   onesr   r   )r   r   r   r\   r   r   r   test_assign_empty9  s   z'TestSlicingAndFancy1D.test_assign_emptyc                 C   s:   |dt jd}t|ddg jt j t|g  jt j d S )Nr   r4   F)r   rW   r   r5   r,   r   r   r   #test_dtype_preservation_empty_indexB  s   z9TestSlicingAndFancy1D.test_dtype_preservation_empty_indexc                 C   s   |t d}tjtttfdd |d W d    n1 s!w   Y  tjtttfdd |d W d    d S 1 sAw   Y  d S )Nr;   ,Index dimension must be 1 or 2|only integersr$   foo&tuple index out of range|only integers)r"   r   )r   ru   r)   r*   r+   rQ   	TypeErrorr0   r,   r   r   r   test_bad_indexG  s   "z$TestSlicingAndFancy1D.test_bad_indexc                 C   s  t dd}||}t|ddg  |ddg  t|dddgf  |dddgf  t|dddgf  |dddgf  t|t dddgf  |dddgf  t|dt ddgf  |dddgf  t|t dt ddgf  |dddgf  t|d d g df  |d d g df  t|dd	d
gf  |dd	d
gf  t|dd	ddgf  |dd	ddgf  t|dd	t ddgf  |dd	ddgf  t|ddgdf  |ddgdf  t|ddgdf  |ddgdf  t|t ddgdf  |ddgdf  t|ddgt df  |ddgdf  t|t ddgt df  |ddgdf  t|ddgd d f  |ddgd d f  t|ddgddf  |ddgddf  t|t ddgddf  |ddgddf  tt|ddgdd	gf |ddgdd	gf  tt|ddgddgf |ddgddgf  tt|t ddgddgf |ddgddgf  tt|ddgt ddgf |ddgddgf  tt|t ddgt ddgf |ddgddgf  t|dgdggdd	gf  |dgdggdd	gf  t|dgdgdggddgf  |dgdgdggddgf  t|t dgdgdggddgf  |dgdgdggddgf  t|dgdgdggt ddgf  |dgdgdggddgf  t|t dgdgdggt ddgf  |dgdgdggddgf  t|ddg  |ddg  t|ddg  |ddg  t|t ddg  |ddg  t|ddgd d f d d dd	gf  |ddgd d f d d dd	gf  t|ddgd d f d d ddgf  |ddgd d f d d ddgf  t|t ddgd d f d d t ddgf  |ddgd d f d d ddgf  t|d d ddgf dd	gd d f  |d d ddgf dd	gd d f  t|d d ddgf ddgd d f  |d d ddgf ddgd d f  t|d d t ddgf t ddgd d f  |d d ddgf ddgd d f  d S )Nra   )r;   rV   r   r   rb   r"   re   )r"   r7   r   rb   r   r:   r.   r7   rf   r9   )r   r&   r'   r   r   r   rr   r   r   r   test_fancy_indexing_2darrayT  s   &&,,2.*.4&&,,2..4....46$$*$HH2"HH2"z1TestSlicingAndFancy1D.test_fancy_indexing_2darrayc                 C   s  t d}||}t|dg  |dg  t|ddg  |ddg  t|ddg  |ddg  t|t d |d  t|t ddg  |ddg  t|t d |t d  t dgdgg}t||  ||  t dgdgd	gg}t||  ||  t|ddg  |ddg  t|ddg  |ddg  t|t ddg  |ddg  t|g d
 ddg  |g d
 ddg  t|g d ddg  |g d ddg  d S )Nra   r   r   r"   re   rb   r;   rf   r9   )r   r;   r"   r7   )rb   re   r"   r7   r.   )r   r&   r   r   r   )r   r   r\   r   indr   r   r   test_fancy_indexing  s*   
$$z)TestSlicingAndFancy1D.test_fancy_indexingc           	      C   sZ  t jd t d}||}t jt jjddddtd}tt|| ||  tt||dk ||dk  t j	dtd}t j	dtd}d	|d
< t j	dtd}d	|d< d}t
jt|d || W d    n1 smw   Y  t
jt|d || W d    n1 sw   Y  t
jt|d || W d    d S 1 sw   Y  d S )N  ra   r   r"   rk   r4   r:   3   Trb   z3bool index .* has shape|boolean index did not matchr$   )r   randomseedr&   r   randintboolr   r   ru   r)   r*   r+   r0   )	r   r   r\   r   IZ1Z2Z3rS   r   r   r   test_fancy_indexing_boolean  s*   
"z1TestSlicingAndFancy1D.test_fancy_indexing_booleanc                 C   s  t jd t d}||}t jt jjddddtd}t|}tt	|| ||  tt	||dk ||dk  t jt jjddddtd}t|}t
jtd	d
 || W d    n1 sdw   Y  t
jtdd
 ||df W d    d S 1 sw   Y  d S )Nr   rd   r   r"   r   r4   r:   <   z%bool index .* has shape|only integersr$   r   r   )r   r   r   r&   r   r   r   r   r   r   r)   r*   r+   r0   )r   r   r\   r   r   XspYYspr   r   r   "test_fancy_indexing_sparse_boolean  s   
"z8TestSlicingAndFancy1D.test_fancy_indexing_sparse_booleanc                 C   s\   |t ddg}tjtdd |dt ddg W d    d S 1 s'w   Y  d S )Nr   r   rP   r$   r"   )r   r   r)   r*   rQ   rE   )r   r   matr   r   r   test_fancy_indexing_seq_assign  s   "z4TestSlicingAndFancy1D.test_fancy_indexing_seq_assignc                 C   s   t d}d|dd< d|d< ||}t dgd }tt|| ||  t jg td}tt|| ||  t jg dtd}tt|| ||  d S )	Nra   r   r   r:      Fr4   )r   r   r"   r   r   r   r&   r   r   r   int)r   r   r\   r   KJr   r   r   test_fancy_indexing_empty  s   
z/TestSlicingAndFancy1D.test_fancy_indexing_emptyc                 C   sX   |t d}d}tjtttf|d |dd W d    d S 1 s%w   Y  d S )Nr;   r   r$   r   r"   )r   ru   r)   r*   r+   rQ   r   rE   )r   r   r   rS   r   r   r   test_bad_index_assign  s
   "z+TestSlicingAndFancy1D.test_bad_index_assignc              
   C   s   d}g dt d ddtdt ddt ddfD ]I}||}t|}tj *}|td	 d
||< t| d
||< W d    n1 sFw   Y  W d    n1 sUw   Y  t	|
 | qd S )Nrt   )r"   r   r   rV   r   r   r;   r9   r"   r6   r   )r[   r   r&   ru   rB   rC   rD   r   r   r   r   )r   r   Mr   r   r\   rF   r   r   r   test_fancy_indexing_set  s&   


z-TestSlicingAndFancy1D.test_fancy_indexing_setc           
   
   C   s  |d}|d}g d}d}t |}t j }|td t|2 || ||< d}tjt	|d |
| W d    n1 sCw   Y  || ||< W d    n1 sXw   Y  t|d d  |  |jdksqJ |d}t| dd	g|d
d< W d    n1 sw   Y  t| g d |d}t d}t| ||fD ]
}	g d|	g d< qW d    n1 sw   Y  t| | W d    d S 1 sw   Y  d S )Nr/   rM   )r   r   r"   r6   z3too many indices for array|tuple index out of ranger$   r   rV   rd   r   )r   rV   rd   r   r   )r   r;   rO   )r   r   rB   rC   rD   r   r   r)   r*   r+   r0   r   r   r   ru   )
r   r   r   r\   i0i1i2rF   rS   r]   r   r   r   test_sequence_assignment+  sD   




"z.TestSlicingAndFancy1D.test_sequence_assignmentc                 C   st   t d}d|d< d|ddg< ||}t dgd }d||< t| | t jg td}d||< t| | d S )	Nra   r   r"   r   rO   F*   r4   r   )r   r   r\   r   r   r   r   r   test_fancy_assign_emptyO  s   
z-TestSlicingAndFancy1D.test_fancy_assign_emptyN)rH   rI   rJ   rN   rT   rZ   r`   rq   rs   rv   ry   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rK   e   s2    	%		]$rK   )
contextlibr)   numpyr   numpy.testingr   r   scipy.sparser   r   r   test_arithmetic1dr   formats_for_index1dcontextmanagerr   markparametrizer   rK   r   r   r   r   <module>   s    
K