o
    Yi@                  
   @   s  d dl mZ d dlZd dlZd dlmZmZ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Zd dlmZ d dl	Z	ejg dg dg d	g d
g dgedZejg dg dg dg dg dgedZed keZg dg dejejd ejejgg dg dgZg dg dgZ ej!j"g dg dg dffddZ#d d dejejgdd dejejgddd ejejgejejejd dgejejejdd ggZ$ej!j"g d g d!g d"ffddZ%d d dejejgd d dejejgddd ejejgejejejd dgejejejdd ggZ&ejg d#g d$g d%g d&g d'gedZ'ejg dg dg d(g d)g d*gedZ(ejd ejejddgejd ejdejgejejd ejejgddejd dgdejejdd ggedZ)ej*dede+d+ Z,eje,e,d k< ejg d,g d-g d.g d/g d0gedZ-ejg d1g d2g d3gedZ.ejd ejejgd4d ejgg d5gedZ/g d6Z0d7d8 Z1d9d: Z2d;d< Z3d=d> Z4d?d@ Z5e	j67dAdBefdCe(ffe	j67dDg dEd dFgddFgd d gfdGdH Z8e	j67dIdJdKdL Z9dMdN Z:dOdP Z;dQdR Z<dSdT Z=dUdV Z>dWdX Z?dYdZ Z@e	j67d[g d\d]d^ ZAd_d` ZBdadb ZCe	j67d[e0dcdd ZDdedf ZEdgdh ZFdidj ZGdkdl ZHdmdn ZIdodp ZJdqdr ZKe	j67dsdte	j67dudte	j67dvdte	j67dwejLejMfe	j67dDddgfdxdy ZNdS )z    )StringION)assert_array_almost_equalassert_array_equalassert_allclose)raises)shortest_pathdijkstrajohnsonbellman_fordconstruct_dist_matrixyenNegativeCycleError)mmread)r      r   r   r   )r   r   r         r   r   r   r   r   )   r   r   r   r   )r   r   r   r   r   dtype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   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   shaper   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   )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   )r   r   r   )r   r   )r   r"   r   r"   )r"   r   )autoFWDBFJc                  C   s@   ddt jg} tttg}dd }t| |D ]	\}}||| qd S )Nr   r   c                 S   s   t td| d}t|| d S )NF)directedlimit)r   undirected_Gr   )r*   resultSP r.   T/tmp/pip-target-1s0edx8b/lib/python/scipy/sparse/csgraph/tests/test_shortest_path.pycheckl   s   z"test_dijkstra_limit.<locals>.check)npinfundirected_SP_limit_0undirected_SP_limit_2undirected_SPzip)limitsresultsr0   r*   r,   r.   r.   r/   test_dijkstra_limitf   s   r9   c                  C      dd } t D ]}| | qd S )Nc                 S      t t| ddd}t|t d S NTFmethodr)   	overwriter   
directed_Gr   directed_SPr>   r-   r.   r.   r/   r0   u      ztest_directed.<locals>.checkmethodsr0   r>   r.   r.   r/   test_directedt   s   
rH   c                  C   *   dd } t D ]}dD ]}| || q
qd S )Nc                 S   @   |rt t| ddd}t|t d S t t| ddd}t|t d S NFr=   T)r   rA   r   r5   r+   r>   directed_inSP1SP2r.   r.   r/   r0         ztest_undirected.<locals>.checkTFrE   r0   r>   rM   r.   r.   r/   test_undirected~      
rS   c                  C   r:   )Nc                 S   r;   r<   )r   directed_sparse_zero_Gr   directed_sparse_zero_SPrC   r.   r.   r/   r0      rD   z(test_directed_sparse_zero.<locals>.checkrE   rG   r.   r.   r/   test_directed_sparse_zero   s   
rW   c                  C   rI   )Nc                 S   rJ   rK   )r   rU   r   undirected_sparse_zero_SPundirected_sparse_zero_GrL   r.   r.   r/   r0      rP   z*test_undirected_sparse_zero.<locals>.checkrQ   rE   rR   r.   r.   r/   test_undirected_sparse_zero   rT   rZ   zdirected, SP_ansTFindices)r   r   r   r   c           	      C   s   t |}t j|t jd}|t j||d d f dd }t |jd |j}t|jd D ]}||| |f ||< q-d|t |< t	t
| |ddd\}}}t|| t|| t	t
| |ddd}t|| d S )Nr   r   )axisr   Tr)   r[   min_onlyreturn_predecessorsF)r1   arrayint64argminzerosr!   r   rangeisinfr   rA   r   r   )	r)   SP_ansr[   min_ind_ans	min_d_anskr-   predsourcesr.   r.   r/   test_dijkstra_indices_min_only   s,   


rl   n)
   d   i  c                 C   s   t jd}tjj| | fdd|t jd}|t j| t j	d t 
