o
    3ήc                     @   sx   d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZ ee	e
eegZdd Zdd Zdd	 ZG d
d dZdS )z4Maximum flow algorithms test suite on large graphs.
    N)boykov_kolmogorovbuild_flow_dictbuild_residual_networkdinitzedmonds_karppreflow_pushshortest_augmenting_pathc                 C   s   t  }t| d D ]?}d|d  }t|d D ]0}|j||f|d |f|d d|d  | }|j||f|d |d f|d d|d  | }qq
t| D ]}|| d |fd qN|S )N         ?   )capacityt)nxDiGraphrangeadd_edge)NGicapj r   ^/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/flow/tests/test_maxflow_large_graph.pygen_pyramid   s    r   c                 C   s(   t jt}t j|| d }t|S )Nz.gpickle.bz2)ospathdirname__file__joinr   read_gpickle)namer   r   r   r   r   
read_graph0   s   
r!   c                 C   sP  |j d }t| |}d|j }||ksJ |t| t|ks$J || D ]}	t| |	 t||	 ks8J |q&dd |D }
|D ]7}	||	  D ].\}}|| |	 | dtdks`J ||dkshJ ||
|	  |8  < |
|  |7  < qJqB|
 D ]'\}	}|	|kr|| ksJ |q~|	|kr||ksJ |q~|dksJ |q~d S )N
flow_valueAssertion failed in function: c                 S   s   i | ]}|d qS )r   r   ).0ur   r   r   
<dictcomp>>   s    z"validate_flows.<locals>.<dictcomp>r   infr   )graphr   __name__setitemsgetfloat)r   sr   
soln_valueR	flow_funcr"   	flow_dicterrmsgr%   excessvflowexcr   r   r   validate_flows6   s,   

"$r8   c                   @   sD   e Zd Zdd Zdd Zdd Zejjdd Z	d	d
 Z
dd ZdS )TestMaxflowLargeGraphc                 C   s   d}t |}t |dd t|d}t|d}tD ]#}||d< d|j }t j|ddfi |}|d|d  ks=J |qd S )	N2      r   residualr1   r#   r	   r   )r   complete_graphset_edge_attributesr   dict
flow_funcsr)   maximum_flow_valueselfr   r   r0   kwargsr1   r3   r"   r   r   r   test_complete_graphO   s   


z)TestMaxflowLargeGraph.test_complete_graphc                 C   sn   d}t |}t|d}t|d}tD ]"}||d< d|j }tj|ddfi |}|tjdd	d
ks4J qd S )N
   r   r<   r1   r#   )r   r   r   r
   gHz>)abs)	r   r   r@   rA   r)   r   rB   pytestapproxrC   r   r   r   test_pyramid\   s   

z"TestMaxflowLargeGraph.test_pyramidc              	   C   V   t d}d}t|}t|d}t|d}td }t|||d||||fi || d S )Ngl1r	   r   r<   r   ic r!   lenr   r@   rA   r8   rD   r   r.   r   r0   rE   r1   r   r   r   test_gl1i      

&zTestMaxflowLargeGraph.test_gl1c              
   C   sX   t d}d}t|}t|d}t|d}tD ]}t|||d||||fi || qd S )Ngw1r	   r   r<   bW rN   rP   r   r   r   test_gw1x   s   

$zTestMaxflowLargeGraph.test_gw1c              	   C   rL   )Nwlm3r	   r   r<   r   i$3 rN   rP   r   r   r   	test_wlm3   rR   zTestMaxflowLargeGraph.test_wlm3c                 C   s2   t d}t|dt|dd}|jd dksJ d S )NrS   r	   r:   )global_relabel_freqr"   rT   )r!   r   rO   r(   )rD   r   r0   r   r   r    test_preflow_push_global_relabel   s   z6TestMaxflowLargeGraph.test_preflow_push_global_relabelN)r)   
__module____qualname__rF   rK   rQ   rI   markslowrU   rW   rY   r   r   r   r   r9   N   s    

r9   )__doc__r   rI   networkxr   networkx.algorithms.flowr   r   r   r   r   r   r   rA   r   r!   r8   r9   r   r   r   r   <module>   s    $	