a
    ˆù»jÖ@  ã                   @   s   d Z ddlZddlZddlZddlmZmZm	Z	m
Z
 ddlmZmZ ddlmZ ej ¡ Ze e¡ ejjejjgZejejejgZejdd„ ƒZejdd	„ ƒZej  d
eee	e
g¡dd„ ƒZ!ej  d
e¡G dd„ dƒƒZ"ej  d
ejjg¡G dd„ dƒƒZ#dS )z*Test of 1D aspects of sparse array classesé    N)Ú	bsr_arrayÚ	csc_arrayÚ	dia_arrayÚ	lil_array)Úsupported_dtypesÚmatrix)ÚComplexWarningc                   C   s   t  g d¢d¡S )N)é   r   é   r   Úd)ÚnpÚarray© r   r   úFE:\soccer\ml_env\Lib\site-packages\scipy/sparse/tests/test_common1d.pyÚdat1d   s    r   c                    s$   ‡ fdd„t D ƒ‰‡fdd„tD ƒS )Nc                    s   i | ]}|ˆ   |¡“qS r   )Úastype)Ú.0Údtype©r   r   r   Ú
<dictcomp>   ó    z%datsp_math_dtypes.<locals>.<dictcomp>c                    s$   i | ]‰ ˆ ‡ fd d„ˆ  ¡ D ƒ“qS )c                    s   g | ]\}}||ˆ |ƒf‘qS r   r   )r   r   Údat©Úspr   r   Ú
<listcomp>    r   z0datsp_math_dtypes.<locals>.<dictcomp>.<listcomp>)Úitems)r   )Ú
dat_dtypesr   r   r      s   ÿ)Úmath_dtypesÚ
spcreatorsr   r   )r   r   r   Údatsp_math_dtypes   s    
þr   Ú	spcreatorc                 C   s>   t jtdd�� | g d¢ƒ W d   ƒ n1 s00    Y  d S )Nzarrays don't support 1D input©Úmatch©r   r
   é   r	   ©ÚpytestÚraisesÚ
ValueError)r    r   r   r   Útest_no_1d_support_in_init'   s    r)   c                   @   s  e Zd 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ed$d%„ ƒZed&d'„ ƒZed(d)„ ƒZd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Z d:d;„ Z!d<d=„ Z"d>S )?ÚTestCommon1Dz5test common functionality shared by 1D sparse formatsc                 C   sP   t  |dƒ ¡ t  d¡¡sJ ‚t  |dƒjd¡s4J ‚t  |dƒ ¡ d¡sLJ ‚d S )N©r	   r	   r   )r   Úarray_equalÚtoarrayÚzerosZnnzZcount_nonzero©Úselfr    r   r   r   Útest_create_empty2   s    zTestCommon1D.test_create_emptyc                 C   s:   t jtdd�� |dƒ W d   ƒ n1 s,0    Y  d S )Nzelements cannot be negativer!   )éýÿÿÿr%   r/   r   r   r   Útest_invalid_shapes7   s    z TestCommon1D.test_invalid_shapesc                 C   s   t ||ƒƒ d S ©N)Úrepr©r0   r    r   r   r   r   Ú	test_repr;   s    zTestCommon1D.test_reprc                 C   s   t ||ƒƒ d S r4   )Ústrr6   r   r   r   Útest_str>   s    zTestCommon1D.test_strc                 C   s0   t  g d¢d¡}t  | ||ƒ  ¡ ¡s,J ‚d S )N)éÿÿÿÿr   é   r   éûÿÿÿr   r
   éüÿÿÿr   r   r   r   r   )r   r   r,   r-   ©r0   r    ÚAr   r   r   Útest_negA   s    zTestCommon1D.test_negc                 C   s   |g d¢ƒ}|j dksJ ‚d S )Nr#   r
   )Úndimr>   r   r   r   Útest_1d_supported_initE   s    z#TestCommon1D.test_1d_supported_initc                 C   s¢   |g d¢ƒ}|  dd¡}g d¢g}t | ¡ |¡s6J ‚||ƒ}|  d¡}t | ¡ |d ¡s`J ‚|  d¡}|j|jkszJ ‚|j  d¡}t | ¡ |d ¡sžJ ‚d S )N©r
   r   é   r   r   r   r   r2   r   r   r   é   r
   é   r   ©rF   )Úreshaper   r,   r-   ÚshapeÚT)r0   r    ÚxÚyÚdesiredÚy2r   r   r   Ú$test_reshape_1d_tofrom_row_or_columnI   s    


