o
    Ö­jÎq  ã                   @   sl  d dl Zd dlmZ d dlZd dlmZ d dlmZm	Z	 ddl
mZm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j d%g d&¢¡d%efd'd(„ƒZej d%e g d)¢g d)¢ƒ¡d%e!eef fd*d+„ƒZ"ej d%g d,¢¡d%efd-d.„ƒZ#d/d0„ Z$d1d2„ Z%d3d4„ Z&d5d6„ Z'd7d8„ Z(d9d:„ Z)d;d<„ Z*d=d>„ Z+ej d?g d@¢¡dAdB„ ƒZ,ej d?g d@¢¡dCdD„ ƒZ-ej d?g d@¢¡dEdF„ ƒZ.ej d?g d@¢¡dGdH„ ƒZ/dIdJ„ Z0ej dKg dL¢¡dMdN„ ƒZ1ej d?g d@¢¡dOdP„ ƒZ2ej d?g d@¢¡dQdR„ ƒZ3ej dSg dT¢¡dUdV„ ƒZ4dWdX„ Z5dYdZ„ Z6ej d?g d@¢¡d[d\„ ƒZ7ej d?g d@¢¡d]d^„ ƒZ8d_d`„ Z9ej dag db¢¡dcdd„ ƒZ:ej d?g d@¢¡dedf„ ƒZ;ej d?g d@¢¡dgdh„ ƒZ<didj„ Z=ej dag db¢¡dkdl„ ƒZ>g dm¢Z?ej dne?¡dodp„ ƒZ@g dq¢ZAej dreA¡dsdt„ ƒZBdudv„ ZCdwdx„ ZDdydz„ ZEd{d|„ ZFd}d~„ ZGg d¢ZHej daeH¡d€d�„ ƒZId‚dƒd„gd gffd…d†d‡gd gffdˆd‰d gdgffdŠd‹d d‡gd‡dgffdŒd�g dŽ¢g d�¢ffd�d‘d’d’g dŽ¢g dŽ¢ffgZJej d“eJ¡d”d•„ ƒZKd–d—„ ZLej d˜g d™¢¡dšd›„ ƒZMej d?g dœ¢¡d�dž„ ƒZNej d?g dœ¢¡dŸd „ ƒZOdS )¡é    N)Úassert_equal)Ú
block_diag)Ú	coo_arrayÚrandom_arrayé   )Ú_block_diagÚ_extract_block_diagc                  C   s‚   t dƒ} | jdksJ ‚t|  ¡ t d¡ƒ t dƒ}|jdks J ‚t| ¡ t d¡ƒ t dƒ}|jdks5J ‚t| ¡ t d¡ƒ d S )N©é   ©r
   r   )r   r
   é   é   é   ©r   Úshaper   ÚtoarrayÚnpÚzeros)Úempty1dÚempty2dÚempty_nd© r   úX/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/sparse/tests/test_coo.pyÚtest_shape_constructor	   s   r   c                  C   sª  t g d¢ƒ} | jdksJ ‚t|  ¡ t g d¢¡ƒ t g d¢g d¢gƒ}|jdks*J ‚t| ¡ t g d¢g d¢g¡ƒ t ddgddggd	d
gddgggddgddggdd
gdd	gggddgddggddgddgggg¡}t |ƒ}|jdkswJ ‚t| ¡ |ƒ tj d¡ tj ddddd	d
ddd¡	}t |ƒ}|jdks�J ‚t| ¡ |ƒ t dtj	ggddggd
d	gggƒ}|jdks¼J ‚t| ¡ t dtj	ggddggd
d	ggg¡ƒ d S )N©é   r   r
   r	   ©r   é   r   ©r   r
   r
   r   r   r   r   r   é	   r   r   é   )r
   r   r   r   é   )	r   r
   r   r   r   r   r
   r   r   )r
   r   r   )
r   r   r   r   r   ÚarrayÚrandomÚseedÚrandnÚnan)Úres1dÚres2dÚarr4dÚres4dÚarr9dÚres9dÚnan_3dr   r   r   Útest_dense_constructor   s*    "þ"2r.   c               	   C   s  t g d¢dd�} | jdksJ ‚t|  ¡ t g d¢¡ƒ t g d¢g d¢gdd�}|jdks.J ‚t| ¡ t g d¢g d¢g¡ƒ t dggdgggdd�}|jdksQJ ‚t| ¡ t dggdggg¡ƒ tj d	¡ tj d
dddddd
¡}t |dd�}|jdks€J ‚t| ¡ |ƒ d S )Nr   r	   ©r   r   r   r
   r   )r   r   r   r!   r   r   r   r   )r   r   r   r   r   r
   r   )	r   r   r   r   r   r"   r#   r$   r%   )r'   r(   Úres3dÚarr7dÚres7dr   r   r   Ú!test_dense_constructor_with_shape7   s     r3   c                   C   s*  t jtdd�� tg d¢dd� W d   ƒ n1 sw   Y  t jtdd�� tg d¢dd� W d   ƒ n1 s9w   Y  t jtdd�� tg d¢gdd� W d   ƒ n1 sYw   Y  t jtdd�� tdggd	gggd
d� W d   ƒ n1 s|w   Y  t jtdd�� tdgdgffdd� W d   ƒ n1 sžw   Y  t jtdd�� tddgddgddgddgffdd� W d   ƒ n1 sÈw   Y  t jtdd�� tdgdgffƒ W d   ƒ n1 sèw   Y  t jtdd�� tdgdgdgdgffƒ W d   ƒ d S 1 �sw   Y  d S )Núinconsistent shapes©Úmatchr   ©r   r/   ©r
   r   r	   r
   r   ©r   r   r   z)axis 0 index 2 exceeds matrix dimension 2r   r   )r   z)axis 1 index 3 exceeds matrix dimension 3r   )r   r
   r   znegative axis 0 index: -1éÿÿÿÿznegative axis 2 index: -1)ÚpytestÚraisesÚ
ValueErrorr   r   r   r   r   Ú.test_dense_constructor_with_inconsistent_shapeK   s8   ÿÿÿÿÿþÿ(þÿ$ÿr>   c                  C   s6   t dƒ} t | ƒ}|jdksJ ‚t| ¡ t d¡ƒ d S )Nr	   r   )r   Úresr   r   r   Útest_1d_sparse_constructorg   s   r@   c                  C   s@   t ddgddgffƒ} | jdksJ ‚t|  ¡ t g d¢¡ƒ d S )Nr   r    r   r   r	   )r   r   r    ©r   r   r   r   r   r"   ©r?   r   r   r   Útest_1d_tuple_constructorn   s   rC   c                  C   sD   t ddgddgffdd�} | jdksJ ‚t|  ¡ t g d¢¡ƒ d S )Nr   r    r   r   r7   r/   )r   r   r    r   rA   rB   r   r   r   Ú$test_1d_tuple_constructor_with_shapet   s   rD   c                  C   s‚   t dƒ} tjtdd�� d| d< W d   ƒ n1 sw   Y  tjtdd�� | dd d …f  W d   ƒ d S 1 s:w   Y  d S )N)r   r   z3'coo_array' object does not support item assignmentr5   r   ©r   r   z''coo_array' object is not subscriptabler   )r   r;   r<   Ú	TypeError)Úcoo_2dr   r   r   Útest_non_subscriptabilityy   s   ÿ
þÿ"þrH   c                  C   sÔ   d\} }t j| d gdd�t j|d gdd�f}tdg|f| |fd�}| | | df¡}|jd jt  d¡ks9J ‚|jd d | | d ksHJ ‚| || ¡}|jd jt  d¡ks[J ‚|jd d |d kshJ ‚d S )	N)iô iü r   Úint32)Údtypegffffff
@r/   r   Úint64)r   r"   r   ÚreshapeÚcoordsrJ   )ÚMÚNrM   ÚAÚBÚCr   r   r   Útest_reshape_overflow„   s   (rS   c                  C   sÌ  t g d¢ƒ} | jdksJ ‚|  d¡}|jdksJ ‚t| ¡ t dgdgdgg¡ƒ |  d¡}|jdks5J ‚t| ¡ t g d¢g¡ƒ tjt	dd	�� |  d
¡ W d   ƒ n1 sYw   Y  tjt	dd	�� |  d¡ W d   ƒ n1 suw   Y  t g d¢g d¢gƒ}|jdks‹J ‚| d¡}|jdks—J ‚t| ¡ t g d¢¡ƒ | d¡}|jdks¯J ‚t| ¡ t dgdgdggdgdgdggg¡ƒ tjt	dd	�� | d¡ W d   ƒ d S 1 sßw   Y  d S )N©r   r   r
   r	   r8   r   r   r
   ©r   r
   zcannot reshape arrayr5   ©r
   r
   )r
   r   ©r   r   r   ©r   r   r
   r   )r   )r   r   r   r   r   r
   )r   r
   r   r   )
r   r   rL   r   r   r   r"   r;   r<   r=   )Úarr1dÚcol_vecÚrow_vecÚarr2dÚflatÚ	to_3d_arrr   r   r   Útest_reshape”   s2   
 
ÿÿ

0"ÿr_   c                  C   s\   t g d¢ƒ} | jdksJ ‚| jdksJ ‚t g d¢g d¢gƒ}|jdks%J ‚|jdks,J ‚d S )NrT   r	   r   rW   rX   r   r
   )r   r   Únnz©rY   r\   r   r   r   Útest_nnz¹   s   rb   c                  C   s‚   t g d¢ƒj} | jdksJ ‚t|  ¡ t g d¢¡ƒ t g d¢g d¢gƒj}|jdks,J ‚t| ¡ t ddgddgdd	gg¡ƒ d S )
NrT   r	   rW   rX   r   r   r   r   r
   )r   ÚTr   r   r   r   r"   ra   r   r   r   Útest_transposeÃ   s   *rd   c                  C   s  t g d¢ƒjdd�} | jdksJ ‚t|  ¡ t g d¢¡ƒ t g d¢g d¢gƒjdd�}|jdks2J ‚t| ¡ t g d¢g d¢g¡ƒ tjt	d	d
�� t g d¢ƒjdd� W d   ƒ n1 s^w   Y  tjt	dd
�� t g d¢g d¢gƒjdd� W d   ƒ d S 1 s„w   Y  d S )NrT   ©r   ©Úaxesr	   rW   rX   ©r   r   r   ú"axes don't match matrix dimensionsr5   úrepeated axis in transpose©r   r   )
r   Ú	transposer   r   r   r   r"   r;   r<   r=   ra   r   r   r   Útest_transpose_with_axisÍ   s    ÿ"ÿrm   c                  C   sà   t g d¢ƒ} t| jt g d¢¡ƒ t| jt | j¡ƒ | jj| jjks%J ‚| jjj	du s.J ‚g d¢| _t
| jƒdks<J ‚t| jt g d¢¡ƒ | jj| jjksQJ ‚tjtdd�� g d¢| _W d   ƒ d S 1 siw   Y  d S )N©r   éþÿÿÿéýÿÿÿ©r   r   r   Fr   r   zcannot set row attributer5   )r   r   Úcolr   r"   ÚrowÚ
zeros_likerJ   ÚflagsÚ	writeableÚlenrM   r;   r<   r=   rB   r   r   r   Útest_1d_row_and_colÝ   s   
"ÿrx   c               	   C   sˆ   t g d¢ƒ} | j| j| j| jfD ]}tjtdd�� |ƒ  W d   ƒ n1 s'w   Y  q| j| j	| j
fD ]}t|ƒ  ¡ |  ¡ ƒ q5d S )Nrn   zCannot convertr5   )r   ÚtobsrÚtocscÚtodiaÚtolilr;   r<   r=   ÚtocooÚtocsrÚtodokr   r   )r?   Úfr   r   r   Útest_1d_toformatsí   s   ÿ€ÿr�   Úarg)r   r   r   r   r    c                 C   óP   t  g d¢¡}t|ƒ}|j| dd� | | ¡ |j|jksJ ‚t| ¡ |ƒ d S )Nrn   F©Úrefcheck©r   r"   r   Úresizer   r   r   ©r‚   Údenr?   r   r   r   Útest_1d_resizeö   s   
rŠ   ©r   r   r
   r   c                 C   rƒ   )NrT   Fr„   r†   rˆ   r   r   r   Útest_1d_to_2d_resize   s   
rŒ   )r   r   r   r    c                 C   sX   t  g d¢g d¢g¡}t|ƒ}|j| dd� | | ¡ |j|jks#J ‚t| ¡ |ƒ d S )NrT   ©r   r   r   Fr„   r†   rˆ   r   r   r   Útest_2d_to_1d_resize  s   
rŽ   c               	   C   s–  t g d¢g d¢ffƒ} | jdksJ ‚t|  ¡ t ddg¡ƒ |  ¡  | jdks)J ‚t|  ¡ t ddg¡ƒ t g d¢g d¢g d¢g d¢g d¢ffƒ}|jdksPJ ‚t d	d	gd	d	gd	d	ggd	d	gd	d	gd	d	ggd	d	gd	d	gdd	gggd	d	gd	d
gd	d	ggd	d	gd	d	gd	d	ggd	d	gd	d	gd	d	gggg¡}t| ¡ |ƒ | ¡  |jdks¥J ‚t| ¡ |ƒ t g d¢g d¢ffƒ}|jdks¾J ‚| ¡  |jdksÉJ ‚d S )N)r   r   r   ©r   r   r   r
   r   r   )r   r
   r   )r   r   r   )r   r   r   r   r   r‹   ©r   r   r   r
   )r   r`   r   r   r   r"   Úsum_duplicates)rY   r)   ÚexpectedÚ
