o
    i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copyZsort_indicesr   )Xr    r   \/home/kim/smarthome/.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   r4   r   supr0   r   r   r   test_setelementO   s*   "zTestGetSet1D.test_setelementN)__name__
__module____qualname__r   r,   r1   rF   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*   r/   )r   r   r   r   r0   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 )Nr2   r3   r5   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   rK   )r   r!   r   &Trying to assign a sequence to an itemr   )r   r@   rA   rB   rC   r   r   r   r   r(   r)   r*   rD   
ValueError)r   r   r4   r   rE   r0   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
   r3   r   r:   )rN   r   r!   )r   r   int16r4   Zint32Z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   rN   r   r   r   r   r   r   r   r   )r   r   r   r   r   r8   )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!   r8   r:   r    r   r   r         r6   r   r   )r   r%   r   r   r   rX   int8s_	enumerater   reprsize)r   r   rY   r   sre   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 )Nr^   .).)r   r%   r   r   r   r   rY   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:   r5   r   r   r   r!   r9   r   r_   )r   zerosrA   rB   rC   r   r   r   )r   r   r   rY   rE   rZ   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 )NrT   r   rU   r   r:   r8   r5   r   zidx=)err_msg)	rX   r   rA   rB   rC   r   rr   r   r   )r   r   r   idxr   rE   rY   rR   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 )	Nrq   r5   r!   r   r   r   rU   r_   )r   rA   rB   rC   r   r   r   rr   )r   r   rY   rE   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.   )rU   r   r>   r   r!   r   r5   r:   r   r7   )	r   r   rA   rB   rC   r   r   r   r   )r   r   rY   expectedblockrE   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 )Nrq   r:   r!   r   r   r6   r_   r   r8   r   rb   rc   r5   rU   d   rO   r#   zcould not be broadcast together)r   rr   floatre   r   rd   rA   rB   rC   r   rf   r   r   rg   r   listr(   r)   rP   rD   rX   )
r   r   r   rY   re   rj   rE   r   rk   Z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   Zonesr   r   )r   r   r   rY   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   r3   F)r   rV   r   r4   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   rr   r(   r)   r*   rP   	TypeErrorr/   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 )Nr^   )r:   rU   r   r   r_   r!   rb   )r!   r6   r   r_   r   r9   r-   r6   rc   r8   )r   r%   r&   r   r   r   ro   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 )Nr^   r   r   r!   rb   r_   r:   rc   r8   )r   r:   r!   r6   )r_   rb   r!   r6   r-   )r   r%   r   r   r   )r   r   rY   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  r^   r   r!   rh   r3   r9   3   Tr_   z3bool index .* has shape|boolean index did not matchr#   )r   randomseedr%   r   randintboolr   r   rr   r(   r)   r*   r/   )	r   r   rY   r   IZZ1ZZ2ZZ3rR   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   ra   r   r!   r   r3   r9   <   z%bool index .* has shape|only integersr#   r   r   )r   r   r   r%   r   r   r   r   r   r   r(   r)   r*   r/   )r   r   rY   r   r   ZXspYZ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   rO   r#   r!   )r   r   r(   r)   rP   rD   )r   r   Z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 )	Nr^   r   r   r9      Fr3   )r   r   r!   r   r   r   r%   r   r   r   int)r   r   rY   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   rr   r(   r)   r*   rP   r   rD   )r   r   r   rR   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 )Nrq   )r!   r   r   rU   r   r   r:   r8   r!   r5   r   )rX   r   r%   rr   rA   rB   rC   r   r   r   r   )r   r   Mr   r   rY   rE   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.   rL   )r   r   r!   r5   z3too many indices for array|tuple index out of ranger#   r   rU   ra   r   )r   rU   ra   r   r   )r   r:   rN   )r   r   rA   rB   rC   r   r   r(   r)   r*   r/   r   r   r   rr   )
r   r   r   rY   Zi0i1i2rE   rR   rZ   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 )	Nr^   r   r!   r   rN   F*   r3   r   )r   r   rY   r   r   r   r   r   test_fancy_assign_emptyO  s   
z-TestSlicingAndFancy1D.test_fancy_assign_emptyN)rG   rH   rI   rM   rS   rW   r]   rn   rp   rs   rv   rw   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rJ   e   s2    	%		]$rJ   )
contextlibr(   numpyr   Znumpy.testingr   r   Zscipy.sparser   r   r   Ztest_arithmetic1dr   Zformats_for_index1dcontextmanagerr   markZparametrizer   rJ   r   r   r   r   <module>   s    
K