z1TestCommon1D.test_reshape_1d_tofrom_row_or_columnc                 C   s‚   |g d¢ƒ}|  d¡}g d¢g d¢g d¢g d¢g}t | ¡ |¡sFJ ‚|  d¡}||u s\J ‚|  d¡}t | ¡ | ¡ ¡s~J ‚d S )	NrC   )é   r	   )r
   r   rD   )r   r   r   )r   r2   r   )r   r   rE   rG   rF   )rH   r   r,   r-   )r0   r    rK   rL   rM   r   r   r   Útest_reshape[   s    


zTestCommon1D.test_reshapec           	   	   C   s(  t j d¡ t  g d¢¡}t j d¡}t  g ¡}t  d¡}||||g}|D ]Ä}||ƒ}t jdd��š t  | ¡ ¡svJ ‚t  	| ¡ | ¡ ¡sŽJ ‚t  	|jd d�|jd d�¡s®J ‚t  	|jdd�|jdd�¡sÎJ ‚t  	|jd	d�|jd	d�¡sîJ ‚W d   ƒ qJ1 �s0    Y  qJ|jdt  d
¡d� d S )NiÒ  )	r   r
   r$   r	   r=   rE   éúÿÿÿrD   é	   rE   )é(   Úignore)Zover©Úaxisr   r:   r   ©rW   Úout)
r   ÚrandomÚseedr   Zrandr.   ZerrstateÚisscalarÚsumÚallclose)	r0   r    Zdat_1Zdat_2Zdat_3Zdat_4Zarraysr   Údatspr   r   r   Útest_sumg   s    

  BzTestCommon1D.test_sumc                 C   s  t  d¡}t  g d¢¡}||ƒ}tjtdd�� |jdd� W d   ƒ n1 sP0    Y  tjtdd�� |jdd� W d   ƒ n1 sŠ0    Y  tjtd	d�� |jd
d� W d   ƒ n1 sÄ0    Y  tjtdd�� |jd|d� W d   ƒ n1 �s0    Y  d S )Nr+   ©r   r
   r$   zaxis must be None, -1 or 0r!   r
   rV   úTuples are not accepted©r   r
   úaxis must be an integerç      ø?údimensions do not matchr   rX   )r   r.   r   r&   r'   r(   r]   Ú	TypeError©r0   r    rY   r   r_   r   r   r   Útest_sum_invalid_params{   s    
***z$TestCommon1D.test_sum_invalid_paramsc                 C   s>   t  g d¢¡}||ƒ}t  |¡}t  |¡}t  ||¡s:J ‚d S ©Nra   )r   r   r]   r^   )r0   r    r   r_   Údat_sumÚ	datsp_sumr   r   r   Útest_numpy_sum‰   s
    

zTestCommon1D.test_numpy_sumc                 C   s  t  g d¢¡}||ƒ}t  | ¡ | ¡ ¡s.J ‚t  |jd d�¡sDJ ‚t  |jd d�|jd d�¡sdJ ‚t  |jdd�|jdd�¡s„J ‚t  |jdd�|jdd�¡s¤J ‚tjtdd�� |jdd� W d   ƒ n1 sÔ0    Y  tjtdd�� |jdd� W d   ƒ n1 �s0    Y  d S )	Nra   rV   r   r:   rW   r!   r
   éþÿÿÿ)r   r   r^   Úmeanr\   r&   r'   r(   )r0   r    r   r_   r   r   r   Ú	test_mean’   s       *zTestCommon1D.test_meanc                 C   sj  t  t  d¡¡}t  g d¢g d¢g d¢g¡}|jdkrptjtdd�� ||ƒ W d   ƒ n1 sb0    Y  d S ||ƒ}tjtdd�� |jd	d