arr_nodupsr   r   r   Útest_sum_duplicates  s*   (>>ÿÿr”   c                  C   s¶   t g d¢g d¢ffƒ} | jdksJ ‚|  ¡ dksJ ‚t|  ¡ t ddg¡ƒ |  ¡  | jdks1J ‚|  ¡ dks9J ‚t|  ¡ t ddg¡ƒ t| jt dg¡ƒ t| j	t dg¡ƒ d S )N)r   r   r   r�   r
   r   r   )
r   r`   Úcount_nonzeror   r   r   r"   Úeliminate_zerosrr   rs   )rY   r   r   r   Útest_eliminate_zeros1  s   r—   c                  C   sR   t  g d¢¡} t  g d¢¡}| | }t| ƒ| }t|ƒt|ƒu s"J ‚t||ƒ d S ©N©r   ro   rp   r   r�   )r   r"   r   Útyper   ©Úden_aÚden_bÚexpr?   r   r   r   Útest_1d_add_dense>  s   rŸ   c                  C   sF   t  g d¢¡} t  g d¢¡}| | }t| ƒt|ƒ }t|| ¡ ƒ d S r˜   )r   r"   r   r   r   ©rœ   r�   Ú	dense_sumÚ
sparse_sumr   r   r   Útest_1d_add_sparseG  s
   r£   c                  C   sP   t  g d¢¡} t  g d¢¡}| | }t| ƒ| }t  |¡dks!J ‚t||ƒ d S )Nr™   r�   r   )r   r"   r   Úndimr   r›   r   r   r   Útest_1d_matmul_vectorP  s   r¥   c                  C   s\   t  g d¢¡} t  g d¢g d¢g¡j}| | }t| ƒ| }t|ƒt|ƒu s'J ‚t||ƒ d S )Nr™   r�   ©r
   r   r   r   )r   r"   rc   r   rš   r   )r‰   Úotherrž   r?   r   r   r   Útest_1d_matmul_multivectorY  s   r¨   c                  C   s&  t  g d¢g d¢g¡} t| ƒ}| | j }||j }t| ¡ |ƒ t  g d¢g d¢g¡} t| ƒ}| | j }|| j }t||ƒ t  g d¢g d¢g¡}t  g d¢¡}t|ƒ}||j }||j }t||ƒ t  g d¢¡}t  dgdgd	gg¡}|| }t|ƒ| }t||ƒ t|ƒt|ƒ }t||ƒ d S )
Nr�   r¦   )r   r   r
   r   r   )r   r   r   r
   r   )r   r   r   r   r   )r   r   r   r
   r   r   )r   r"   r   rc   r   r   Úlist)r‰   r\   rž   r?   rœ   r�   rY   r   r   r   Útest_2d_matmul_multivectorb  s.   








rª   c                  C   sN   t  g d¢¡} tjtdd�� t| ƒ ¡  W d   ƒ d S 1 s w   Y  d S )Nr™   z diagonal requires two dimensionsr5   )r   r"   r;   r<   r=   r   Údiagonal)r‰   r   r   r   Útest_1d_diagonalƒ  s   "ÿr¬   r   )re   ©r   )r   r   ©r   r   r   )r
   r   r   rT   )r   r   r
   r   r   r   c                 C   s4   t j d¡ t jjdd| d�}tt|ƒ ¡ |ƒ d S )Nr!   r   r   )ÚlowÚhighÚsize)r   r#   r$   Úrandintr   r   Útodense)r   Úarrr   r   r   Útest_nd_todense‰  s   rµ   c                 C   s6   t | ƒ}t |ƒ}|j| ksJ ‚t| ¡ t | ¡ƒ d S ©Nr   )r   Ú	empty_arrr?   r   r   r   Útest_nd_sparse_constructor‘  s   r¸   c                 C   s@   t j d¡ t jj| Ž }t|ƒ}|j| ksJ ‚t| ¡ |ƒ d S )Nr!   ©r   r#   r$   r%   r   r   r   r   ©r   r´   r?   r   r   r   Útest_nd_tuple_constructorš  s
   r»   c                 C   sD   t j d¡ t jj| Ž }t|| d�}|j| ksJ ‚t| ¡ |ƒ d S )Nr!   r/   r¹   rº   r   r   r   Ú$test_nd_tuple_constructor_with_shape¤  s
   r¼   c                  C   s„   t jtdd�� tddgddgddgddgffdd	� W d   ƒ n1 s%w   Y  tg g g g g ffd
d	�} t|  ¡ t d
¡ƒ d S )Nzexceeds matrix dimensionr5   r   r    r   r   r   )r
   r   r   r/   )r   r   r   r
   )r;   r<   r=   r   r   r   r   Úempty)r·   r   r   r   Ú(test_tuple_constructor_for_dim_size_zero®  s
   (ÿr¾   )r   Ú	new_shape))©r   r   r   r   )r
   r   é   r   )rÀ   )é$   é   )rÀ   )i8  )rÀ   )r   r
   r   r   r
   r   r
   c                 C   sf   t j d¡}t| d|td�}|j| ksJ ‚| ¡ }| |¡}| |¡}|j|ks*J ‚t| ¡ |ƒ d S ©NéŸ4eç333333ã?©ÚdensityÚrngrJ   )	r   r#   Údefault_rngr   Úintr   r   rL   r   )r   r¿   rÉ   r)   Úden4dÚexp_arrÚres_arrr   r   r   Útest_nd_reshape·  s   

rÏ   c                 C   s8   t j d¡}t| d|td�}|jt  | ¡ ¡ksJ ‚d S rÄ   )r   r#   rÊ   r   rË   r`   r•   r   )r   rÉ   r´   r   r   r   Útest_nd_nnzÉ  s   rÐ   c                 C   sX   t j d¡}t| d|td�}| ¡ j}| ¡ }|j| d d d… ks#J ‚t	|| ¡ ƒ d S )NrÅ   rÆ   rÇ   r:   )
r   r#   rÊ   r   rË   r   rc   rl   r   r   )r   rÉ   r´   rÍ   Ú	trans_arrr   r   r   Útest_nd_transposeÒ  s   
rÒ   )r   Ú	axis_perm))r	   re   )r   rh   ))r   r   r
   r   r   r
   )r   r   r   r   r
   r   c                 C   sH   t j d¡}t| d|td�}|j|d�}t| ¡ t j| ¡ |d�ƒ d S )NrÅ   rÆ   rÇ   rf   )r   r#   rÊ   r   rË   rl   r   r   )r   rÓ   rÉ   r´   rÑ   r   r   r   Útest_nd_transpose_with_axisÞ  s    rÔ   c                   C   s’   t jtdd�� tg d¢ƒjdd� W d   ƒ n1 sw   Y  t jtdd�� tg d¢g d¢gƒjd	d� W d   ƒ d S 1 sBw   Y  d S )
