o
    5Bi                     @   s   d Z ddlZddlmZ ddlmZmZmZmZ ddl	Z	ddl	m
Z ddlmZ ddlmZ ddlmZmZmZmZmZmZmZ dd	lmZ g d
ZdddZdddZG dd dZdd Z dS )z)test sparse matrix construction functions    N)array)assert_equalassert_assert_array_equalassert_array_almost_equal_nulp)raises)check_free_memory)check_random_state)
csr_matrix
coo_matrix	csr_array	coo_arraysparrayspmatrix
_construct)rand)csrcsccoobsrdialildok{Gz?r   c              	   C   s$   t |}|j}t| ||||||S )N)r	   standard_normal	constructrandom)mndensityformatdtyperandom_statedata_rvs r$   a/var/www/html/Trade-python/venv/lib/python3.10/site-packages/scipy/sparse/tests/test_construct.py_sprandn   s
   r&   c                 C   s(   t |}|j}tj| |f|||||dS )N)r   r    r!   r"   data_sampler)r	   r   r   random_array)r   r   r   r    r!   r"   r'   r$   r$   r%   _sprandn_array   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ejdejejgdd Zejdejejgdd Zejdejejgdd Zdd Zdd Zdd  Zd!d" Zejd#eegd$d% Zd&d' Zejd#eegd(d) Zd*d+ Zejd,ej ej!fd-d. Z"d/d0 Z#d1d2 Z$ejj%ej&d3d4d5 Z'd6d7 Z(d8d9 Z)d:d; Z*d<d= Z+d>d? Z,d@dA Z-dBdC Z.dDdE Z/dFdG Z0dHdI Z1dJS )KTestConstructUtilsc           
      C   s  t g dg}t g dg dg}t g dg dg dg}g }||ddddggf ||dgdddggf ||dgdddgdggf ||dgddddggf ||dgddddggf ||dgddddggf ||dgddddgddggf ||dgddddgddggf ||dgddddgddggf ||dgdd	g d
g dg dgf ||dgdd	g dg dg dgf ||dgddg dg dg dgf ||ddgddg dg dg dgf ||ddgdd	g dg dg dgf ||ddgddg dg dg dg dg dg dgf ||g d ddg d!g d"g d#g d$g d%g dgf ||g d&ddg d'g d(g d)g d*g d+g d,gf ||g d-t|d t|d g d.g d/g d0g d1g dgf |D ]<\}}}}}	t|d |kr||krtt|| |	 tt|||| |	 tt||||f |	 qd S )2N                        	   
                  r   r,   r-   r.   r/   r,   r   r   r   r   r-   r   r   r   r   r.   r   )r   r   r   r/   r0   r   r   r.   r   r   )r   r   r   r/   r   )r   r   r   r   r0   )r,   r   r4   r   r-   r   r   r   r.   r2   r   r   r   r,   r3   r   r   r   r-   r4   r   r2   )r   r   r.   r   r   r   )r   r   r   r/   r   r   )r   r   r   r   r0   r   )r2   r   r   r   r   r   r   r3   r   r   r   r   r   r   r4   r   r   r   r=   r   r,   )r2   r9   r   r   r   r   )r,   r3   r:   r   r   r   )r   r-   r4   r;   r   r   )r   r   r.   r5   r<   r   )r   r   r   r/   r6   r   r-   r=   )r   r   r4   r   r   )r8   r   r   r5   r   )r   r9   r   r   r6   r   r   r:   r   r   r,   r   r   r;   r   r   r-   r   r   r<   )r=   r,   r-   )r   r3   r:   r   r   )r,   r   r4   r;   r   )r   r-   r   r5   r<   )r   r   r.   r   r6   )r   appendlenr   r   spdiagstoarray)