� W d   ƒ n1 s¨0    Y  tjt	dd�� |jdd
� W d   ƒ n1 sâ0    Y  tjt	dd�� |jdd
� W d   ƒ n1 �s0    Y  tjtdd�� |jd|d� W d   ƒ n1 �s\0    Y  d S )N)r
   r	   ra   )r	   r=   rE   )rR   rD   rS   ÚuniZzqr!   zaxis out of ranger	   rV   rb   rc   rd   re   rf   r
   rX   )
r   Zasarrayr.   r   Ú_formatr&   r'   r(   ro   rg   rh   r   r   r   Útest_mean_invalid_params¡   s    
&**,z%TestCommon1D.test_mean_invalid_paramsc                 C   s`   t  g d¢¡}||ƒ}tD ]@}|j|d�}|j|d�}t  ||¡sFJ ‚t  |j|j¡sJ ‚qd S ©Nra   ©r   )r   r   r   r]   r^   r,   r   )r0   r    r   r_   r   rk   rl   r   r   r   Útest_sum_dtype´   s    zTestCommon1D.test_sum_dtypec                 C   s`   t  g d¢¡}||ƒ}tD ]@}|j|d�}|j|d�}t  ||¡sFJ ‚t  |j|j¡sJ ‚qd S rt   )r   r   r   ro   r^   r,   r   )r0   r    r   r_   r   Údat_meanÚ
datsp_meanr   r   r   Útest_mean_dtype¿   s    zTestCommon1D.test_mean_dtypec                 C   sŠ   t  g d¢¡}||ƒ}t  dg¡}t  dg¡}|j|dd� |j|d� t  ||¡sXJ ‚|jd|dd� |jd|d� t  ||¡s†J ‚d S )Nra   r   T)rY   Úkeepdims©rY   )rW   rY   rz   rX   )r   r   ro   r^   )r0   r    r   r_   Zdat_outZ	datsp_outr   r   r   Útest_mean_outÊ   s    zTestCommon1D.test_mean_outc                 C   sR   t  g d¢¡}||ƒ}t  |¡}t  |¡}t  ||¡s:J ‚t  |j|j¡sNJ ‚d S rj   )r   r   ro   r^   r,   r   )r0   r    r   r_   rw   rx   r   r   r   Útest_numpy_meanÙ   s    

zTestCommon1D.test_numpy_meanc                 C   sr   t  g d¢¡}t  ||ƒ ¡ |¡s&J ‚t  g d¢¡}t  ||ƒ ¡ |¡sLJ ‚t  ||dd� ¡ | d¡¡snJ ‚d S ©N)r$   r	   rP   ©y      ð?      @r   r:   Úint16ru   )r   r   r,   r-   r   r>   r   r   r   Útest_from_arrayã   s
    zTestCommon1D.test_from_arrayc                 C   sr   g d¢}t  ||ƒ ¡ |¡s J ‚g d¢}t  ||ƒ ¡ t  |¡¡sFJ ‚t  ||dd� ¡ t  |¡ d¡¡snJ ‚d S r~   )r   r,   r-   r   r   r>   r   r   r   Útest_from_listì   s    ÿzTestCommon1D.test_from_listc                 C   sì   t  g d¢¡}tj |¡}t  ||ƒ ¡ |¡s2J ‚||ƒ}t  ||ƒ ¡ |¡sRJ ‚t  g d¢¡}tj |¡}t  ||ƒ ¡ |¡s„J ‚t  ||dd� ¡ | d¡¡s¦J ‚||ƒ}t  ||ƒ ¡ |¡sÆJ ‚t  ||dd� ¡ | d¡¡sèJ ‚d S )N)r
   r   r   r   r€   ru   )r   r   r   ÚsparseÚ	coo_arrayr,   r-   r   ©r0   r    ÚDÚSr   r   r   Útest_from_sparse÷   s    "zTestCommon1D.test_from_sparsec                 C   s–  ||ƒ}|  ¡ }t ||¡s J ‚|jj|jjks4J ‚|j dd�}t ||¡sPJ ‚|jjs\J ‚|jjshJ ‚|j dd�}t ||¡s„J ‚|jjs�J ‚|jjsœJ ‚tj|j|jd�}|j |d� t ||¡sÊJ ‚d|d< |j |d� t ||¡sîJ ‚t 	g d¢¡}t 