Nri   r5   rT   rh   rf   rj   rW   rX   rk   )r;   r<   r=   r   rl   r   r   r   r   Ú%test_transpose_with_inconsistent_axisé  s   ÿ"ÿrÕ   c               	   C   s–  t g d¢g d¢g d¢g d¢ffƒ} | jdksJ ‚|  ¡ dks J ‚t|  ¡ t g d¢g d¢gg d¢g d¢gg d¢g d	¢gg¡ƒ |  ¡  | jdksJJ ‚|  ¡ dksRJ ‚t|  ¡ t g d¢g d¢gg d¢g d¢gg d¢g d	¢gg¡ƒ g d¢g d¢g d¢g d
¢g d¢f}t g d¢|fƒ}|jdks‘J ‚| ¡ dks™J ‚| ¡  |jdks¤J ‚| ¡ dks¬J ‚t|jt g ¡ƒ t|j	t g ¡ƒ t|j
g g g g g fƒ d S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r®   r�   )r   r   r   r
   )r   r   r   r   )r   r   r   r   r   )r   r`   r•   r   r   r   r"   r–   rr   rs   rM   )Úarr3drM   Úarr5dr   r   r   Útest_nd_eliminate_zerosñ  s,   "ÿÿ"rØ   c                 C   sp   t j d¡}t| d|td�}t| d|td�}| ¡ | ¡ }}|| }|| }t|ƒt|ƒu s1J ‚t||ƒ d S rÄ   ©r   r#   rÊ   r   rË   r   rš   r   ©r   rÉ   Úsp_xÚsp_yÚden_xÚden_yrž   r?   r   r   r   Útest_nd_add_dense  ó   rß   c                 C   s`   t j d¡}t| d|td�}t| d|td�}| ¡ | ¡ }}|| }|| }t|| ¡ ƒ d S rÄ   ©r   r#   rÊ   r   rË   r   r   ©r   rÉ   rÛ   rÜ   rÝ   rÞ   r¡   r¢   r   r   r   Útest_nd_add_sparse  s   rã   c                  C   sh   t  dgt jggdgdggg¡} t  dgdggdgdggg¡}| | }t| ƒt|ƒ }t|| ¡ ƒ d S ©Nr   rp   r   r   r
   )r   r"   Úinfr   r   r   r    r   r   r   Útest_add_sparse_with_inf%  ó
    ræ   )Úa_shapeÚb_shape))r­   )r!   )©r   r   )r   r   )©r   r   r
   r   )r   r   r   r
   c                 C   sh   t j d¡}t| d|td�}t|d|td�}tjtdd�� ||  W d   ƒ d S 1 s-w   Y  d S )NrÅ   rÆ   rÇ   z6(Incompatible|inconsistent) shapes|cannot be broadcastr5   ©r   r#   rÊ   r   rË   r;   r<   r=   ©rè   ré   rÉ   Úarr_aÚarr_br   r   r   Ú+test_nd_add_sparse_with_inconsistent_shapes.  s   ÿ