selfdiags1diags2diags3casesdor   r   resultr$   r$   r%   test_spdiags(   st   """(((**  zTestConstructUtils.test_spdiagsc           
      C   s6  t g d}t g d}t g d}g }||d d dddggf ||d d gdgddggf ||d d gdgddgdggf ||d d gdgdddggf ||d d gdgdddggf ||d d	 gdgd
ddgdd	ggf ||d d gdgd
ddgddggf ||d d gdgdg dg dg dgf ||d d gdgdg dg dg dgf ||d d gdgdg dg dg dgf ||d d	 gdgdg dg dg dgf ||d d gdgdg dg dg dgf ||d d gdgdg dg dg dgf ||d d gd	gdg dg dg dgf ||d d	 gdgdg d g d!g dgf ||d d gd"gdg d#g dg dgf ||d d gd$gd%g d&g d&g d&g d&g d'gf ||d d	 gd(gd%g d&g d&g d&g d'g d)gf ||d d gdgd%g d&g d&g d'g d)g d*gf ||d d gdgd%g d&g d'g d)g d*g d&gf ||d d gdgd%g d'g d)g d*g d&g d&gf ||d d	 gdgd%g d+g d,g d&g d&g d&gf ||d d gd	gd%g d-g d&g d&g d&g d&gf ||d d |d d gdd	gd.g d/g d)g d*gf ||d d	 |d d gddgdg d0g d1g d2gf ||d d" |d d gd	d(gd3g d4g d5g d6g d7g d8g d9gf ||d d" ||d d" gg d:d;g d<g d=g d>g d?g d@gf ||d d	 |d d |gg dAdBg dCg dDg dEg dFg dGg dHgf ||gdgddggf ||d d |gdd	gd.g d/g d)g d*gf |t g dIg dJgddgd.g d'g dKg dLgf |g dMg dNd.g dOg dMg dPgf |D ]M\}}}}|dQ|dQ|dQ|}	ttj|||dR ||	dS |d |d krt|d dTrt|d t	|krttj||dU ||	dS qKd S )VNr+   r1   r7   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.   r0   )r   r   r   r   r   )r,   r   r   r   r   )r   r-   r   r   r   rA   )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   r   r,   rL   )r0   r.   )r   r   r   r,   r   r   rG   rB   rC   r   r,   r   )r   r   r-   r   r   r,   )r.   r.   )r,   r   r2   rD   rE   rF   )r2   r2   )r   r   r,   r   r   r   )r   r   r   r-   r   r   )r   r   r   r   r.   r   )r2   r   r   r   r   r/   rH   rI   rJ   r0   r0   )r2   r8   r   r   r   )r,   r3   r9   r   r   )r   r-   r4   r:   r   )r   r   r.   r5   r;   )r   r   r   r/   r6   rK   r2   r0   )r   r   r2   r   r   )r8   r   r   r3   r   )r   r9   r   r   r4   rM   rN   rO   r,   r-   r.   )r/   r0   r2   )r/   r-   r   )r   r0   r.   )r,   ra   r,   )r,   r   r=   )ra   r,   r   )r   r,   ra    offsetsshape)err_msg__len__rk   )
r   rP   npr   r   diagsrS   hasattrrQ   max)
rT   abcrX   rY   rZ   rl   r[   rm   r$   r$   r%   
test_diags`   s   "&$$**000000000<<<<<<<<<(**4zTestConstructUtils.test_diagsc                 C   s*   t g d}tt| t| d S )Nr+   )r   r   r   rq   rS   rp   diagrT   rt   r$   r$   r%   test_diags_default   s   z%TestConstructUtils.test_diags_defaultc                 C   s&   t g dg dg}tttj| d S )Nr+   )r-   r.   r/   r0   r2   )r   assert_raises
ValueErrorr   rq   ry   r$   r$   r%   test_diags_default_bad   s   z)TestConstructUtils.test_diags_default_badc                 C   s:  t g d}t g d}t g d}g }||d d gddf ||d d ||d d gg dd	f ||d d
 ||d d gg ddf ||d d
 ||d d gg dd f |g g dd f |dgdgdf ||gdd f |D ]\}}}tttj|||d qtttjd ggdgd d S )Nr+   r1   r7   r   r]   r/   r.   rJ   rf   r-   rK   rg   r,   r/   r/   rj   ro   )r   rP   r{   r|   r   rq   	TypeError)rT   rt   ru   rv   rX   rY   rZ   rl   r$   r$   r%   test_diags_bad   s   ***z!TestConstructUtils.test_diags_badc                    s   t jd dD ]k}d|d  t jdd  t   d  d }t j| |d | } fdd|D }tj||d	}td
d t	||D }t
| | t|dkrstj|d |d d	}t |d |d }t
| | qd S )Ni  )r,   r-   r.   r/   r0   r6   r,   r-   r   r6   c                    s    g | ]}t j t| qS r$   )rp   r   r   abs).0qr   r$   r%   
<listcomp>   s     z9TestConstructUtils.test_diags_vs_diag.<locals>.<listcomp>ro   c                 S   s   g | ]
\}}t ||qS r$   )rp   rx   )r   xjr$   r$   r%   r      s    )rp   r   seedrandintarangeshuffler   rq   sumzipr   rS   rQ   rx   )rT   n_diagsrk   	diagonalsmat	dense_matr$   r   r%   test_diags_vs_diag   s    z%TestConstructUtils.test_diags_vs_diagc                 C   s@   t jdgdgdtd}t|jt t| ddgddgg d S )Ng@r   r`   )rk   rl   r!   r-   )r   rq   intr   r!   rS   rT   r   r$   r$   r%   test_diags_dtype   s   z#TestConstructUtils.test_diags_dtypec                 C   sJ   t td}tddD ]}ttj||d tj|g|gd  qd S )Nr0   r~   r2   ro   )listranger   r   rq   rS   )rT   rY   kr$   r$   r%   test_diags_one_diagonal   s   z*TestConstructUtils.test_diags_one_diagonalc                 C   s   t g }t|jd d S )Nr   r   )r   rq   r   rl   r   r$   r$   r%   test_diags_empty   s   
z#TestConstructUtils.test_diags_emptyidentityc                 C      t |d dgg t |d ddgddgg |dddd}t |jtd t |jd tD ]}|d|d}t |j| t | g d	g d
g dg q2d S Nr,   r-   r   r.   int8r   )r!   r    r    rc   rd   re   r   rS   r!   rp   r    sparse_formats)rT   r   Ifmtr$   r$   r%   test_identity      "z TestConstructUtils.test_identityeyec                 C   sx  t |dd dgg t |dd g dg dg t |dd ddgddgddgg t |dd g dg dg dg t |dddd	jtd d
D ]g}d
D ]b}tddD ]Z}|dkrg||ksq|dk rt||krtjtdd ||||d W d    n1 sw   Y  q]t ||||d tj	|||d ||krt |||d tj	|||d q]qVqRd S )Nr,   r-   r.   rc   rd   r   re   int16r!   rb   r~   r2   zOffset.*out of boundsmatchr   )
r   rS   r!   rp   r   r   pytestr   r|   r   )rT   r   r   r   r   r$   r$   r%   test_eye  s8    &&$zTestConstructUtils.test_eyec                 C   r   r   r   )rT   r   r   r   r$   r$   r%   test_eye_one%  r   zTestConstructUtils.test_eye_onec                 C   s,   t tdts
J t tdtrJ d S )Nr.   )
isinstancer   	eye_arrayr   r   rT   r$   r$   r%   test_eye_array_vs_matrix3  s   z+TestConstructUtils.test_eye_array_vs_matrixc           	      C   sb  g }| tdgg | tdgg | tdgg | tdgg | tdgdgg | tddgg | tddgddgg | tddgddgg | tg d	g d
g | tddgddgddgg | tg dg dg dg | tg dg | tg dg dg |D ]:}t|}|D ]1}t|}t||}tdd D ]}tj|||d}t|j| t	|
 | t|tsJ qqq|d }|d }t|}t|}t||}tD ]}tj|||d}t|j| t	|
 | t|tsJ qtjt|t||d}t|j| t	|
 | t|ts/J d S )Nr   r=   r/   r6   r,   r-   r.   r0   r   r-   ir4   r   r;   r2   )r0   r/   r/   rc   )r2   r   r4   )r   r,   r   r-   r   r0   r4   )      ?g      ?r   g      
@)r   g      @r   r   r   rG   )rP   r   r   rp   kronr   r   r   r    r   rS   r   r   r
   r   )	rT   rX   rt   caru   cbexpectedr   r[   r$   r$   r%   	test_kron7  sP     
zTestConstructUtils.test_kronc                 C   sT   d}t jdgd|f|d d}t jdg|dfd| d}t || t || d S )Ni   r,   )rl   rk   )r   diags_arrayr   )rT   r   rt   ru   r$   r$   r%   test_kron_largeg  s
   z"TestConstructUtils.test_kron_largec              
   C   sL  g }| tdgg | tdgg | tdgg | tdgg | tddgddgg | tddgddgg | tg d	g d
g dg | tg dg dg dg |D ]0}|D ]+}tt|t| }tt|j	d |t|t|j	d  }t
|| qfqbtt|t| }t
|| d S )Nr   r=   r/   r6   r,   r-   r.   r0   r   r   )r   r.   r   rc   )r   r0   r=   )r/   ra   r4   )rP   r   r   kronsumr   rS   rp   r   r   rl   r   r
   )rT   rX   rt   ru   r[   r   r$   r$   r%   test_kronsumo  s&     zTestConstructUtils.test_kronsumcoo_clsc                 C   sn  |ddgddgg}|ddgg}t ddgddgddgg}tt||g | ttj||gtjdjtj tt| | g | tt|	 |	 g | tj|	 |	 gdtjd	}t|jtj t|j
jtj t|jjtj tt| | g | tj| | gd
tjd	}t|jtj t|j
jtj t|jjtj d S )Nr,   r-   r.   r/   r0   r2   r   r   )r    r!   r   )r   r   r   vstackrS   rp   float32r!   todoktocsrindicesint32indptrtocsc)rT   r   ABr   r[   r$   r$   r%   test_vstack  s:    zTestConstructUtils.test_vstackc                 C   s   ddgddgg}ddgg}t tt|t|gtsJ t tt|t|gts-J t tt|t|gts=J t tt|t|gtsMJ d S Nr,   r-   r.   r/   r0   r2   )r   r   r   r   r   r   r   rT   r   r   r$   r$   r%   test_vstack_matrix_or_array  s   
   $z.TestConstructUtils.test_vstack_matrix_or_arrayc                 C   s  |ddgddgg}|dgdgg}t g dg dg}tt||g | ttj||gtjd	jtj tt| | g | tt|	 |	 g | ttj|	 |	 gtjd	jtj tt|
 |
 g | ttj|
 |
 gtjd	jtj d S )
Nr,   r-   r.   r/   r0   r2   r,   r-   r0   r.   r/   r2   r   )r   r   r   hstackrS   rp   r   r!   r   r   r   )rT   r   r   r   r   r$   r$   r%   test_hstack  s8    zTestConstructUtils.test_hstackc                 C   s   ddgddgg}dgdgg}t tt|t|gtsJ t tt|t|gts.J t tt|t|gts>J t tt|t|gtsNJ d S r   )r   r   r   r   r   r   r   r   r$   r$   r%   test_hstack_matrix_or_array  s      $z.TestConstructUtils.test_hstack_matrix_or_arrayblock_arrayc           
      C   s,  t ddgddgg}t dgdgg}t dgg}t d}tg d	g d
g dg}t|||gd |gg | tdtjd}t|| | g|| gg | t|| | g| | gg | tg dg dg dg}t||d gd |gg | t|| |j	 g|| gg | t|| |j	 g| | gg | tdtjd}tddgddgddgg}t|d |g|d gg | t||j	 | g| |gg | t||j	 | g| | gg | t
d}t|d d gg | t|d |g|d gg | tdgg}t|d |g|d gg | tt}	||g|gg W d    n	1 sSw   Y  |	d tt}	|| g| gg W d    n	1 syw   Y  |	d tt}	|| g| gg W d    n	1 sw   Y  |	d tt}	|||gg W d    n	1 sw   Y  |	d tt}	|| | gg W d    n	1 sw   Y  |	d tt}	|| | gg W d    n	1 s
w   Y  |	d d S )Nr,   r-   r.   r/   r0   r2   r3   r   r   r   )r   r   r3   r_   r   )r,   r-   r   )r.   r/   r   r]   r   z.Got blocks\[1,0\]\.shape\[1\] == 1, expected 2z"incompatible dimensions for axis 1z4Mismatching dimensions along axis 1: ({1, 2}|{2, 1})z.Got blocks\[0,1\]\.shape\[0\] == 1, expected 2z4Mismatching dimensions along axis 0: ({1, 2}|{2, 1})z"incompatible dimensions for axis 0)r   r   r   rS   r   rp   r   r   r   Temptyr{   r|   r   )
rT   r   r   r   CDr   EZexcinfor$   r$   r%   test_block_creation  s   














z&TestConstructUtils.test_block_creationc                 C   s   t j}ddgddggdgdgg}}t|t|}}t|d |g|d ggddts,J t|d |g|d ggddts=J t|||ggddtsKJ d S )	Nr,   r-   r.   r/   r3   r0   r   r   )r   r   r
   r   r   )rT   blockFlGlFmGmr$   r$   r%   test_block_return_type  s   "" z)TestConstructUtils.test_block_return_typec                 C   s  t j}ddgddggdgdgg}}t|t|}}t|t|}}t|||ggddts2J t|||ggddts@J t|d	|g|d	ggddtsQJ t|d	|g|d	ggddtsbJ t|d	|g|d	ggddtssJ t|d	|g|d	ggddtsJ t|||ggddtsJ t|||ggddtsJ t|||ggddtsJ t|||ggddtsJ t|||ggddtsJ t|||ggddtsJ t|| | ggd
dtsJ t|| | ggd
dtsJ t|| | ggddtsJ t|| | ggddts"J t|||ggddts1J t|| |ggddtsBJ t|| |ggddtsSJ t|||ggd
dtsbJ d	S )z2This can be removed after sparse matrix is removedr,   r-   r.   r/   r3   r0   r   r   Nr   )r   bmatr
   r   r   r   r   r   )rT   r   r   r   r   r   FaGar$   r$   r%   test_bmat_return_type'  s0   """"$$&&"""z(TestConstructUtils.test_bmat_return_typez!Can't create large array for testc                 C   s   t d d}ttj||ftd}| }tj||fddd}tt	t
t|j| t|jjtj t|jjtj dS )z6 test for indptr overflow when concatenating matrices i0u  i  r   r   F)axisreturn_spmatrixN)r   r   rp   onesboolcopyr   _compressed_sparse_stackr   allequaldiffr   r   r   r!   int64)rT   r   r   r   r   r$   r$   r%   test_concatenate_int32_overflowK  s   z2TestConstructUtils.test_concatenate_int32_overflowc                 C   st   t ddgddgg}t dgdgg}t dgg}tg dg d	g d
g dg dg}tt|||f | dS )z basic test for block_diag r,   r-   r.   r/   r0   r2   r3   )r,   r-   r   r   )r.   r/   r   r   )r   r   r0   r   )r   r   r2   r   )r   r   r   r3   N)r   r   r   r   
block_diagrS   )rT   r   r   r   r   r$   r$   r%   test_block_diag_basic[  s   z(TestConstructUtils.test_block_diag_basicc                 C   sh   t tddgdg g dg dg tg d}tddg}t t||g g dg d	g d
S )z) block_diag with scalar and 1d arguments r-   r.   r/   )r-   r.   r   )r   r   r/   )r,   r   r.   r   )r,   r   r.   r   r   )r   r   r   r   r/   N)r   r   r   rS   r   r   r$   r$   r%   test_block_diag_scalar_1d_argsi  s   z1TestConstructUtils.test_block_diag_scalar_1d_argsc                 C   s   t tddgg tddgg t tddggg tddgg t tdgdggg tdgdgg t tdg tdgg dS )z block_diag with one matrix r,   r   N)r   r   r   rS   r   r   r$   r$   r%   test_block_diag_1u  s   
z$TestConstructUtils.test_block_diag_1c              	   C   s   t g dgdd}t ddggdd}tt||g tg dg dg t d	gd
gdggdd}t dgdggdd}tt||g td	dgd
dgddgddgddgg dS )z block_diag with sparse arrays rh   )r,   r.   rl   r/   r0   r_   )r,   r-   r.   r   r   )r   r   r   r/   r0   r,   r-   r.   )r.   r,   r^   r   N)r   r   r   r   rS   r   r   r$   r$   r%   test_block_diag_sparse_arrays  s   $z0TestConstructUtils.test_block_diag_sparse_arraysc                 C   s   t g dgtg dg}}tt||gtsJ tt||gts'J tt||gts3J tt||gts?J d S )Nrh   )r-   r.   r/   )r   r   r   r   r   r   r   r   r$   r$   r%   test_block_diag_return_type  s
   z.TestConstructUtils.test_block_diag_return_typec              	      sH  t tfD ] tjtjtjtjtjtjtj	fD ]} ddd|d}t
