o
    Ö­jc.  ã                   @   sœ   d Z ddlZddlZddlmZmZ ddlmZm	Z	 ddl
mZ ee	gZejejejgZdd„ Zejdd	„ ƒZejd
d„ ƒZej de¡G dd„ dƒƒZdS )z Test of 1D arithmetic operationsé    N)Úassert_equalÚassert_allclose)Ú	coo_arrayÚ	csr_array)Úisscalarlikec                 C   s    t | tjƒs
t| ƒr| S |  ¡ S )N)Ú
isinstanceÚnpÚndarrayr   Útoarray)Úa© r   úa/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/sparse/tests/test_arithmetic1d.pyr
      s   r
   c                   C   s   t  g d¢d¡S )N)é   r   é   r   Úd)r   Úarrayr   r   r   r   Ú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>   s    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>   s    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                   @   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%S )&ÚTestArithmetic1Dc                 C   sÒ   d}t  d¡t  d¡t  d¡t  d¡t  d¡fD ]N}|||d�}|| }d| }t|| ¡  t jƒs4J ‚t|| ¡  t jƒs@J ‚|||fD ] }|| | ¡ | ¡  ksUJ ‚|j|ks\J ‚t|ƒj|kseJ ‚qEqd S )	N)é   Úint32Úfloat32Úfloat64Ú	complex64Ú
complex128©r   é   )r   r   r   Útocsrr	   Útocoor
   )Úselfr!   ÚshapeÚmytyper   ÚbÚcÚmr   r   r   Útest_empty_arithmetic%   s$   ûýôz&TestArithmetic1D.test_empty_arithmeticc                 C   s.   t  g d¢d¡}tt|ƒt||ƒƒ ¡ ƒ d S )N)éÿÿÿÿr   é   r   éûÿÿÿr   r   éüÿÿÿr   r   r   r   r   )r   r   r   Úabsr
   )r-   r!   ÚAr   r   r   Útest_abs8   s   zTestArithmetic1D.test_absc                 C   s<   t  g d¢d¡}||ƒ}tt j|dd�t|dd� ¡ ƒ d S )N)gš™™™™™õ¿gìQ¸…ëá?g     @1@gìQ¸…ëÀr   r   )Údecimals)Úndigits)r   r   r   ÚaroundÚroundr
   ©r-   r!   r9   ÚAspr   r   r   Ú