"þrð   c                 C   sp   t j d¡}t| d|td�}t| d|td�}| ¡ | ¡ }}|| }|| }t|ƒt|ƒu s1J ‚t||ƒ d S rÄ   rÙ   rÚ   r   r   r   Útest_nd_sub_dense;  rà   rñ   c                 C   s`   t j d¡}t| d|td�}t| d|td�}| ¡ | ¡ }}|| }|| }t|| ¡ ƒ d S rÄ   rá   râ   r   r   r   Útest_nd_sub_sparseH  s   rò   c                  C   sh   t  dgt jggdgdggg¡} t  dgdggdgdggg¡}| | }t| ƒt|ƒ }t|| ¡ ƒ d S rä   )r   r"   r&   r   r   r   r    r   r   r   Útest_nd_sub_sparse_with_nanV  rç   ró   c                 C   sh   t j d¡}t| d|td�}t|d|td�}tjtdd�� ||  W d   ƒ d S 1 s-w   Y  d S )NrÅ   rÆ   rÇ   r4   r5   rì   rí   r   r   r   Ú+test_nd_sub_sparse_with_inconsistent_shapes_  s   
"ÿrô   )	)©r   r
   r   r   ©r   ©rE   re   ))r   r
   r   r   r    )r    ©)r   r   r   r   re   )©r   r   r
   r   r   ©r   r   )©r   r   rö   ©rû   )r   r   )r	   r8   )r7   r7   )Ú	mat_shapeÚ	vec_shapec           	      C   sr   t j d¡}t| d|td�}t|d|td�}| ¡ | ¡ }}|| }|| }t||ƒ |t|ƒ }t||ƒ d S rÄ   ©r   r#   rÊ   r   rË   r   r   r©   )	rý   rþ   rÉ   rÛ   rÜ   rÝ   rÞ   rž   r?   r   r   r   Útest_nd_matmul_vectorv  s   