|j| t
|jd t
|jd q ddddd}t
|jtj  dddtjdd}t|j|j t|j|j t|j|j dD ]} dd|d	}t
|jt|t|j  qed
D ]} dd|d}t
|j| qtt fdd tt fdd qd S )Nr0   r6   皙?)r   r!   )r0   r6     )r   r"   )g        r   r   g      ?r   )r   r   r   r   r   c                          dddS )Nr0   r6   g?r$   r$   fr$   r%   <lambda>      z9TestConstructUtils.test_random_sampling.<locals>.<lambda>c                      r   )Nr0   r6   gr$   r$   r   r$   r%   r     r  )sprandr&   rp   r   float64
longdoubler   r   	complex64
complex128r   r!   rl   nnzr   RandomStater   datarowcolr   prodr    r{   r|   )rT   tr   x1x2r   r   r$   r   r%   test_random_sampling  s2   
z'TestConstructUtils.test_random_samplingc                 C   s   d dt j g}zt j }|| W n	 ty   Y nw |D ]$}tdddt j|d}tt 	t 
d|j tt 	t 
|jd q d S Nr   r6      r   )r   r!   r"   r   r,   )rp   r   r  default_rngrP   AttributeErrorr  r  r   r   
less_equalr	  )rT   random_statesgenr"   r   r$   r$   r%   	test_rand  s   
zTestConstructUtils.test_randc                 C   s   d dt j g}zt j }|| W n	 ty   Y nw |D ]F}tdddt j|d}tt 	t 
|jd tt 	t 
d|j tdddt j|d}tt 	t 
|jd tt 	t 
d|j q d S r  )rp   r   r  r  rP   r  r&   r  r   anylessr	  r)   )rT   r  r  rsr   r$   r$   r%   
test_randn  s   
zTestConstructUtils.test_randnc                 C   s"   t jdddd t jddd d S )Nr6   rY   r   r6   r6   )r   r   r(   r   r$   r$   r%   test_random_accept_str_dtype  s   z/TestConstructUtils.test_random_accept_str_dtypec                 C   sl   t jdddd}t| d t jddd}t| d t|ts$J d}t j|dd}t| d d S )	Nr6   gx&1?r   r:   r  )        r  g(Rs?<i  )r   r   r   count_nonzeror(   r   r   )rT   sparse_matrixsparse_arrayrl   r$   r$   r%   Etest_random_sparse_matrix_returns_correct_number_of_non_zero_elements  s   zXTestConstructUtils.test_random_sparse_matrix_returns_correct_number_of_non_zero_elementsN)2__name__
__module____qualname__r\   rw   rz   r}   r   r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   slowxfail_on_32bitr   r   r   r   r   r   r  r  r  r  r#  r$   r$   r$   r%   r*   '   sV    8N

#
0


M$
r*   c                  C   s   t dd} tt|  t |  ttj| dd t j| dd ttj| ddd t j| dddd	dd	f  tjt	d
d tj
t ddddd W d   dS 1 s]w   Y  dS )z7Tests of diags_array that do not rely on diags wrapper.r,   r0   r-   ro   r   r   rj   Nr/   z.*out of boundsr   r   )rp   r   r   r   r   rS   rx   r   r   r|   rq   )rx   r$   r$   r%   test_diags_array  s   "r+  )r   r   NN)!__doc__numpyrp   r   numpy.testingr   r   r   r   r   r   r{   scipy._lib._testutilsr   scipy._lib._utilr	   scipy.sparser
   r   r   r   r   r   r   r   scipy.sparse._constructr   r  r   r&   r)   r*   r+  r$   r$   r$   r%   <module>   s(    $

     I