o
    3ήcg<                     @   sF   d dl Z d dlZdd ZG dd dZG dd dZG dd	 d	ZdS )
    Nc                    sJ  t |tsJ |d |ksJ |d |ksJ |d   |d   f}|d   |d   f}t|t|d |d  t|d |d   d ksKJ  fdd|D }|D ]"}d|d   kre| k shJ  J d|d   kru k sxJ  J qVt|d d |dd  D ]\}}t|d |d  t|d |d  fdv sJ qd S )Nr      c                    s$   g | ]}|d    |d    fqS )r    ).0ucr   \/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/shortest_paths/tests/test_generic.py
<listcomp>   s   $ z&validate_grid_path.<locals>.<listcomp>))r   r   )r   r   )
isinstancelistlenabszip)rr   stpr   vr   r   r	   validate_grid_path   s   8 ""2r   c                   @   s   e Zd Ze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 )TestGenericPathc                 C   s   ddl m} |tddddd| _td| _tjdt d| _t | _	| j	j
dddd	 | j	j
dd
dd	 | j	j
dddd	 | j	j
d
ddd	 d S )Nr   )convert_node_labels_to_integers   r   sorted)first_labelordering   )create_usingweight      )networkxr   nxgrid_2d_graphgridcycle_graphcycleDiGraphdirected_cycleneg_weightsadd_edge)clscnltir   r   r	   setup_class   s   
zTestGenericPath.setup_classc                 C   s  t | jddg dksJ t | jddg dksJ tddddt | jdd t | jddg dks8J t j| jdddd	g dksHJ t j| jdddd	g dksXJ tddddt j| jdddd	 t j| jdddd	g dksxJ t j| jdddd
dg dksJ t j| jdddddg dksJ t j| jdddddg dksJ tjt	t j| jdd tt j
t j| jd d S )Nr   r!   r   r   r    r!   r   )r         r   r      r   r   dijkstrar   methodbellman-ford)r   r    r!   SPAMr6      )r$   shortest_pathr(   r   r&   r*   r+   pytestraises
ValueErrorNodeNotFoundselfr   r   r	   test_shortest_path#   s6      z"TestGenericPath.test_shortest_pathc                 C   s   ddgdgddgd}t jt ddd}||ksJ t jt dddd}||ks,J t jt dddd	d
}||ks>J t jt ddddd
}||ksPJ d S )Nr   r   r    r   r   r    r!   targetr   rE   r   r4   rE   r   r6   r7   )r$   r;   
path_graphrA   answerspr   r   r	   test_shortest_path_targetE   s   z)TestGenericPath.test_shortest_path_targetc                 C   s  t | jdddksJ t | jdddksJ t | jdddks$J t j| jdddddks2J t j| jdddddks@J t j| jdddddksNJ t j| jdddd	d
dks]J t j| jddddd
dkslJ tjtt j| jdd tt jt j| jd d S )Nr   r!   r   r3   r2   r   r   r   r4   r5   r7   r8   r9   r:   )	r$   shortest_path_lengthr(   r&   r*   r<   r=   r>   r?   r@   r   r   r	   test_shortest_path_lengthV   s(   z)TestGenericPath.test_shortest_path_lengthc                 C   s   dddd}t tjtddd}||ksJ tjtdddd}||ks)J tjtddddd	}||ks;J tjtdddd
d	}||ksMJ d S )Nr   r   rC   r!   rD   r   rF   r4   rG   r7   )dictr$   rM   rH   rI   r   r   r	    test_shortest_path_length_targetp   s   z0TestGenericPath.test_shortest_path_length_targetc                 C   s<  t | jd}|d g dksJ |t | jdksJ t | jd}tdddd|d  t j| jddd}|d g dks@J |t | jdksKJ t j| jddd}tdddd|d  t j| jdd	dd
}|d g dksrJ |t | jdks}J t j| jdddd
}|d g dksJ |t | jdksJ d S )Nr   r!   r0   r   r   r3   r   r   r4   )r6   r   r7   )r$   r;   r(   single_source_shortest_pathr&   r   single_source_dijkstra_pathrA   r   r   r   r	    test_single_source_shortest_path   s    z0TestGenericPath.test_single_source_shortest_pathc              	   C   s|  t t| jd}|ddddddddksJ |t t| jdks$J t t| jd}|d dks5J t tj| jddd	}|ddddddddksNJ |t t| jdks[J t tj| jddd	}|d dksnJ t tj| jddd
d}|ddddddddksJ |t t| jdksJ t tj| jdddd}|ddddddddksJ |t t| jdksJ d S Nr   r   r    r!   )r   r   r    r!   r   r2   r1      r1   r   r   r4   r5   r7   )rO   r$   rM   r(   "single_source_shortest_path_lengthr&   "single_source_dijkstra_path_length&single_source_bellman_ford_path_lengthrA   ansr   r   r	   'test_single_source_shortest_path_length   s,   
z7TestGenericPath.test_single_source_shortest_path_lengthc                 C   sP  t | j}|d d g dksJ |tt | jksJ t | j}tdddd|d d  t j| jdd}|d d g dksDJ |tt | jksPJ t j| jdd}tdddd|d d  t j| jdd	d
}|d d g dksyJ |tt | jksJ t j| jddd
}|d d g dksJ |tt | jksJ d S )Nr   r!   r0   r   r   r3   r   r   r4   r5   r7   )	r$   r;   r(   rO   all_pairs_shortest_pathr&   r   all_pairs_dijkstra_pathall_pairs_bellman_ford_pathrS   r   r   r	   test_all_pairs_shortest_path   s    z,TestGenericPath.test_all_pairs_shortest_pathc              	   C   s  t t| j}|d ddddddddksJ |t t| jks$J t t| j}|d d dks6J t tj| jdd	}|d ddddddddksPJ |t t| jks\J t tj| jdd	}|d d dkspJ t tj| jdd
d}|d ddddddddksJ |t t| jksJ t tj| jddd}|d ddddddddksJ |t t| jksJ d S rU   )rO   r$   rM   r(   all_pairs_shortest_path_lengthr&   all_pairs_dijkstra_path_length"all_pairs_bellman_ford_path_lengthrZ   r   r   r	   #test_all_pairs_shortest_path_length   s(       z3TestGenericPath.test_all_pairs_shortest_path_lengthc                 C   sR   t  }t |td t |tdd t |ddsJ t |ddr'J d S )Nr!   r2   r   r    r   )r$   Graphadd_pathrangehas_pathrA   Gr   r   r	   test_has_path   s
   zTestGenericPath.test_has_pathc              	   C   sL  t  }t |g d t |g d g dg dgtt |ddks'J t  }t |g d t |g d g dg dgtt j|ddddksPJ t  }t |g d t |g d g dg dgtt j|dddddkszJ t  }t |g d t |g d g dg dgtt j|dddd	dksJ d S )