r   ))rõ   )r   r
   r   r   r÷   rø   )©r   r    r
   r	   )r  r8   )rù   ©r   r
   ))r   r
   r   r   )r   r   r   r   r
   ))r   r   r   r   r   )r   r
   r   r
   )r7   )r   r   r
   )r	   )r   r   r   r
   r   )r7   r  rü   )Ú
mat_shape1Ú
mat_shape2c           	      C   sš   t j d¡}t| d|td�}t|d|td�}| ¡ | ¡ }}|| }|| }t| ¡ |ƒ || }t||ƒ |t|ƒ }t||ƒ || }t||ƒ d S ©NrÅ   rÆ   ©rÈ   Úrandom_staterJ   rÿ   )	r  r  rÉ   rÛ   rÜ   rÝ   rÞ   rž   r?   r   r   r   Útest_nd_matmul’  s   

r  c                  C   s"  t j d¡} tdd| td�}tdd| td�}tjtdd�� ||  W d   ƒ n1 s,w   Y  tjtdd�� || ¡   W d   ƒ n1 sIw   Y  tdd| td�}tjtd	d�� ||  W d   ƒ n1 slw   Y  tjtd	d�� || ¡   W d   ƒ d S 1 sŠw   Y  d S )
NrÅ   )r   r   r   r   r
   rÆ   r  )r   r   r
   r   r   z)matmul: dimension mismatch with signaturer5   )r   r   r
   r   z&Batch dimensions are not broadcastable)	r   r#   rÊ   r   rË   r;   r<   r=   r   )rÉ   rÛ   rÜ   Úsp_zr   r   r   Ú.test_nd_matmul_sparse_with_inconsistent_arrays¨  s    
