o
    5ήc/                  
   @   s  d dl Z d dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZ d dl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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 d,ged
Z&g d-Z'd.d/ Z(d0d1 Z)d2d3 Z*d4d5 Z+d6d7 Z,ej-.d8d9efd:e!ffej-.d;g d<d d=gdd=gd d gfd>d? Z/ej-.d@dAdBdC Z0dDdE Z1dFdG Z2dHdI Z3dJdK Z4dLdM Z5dNdO Z6dPdQ Z7ej-.dRe'dSdT Z8dUdV Z9dWdX Z:dS )Y    N)assert_array_almost_equalassert_array_equal)raises)shortest_pathdijkstrajohnsonbellman_fordconstruct_dist_matrixNegativeCycleError)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   )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   )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-vg8gfxp4/lib/python/scipy/sparse/csgraph/tests/test_shortest_path.pycheckY   s   z"test_dijkstra_limit.<locals>.check)npinfundirected_SP_limit_0undirected_SP_limit_2undirected_SPzip)limitsresultsr)   r#   r%   r'   r'   r(   test_dijkstra_limitS   s   r2   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r7   r&   r'   r'   r(   r)   b      ztest_directed.<locals>.checkmethodsr)   r7   r'   r'   r(   test_directeda   s   
rA   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 NFr6   T)r   r:   r   r.   r$   r7   directed_inSP1SP2r'   r'   r(   r)   l      ztest_undirected.<locals>.checkTFr>   r)   r7   rF   r'   r'   r(   test_undirectedk      
rL   c                  C   r3   )Nc                 S   r4   r5   )r   directed_sparse_zero_Gr   directed_sparse_zero_SPr<   r'   r'   r(   r)   }   r=   z(test_directed_sparse_zero.<locals>.checkr>   r@   r'   r'   r(   test_directed_sparse_zero{   s   
rP   c                  C   rB   )Nc                 S   rC   rD   )r   rN   r   undirected_sparse_zero_SPundirected_sparse_zero_GrE   r'   r'   r(   r)      rI   z*test_undirected_sparse_zero.<locals>.checkrJ   r>   rK   r'   r'   r(   test_undirected_sparse_zero   rM   rS   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"   rT   min_onlyreturn_predecessorsF)r*   arrayint64argminzerosr   r   rangeisinfr   r:   r   r   )	r"   SP_ansrT   min_ind_ans	min_d_anskr&   predsourcesr'   r'   r(   test_dijkstra_indices_min_only   s,   


re   n)
   d   i  c           
      C   s   t jd tjj| | dddt jd}|t j| t j	d t 
| }t j| |d t| d  }t|d|d	d	d
\}}}t| D ]}|| }|| }	|dkra|| |	ksYJ || }|dksQqCd S )Ni  g      ?lil*   )densityformatrandom_stater   r   g?FTrV   r   )r*   randomseedscipysparserandfloat64setdiagr\   bool_arangeshuffleintr   r]   )
rf   datavrT   dsrc   rd   rb   psr'   r'   r(   "test_shortest_path_min_only_random   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"   rT   )r:   reshaper   r.   )funcindshapeoutshaper&   rT   r'   r(   r)      s
   z)test_shortest_path_indices.<locals>.check))r   )r   r   )r   r   r   )r7   rT   )	r*   rv   r   r   r   r   assert_raises
ValueErrorr:   )r)   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 )NrJ   c                    s6   t t| |ddd\}}t| |  t||  d S )NFTr"   r8   rX   )r   r:   r   )r7   r"   r&   rc   SP_respred_resr'   r(   r)      s   
z test_predecessors.<locals>.check)r;   r.   directed_predundirected_predr?   r)   r7   r"   r'   r   r(   test_predecessors   s   r   c                  C   rB   )Nc                 S   s0   t t|ddd\}}tt||d}t|| d S )NFTr   )r"   )r   r:   r	   r   )r7   r"   rG   rc   rH   r'   r'   r(   r)      s   
z+test_construct_shortest_path.<locals>.checkrJ   r>   r   r'   r'   r(   test_construct_shortest_path   s   r   c                  C   rB   )Nc                 S   s.   t t|ddd}t t|ddd}t|| d S )NFT)r"   r8   
unweighted)r   r:   unweighted_Gr   )r7   r"   rG   rH   r'   r'   r(   r)      s   z#test_unweighted_path.<locals>.checkrJ   r>   r   r'   r'   r(   test_unweighted_path   s   r   c                     sT   t ddg d jd d d< d d<  fdd} dD ]}d	D ]}| || qqd S )
Nr   r   r   )r   r   c                    s   t tt | | d S )N)r   r
   r   )r7   r"   graphr'   r(   r)     s   
z#test_negative_cycles.<locals>.check)r   r!   r    rJ   )r*   onesflatr   r'   r   r(   test_negative_cycles  s   r   c                  C   s,   t jtd dd } tD ]}| | qd S )Nr   c                 S   r4   r5   r9   r<   r'   r'   r(   r)     r=   z test_masked_input.<locals>.check)r*   mamasked_equalr:   r?   r@   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)r8   )r*   rY   floatcopyr   r   )Gfoor'   r'   r(   test_overwrite&  s   
r   r7   c                 C   s,   t jdgg}d|jjd< t|| d d S )Ng      ?F	WRITEABLE)r7   )rp   rq   
csr_matrixry   flagsr   )r7   r   r'   r'   r(   test_buffer1  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   r*   rY   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*   rY   r   r   rp   rq   r   
csc_matrix
lil_matrixr   )G_denser&   G_csrG_cscG_lilr'   r'   r(   test_sparse_matricesD  s   
r   );r   numpyr*   numpy.testingr   r   pytestr   r   scipy.sparse.csgraphr   r   r   r   r	   r
   scipy.sparserp   rY   r   r:   r$   astyper   r+   r;   rq   r   rN   rO   rR   rQ   r   r.   r-   r   eyer,   r   r?   r2   rA   rL   rP   rS   markparametrizere   r~   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   <module>   s     





$