test_round<   s   $zTestArithmetic1D.test_roundc                 C   sv   t  g d¢d¡}||ƒ}tt  |d¡| d¡ ¡ ƒ tjtdd�� ||ƒ |¡ W d   ƒ d S 1 s4w   Y  d S )N)	r7   éýÿÿÿéþÿÿÿr4   r   r   r*   r   é   r   r*   zinput is not scalar©Úmatch)r   r   r   Úpowerr
   ÚpytestÚraisesÚNotImplementedErrorr?   r   r   r   Útest_elementwise_powerA   s   "ÿz'TestArithmetic1D.test_elementwise_powerc                 C   ó,   t  ddg¡}||ƒ}t|j ¡ |jƒ d S ©Ny      ð?      @y       @      À)r   r   r   Úrealr
   ©r-   r!   ÚDr9   r   r   r   Ú	test_realJ   ó   zTestArithmetic1D.test_realc                 C   rL   rM   )r   r   r   Úimagr
   rO   r   r   r   Ú	test_imagO   rR   zTestArithmetic1D.test_imagc                 C   sD   || D ]\}}}t |d |d  ¡ ƒ t |d |d  ¡ ƒ qd S ©Nr*   gÍÌÌÌÌL1@©r   r
   ©r-   r!   r    r   r   Údatspr   r   r   Útest_mul_scalarT   ó   þz TestArithmetic1D.test_mul_scalarc                 C   sD   || D ]\}}}t d| d|  ¡ ƒ t d| d|  ¡ ƒ qd S rU   rV   rW   r   r   r   Útest_rmul_scalarY   rZ   z!TestArithmetic1D.test_rmul_scalarc                 C   s´   || D ]S\}}}|t  d¡krqt||  ¡ t  d¡ƒ t|d  ¡ |ƒ |g d¢dd�}t||  ¡ || ¡  ƒ t||  ¡ | ¡ | ƒ t| ¡ |d  ||d  ƒ qd S )NÚboolrD   r   )r   r7   r   r*   r   r)   )r   r   r   r
   Úzeros)r-   r!   r    r   r   rX   r9   r   r   r   Útest_sub^   s    ózTestArithmetic1D.test_subc                    sp   || D ]1\}‰ ‰t ˆd  ¡ ˆ ƒ t‡fdd„tddƒD ƒƒ}t‡ fdd„tddƒD ƒƒ}t| ¡ |ƒ qd S )Nr   c                    ó   g | ]}|ˆ  ‘qS r   r   ©r   Úk)rX   r   r   r   s   ó    z.TestArithmetic1D.test_add0.<locals>.<listcomp>r   r   c                    r_   r   r   r`   )r   r   r   r   t   rb   )r   r
   ÚsumÚranger   )r-   r!   r    r   ÚsumSÚsumDr   )r   rX   r   Ú	test_add0n   s   úzTestArithmetic1D.test_add0c           
      C   sì   t  g d¢¡}t  g d¢¡}||ƒ}||ƒ}t| |¡ ¡ || ƒ t| |¡ ¡ || ƒ t  g d¢¡}t  g d¢¡}||ƒ}||ƒ}	t| |	¡ ¡ || ƒ t| |¡ ¡ || ƒ t| |	¡ ¡ || ƒ t| |¡ ¡ || ƒ d S )N)rD   r   é	   )r   é   r4   ©y      ð?       Ày              @y      ð¿        ©y      @       @y      @      Ày       À      ð?)r   r   r   Úmultiplyr
   )
r-   r!   r9   ÚBr@   ÚBspÚCrP   ÚCspÚDspr   r   r   Útest_elementwise_multiplyw   s   z*TestArithmetic1D.test_elementwise_multiplyc           !      C   sŒ  t  dg¡}t  dgg¡}t  g d¢¡}t  g d¢g¡}t  dgdgdgg¡}t  g d¢g d	¢g d
¢g¡}g d¢}t  d¡}	|	j}
t  dgg¡}t  ddgddggg¡}||ƒ}||ƒ}||ƒ}||ƒ}||ƒ}||ƒ}||ƒ}||	ƒ}||	d ƒ}||
ƒ}||
d d …dd f ƒ}||ƒ}||||||||	|
||g}||||||||||||g}|||g}|D ]C}|D ]>}z
| ¡ | ¡  }W n% tyä   tjtdd�� | |¡ W d   ƒ n1 sÝw   Y  Y q³w | |¡}t	| ¡ |ƒ q³q¯|D ]N}|D ]I}z| ¡ | }W n2 t
�y   Y qù t�y5   d} tjt| d�� | |¡ W d   ƒ n	1 �s.w   Y  Y qùw | |¡}t	t|ƒ|ƒ qùqõd S )NrD   é÷ÿÿÿ)r   r4   r   )ri   rh   rs   r   r*   r   )é   é   r   )r7   r   r*   )ru   ru   ru   ©r   r*   r   )r   rD   r   )r   Núinconsistent shapesrE   z&broadcast together|inconsistent shapes)r   r   ÚonesÚTr
   Ú
ValueErrorrH   rI   rl   r   Ú	TypeError)!r-   r!   r9   rm   ro   rP   ÚEÚFÚGÚHÚJÚKÚLr@   rp   ÚGsprn   rq   ÚEspÚFspÚHspÚHsppÚJspÚJsppÚKspÚmatricesÚ
spmatricesÚsp1dmatricesÚiÚjÚ
dense_multÚsp_multÚmatchmer   r   r   Ú#test_elementwise_multiply_broadcastŒ   sp   

ÿý
øÿü
õÿz4TestArithmetic1D.test_elementwise_multiply_broadcastc                 C   s€  ||ƒ}t  dt jdt jg¡}|| }t j ||¡ |g d¢dd�}dt jt jdg}t j || |¡ t  g d¢¡}t  g d¢¡}||ƒ}	||ƒ}
t|	|
 || ƒ t  g d	¢¡}t  g d
¢¡}||ƒ}	||ƒ}
t jdd�� t|	|
 || ƒ W d   ƒ n1 s‚w   Y  t  ddg¡}t  ddg¡}||ƒ}	||ƒ}
t jddd�� t|	|
 || ƒ W d   ƒ d S 1 s¹w   Y  d S )Nr   )r   r   r   rD   r   r)   r   r   rj   rk   rv   )r   r   r*   Úignore)Údivide)r•   Úinvalid)	r   r   ÚnanÚtestingÚassert_array_equalÚinfr   Úerrstater   )r-   r!   r   rX   ÚexpectedÚactualÚdenomr9   rm   r@   rn   r   r   r   Útest_elementwise_divideÈ   s4   ÿ"ÿz(TestArithmetic1D.test_elementwise_dividec                 C   s¼   t  g d¢¡}||ƒ}tjtdd�� |d  W d   ƒ n1 s!w   Y  tjtdd�� |d  W d   ƒ n1 s<w   Y  dD ]}|| }|| }t| ¡ |ƒ t|j|jƒ qCd S )N)r   r   r*   r   znegative integer powersrE   r4   z
zero powerr   )r   r*   r   gš™™™™™@)	r   r   rH   rI   rz   rJ   r   r
   r   )r-   r!   r9   rm   ÚexponentÚret_spÚret_npr   r   r   Útest_powê   s   
ÿ
ÿüzTestArithmetic1D.test_powc                 C   s4   ||ƒ}d}|  |¡}|| }t| ¡ | ¡ ƒ d S )Né
   )Údotr   r
   )r-   r!   r   r9   Úscalarr�   rœ   r   r   r   Útest_dot_scalarú   s
   
z TestArithmetic1D.test_dot_scalarc                 C   sÄ  |g d¢ƒ}|t  ddgddgddggd¡ƒ}t  g d¢g¡j}t|| | ¡ | ƒ t||  ¡ ||  ¡ ƒ t| ¡ | ||  ¡ ƒ t|| ¡  ||  ¡ ƒ t  g d¢¡}t|| | ¡ | ƒ ||ƒ}|| }t|t jƒstJ ‚|jdks{J ‚tt  d	¡|ƒ tt  d	¡| ¡ | ƒ tt  d	¡|| ¡  ƒ tt  d	¡| ¡ | ¡  ƒ tj	t
d
d�� |d  W d   ƒ n1 s¿w   Y  tj	t
d
d�� d|  W d   ƒ d S 1 sÛw   Y  d S )N)r*   r   g      @r   r   r*   r   rv   )r   r   r   r   r   zScalar operands are not allowedrE   )r   r   ry   r   r
   r   r	   r.   rH   rI   rz   )r-   r!   ÚMsprm   ÚcolÚVÚVspÚMsp_Vspr   r   r   Útest_matmul  s.   "
ÿ
"ÿzTestArithmetic1D.test_matmulc                 C   sd   || D ]+\}}}|t  d¡krq|| | | }t||| ƒ || | | }t||| ƒ qd S )Nr\   )r   r   r   )r-   r!   r    r   r   rX   Úsum1Úsum2r   r   r   Útest_sub_dense$  s   özTestArithmetic1D.test_sub_densec                 C   sn  t  g ¡}| d¡}| d¡}t  ddg¡}||ƒ}||ƒ}tjtdd�� | |¡ W d   ƒ n1 s5w   Y  t| 	|¡t  	||¡ƒ tjtdd�� | 	|¡ W d   ƒ n1 s]w   Y  t| 
|¡ ¡ t  
||¡ƒ t| 
|¡ ¡ t  
||¡ƒ t| 
d¡ ¡ t  
|d¡ƒ tjtdd�� | 
|¡ W d   ƒ n1 s£w   Y  t| |¡ ¡ | |¡ƒ d S )Nr   )r   r   r#   rw   rE   zdimension mismatchru   )r   r   Úreshaperx   rH   rI   rz   Ú__add__r   r¥   rl   r
   )r-   r!   Úmatr   r   ÚfÚaspÚdspr   r   r   Ú test_size_zero_matrix_arithmetic2  s(   


ÿÿÿz1TestArithmetic1D.test_size_zero_matrix_arithmeticN)Ú__name__Ú
__module__Ú__qualname__r3   r:   rA   rK   rQ   rT   rY   r[   r^   rg   rr   r“   rŸ   r£   r§   r­   r°   r·   r   r   r   r   r"   #   s&    		<""r"   )Ú__doc__rH   Únumpyr   Únumpy.testingr   r   Úscipy.sparser   r   Úscipy.sparse._sputilsr   r   Úint64r&   r(   r   r
   Úfixturer   r    ÚmarkÚparametrizer"   r   r   r   r   Ú<module>   s    