ÿÿ
ÿ"ÿr
  c                  C   s\   t g d¢ƒ} t g d¢ƒ}t |  ¡ | ¡ ¡}|  |¡}t||ƒ |  | ¡ ¡}t||ƒ d S )Nr   r   )r   r   Údotr   r   )ÚaÚbrž   r?   r   r   r   Útest_dot_1d_1d¹  s   

r  c                  C   sJ   t ddgddgddggƒ} d}|  |¡}t |  ¡ |¡}t| ¡ |ƒ d S )Nr   r   r
   r   r   r   )r   r  r   r   r   )r  r  r?   rž   r   r   r   Útest_dot_sparse_scalarÃ  s
   
r  c                  C   sb   t ddggddgggƒ} t g d¢ƒ}tjtdd�� |  |¡ W d   ƒ d S 1 s*w   Y  d S )Nr   r   r
   r   r   znot aligned for n-D dotr5   )r   r;   r<   r=   r  )rî   rï   r   r   r   Ú!test_dot_with_inconsistent_shapesË  s
   "ÿr  c                  C   sö   t ddgddggƒ} 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  tjtdd�� | d   W d   ƒ n1 sXw   Y  tjtdd�� d |   W d   ƒ d S 1 stw   Y  d S )	Nr   r   r
   r   zargument not supported typer5   zarg not supported typezunsupported operand type)r   r;   r<   rF   r  Ú	tensordot)rî   r   r   r   Útest_matmul_dot_not_implementedÒ  s   ÿÿ