| }|| |d t| d  }t|d|ddd\}}}t| D ]}|| }	|| }
|	d	kra||	 |
ksYJ ||	 }	|	d	ksQqCd S )
Nl   	X/ g      ?lil)densityformatrngr   r   g?Tr]   r   )r1   randomdefault_rngscipysparserandom_arrayfloat64setdiagrc   bool_arangeshuffleintr   rd   )rm   rs   datavr[   dsrj   rk   ri   psr.   r.   r/   test_dijkstra_min_only_random   s.   

r   c                  C   sH   d} g d}g d}g d}t jj|||f| | fd}t|ddd d S )Nrn   )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   )g2}ƅ?gMg'?gx@e?gN]?ghn?g16T?g|\?g%e?gh o?g-?gn\?g$~?g<,Ԛ?ga?ge1?g{?gbE?g?r    Tr)   r_   )rv   rw   	csr_arrayr   )rm   r[   indptrr   graphr.   r.   r/   test_dijkstra_random   s   r   c                  C   s&   d} t t| dd}t|ddd d S )Na  %%MatrixMarket matrix coordinate real general
                84 84 22
                2 1 4.699999809265137e+00
                6 14 1.199999973177910e-01
                9 6 1.199999973177910e-01
                10 16 2.012000083923340e+01
                11 10 1.422000026702881e+01
                12 1 9.645999908447266e+01
                13 18 2.012000083923340e+01
                14 13 4.679999828338623e+00
                15 11 1.199999973177910e-01
                16 12 1.199999973177910e-01
                18 15 1.199999973177910e-01
                32 2 2.299999952316284e+00
                33 20 6.000000000000000e+00
                33 32 5.000000000000000e+00
                36 9 3.720000028610229e+00
                36 37 3.720000028610229e+00
                36 38 3.720000028610229e+00
                37 44 8.159999847412109e+00
                38 32 7.903999328613281e+01
                43 20 2.400000000000000e+01
                43 33 4.000000000000000e+00
                44 43 6.028000259399414e+01
    F)spmatrixTr   )r   r   r   )textr   r.   r.   r/   test_gh_17782_segfault   s   r   c                     sR   t d  fdd} dD ]}ttttfD ]}| || qqttttd d d S )Nr   c                    s4   |d }| t d |d}t|t  | d S )N)r   F)r)   r[   )rA   reshaper   r5   )funcindshapeoutshaper-   r[   r.   r/   r0   	  s
   z)test_shortest_path_indices.<locals>.check))r   )r   r   )r   r   r%   )r>   r[   )	r1   r|   r   r
   r	   r   assert_raises
ValueErrorrA   )r0   r   r   r.   r   r/   test_shortest_path_indices  s   


r   c                     sD   t td ttd fdd} tD ]}dD ]}| || qqd S )NrQ   c                    s6   t t| |ddd\}}t| |  t||  d S )NFTr)   r?   r_   )r   rA   r   )r>   r)   r-   rj   SP_respred_resr.   r/   r0     s   
z test_predecessors.<locals>.check)rB   r5   directed_predundirected_predrF   r0   r>   r)   r.   r   r/   test_predecessors  s   r   c                  C   rI   )Nc                 S   s0   t t|ddd\}}tt||d}t|| d S )NFTr   r)   )r   rA   r   r   )r>   r)   rN   rj   rO   r.   r.   r/   r0   *  s   
z+test_construct_shortest_path.<locals>.checkrQ   rE   r   r.   r.   r/   test_construct_shortest_path)  s   r   c                  C   rI   )Nc                 S   s.   t t|ddd}t t|ddd}t|| d S )NFT)r)   r?   
unweighted)r   rA   unweighted_Gr   )r>   r)   rN   rO   r.   r.   r/   r0   8  s   z#test_unweighted_path.<locals>.checkrQ   rE   r   r.   r.   r/   test_unweighted_path7  s   r   c               
      sj   t ddg d jd d d< d d<  fdd} dD ]}d	D ]}| || qttt dd