||¡}t 
||  ¡ ¡}t ||¡�s*J ‚t 	g d¢¡}	t 
||	¡}t 
|  ¡ |	¡}t ||¡�sfJ ‚||td�}
| t¡}t |
  ¡ |¡�s’J ‚d S )	NÚC)ÚorderÚFru   r{   ç      ð?.)rŒ   ç       @ç      @g      @)r-   r   r,   ÚflagsÚc_contiguousÚf_contiguousr.   rI   r   r   ÚdotÚboolr   )r0   r    r   r_   ZchkrY   ÚaZdense_dot_denseÚcheckÚbZspboolZarrboolr   r   r   Útest_toarray  s:    
zTestCommon1D.test_toarrayc           	      C   sx   || D ]j\}}}|  ¡ }d|d< |}|| }t || ¡ | ¡sFJ ‚||dd…  }t || ¡ |d  ¡sJ ‚qd S )Nr�   r   r
   ©Úcopyr   r,   r-   ©	r0   r    r   r   r   r_   r”   r–   Úcr   r   r   Útest_add5  s    zTestCommon1D.test_addc           	      C   sL   || D ]>\}}}|  ¡ }d|d< |}|| }t ||| ¡  ¡sJ ‚qd S )Nr�   r   r˜   rš   r   r   r   Ú	test_raddB  s    zTestCommon1D.test_raddc                 C   s$  || D �]\}}}|t  d¡kr$qt  || g d¢¡s<J ‚t  || g d¢¡sTJ ‚t  d|  ¡ | ¡snJ ‚|g d¢dd�}t  || || ¡  ¡sšJ ‚t  || | ¡ | ¡s¶J ‚t  | ¡ | | ¡ | ¡sÖJ ‚t  || ¡  || ¡  ¡söJ ‚t  |d d… | |d d… | ¡sJ ‚qd S )Nr“   )r   r   r   r   r   )r
   r=   r   r$   r   ru   r
   )r   r   r,   r-   )r0   r    r   r   r   r_   r?   r   r   r   Ú	test_rsubJ  s      zTestCommon1D.test_rsubc              	   C   sÈ  t  g d¢¡}||ƒ}t  g d¢g¡j}t  || | ¡ | ¡sDJ ‚|t  g d¢¡ jdks`J ‚|t  g d¢¡ dkszJ ‚|t  g d¢¡ jdks–J ‚|t  dgdgdgg¡ jdksºJ ‚t|tg d¢gƒj t jƒsÚJ ‚|t  g d¢g¡j jdksúJ ‚t  ddg¡t  g d¢¡t  dgdgg¡g}|D ]@}t	j
td	d
�� | |¡ W d   ƒ n1 �s^0    Y  �q*t  | ¡ g d¢¡}t  |t  g d¢¡ |¡�s J ‚t  |dgdgdgg |j¡�sÄJ ‚d S )N)r$   r   rŽ   )r
   r$   r	   r   é   r
   r$   r	   ©r
   r$   r	   rP   zdimension mismatchr!   )r   r   rJ   r^   r-   rI   Ú
isinstancer   Zndarrayr&   r'   r(   Ú
__matmul__r’   )r0   r    r?   ZAspÚcolZbad_vecsrK   Z
dot_resultr   r   r   Útest_matvec]  s"    $  ,. zTestCommon1D.test_matvecc                 C   s`   ||ƒ}t  g d¢| t  g d¢| ¡ ¡¡s0J ‚t  g d¢g¡}t  || || ¡  ¡s\J ‚d S )Nr    )r   r^   r’   r-   r   )r0   r    r   ÚMÚrowr   r   r   Útest_rmatvecy  s    (zTestCommon1D.test_rmatvecc                 C   s`   |t  g ¡fD ]L}||ƒ}t  | ¡ |¡s.J ‚t  | ¡  ¡ |¡sFJ ‚t  |j|j¡sJ ‚qd S r4   )r   r   r,   r-   Z	transposer   )r0   r    r   r?   ÚBr   r   r   Útest_transpose  s
    zTestCommon1D.test_transposec                 C   sP   || D ]B\}}}|| }t  ||| ¡s.J ‚|| }t  ||| ¡sJ ‚qd S r4   )r   r,   )r0   r    r   r   r   r_   Zsum1Zsum2r   r   r   Útest_add_dense_to_sparse†  s
    z%TestCommon1D.test_add_dense_to_sparsec                 C   sD   t  d¡}||ƒ}|jdvr@t||ƒD ]\}}t  ||¡s&J ‚q&d S )NrE   )ZcooZdiaZbsr)r   ZarangeÚformatÚzipr,   )r0   r    r¨   r?   rK   rL   r   r   r   Útest_iterator�  s
    

zTestCommon1D.test_iteratorc                 C   sf   t  g d¢¡}||ƒ}| d¡d u s(J ‚t  | ¡ g d¢¡s@J ‚| d¡ t  | ¡ g d¢¡sbJ ‚d S )N)r
   r   r	   rP   r+   )r
   r   r	   )rE   )r
   r   r	   r   r   )r   r   Úresizer,   r-   r…   r   r   r   Útest_resize–  s    
zTestCommon1D.test_resizeN)#Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   r3   r7   r9   r@   rB   rO   rQ   r`   ri   rm   rp   rs   rv   ry   r|   r}   Úsup_complexr�   r‚   rˆ   r—   rœ   r�   rž   r¤   r§   r©   rª   r­   r¯   r   r   r   r   r*   .   sD   	