Nr0   )r   
      r!   r   r!   r   r   r4   r5   r7   )r$   re   rf   r   all_shortest_pathsri   r   r   r	   test_all_shortest_paths   s,   &

z'TestGenericPath.test_all_shortest_pathsc                 C   sX   t tj td}|d tt|dd W d    d S 1 s%w   Y  d S )Nr   r   )r<   r=   r$   NetworkXNoPathrH   add_noder   rn   ri   r   r   r	   test_all_shortest_paths_raise   s
   

"z-TestGenericPath.test_all_shortest_paths_raisec              	   C   sR   t t td}ttj|ddddd W d    d S 1 s"w   Y  d S )Nr    r   r   r   r8   r5   )r<   r=   r>   r$   rH   r   rn   ri   r   r   r	   test_bad_method  s   
"zTestGenericPath.test_bad_methodc                 C   s   t  }t |g d t |g d d|jd d< tt j|ddddd}tt j|ddddd}tt j|dddd	d}tt j|dddd	d}t|td
d |D ksZJ t|tdd |D ksiJ t|tdd |D ksxJ d S )N)r   r   r!   r0   r   )r   r    r   r!   r4   r5   r7   c                 s       | ]
}|d d d V  qd S Nr   r   r   r   r   r   r	   	<genexpr>      zKTestGenericPath.test_all_shortest_paths_zero_weight_edge.<locals>.<genexpr>c                 s   rt   ru   r   rv   r   r   r	   rw     rx   c                 s   rt   ru   r   rv   r   r   r	   rw     rx   )r$   re   rf   edgesr   rn   r   )rA   gpaths30dpaths03dpaths30bpaths03br   r   r	   (test_all_shortest_paths_zero_weight_edge  s&   "z8TestGenericPath.test_all_shortest_paths_zero_weight_edgeN)__name__
__module____qualname__classmethodr/   rB   rL   rN   rP   rT   r\   r`   rd   rk   ro   rr   rs   r   r   r   r   r	   r      s     
"r   c                   @   sL   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S )TestAverageShortestPathLengthc                 C   *   t t d}|tjdddksJ d S )Nr   r    Hz>r   )r$   average_shortest_path_lengthr'   r<   approxrZ   r   r   r	   test_cycle_graph     z.TestAverageShortestPathLength.test_cycle_graphc                 C   r   )Nr2   r    r   r   )r$   r   rH   r<   r   rZ   r   r   r	   test_path_graph"  r   z-TestAverageShortestPathLength.test_path_graphc                 C   s   t  }t j|tddd t j|dd}|tjdddks J t  }t j|tddd t j|dd}|tjdddks@J d S )	Nr   r    r   r   r   r   r   r2   r$   re   	add_cyclerg   r   r<   r   rf   rA   rj   r[   r   r   r	   test_weighted&  s   z+TestAverageShortestPathLength.test_weightedc                 C   s   t  }t j|tddd t j|ddd}|tjddd	ks!J t j|dd
d}|tjddd	ks4J t j|ddd}|tjddd	ksGJ t  }t j|tddd t j|ddd}|tjddd	kshJ t j|dd
d}|tjddd	ks{J t j|ddd}|tjddd	ksJ d S )Nr   r    r   r   r4   r5   r   r   r   r7   zfloyd-warshallr2   r   r   r   r   r	   test_specified_methods0  s(   z4TestAverageShortestPathLength.test_specified_methodsc                 C   sR   t  }|td |dd tt jt j| |	 }tt jt j| d S )Nr!   r   r   )
r$   re   add_nodes_fromrg   r,   r<   r=   NetworkXErrorr   to_directed)rA   rz   r   r   r	   test_disconnectedG  s   z/TestAverageShortestPathLength.test_disconnectedc                 C   s   t  }t |dksJ dS )zTests that the trivial graph has average path length zero,
        since there is exactly one path of length zero in the trivial
        graph.

        For more information, see issue #1960.

        r   N)r$   trivial_graphr   ri   r   r   r	   test_trivial_graphO  s   z0TestAverageShortestPathLength.test_trivial_graphc                 C   s@   t tj tt  W d    d S 1 sw   Y  d S )N)r<   r=   r$   NetworkXPointlessConceptr   
null_graphr@   r   r   r	   test_null_graphZ  s   "z-TestAverageShortestPathLength.test_null_graphc                 C   sJ   t t td}tj|ddd W d    d S 1 sw   Y  d S )Nr    r   r8   r5   )r<   r=   r>   r$   rH   r   ri   r   r   r	   rs   ^  s   
"z-TestAverageShortestPathLength.test_bad_methodN)r   r   r   r   r   r   r   r   r   r   rs   r   r   r   r	   r     s    
r   c                   @   s    e Zd Zedd Zdd ZdS )"TestAverageShortestPathLengthNumpyc                 C   s   dd l }|dad S )Nr   numpy)r<   importorskipnp)r-   r<   r   r   r	   r/   e  s   z.TestAverageShortestPathLengthNumpy.setup_classc                 C   sx   t  }t j|tddd t j|ddd}tj|d t  }t j|tddd t j|ddd}tj|d d S )	Nr   r    r   r   zfloyd-warshall-numpyr5   r   r2   )	r$   re   r   rg   r   r   testingassert_almost_equalrf   r   r   r   r	   test_specified_methods_numpyl  s   z?TestAverageShortestPathLengthNumpy.test_specified_methods_numpyN)r   r   r   r   r/   r   r   r   r   r	   r   d  s    
r   )r<   r#   r$   r   r   r   r   r   r   r   r	   <module>   s      
G