ÿ
"ÿr  )
)rV   rV   )©r   r   ©r   r   ))r   r   rú   )©r
   r   r   r   r­   )rö   ©r   r
   r   r   )r  )r   r   ))r   r   r  )r  ©r
   r   r   r   )©r   r    r   )r   r   r   r   r   )©r   r   r   r   r  c                 C   s�   t j d¡}t| d|td�}t|d|td�}t  | ¡ | ¡ ¡}| | ¡ ¡}t||ƒ | t| ¡ ƒ¡}t||ƒ | |¡}t| ¡ |ƒ d S r  )	r   r#   rÊ   r   rË   r  r   r   r©   )rè   ré   rÉ   rî   rï   rž   r?   r   r   r   Útest_dot_ndå  s   


r  r  r  r   r  r­   r
   rö   r  r  r  r  )r   r   r   r    r   rq   )r   r
   r   ))r   r   r
   r   r   )r
   r   r   r   r    r
   ))r   r   r   )r   r
   r   r   )r   r
   r   )rè   ré   rg   c                 C   sº   t j d¡}t| d|td�}t|d|td�}t j| ¡ | ¡ |d�}|j| ¡ |d�}t||ƒ |jt| ¡ ƒ|d�}t||ƒ |j||d�}t	|ƒt
u rVt| ¡ |ƒ d S t||ƒ d S )NrÅ   rÆ   r  rf   )r   r#   rÊ   r   rË   r  r   r   r©   rš   r   )rè   ré   rg   rÉ   rî   rï   rž   r?   r   r   r   Útest_tensordot  s   