.	r*   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestGetSet1Dc              	   C   sÜ   t  g d¢¡}||ƒ}|jd }t| |ƒD ]}t  || || ¡s,J ‚q,dD ]@}tjttfdd�� | 	|¡ W d   ƒ qN1 s„0    Y  qN|d dks J ‚tjtdd�� | 	d¡ W d   ƒ n1 sÎ0    Y  d S )	N)rP   r	   r   r   )r	   r=   úindex value out of boundsr!   )r   rP   )rP   )
r   r   rI   Úranger,   r&   r'   Ú
IndexErrorrg   Ú__getitem__)r0   r    r†   r?   ÚNÚjÚijr   r   r   Útest_getelement¢  s    
ÿ*zTestGetSet1D.test_getelementc              
   C   sä   t j}|d|d�}t j ¡ �´}| tjj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   ƒ q‚1 s¶0    Y  q‚W d   ƒ n1 sÖ0    Y  d S )NrG   ru   z?Changing the sparsity structure of a cs[cr]_matrix is expensiver   r	   r
   g      "@é   rD   rn   rS   rE   )i÷ÿÿÿ)r
   )é   iòÿÿÿ)r¿   )é   r¶   r!   g     À^@)r   Úfloat64ÚtestingÚsuppress_warningsÚfilterr   rƒ   ZSparseEfficiencyWarningr&   r'   r¸   Ú__setitem__)r0   r    r   r?   Úsupr¼   r   r   r   Útest_setelement¶  s"    þzTestGetSet1D.test_setelementN)r°   r±   r²   r½   rÇ   r   r   r   r   rµ      s   rµ   )$r³   r&   Únumpyr   Zscipyr   Zscipy.sparser   r   r   r   Zscipy.sparse._sputilsr   r   Zscipy._lib._utilr   rÂ   rÃ   r´   rÄ   rƒ   r„   Z	dok_arrayr   Zint64rÁ   Z
complex128r   Zfixturer   r   ÚmarkZparametrizer)   r*   rµ   r   r   r   r   Ú<module>   s,   





  s