d
|d qd S )Nr   r   r   r#   )r   r   c                    s   t tt | | d S )N)r   r   r   )r>   r)   r   r.   r/   r0   N  s   
z#test_negative_cycles.<locals>.checkrQ   r%   r(   r'   r   r   )r1   onesflatr   r   r   )r0   r)   r>   r.   r   r/   test_negative_cyclesH  s   r   r>   r   c                 C   s    t t| dd}t|tdd d S )NTr   g|=)atol)r   directed_negative_weighted_Gr   directed_negative_weighted_SPrC   r.   r.   r/   test_negative_weightsZ  s   r   c                  C   s,   t jtd dd } tD ]}| | qd S )Nr   c                 S   r;   r<   r@   rC   r.   r.   r/   r0   c  rD   z test_masked_input.<locals>.check)r1   mamasked_equalrA   rF   rG   r.   r.   r/   test_masked_input`  s
   
r   c                  C   sN   t jg dg dg dg dg dgtd} |  }t|dd t||  d S )	Nr   r   r   r   r   r   F)r?   )r1   r`   floatcopyr   r   )Gfoor.   r.   r/   test_overwritel  s   
r   c                 C   s,   t jdgg}d|jjd< t|| d d S )N      ?F	WRITEABLE)r>   )rv   rw   r   r   flagsr   )r>   r   r.   r.   r/   test_bufferw  s   r   c                  C   sd   t jdd} ttddgtjdgg W d    n1 sw   Y  | D ]	}|jtus/J q&d S )NT)recordr   r   )warningscatch_warningsr   r1   r`   nancategoryRuntimeWarning)r   rr.   r.   r/   test_NaN_warnings  s   r   c                  C   s   t jg dg dg dg dg dgtd} t| }tj| }tj| }tj| }t	|t| t	|t| t	|t| 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   )
r1   r`   r   r   rv   rw   r   	csc_array	lil_arrayr   )G_denser-   G_csrG_cscG_lilr.   r.   r/   test_sparse_matrices  s   
r   c                  C   s2   t tddddd\} }t| ddg t|t d S )Nr   r   r   T)sourcesinkKr_         @g      "@r   rA   r   directed_2SP_0_to_3	distancespredecessorsr.   r.   r/   test_yen_directed  s   
r   c                  C   s"   t tdddd} t| g d d S )Nr   r   r   r   r   r   )r   g      @r   g       @)r   r+   r   r   r.   r.   r/   test_yen_undirected     r   c                  C   s4   t tdddddd\} }t| ddg t|t d S )Nr   r   r   T)r   r   r   r   r_   g       @g      @r   r   r.   r.   r/   test_yen_unweighted  s   
r   c                  C   s"   t tdddd} | jdksJ d S )Nr   r   r   r   r   )r   rA   sizer   r.   r.   r/   test_yen_no_paths  r   r   c                  C   s    t tdddd} t| dg d S )Nr   r   r   r   g       )r   r   r   r   r.   r.   r/   test_yen_negative_weights  s   r   r^   rQ   r)   r_   index_dtypec                 C   sJ   t jjddd}t j|j|j||j|f}t|||| |d dS )z;Test two failures from gh-20904: int32 and indices-as-None.r   csr)rr   )r[   r^   r_   N)	rv   rw   	eye_arrayr   r   r[   astyper   r   )r^   r)   r_   r   r[   adj_matr.   r.   r/   
test_20904  s   


r   )Oior   r   numpyr1   numpy.testingr   r   r   pytestr   r   scipy.sparse.csgraphr   r   r	   r
   r   r   r   scipy.sparserv   scipy.ior   r`   r   rA   r+   r   r   r2   rB   r   rw   r   rU   rV   rY   rX   r   r5   r4   r   eyer3   r   r   r   rF   r9   rH   rS   rW   rZ   markparametrizerl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   int32ra   r   r.   r.   r.   r/   <module>   s$   $







$


		