r  c                  C   sæ   t j d¡} tdd| td�}tdd| td�}dgdgf}tjtdd�� |j||d	� W d   ƒ n1 s5w   Y  td
d| td�}tdd| td�}g d¢ddgf}tjtdd�� |j||d	� W d   ƒ d S 1 slw   Y  d S )NrÅ   )r
   r   r   rÆ   r  )r
   r   r   r   z*sizes of the corresponding axes must matchr5   rf   )r   r   r   r
   r   )r   r   r
   r   )r   r   r   r   r
   z,axes lists/tuples must be of the same length)	r   r#   rÊ   r   rË   r;   r<   r=   r  )rÉ   rî   rï   rg   r   r   r   Ú test_tensordot_with_invalid_args  s   ÿ"þr  )Úactual_shapeÚbroadcast_shape)	))r   r
   r   r   )r   r
   r   r   ))r   r   r   r   )r   r   r
   r   r   ))r   r   r   r    r   )r   r   r   r   r    r   )rU   )r   r   r
   ))r   r    r   )r   r    r   )r8   )r
   r   ))r   rö   )r9   r   ))r   r
   r   r   r   )r    r   r
   r   r   r   c                 C   sH   t j d¡}t| d|td�}| |¡}t  | ¡ |¡}t| ¡ |ƒ d S r  )	r   r#   rÊ   r   rË   Ú_broadcast_toÚbroadcast_tor   r   )r  r  rÉ   r´   r?   rž   r   r   r   Útest_broadcast_to+  s
   
r!  ))r   r   r   r   r    rê   rë   )r   r   r   r
   r   c                    sŽ   t j d¡}t| d|td�}| ¡ }tt  |jd d… ¡ƒ}| |f|jdd …  ¡‰ ‡ fdd„t	|ƒD ƒ}t
|Ž }t|ƒ}t| ¡ |ƒ d S )NrÅ   rÆ   r  ro   c                    s"   g | ]}ˆ |d d …d d …f ‘qS r¶   r   )Ú.0Úi©Úreshaped_arrayr   r   Ú
<listcomp>D  s   " z#test_block_diag.<locals>.<listcomp>)r   r#   rÊ   r   rË   r   Úprodr   rL   Úranger   r   r   )r   rÉ   rÛ   rÝ   Ú
num_slicesÚmatricesrž   r?   r   r$  r   Útest_block_diag9  s   r+  c                 C   s@   t j d¡}t| d|td�}tt|ƒ| ƒ}t| ¡ | ¡ ƒ d S r  )	r   r#   rÊ   r   rË   r   r   r   r   )r   rÉ   rÛ   r?   r   r   r   Útest_extract_block_diagL  s   r,  )PÚnumpyr   Únumpy.testingr   r;   Úscipy.linalgr   Úscipy.sparser   r   Ú_coor   r   r   r.   r3   r>   r@   rC   rD   rH   rS   r_   rb   rd   rm   rx   r�   ÚmarkÚparametrizerË   rŠ   ÚzipÚtuplerŒ   rŽ   r”   r—   rŸ   r£   r¥   r¨   rª   r¬   rµ   r¸   r»   r¼   r¾   rÏ   rÐ   rÒ   rÔ   rÕ   rØ   rß   rã   ræ   rð   rñ   rò   ró   rô   Úmat_vec_shapesr   Úmat_mat_shapesr  r
  r  r  r  r  Ú
dot_shapesr  Útensordot_shapes_and_axesr  r  r!  r+  r,  r   r   r   r   Ú<module>   sÌ     %

		
					!



	






	



	
	



ø

ÿ
	
