o
    ò•hòÜ  ã                   @   sH  d dl Z d dlmZ d dlmZ d dlZd dl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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d0d1„ Zd2d3„ Zd4d5„ Z d6d7„ Z!d8d9„ Z"d:d;„ Z#d<d=„ Z$d>d?„ Z%ej& 'd@e(dAdB„ dCD ƒƒ¡dDdE„ ƒZ)dS )Fé    N)Úproduct)Údedentc                  C   sê   t jddt jd} | jD ]}dttdƒ| ƒ | j| d< qtdƒ ¡ }tdƒ ¡ }t j| dd	}t	|ƒ ||ks;J ‚t j| d
d	}t	|ƒ ||ksLJ ‚g }t j| |j
dd}|d u s]J ‚|| d¡ksfJ ‚t j| t	d}|d u ssJ ‚d S )Né   ©ÚrÚhÚcreate_usingÚnode_ÚaÚlabeluÁ   
        â•™â”€â”€ 0
            â”œâ”€â•¼ 1
            â”‚   â”œâ”€â•¼ 3
            â”‚   â””â”€â•¼ 4
            â””â”€â•¼ 2
                â”œâ”€â•¼ 5
                â””â”€â•¼ 6
        uä   
        â•™â”€â”€ node_a
            â”œâ”€â•¼ node_b
            â”‚   â”œâ”€â•¼ node_d
            â”‚   â””â”€â•¼ node_e
            â””â”€â•¼ node_c
                â”œâ”€â•¼ node_f
                â””â”€â•¼ node_g
        F)Úwith_labelsT)Úwriter   Ú
©r   )ÚnxÚbalanced_treeÚDiGraphÚnodesÚchrÚordr   ÚstripÚ
forest_strÚprintÚappendÚsplit)ÚgraphÚnodeÚnode_targetÚlabel_targetÚretÚlines© r!   ú]/var/www/html/env_mimamsha/lib/python3.10/site-packages/networkx/readwrite/tests/test_text.pyÚtest_forest_str_directed
   s2   
 ÿ
öÿ
ör#   c                  C   sd   dd„ } | t  ¡ ƒdksJ ‚| t  ¡ ƒdksJ ‚| t  ¡ dddks$J ‚| t  ¡ dddks0J ‚d S )Nc                 [   s(   g }t j| |jfddi|¤Ž d |¡S )NÚendÚ r   )r   Úwrite_network_textr   Újoin)ÚgÚkwÚprintbufr!   r!   r"   Ú
_graph_str@   s   
z7test_write_network_text_empty_graph.<locals>._graph_stru   â•™T)Ú
ascii_onlyú+)r   r   ÚGraph)r+   r!   r!   r"   Ú#test_write_network_text_empty_graph?   s
   r/   c                  C   s|   t  ¡ } |  g d¢¡ |  dd¡ g }|j}t j| |dd t j| |ddd d |¡}t|ƒ td	ƒ 	¡ }||ks<J ‚d S )
N©é   r   é   é   r   r3   r%   ©Úpathr$   T©r5   r,   r$   r   u›   
        â•Ÿâ”€â”€ 1
        â•Ÿâ”€â”€ 2
        â•Ž   â””â”€â•¼ 4
        â•™â”€â”€ 3
        +-- 1
        +-- 2
        :   L-> 4
        +-- 3
        )
r   r   Úadd_nodes_fromÚadd_edger   r&   r'   r   r   r   )r(   r    r   ÚtextÚtargetr!   r!   r"   Ú+test_write_network_text_within_forest_glyphK   s   
ÿõr;   c                  C   sè   t jddt jd} t jddt jd}t  | |g¡}t  |¡}t|ƒ tdƒ ¡ }||ks.J ‚t jddt jd}t  | ||g¡}t j|g d¢d}t|ƒ tdƒ ¡ }||ksXJ ‚t j|g d¢dd}t|ƒ td	ƒ ¡ }||ksrJ ‚d S )
Nr   r   u‰  
        â•Ÿâ”€â”€ 0
        â•Ž   â”œâ”€â•¼ 1
        â•Ž   â”‚   â”œâ”€â•¼ 3
        â•Ž   â”‚   â””â”€â•¼ 4
        â•Ž   â””â”€â•¼ 2
        â•Ž       â”œâ”€â•¼ 5
        â•Ž       â””â”€â•¼ 6
        â•™â”€â”€ 7
            â”œâ”€â•¼ 8
            â”‚   â”œâ”€â•¼ 10
            â”‚   â””â”€â•¼ 11
            â””â”€â•¼ 9
                â”œâ”€â•¼ 12
                â””â”€â•¼ 13
        )r   é   é   ©ÚsourcesuT  
        â•Ÿâ”€â”€ 0
        â•Ž   â”œâ”€â•¼ 1
        â•Ž   â”‚   â”œâ”€â•¼ 3
        â•Ž   â”‚   â””â”€â•¼ 4
        â•Ž   â””â”€â•¼ 2
        â•Ž       â”œâ”€â•¼ 5
        â•Ž       â””â”€â•¼ 6
        â•Ÿâ”€â”€ 14
        â•Ž   â”œâ”€â•¼ 15
        â•Ž   â”‚   â”œâ”€â•¼ 17
        â•Ž   â”‚   â””â”€â•¼ 18
        â•Ž   â””â”€â•¼ 16
        â•Ž       â”œâ”€â•¼ 19
        â•Ž       â””â”€â•¼ 20
        â•™â”€â”€ 7
            â”œâ”€â•¼ 8
            â”‚   â”œâ”€â•¼ 10
            â”‚   â””â”€â•¼ 11
            â””â”€â•¼ 9
                â”œâ”€â•¼ 12
                â””â”€â•¼ 13
        T©r?   r,   a²  
        +-- 0
        :   |-> 1
        :   |   |-> 3
        :   |   L-> 4
        :   L-> 2
        :       |-> 5
        :       L-> 6
        +-- 14
        :   |-> 15
        :   |   |-> 17
        :   |   L-> 18
        :   L-> 16
        :       |-> 19
        :       L-> 20
        +-- 7
            |-> 8
            |   |-> 10
            |   L-> 11
            L-> 9
                |-> 12
                L-> 13
        )r   r   r   Údisjoint_union_allr   r   r   r   )Útree1Útree2Úforestr   r:   Útree3r!   r!   r"   Ú#test_forest_str_directed_multi_treed   s:   
ÿïÿèÿèrF   c                     s¶   t jddt jd‰ t jddt jd} t  | ‡ fdd„| jD ƒ¡} t  ˆ | ¡}t j|ddgd}t|ƒ tdƒ 	¡ }||ks?J ‚t j|ddgd	d
}t|ƒ tdƒ 	¡ }||ksYJ ‚d S )Nr   r   c                    s   i | ]	}||t ˆ ƒ “qS r!   )Úlen©Ú.0Ún©rB   r!   r"   Ú
<dictcomp>Á   s    z9test_forest_str_undirected_multi_tree.<locals>.<dictcomp>r   r=   r>   u‰  
        â•Ÿâ”€â”€ 0
        â•Ž   â”œâ”€â”€ 1
        â•Ž   â”‚   â”œâ”€â”€ 3
        â•Ž   â”‚   â””â”€â”€ 4
        â•Ž   â””â”€â”€ 2
        â•Ž       â”œâ”€â”€ 5
        â•Ž       â””â”€â”€ 6
        â•™â”€â”€ 7
            â”œâ”€â”€ 8
            â”‚   â”œâ”€â”€ 10
            â”‚   â””â”€â”€ 11
            â””â”€â”€ 9
                â”œâ”€â”€ 12
                â””â”€â”€ 13
        Tr@   a!  
        +-- 0
        :   |-- 1
        :   |   |-- 3
        :   |   L-- 4
        :   L-- 2
        :       |-- 5
        :       L-- 6
        +-- 7
            |-- 8
            |   |-- 10
            |   L-- 11
            L-- 9
                |-- 12
                L-- 13
        )
r   r   r.   Úrelabel_nodesr   Úunionr   r   r   r   )rC   rD   r   r:   r!   rK   r"   Ú%test_forest_str_undirected_multi_tree¾   s(   ÿïÿïrO   c                  C   s€   t jddt jd} t  | ¡ tdƒ ¡ }t j| dgd}t|ƒ ||ks&J ‚tdƒ ¡ }t j| dgd}t|ƒ ||ks>J ‚d S )Nr   r   uÁ   
        â•™â”€â”€ 0
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 3
            â”‚   â””â”€â”€ 4
            â””â”€â”€ 2
                â”œâ”€â”€ 5
                â””â”€â”€ 6
        r   r>   uÇ   
        â•™â”€â”€ 2
            â”œâ”€â”€ 0
            â”‚   â””â”€â”€ 1
            â”‚       â”œâ”€â”€ 3
            â”‚       â””â”€â”€ 4
            â”œâ”€â”€ 5
            â””â”€â”€ 6
        )r   r   r.   r   r   r   r   )r   Únode_target0r   Únode_target2r!   r!   r"   Útest_forest_str_undirectedò   s$   
ÿ
öÿ
örR   c                  C   s’   t jdt jd} t t j¡ t  | ¡ W d   ƒ n1 sw   Y  t jdt jd}t t j¡ t  |¡ W d   ƒ d S 1 sBw   Y  d S )Nr2   ©r   )r   Úcomplete_graphr.   ÚpytestÚraisesÚNetworkXNotImplementedr   r   )ÚugraphÚdgraphr!   r!   r"   Útest_forest_str_errors  s   ÿ"ÿrZ   c               	   C   sÎ   t  t jddt jdt jddt jdt jddt jdg¡} tdƒ ¡ }tdƒ ¡ }g }t j| |j| jd d 	|¡}t
dƒ t
|ƒ g }t j| |jd	 d 	|¡}t
d
ƒ t
|ƒ ||ks_J ‚||kseJ ‚dS )zª
    When sources are directly specified, we won't be able to determine when we
    are in the last component, so there will always be a trailing, leftmost
    pipe.
    r   r1   r   uå   
        â•Ÿâ”€â”€ 0
        â•Ž   â”œâ”€â•¼ 1
        â•Ž   â””â”€â•¼ 2
        â•Ÿâ”€â”€ 3
        â•Ž   â””â”€â•¼ 4
        â•Ž       â””â”€â•¼ 5
        â•Ÿâ”€â”€ 6
        â•Ž   â”œâ”€â•¼ 7
        â•Ž   â””â”€â•¼ 8
        uá   
        â•Ÿâ”€â”€ 0
        â•Ž   â”œâ”€â•¼ 1
        â•Ž   â””â”€â•¼ 2
        â•Ÿâ”€â”€ 3
        â•Ž   â””â”€â•¼ 4
        â•Ž       â””â”€â•¼ 5
        â•™â”€â”€ 6
            â”œâ”€â•¼ 7
            â””â”€â•¼ 8
        )r   r?   r   zgot1: r   zgot2: N)r   rA   r   r   r   r   r   r   r   r'   r   )r   Útarget1Útarget2r    Úgot1Úgot2r!   r!   r"   Ú%test_forest_str_overspecified_sources'  s8   ýÿ	ÿôÿô

r_   c                  C   s°   t  ¡ } |  g d¢¡ g }|j}|dƒ t j| |dd t| j| jƒD ]\}}|d|› d|› dƒ |  ||¡ t j| |dd q#d |¡}t	|ƒ t
d	ƒ ¡ }||ksVJ ‚d
S )úS
    Walk through the cases going from a disconnected to fully connected graph
    r0   ú--- initial state ---r%   r4   ú--- add_edge(ú, ú) ---r   uk  
        --- initial state ---
        â•Ÿâ”€â”€ 1
        â•Ÿâ”€â”€ 2
        â•Ÿâ”€â”€ 3
        â•™â”€â”€ 4
        --- add_edge(1, 1) ---
        â•Ÿâ”€â”€ 1 â•¾ 1
        â•Ž   â””â”€â•¼  ...
        â•Ÿâ”€â”€ 2
        â•Ÿâ”€â”€ 3
        â•™â”€â”€ 4
        --- add_edge(1, 2) ---
        â•Ÿâ”€â”€ 1 â•¾ 1
        â•Ž   â”œâ”€â•¼ 2
        â•Ž   â””â”€â•¼  ...
        â•Ÿâ”€â”€ 3
        â•™â”€â”€ 4
        --- add_edge(1, 3) ---
        â•Ÿâ”€â”€ 1 â•¾ 1
        â•Ž   â”œâ”€â•¼ 2
        â•Ž   â”œâ”€â•¼ 3
        â•Ž   â””â”€â•¼  ...
        â•™â”€â”€ 4
        --- add_edge(1, 4) ---
        â•™â”€â”€ 1 â•¾ 1
            â”œâ”€â•¼ 2
            â”œâ”€â•¼ 3
            â”œâ”€â•¼ 4
            â””â”€â•¼  ...
        --- add_edge(2, 1) ---
        â•™â”€â”€ 2 â•¾ 1
            â””â”€â•¼ 1 â•¾ 1
                â”œâ”€â•¼ 3
                â”œâ”€â•¼ 4
                â””â”€â•¼  ...
        --- add_edge(2, 2) ---
        â•™â”€â”€ 1 â•¾ 1, 2
            â”œâ”€â•¼ 2 â•¾ 2
            â”‚   â””â”€â•¼  ...
            â”œâ”€â•¼ 3
            â”œâ”€â•¼ 4
            â””â”€â•¼  ...
        --- add_edge(2, 3) ---
        â•™â”€â”€ 1 â•¾ 1, 2
            â”œâ”€â•¼ 2 â•¾ 2
            â”‚   â”œâ”€â•¼ 3 â•¾ 1
            â”‚   â””â”€â•¼  ...
            â”œâ”€â•¼ 4
            â””â”€â•¼  ...
        --- add_edge(2, 4) ---
        â•™â”€â”€ 1 â•¾ 1, 2
            â”œâ”€â•¼ 2 â•¾ 2
            â”‚   â”œâ”€â•¼ 3 â•¾ 1
            â”‚   â”œâ”€â•¼ 4 â•¾ 1
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- add_edge(3, 1) ---
        â•™â”€â”€ 2 â•¾ 1, 2
            â”œâ”€â•¼ 1 â•¾ 1, 3
            â”‚   â”œâ”€â•¼ 3 â•¾ 2
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”œâ”€â•¼ 4 â•¾ 2
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- add_edge(3, 2) ---
        â•™â”€â”€ 3 â•¾ 1, 2
            â”œâ”€â•¼ 1 â•¾ 1, 2
            â”‚   â”œâ”€â•¼ 2 â•¾ 2, 3
            â”‚   â”‚   â”œâ”€â•¼ 4 â•¾ 1
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- add_edge(3, 3) ---
        â•™â”€â”€ 1 â•¾ 1, 2, 3
            â”œâ”€â•¼ 2 â•¾ 2, 3
            â”‚   â”œâ”€â•¼ 3 â•¾ 1, 3
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”œâ”€â•¼ 4 â•¾ 1
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- add_edge(3, 4) ---
        â•™â”€â”€ 1 â•¾ 1, 2, 3
            â”œâ”€â•¼ 2 â•¾ 2, 3
            â”‚   â”œâ”€â•¼ 3 â•¾ 1, 3
            â”‚   â”‚   â”œâ”€â•¼ 4 â•¾ 1, 2
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- add_edge(4, 1) ---
        â•™â”€â”€ 2 â•¾ 1, 2, 3
            â”œâ”€â•¼ 1 â•¾ 1, 3, 4
            â”‚   â”œâ”€â•¼ 3 â•¾ 2, 3
            â”‚   â”‚   â”œâ”€â•¼ 4 â•¾ 1, 2
            â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- add_edge(4, 2) ---
        â•™â”€â”€ 3 â•¾ 1, 2, 3
            â”œâ”€â•¼ 1 â•¾ 1, 2, 4
            â”‚   â”œâ”€â•¼ 2 â•¾ 2, 3, 4
            â”‚   â”‚   â”œâ”€â•¼ 4 â•¾ 1, 3
            â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- add_edge(4, 3) ---
        â•™â”€â”€ 4 â•¾ 1, 2, 3
            â”œâ”€â•¼ 1 â•¾ 1, 2, 3
            â”‚   â”œâ”€â•¼ 2 â•¾ 2, 3, 4
            â”‚   â”‚   â”œâ”€â•¼ 3 â•¾ 1, 3, 4
            â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- add_edge(4, 4) ---
        â•™â”€â”€ 1 â•¾ 1, 2, 3, 4
            â”œâ”€â•¼ 2 â•¾ 2, 3, 4
            â”‚   â”œâ”€â•¼ 3 â•¾ 1, 3, 4
            â”‚   â”‚   â”œâ”€â•¼ 4 â•¾ 1, 2, 4
            â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        N)r   r   r7   r   r&   r   r   r8   r'   r   r   r   ©r   r    r   ÚiÚjr9   r:   r!   r!   r"   Ú4test_write_network_text_iterative_add_directed_edgesb  s&   
ÿ rh   c                  C   sº   t  ¡ } |  g d¢¡ g }|j}|dƒ t j| |dd t| j| jƒD ]"\}}||kr,q#|d|› d|› dƒ |  ||¡ t j| |dd q#d |¡}t	|ƒ t
d	ƒ ¡ }||ks[J ‚d
S )r`   r0   ra   r%   r4   rb   rc   rd   r   uø  
        --- initial state ---
        â•Ÿâ”€â”€ 1
        â•Ÿâ”€â”€ 2
        â•Ÿâ”€â”€ 3
        â•™â”€â”€ 4
        --- add_edge(1, 2) ---
        â•Ÿâ”€â”€ 3
        â•Ÿâ”€â”€ 4
        â•™â”€â”€ 1
            â””â”€â”€ 2
        --- add_edge(1, 3) ---
        â•Ÿâ”€â”€ 4
        â•™â”€â”€ 2
            â””â”€â”€ 1
                â””â”€â”€ 3
        --- add_edge(1, 4) ---
        â•™â”€â”€ 2
            â””â”€â”€ 1
                â”œâ”€â”€ 3
                â””â”€â”€ 4
        --- add_edge(2, 1) ---
        â•™â”€â”€ 2
            â””â”€â”€ 1
                â”œâ”€â”€ 3
                â””â”€â”€ 4
        --- add_edge(2, 3) ---
        â•™â”€â”€ 4
            â””â”€â”€ 1
                â”œâ”€â”€ 2
                â”‚   â””â”€â”€ 3 â”€ 1
                â””â”€â”€  ...
        --- add_edge(2, 4) ---
        â•™â”€â”€ 3
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 2 â”€ 3
            â”‚   â”‚   â””â”€â”€ 4 â”€ 1
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        --- add_edge(3, 1) ---
        â•™â”€â”€ 3
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 2 â”€ 3
            â”‚   â”‚   â””â”€â”€ 4 â”€ 1
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        --- add_edge(3, 2) ---
        â•™â”€â”€ 3
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 2 â”€ 3
            â”‚   â”‚   â””â”€â”€ 4 â”€ 1
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        --- add_edge(3, 4) ---
        â•™â”€â”€ 1
            â”œâ”€â”€ 2
            â”‚   â”œâ”€â”€ 3 â”€ 1
            â”‚   â”‚   â””â”€â”€ 4 â”€ 1, 2
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        --- add_edge(4, 1) ---
        â•™â”€â”€ 1
            â”œâ”€â”€ 2
            â”‚   â”œâ”€â”€ 3 â”€ 1
            â”‚   â”‚   â””â”€â”€ 4 â”€ 1, 2
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        --- add_edge(4, 2) ---
        â•™â”€â”€ 1
            â”œâ”€â”€ 2
            â”‚   â”œâ”€â”€ 3 â”€ 1
            â”‚   â”‚   â””â”€â”€ 4 â”€ 1, 2
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        --- add_edge(4, 3) ---
        â•™â”€â”€ 1
            â”œâ”€â”€ 2
            â”‚   â”œâ”€â”€ 3 â”€ 1
            â”‚   â”‚   â””â”€â”€ 4 â”€ 1, 2
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        N)r   r.   r7   r   r&   r   r   r8   r'   r   r   r   re   r!   r!   r"   Ú6test_write_network_text_iterative_add_undirected_edgesö  s(   
ÿS­Tri   c            	      C   sæ   t  d¡} t ¡ }| g d¢¡ tt|j|jƒƒ}|  |¡ | 	|dd… ¡ g }|j
}|dƒ tj||dd |dd… D ]\}}|d	|› d
|› dƒ | ||¡ tj||dd q>d |¡}t|ƒ tdƒ ¡ }||ksqJ ‚dS )r`   i°y.+)r1   r   r2   r3   é   r   é   ra   r%   r4   é   rb   rc   rd   r   u7  
        --- initial state ---
        â•™â”€â”€ 3 â•¾ 5
            â””â”€â•¼ 2 â•¾ 2
                â”œâ”€â•¼ 4 â•¾ 4
                â”‚   â”œâ”€â•¼ 5
                â”‚   â”‚   â”œâ”€â•¼ 1 â•¾ 1
                â”‚   â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â””â”€â•¼  ...
                â””â”€â•¼  ...
        --- add_edge(4, 1) ---
        â•™â”€â”€ 3 â•¾ 5
            â””â”€â•¼ 2 â•¾ 2
                â”œâ”€â•¼ 4 â•¾ 4
                â”‚   â”œâ”€â•¼ 5
                â”‚   â”‚   â”œâ”€â•¼ 1 â•¾ 1, 4
                â”‚   â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â””â”€â•¼  ...
                â””â”€â•¼  ...
        --- add_edge(2, 1) ---
        â•™â”€â”€ 3 â•¾ 5
            â””â”€â•¼ 2 â•¾ 2
                â”œâ”€â•¼ 4 â•¾ 4
                â”‚   â”œâ”€â•¼ 5
                â”‚   â”‚   â”œâ”€â•¼ 1 â•¾ 1, 4, 2
                â”‚   â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â””â”€â•¼  ...
                â””â”€â•¼  ...
        --- add_edge(5, 2) ---
        â•™â”€â”€ 3 â•¾ 5
            â””â”€â•¼ 2 â•¾ 2, 5
                â”œâ”€â•¼ 4 â•¾ 4
                â”‚   â”œâ”€â•¼ 5
                â”‚   â”‚   â”œâ”€â•¼ 1 â•¾ 1, 4, 2
                â”‚   â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â””â”€â•¼  ...
                â””â”€â•¼  ...
        --- add_edge(1, 5) ---
        â•™â”€â”€ 3 â•¾ 5
            â””â”€â•¼ 2 â•¾ 2, 5
                â”œâ”€â•¼ 4 â•¾ 4
                â”‚   â”œâ”€â•¼ 5 â•¾ 1
                â”‚   â”‚   â”œâ”€â•¼ 1 â•¾ 1, 4, 2
                â”‚   â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â””â”€â•¼  ...
                â””â”€â•¼  ...

        N)ÚrandomÚRandomr   r   r7   Úlistr   r   ÚshuffleÚadd_edges_fromr   r&   r8   r'   r   r   r   )	Úrngr   Úpossible_edgesr    r   rf   rg   r9   r:   r!   r!   r"   Ú;test_write_network_text_iterative_add_random_directed_edges_  s,   


ÿ6Ê7rt   c                  C   s0  t  ¡ } |  dd¡ |  dd¡ |  dd¡ |  dd¡ |  dd¡ |  dd¡ |  dd¡ |  ¡ }|  dd¡ |  dd¡ |  dd¡ g }|j}|d	ƒ t j||d
d |dƒ t j| |d
d |dƒ t j| ¡ |dgd
d |dƒ t j|  ¡ |dgd
d d |¡}t|ƒ t	dƒ 
¡ }||ks–J ‚d S )Nr1   r   rj   r2   r3   é   r=   rk   ú--- directed case ---r%   r4   z"--- add (1, 8), (4, 2), (6, 3) ---ú--- undirected case ---©r5   r?   r$   r   u  
        --- directed case ---
        â•™â”€â”€ 1
            â”œâ”€â•¼ 2
            â”‚   â””â”€â•¼ 3
            â”‚       â””â”€â•¼ 4
            â””â”€â•¼ 5
                â””â”€â•¼ 6
                    â”œâ”€â•¼ 7
                    â””â”€â•¼ 8
        --- add (1, 8), (4, 2), (6, 3) ---
        â•™â”€â”€ 1
            â”œâ”€â•¼ 2 â•¾ 4
            â”‚   â””â”€â•¼ 3 â•¾ 6
            â”‚       â””â”€â•¼ 4
            â”‚           â””â”€â•¼  ...
            â”œâ”€â•¼ 5
            â”‚   â””â”€â•¼ 6
            â”‚       â”œâ”€â•¼ 7
            â”‚       â”œâ”€â•¼ 8 â•¾ 1
            â”‚       â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- undirected case ---
        â•™â”€â”€ 1
            â”œâ”€â”€ 2
            â”‚   â””â”€â”€ 3
            â”‚       â””â”€â”€ 4
            â””â”€â”€ 5
                â””â”€â”€ 6
                    â”œâ”€â”€ 7
                    â””â”€â”€ 8
        --- add (1, 8), (4, 2), (6, 3) ---
        â•™â”€â”€ 1
            â”œâ”€â”€ 2
            â”‚   â”œâ”€â”€ 3
            â”‚   â”‚   â”œâ”€â”€ 4 â”€ 2
            â”‚   â”‚   â””â”€â”€ 6
            â”‚   â”‚       â”œâ”€â”€ 5 â”€ 1
            â”‚   â”‚       â”œâ”€â”€ 7
            â”‚   â”‚       â””â”€â”€ 8 â”€ 1
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        )r   r   r8   Úcopyr   r&   Úto_undirectedr'   r   r   r   )r(   Úorigr    r   r9   r:   r!   r!   r"   Ú%test_write_network_text_nearly_forest®  s<   
ÿ,Ô-r|   c                  C   s‚   t jjdt jd} g }|j}|dƒ t j| |ddd |dƒ t j|  ¡ |ddd d |¡}t|ƒ t	d	ƒ 
¡ }||ks?J ‚d S )
Nrj   rS   rv   Tr%   r6   rw   r   aN  
        --- directed case ---
        +-- 0 <- 1, 2, 3, 4
            |-> 1 <- 2, 3, 4
            |   |-> 2 <- 0, 3, 4
            |   |   |-> 3 <- 0, 1, 4
            |   |   |   |-> 4 <- 0, 1, 2
            |   |   |   |   L->  ...
            |   |   |   L->  ...
            |   |   L->  ...
            |   L->  ...
            L->  ...
        --- undirected case ---
        +-- 0
            |-- 1
            |   |-- 2 - 0
            |   |   |-- 3 - 0, 1
            |   |   |   L-- 4 - 0, 1, 2
            |   |   L--  ...
            |   L--  ...
            L--  ...
        )r   Ú
generatorsrT   r   r   r&   rz   r'   r   r   r   ©r   r    r   r9   r:   r!   r!   r"   Ú1test_write_network_text_complete_graph_ascii_only÷  s   
ÿér   c                  C   s€   t jjdt jd} | jD ]}d|› d| j| d< qg }|j}t j| |dddd	 d
 |¡}t|ƒ t	dƒ 
¡ }||ks>J ‚d S )Nrj   rS   zNode(n=ú)r   TFr%   )r5   r   r,   r$   r   uK  
        â•™â”€â”€ Node(n=0) â•¾ Node(n=1), Node(n=2), Node(n=3), Node(n=4)
            â”œâ”€â•¼ Node(n=1) â•¾ Node(n=2), Node(n=3), Node(n=4)
            â”‚   â”œâ”€â•¼ Node(n=2) â•¾ Node(n=0), Node(n=3), Node(n=4)
            â”‚   â”‚   â”œâ”€â•¼ Node(n=3) â•¾ Node(n=0), Node(n=1), Node(n=4)
            â”‚   â”‚   â”‚   â”œâ”€â•¼ Node(n=4) â•¾ Node(n=0), Node(n=1), Node(n=2)
            â”‚   â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        )r   r}   rT   r   r   r   r&   r'   r   r   r   )r   rJ   r    r   r9   r:   r!   r!   r"   Ú#test_write_network_text_with_labels  s   

ÿór   c                  C   s¨   g } | j }dD ]}tj |¡}|d|› dƒ tj||dd qdD ]}tj |tj¡}|d|› dƒ tj||dd q"d | ¡}t|ƒ tdƒ 	¡ }||ksRJ ‚d S )	N)r   r1   r   r2   r3   rj   z--- undirected k=ú ---r%   r4   z--- directed k=r   ué  
        --- undirected k=0 ---
        â•™
        --- undirected k=1 ---
        â•™â”€â”€ 0
        --- undirected k=2 ---
        â•™â”€â”€ 0
            â””â”€â”€ 1
        --- undirected k=3 ---
        â•™â”€â”€ 0
            â”œâ”€â”€ 1
            â”‚   â””â”€â”€ 2 â”€ 0
            â””â”€â”€  ...
        --- undirected k=4 ---
        â•™â”€â”€ 0
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 2 â”€ 0
            â”‚   â”‚   â””â”€â”€ 3 â”€ 0, 1
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        --- undirected k=5 ---
        â•™â”€â”€ 0
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 2 â”€ 0
            â”‚   â”‚   â”œâ”€â”€ 3 â”€ 0, 1
            â”‚   â”‚   â”‚   â””â”€â”€ 4 â”€ 0, 1, 2
            â”‚   â”‚   â””â”€â”€  ...
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        --- directed k=0 ---
        â•™
        --- directed k=1 ---
        â•™â”€â”€ 0
        --- directed k=2 ---
        â•™â”€â”€ 0 â•¾ 1
            â””â”€â•¼ 1
                â””â”€â•¼  ...
        --- directed k=3 ---
        â•™â”€â”€ 0 â•¾ 1, 2
            â”œâ”€â•¼ 1 â•¾ 2
            â”‚   â”œâ”€â•¼ 2 â•¾ 0
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- directed k=4 ---
        â•™â”€â”€ 0 â•¾ 1, 2, 3
            â”œâ”€â•¼ 1 â•¾ 2, 3
            â”‚   â”œâ”€â•¼ 2 â•¾ 0, 3
            â”‚   â”‚   â”œâ”€â•¼ 3 â•¾ 0, 1
            â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- directed k=5 ---
        â•™â”€â”€ 0 â•¾ 1, 2, 3, 4
            â”œâ”€â•¼ 1 â•¾ 2, 3, 4
            â”‚   â”œâ”€â•¼ 2 â•¾ 0, 3, 4
            â”‚   â”‚   â”œâ”€â•¼ 3 â•¾ 0, 1, 4
            â”‚   â”‚   â”‚   â”œâ”€â•¼ 4 â•¾ 0, 1, 2
            â”‚   â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        )
r   r   r}   rT   r&   r   r'   r   r   r   )r    r   Úkr(   r9   r:   r!   r!   r"   Ú'test_write_network_text_complete_graphs8  s$   
ÿB¾Cr„   c                  C   sÚ   t  ¡ } |  dd¡ |  dd¡ |  dd¡ |  dd¡ |  dd¡ |  dd¡ |  dd¡ |  dd¡ g }|j}t|  ¡ ƒ}|D ]}|d|› dƒ t j| ||gd	d
 qAd |¡}t|ƒ t	dƒ 
¡ }||kskJ ‚d S )Nr1   r   r2   r3   rj   ru   z--- source node: r‚   r%   rx   r   ux  
        --- source node: 1 ---
        â•™â”€â”€ 1 â•¾ 4
            â”œâ”€â•¼ 2
            â”‚   â””â”€â•¼ 4 â•¾ 5
            â”‚       â””â”€â•¼  ...
            â”œâ”€â•¼ 3
            â”‚   â”œâ”€â•¼ 5 â•¾ 1
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼ 6
            â””â”€â•¼  ...
        --- source node: 2 ---
        â•™â”€â”€ 2 â•¾ 1
            â””â”€â•¼ 4 â•¾ 5
                â””â”€â•¼ 1
                    â”œâ”€â•¼ 3
                    â”‚   â”œâ”€â•¼ 5 â•¾ 1
                    â”‚   â”‚   â””â”€â•¼  ...
                    â”‚   â””â”€â•¼ 6
                    â””â”€â•¼  ...
        --- source node: 3 ---
        â•™â”€â”€ 3 â•¾ 1
            â”œâ”€â•¼ 5 â•¾ 1
            â”‚   â””â”€â•¼ 4 â•¾ 2
            â”‚       â””â”€â•¼ 1
            â”‚           â”œâ”€â•¼ 2
            â”‚           â”‚   â””â”€â•¼  ...
            â”‚           â””â”€â•¼  ...
            â””â”€â•¼ 6
        --- source node: 4 ---
        â•™â”€â”€ 4 â•¾ 2, 5
            â””â”€â•¼ 1
                â”œâ”€â•¼ 2
                â”‚   â””â”€â•¼  ...
                â”œâ”€â•¼ 3
                â”‚   â”œâ”€â•¼ 5 â•¾ 1
                â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â””â”€â•¼ 6
                â””â”€â•¼  ...
        --- source node: 5 ---
        â•™â”€â”€ 5 â•¾ 3, 1
            â””â”€â•¼ 4 â•¾ 2
                â””â”€â•¼ 1
                    â”œâ”€â•¼ 2
                    â”‚   â””â”€â•¼  ...
                    â”œâ”€â•¼ 3
                    â”‚   â”œâ”€â•¼ 6
                    â”‚   â””â”€â•¼  ...
                    â””â”€â•¼  ...
        --- source node: 6 ---
        â•™â”€â”€ 6 â•¾ 3
        )r   r   r8   r   Úsortedr   r&   r'   r   r   r   )r(   r    r   r   rJ   r9   r:   r!   r!   r"   Ú(test_write_network_text_multiple_sourcesŒ  s.   
ÿ5Ë6r†   c                  C   óX   t jdt jd} g }|j}t j| |dd d |¡}t|ƒ tdƒ ¡ }||ks*J ‚d S )Nrj   rS   r%   r4   r   u¥   
        â•™â”€â”€ 1
            â””â”€â”€ 0
                â”œâ”€â”€ 2
                â”œâ”€â”€ 3
                â”œâ”€â”€ 4
                â””â”€â”€ 5
        )	r   Ú
star_graphr.   r   r&   r'   r   r   r   r~   r!   r!   r"   Ú"test_write_network_text_star_graphÙ  s   
ÿ	÷
r‰   c                  C   r‡   )Nr2   rS   r%   r4   r   uQ   
        â•™â”€â”€ 0
            â””â”€â”€ 1
                â””â”€â”€ 2
        )	r   Ú
path_graphr.   r   r&   r'   r   r   r   r~   r!   r!   r"   Ú"test_write_network_text_path_graphí  s   
ÿúr‹   c                  C   sZ   t jddt jd} g }|j}t j| |dd d |¡}t|ƒ tdƒ ¡ }||ks+J ‚d S )Nr3   r   rS   r%   r4   r   u  
        â•™â”€â”€ 5
            â””â”€â”€ 4
                â””â”€â”€ 3
                    â”œâ”€â”€ 0
                    â”‚   â”œâ”€â”€ 1 â”€ 3
                    â”‚   â”‚   â””â”€â”€ 2 â”€ 0, 3
                    â”‚   â””â”€â”€  ...
                    â””â”€â”€  ...
        )	r   Úlollipop_graphr.   r   r&   r'   r   r   r   r~   r!   r!   r"   Ú&test_write_network_text_lollipop_graphþ  s   
ÿõr   c                  C   r‡   )Nr=   rS   r%   r4   r   uX  
        â•™â”€â”€ 1
            â”œâ”€â”€ 0
            â”‚   â”œâ”€â”€ 2 â”€ 1
            â”‚   â”‚   â””â”€â”€ 3 â”€ 0
            â”‚   â”‚       â””â”€â”€ 4 â”€ 0
            â”‚   â”‚           â””â”€â”€ 5 â”€ 0
            â”‚   â”‚               â””â”€â”€ 6 â”€ 0, 1
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        )	r   Úwheel_graphr.   r   r&   r'   r   r   r   r~   r!   r!   r"   Ú#test_write_network_text_wheel_graph  s   
ÿôr   c                  C   r‡   )Nr3   rS   r%   r4   r   uê  
        â•™â”€â”€ 0
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 2
            â”‚   â”‚   â”œâ”€â”€ 3 â”€ 0
            â”‚   â”‚   â”‚   â””â”€â”€ 7
            â”‚   â”‚   â”‚       â”œâ”€â”€ 6 â”€ 2
            â”‚   â”‚   â”‚       â”‚   â””â”€â”€ 5 â”€ 1
            â”‚   â”‚   â”‚       â”‚       â””â”€â”€ 4 â”€ 0, 7
            â”‚   â”‚   â”‚       â””â”€â”€  ...
            â”‚   â”‚   â””â”€â”€  ...
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        )	r   Úcircular_ladder_graphr.   r   r&   r'   r   r   r   r~   r!   r!   r"   Ú-test_write_network_text_circular_ladder_graph+  s   
ÿñr‘   c                  C   r‡   )Nr3   rS   r%   r4   r   u›	  
        â•™â”€â”€ 15
            â”œâ”€â”€ 0
            â”‚   â”œâ”€â”€ 1 â”€ 15
            â”‚   â”‚   â”œâ”€â”€ 2 â”€ 0
            â”‚   â”‚   â”‚   â”œâ”€â”€ 4 â”€ 0
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 9 â”€ 0
            â”‚   â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 22 â”€ 0
            â”‚   â”‚   â”‚   â”‚   â”‚   â””â”€â”€ 38 â”€ 4
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 13 â”€ 2
            â”‚   â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 34 â”€ 2
            â”‚   â”‚   â”‚   â”‚   â”‚   â””â”€â”€ 39 â”€ 4
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 18 â”€ 0
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 30 â”€ 2
            â”‚   â”‚   â”‚   â”‚   â””â”€â”€  ...
            â”‚   â”‚   â”‚   â”œâ”€â”€ 5 â”€ 1
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 12 â”€ 1
            â”‚   â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 29 â”€ 1
            â”‚   â”‚   â”‚   â”‚   â”‚   â””â”€â”€ 40 â”€ 5
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 14 â”€ 2
            â”‚   â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 35 â”€ 2
            â”‚   â”‚   â”‚   â”‚   â”‚   â””â”€â”€ 41 â”€ 5
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 25 â”€ 1
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 31 â”€ 2
            â”‚   â”‚   â”‚   â”‚   â””â”€â”€  ...
            â”‚   â”‚   â”‚   â”œâ”€â”€ 7 â”€ 0
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 20 â”€ 0
            â”‚   â”‚   â”‚   â”‚   â””â”€â”€ 32 â”€ 2
            â”‚   â”‚   â”‚   â”œâ”€â”€ 10 â”€ 1
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 27 â”€ 1
            â”‚   â”‚   â”‚   â”‚   â””â”€â”€ 33 â”€ 2
            â”‚   â”‚   â”‚   â”œâ”€â”€ 16 â”€ 0
            â”‚   â”‚   â”‚   â”œâ”€â”€ 23 â”€ 1
            â”‚   â”‚   â”‚   â””â”€â”€  ...
            â”‚   â”‚   â”œâ”€â”€ 3 â”€ 0
            â”‚   â”‚   â”‚   â”œâ”€â”€ 8 â”€ 0
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 21 â”€ 0
            â”‚   â”‚   â”‚   â”‚   â””â”€â”€ 36 â”€ 3
            â”‚   â”‚   â”‚   â”œâ”€â”€ 11 â”€ 1
            â”‚   â”‚   â”‚   â”‚   â”œâ”€â”€ 28 â”€ 1
            â”‚   â”‚   â”‚   â”‚   â””â”€â”€ 37 â”€ 3
            â”‚   â”‚   â”‚   â”œâ”€â”€ 17 â”€ 0
            â”‚   â”‚   â”‚   â”œâ”€â”€ 24 â”€ 1
            â”‚   â”‚   â”‚   â””â”€â”€  ...
            â”‚   â”‚   â”œâ”€â”€ 6 â”€ 0
            â”‚   â”‚   â”‚   â”œâ”€â”€ 19 â”€ 0
            â”‚   â”‚   â”‚   â””â”€â”€ 26 â”€ 1
            â”‚   â”‚   â””â”€â”€  ...
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        )	r   Ú dorogovtsev_goltsev_mendes_graphr.   r   r&   r'   r   r   r   r~   r!   r!   r"   Ú8test_write_network_text_dorogovtsev_goltsev_mendes_graphE  s   
ÿ4Ì5r“   c                  C   sb  t jddt jd} g }|j}|dƒ t j| |ddd |dƒ t j| |ddd |d	ƒ t j| |dd
d |dƒ t j| |ddd |dƒ t j| |ddd |dƒ t j|  ¡ |ddd |dƒ t j|  ¡ |ddd |dƒ t j|  ¡ |dd
d |dƒ t j|  ¡ |ddd |dƒ t j|  ¡ |ddd d |¡}t|ƒ tdƒ 	¡ }||ks¯J ‚d S )Nr1   r2   r   ú"--- directed case, max_depth=0 ---r%   r   ©r5   r$   Ú	max_depthú"--- directed case, max_depth=1 ---ú"--- directed case, max_depth=2 ---r   ú"--- directed case, max_depth=3 ---z"--- directed case, max_depth=4 ---r3   ú$--- undirected case, max_depth=0 ---ú$--- undirected case, max_depth=1 ---ú$--- undirected case, max_depth=2 ---ú$--- undirected case, max_depth=3 ---z$--- undirected case, max_depth=4 ---r   u  
        --- directed case, max_depth=0 ---
        â•™ ...
        --- directed case, max_depth=1 ---
        â•™â”€â”€ 0
            â””â”€â•¼  ...
        --- directed case, max_depth=2 ---
        â•™â”€â”€ 0
            â””â”€â•¼ 1
                â””â”€â•¼  ...
        --- directed case, max_depth=3 ---
        â•™â”€â”€ 0
            â””â”€â•¼ 1
                â””â”€â•¼ 2
                    â””â”€â•¼  ...
        --- directed case, max_depth=4 ---
        â•™â”€â”€ 0
            â””â”€â•¼ 1
                â””â”€â•¼ 2
                    â””â”€â•¼ 3
        --- undirected case, max_depth=0 ---
        â•™ ...
        --- undirected case, max_depth=1 ---
        â•™â”€â”€ 0 â”€ 1
            â””â”€â”€  ...
        --- undirected case, max_depth=2 ---
        â•™â”€â”€ 0
            â””â”€â”€ 1 â”€ 2
                â””â”€â”€  ...
        --- undirected case, max_depth=3 ---
        â•™â”€â”€ 0
            â””â”€â”€ 1
                â””â”€â”€ 2 â”€ 3
                    â””â”€â”€  ...
        --- undirected case, max_depth=4 ---
        â•™â”€â”€ 0
            â””â”€â”€ 1
                â””â”€â”€ 2
                    â””â”€â”€ 3
        )
r   r   r   r   r&   rz   r'   r   r   r   ©r{   r    r   r9   r:   r!   r!   r"   Ú&test_write_network_text_tree_max_depth„  s>   
ÿ)×*rŸ   c                  C   sb  t jddddd} g }|j}|dƒ t j| |dd d |d	ƒ t j| |dd
d |dƒ t j| |ddd |dƒ t j| |ddd |dƒ t j| |ddd |dƒ t j|  ¡ |dd d |dƒ t j|  ¡ |dd
d |dƒ t j|  ¡ |ddd |dƒ t j|  ¡ |ddd |dƒ t j|  ¡ |ddd d |¡}t|ƒ tdƒ ¡ }||ks¯J ‚d S )Né
   g333333Ã?TiÈ  ©ÚdirectedÚseedú%--- directed case, max_depth=None ---r%   r•   r”   r   r—   r1   r˜   r   r™   r2   ú'--- undirected case, max_depth=None ---rš   r›   rœ   r   r   uê	  
        --- directed case, max_depth=None ---
        â•Ÿâ”€â”€ 4
        â•Ž   â”œâ”€â•¼ 0 â•¾ 3
        â•Ž   â”œâ”€â•¼ 5 â•¾ 7
        â•Ž   â”‚   â””â”€â•¼ 3
        â•Ž   â”‚       â”œâ”€â•¼ 1 â•¾ 9
        â•Ž   â”‚       â”‚   â””â”€â•¼ 9 â•¾ 6
        â•Ž   â”‚       â”‚       â”œâ”€â•¼ 6
        â•Ž   â”‚       â”‚       â”‚   â””â”€â•¼  ...
        â•Ž   â”‚       â”‚       â”œâ”€â•¼ 7 â•¾ 4
        â•Ž   â”‚       â”‚       â”‚   â”œâ”€â•¼ 2
        â•Ž   â”‚       â”‚       â”‚   â””â”€â•¼  ...
        â•Ž   â”‚       â”‚       â””â”€â•¼  ...
        â•Ž   â”‚       â””â”€â•¼  ...
        â•Ž   â””â”€â•¼  ...
        â•™â”€â”€ 8
        --- directed case, max_depth=0 ---
        â•™ ...
        --- directed case, max_depth=1 ---
        â•Ÿâ”€â”€ 4
        â•Ž   â””â”€â•¼  ...
        â•™â”€â”€ 8
        --- directed case, max_depth=2 ---
        â•Ÿâ”€â”€ 4
        â•Ž   â”œâ”€â•¼ 0 â•¾ 3
        â•Ž   â”œâ”€â•¼ 5 â•¾ 7
        â•Ž   â”‚   â””â”€â•¼  ...
        â•Ž   â””â”€â•¼ 7 â•¾ 9
        â•Ž       â””â”€â•¼  ...
        â•™â”€â”€ 8
        --- directed case, max_depth=3 ---
        â•Ÿâ”€â”€ 4
        â•Ž   â”œâ”€â•¼ 0 â•¾ 3
        â•Ž   â”œâ”€â•¼ 5 â•¾ 7
        â•Ž   â”‚   â””â”€â•¼ 3
        â•Ž   â”‚       â””â”€â•¼  ...
        â•Ž   â””â”€â•¼ 7 â•¾ 9
        â•Ž       â”œâ”€â•¼ 2
        â•Ž       â””â”€â•¼  ...
        â•™â”€â”€ 8
        --- undirected case, max_depth=None ---
        â•Ÿâ”€â”€ 8
        â•™â”€â”€ 2
            â””â”€â”€ 7
                â”œâ”€â”€ 4
                â”‚   â”œâ”€â”€ 0
                â”‚   â”‚   â””â”€â”€ 3
                â”‚   â”‚       â”œâ”€â”€ 1
                â”‚   â”‚       â”‚   â””â”€â”€ 9 â”€ 7
                â”‚   â”‚       â”‚       â””â”€â”€ 6
                â”‚   â”‚       â””â”€â”€ 5 â”€ 4, 7
                â”‚   â””â”€â”€  ...
                â””â”€â”€  ...
        --- undirected case, max_depth=0 ---
        â•™ ...
        --- undirected case, max_depth=1 ---
        â•Ÿâ”€â”€ 8
        â•™â”€â”€ 2 â”€ 7
            â””â”€â”€  ...
        --- undirected case, max_depth=2 ---
        â•Ÿâ”€â”€ 8
        â•™â”€â”€ 2
            â””â”€â”€ 7 â”€ 4, 5, 9
                â””â”€â”€  ...
        --- undirected case, max_depth=3 ---
        â•Ÿâ”€â”€ 8
        â•™â”€â”€ 2
            â””â”€â”€ 7
                â”œâ”€â”€ 4 â”€ 0, 5
                â”‚   â””â”€â”€  ...
                â”œâ”€â”€ 5 â”€ 4, 3
                â”‚   â””â”€â”€  ...
                â””â”€â”€ 9 â”€ 1, 6
                    â””â”€â”€  ...
        )	r   Úerdos_renyi_graphr   r&   rz   r'   r   r   r   rž   r!   r!   r"   Ú'test_write_network_text_graph_max_depthË  s>   
ÿM³Nr§   c                  C   s^  t  dt j¡} g }|j}|dƒ t j| |dd d |dƒ t j| |ddd |dƒ t j| |ddd |d	ƒ t j| |dd
d |dƒ t j| |ddd |dƒ t j|  ¡ |dd d |dƒ t j|  ¡ |ddd |dƒ t j|  ¡ |ddd |dƒ t j|  ¡ |dd
d |dƒ t j|  ¡ |ddd d |¡}t|ƒ tdƒ 	¡ }||ks­J ‚d S )Nrj   r¤   r%   r•   r”   r   r—   r1   r˜   r   r™   r2   r¥   rš   r›   rœ   r   r   uØ	  
        --- directed case, max_depth=None ---
        â•™â”€â”€ 0 â•¾ 1, 2, 3, 4
            â”œâ”€â•¼ 1 â•¾ 2, 3, 4
            â”‚   â”œâ”€â•¼ 2 â•¾ 0, 3, 4
            â”‚   â”‚   â”œâ”€â•¼ 3 â•¾ 0, 1, 4
            â”‚   â”‚   â”‚   â”œâ”€â•¼ 4 â•¾ 0, 1, 2
            â”‚   â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- directed case, max_depth=0 ---
        â•™ ...
        --- directed case, max_depth=1 ---
        â•™â”€â”€ 0 â•¾ 1, 2, 3, 4
            â””â”€â•¼  ...
        --- directed case, max_depth=2 ---
        â•™â”€â”€ 0 â•¾ 1, 2, 3, 4
            â”œâ”€â•¼ 1 â•¾ 2, 3, 4
            â”‚   â””â”€â•¼  ...
            â”œâ”€â•¼ 2 â•¾ 1, 3, 4
            â”‚   â””â”€â•¼  ...
            â”œâ”€â•¼ 3 â•¾ 1, 2, 4
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼ 4 â•¾ 1, 2, 3
                â””â”€â•¼  ...
        --- directed case, max_depth=3 ---
        â•™â”€â”€ 0 â•¾ 1, 2, 3, 4
            â”œâ”€â•¼ 1 â•¾ 2, 3, 4
            â”‚   â”œâ”€â•¼ 2 â•¾ 0, 3, 4
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”œâ”€â•¼ 3 â•¾ 0, 2, 4
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â”œâ”€â•¼ 4 â•¾ 0, 2, 3
            â”‚   â”‚   â””â”€â•¼  ...
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼  ...
        --- undirected case, max_depth=None ---
        â•™â”€â”€ 0
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 2 â”€ 0
            â”‚   â”‚   â”œâ”€â”€ 3 â”€ 0, 1
            â”‚   â”‚   â”‚   â””â”€â”€ 4 â”€ 0, 1, 2
            â”‚   â”‚   â””â”€â”€  ...
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        --- undirected case, max_depth=0 ---
        â•™ ...
        --- undirected case, max_depth=1 ---
        â•™â”€â”€ 0 â”€ 1, 2, 3, 4
            â””â”€â”€  ...
        --- undirected case, max_depth=2 ---
        â•™â”€â”€ 0
            â”œâ”€â”€ 1 â”€ 2, 3, 4
            â”‚   â””â”€â”€  ...
            â”œâ”€â”€ 2 â”€ 1, 3, 4
            â”‚   â””â”€â”€  ...
            â”œâ”€â”€ 3 â”€ 1, 2, 4
            â”‚   â””â”€â”€  ...
            â””â”€â”€ 4 â”€ 1, 2, 3
        --- undirected case, max_depth=3 ---
        â•™â”€â”€ 0
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 2 â”€ 0, 3, 4
            â”‚   â”‚   â””â”€â”€  ...
            â”‚   â”œâ”€â”€ 3 â”€ 0, 2, 4
            â”‚   â”‚   â””â”€â”€  ...
            â”‚   â””â”€â”€ 4 â”€ 0, 2, 3
            â””â”€â”€  ...
        )
r   rT   r   r   r&   rz   r'   r   r   r   rž   r!   r!   r"   Ú(test_write_network_text_clique_max_depth6  s>   
ÿH¸Ir¨   c                  C   s   t jddddd} | jD ]/}d|› d| j| d< t|td	ƒ d
 ƒ| j| d< |d dkr;t|td	ƒ ƒ| j| d< qg }|j}|dƒ t j| |ddd d |dƒ t j| |ddd d |dƒ t j| |ddd d |dƒ t j| |ddd d d |¡}t|ƒ t	dƒ 
¡ }||ksŽJ ‚d S )Nrj   gš™™™™™Ù?TiVLir¡   zNode(r€   r   r
   r1   r   r   r   Úpartz4--- when with_labels=True, uses the 'label' attr ---r%   )r5   r   r$   r–   z4--- when with_labels=False, uses str(node) value ---Fz3--- when with_labels is a string, use that attr ---z:--- fallback to str(node) when the attr does not exist ---r   uj  
        --- when with_labels=True, uses the 'label' attr ---
        â•™â”€â”€ Node(1)
            â””â”€â•¼ Node(3) â•¾ Node(2)
                â”œâ”€â•¼ Node(0)
                â”‚   â”œâ”€â•¼ Node(2) â•¾ Node(3), Node(4)
                â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â””â”€â•¼ Node(4)
                â”‚       â””â”€â•¼  ...
                â””â”€â•¼  ...
        --- when with_labels=False, uses str(node) value ---
        â•™â”€â”€ 1
            â””â”€â•¼ 3 â•¾ 2
                â”œâ”€â•¼ 0
                â”‚   â”œâ”€â•¼ 2 â•¾ 3, 4
                â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â””â”€â•¼ 4
                â”‚       â””â”€â•¼  ...
                â””â”€â•¼  ...
        --- when with_labels is a string, use that attr ---
        â•™â”€â”€ a
            â””â”€â•¼ c â•¾ b
                â”œâ”€â•¼ `
                â”‚   â”œâ”€â•¼ b â•¾ c, d
                â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â””â”€â•¼ d
                â”‚       â””â”€â•¼  ...
                â””â”€â•¼  ...
        --- fallback to str(node) when the attr does not exist ---
        â•™â”€â”€ 1
            â””â”€â•¼ 3 â•¾ c
                â”œâ”€â•¼ a
                â”‚   â”œâ”€â•¼ c â•¾ 3, e
                â”‚   â”‚   â””â”€â•¼  ...
                â”‚   â””â”€â•¼ e
                â”‚       â””â”€â•¼  ...
                â””â”€â•¼  ...
        )r   r¦   r   r   r   r   r&   r'   r   r   r   )r   r   r    r   r9   r:   r!   r!   r"   Ú$test_write_network_text_custom_labelœ  s2   
€
ÿ'Ù(rª   c                  C   sø   t jddt jd} |  dd¡ |  dd¡ |  dd¡ |  ¡ }| dd	„ |jD ƒ¡ g }|j}|d
ƒ t j| |ddd |dƒ t j| |dddd |dƒ t j||ddd |dƒ t j||dddd d 	|¡}t
|ƒ tdƒ ¡ }||kszJ ‚d S )Nr3   r   rS   r   éÿÿÿÿéþÿÿÿéýÿÿÿc                 S   s    g | ]\}}||kr||f‘qS r!   r!   )rI   ÚuÚvr!   r!   r"   Ú
<listcomp>ä  s     z;test_write_network_text_vertical_chains.<locals>.<listcomp>z--- Undirected UTF ---r%   T)r5   r$   Úvertical_chainsz--- Undirected ASCI ---)r5   r$   r±   r,   z--- Directed UTF ---z--- Directed ASCI ---r   uí  
        --- Undirected UTF ---
        â•™â”€â”€ 5
            â”‚
            4
            â”‚
            3
            â”œâ”€â”€ 0
            â”‚   â”œâ”€â”€ 1 â”€ 3
            â”‚   â”‚   â”‚
            â”‚   â”‚   2 â”€ 0, 3
            â”‚   â”œâ”€â”€ -1
            â”‚   â”‚   â”‚
            â”‚   â”‚   -2
            â”‚   â”‚   â”‚
            â”‚   â”‚   -3
            â”‚   â””â”€â”€  ...
            â””â”€â”€  ...
        --- Undirected ASCI ---
        +-- 5
            |
            4
            |
            3
            |-- 0
            |   |-- 1 - 3
            |   |   |
            |   |   2 - 0, 3
            |   |-- -1
            |   |   |
            |   |   -2
            |   |   |
            |   |   -3
            |   L--  ...
            L--  ...
        --- Directed UTF ---
        â•™â”€â”€ 5
            â•½
            4
            â•½
            3
            â”œâ”€â•¼ 0 â•¾ 1, 2
            â”‚   â•½
            â”‚   -1
            â”‚   â•½
            â”‚   -2
            â”‚   â•½
            â”‚   -3
            â”œâ”€â•¼ 1 â•¾ 2
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼ 2
                â””â”€â•¼  ...
        --- Directed ASCI ---
        +-- 5
            !
            4
            !
            3
            |-> 0 <- 1, 2
            |   !
            |   -1
            |   !
            |   -2
            |   !
            |   -3
            |-> 1 <- 2
            |   L->  ...
            L-> 2
                L->  ...
        )r   rŒ   r.   r8   Úto_directedÚremove_edges_fromÚedgesr   r&   r'   r   r   r   )Úgraph1Úgraph2r    r   r9   r:   r!   r!   r"   Ú'test_write_network_text_vertical_chainsÝ  s8   
ÿ
ÿ
ÿG¹Hr·   c                  C   sÒ   t jddt jd} g }|j}|dƒ t j| |dd d| jd d	< |d
ƒ t j| |dd |dƒ |  dd¡ t j| |dd |dƒ d| jd d	< t j| |dd d |¡}t|ƒ t	dƒ 
¡ }||ksgJ ‚d S )Nr   r2   r   ú--- Original ---r%   r4   Tr1   Úcollapseú--- Collapse Node 1 ---ú/--- Add alternate path (5, 3) to collapsed zonerj   ú--- Collapse Node 0 ---r   r   uT  
        --- Original ---
        â•™â”€â”€ 0
            â”œâ”€â•¼ 1
            â”‚   â”œâ”€â•¼ 3
            â”‚   â”‚   â”œâ”€â•¼ 7
            â”‚   â”‚   â””â”€â•¼ 8
            â”‚   â””â”€â•¼ 4
            â”‚       â”œâ”€â•¼ 9
            â”‚       â””â”€â•¼ 10
            â””â”€â•¼ 2
                â”œâ”€â•¼ 5
                â”‚   â”œâ”€â•¼ 11
                â”‚   â””â”€â•¼ 12
                â””â”€â•¼ 6
                    â”œâ”€â•¼ 13
                    â””â”€â•¼ 14
        --- Collapse Node 1 ---
        â•™â”€â”€ 0
            â”œâ”€â•¼ 1
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼ 2
                â”œâ”€â•¼ 5
                â”‚   â”œâ”€â•¼ 11
                â”‚   â””â”€â•¼ 12
                â””â”€â•¼ 6
                    â”œâ”€â•¼ 13
                    â””â”€â•¼ 14
        --- Add alternate path (5, 3) to collapsed zone
        â•™â”€â”€ 0
            â”œâ”€â•¼ 1
            â”‚   â””â”€â•¼  ...
            â””â”€â•¼ 2
                â”œâ”€â•¼ 5
                â”‚   â”œâ”€â•¼ 11
                â”‚   â”œâ”€â•¼ 12
                â”‚   â””â”€â•¼ 3 â•¾ 1
                â”‚       â”œâ”€â•¼ 7
                â”‚       â””â”€â•¼ 8
                â””â”€â•¼ 6
                    â”œâ”€â•¼ 13
                    â””â”€â•¼ 14
        --- Collapse Node 0 ---
        â•™â”€â”€ 0
            â””â”€â•¼  ...
        )r   r   r   r   r&   r   r8   r'   r   r   r   r~   r!   r!   r"   Útest_collapse_directedB  s,   
ÿ/Ñ0r½   c                  C   sâ   t jddt jd} g }|j}|dƒ t j| |ddgd d| jd	 d
< |dƒ t j| |ddgd |dƒ |  dd¡ t j| |ddgd |dƒ d| jd d
< t j| |ddgd d |¡}t|ƒ t	dƒ 
¡ }||ksoJ ‚d S )Nr   r2   r   r¸   r%   r   )r5   r$   r?   Tr1   r¹   rº   r»   rj   r¼   r   uo  
        --- Original ---
        â•™â”€â”€ 0
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 3
            â”‚   â”‚   â”œâ”€â”€ 7
            â”‚   â”‚   â””â”€â”€ 8
            â”‚   â””â”€â”€ 4
            â”‚       â”œâ”€â”€ 9
            â”‚       â””â”€â”€ 10
            â””â”€â”€ 2
                â”œâ”€â”€ 5
                â”‚   â”œâ”€â”€ 11
                â”‚   â””â”€â”€ 12
                â””â”€â”€ 6
                    â”œâ”€â”€ 13
                    â””â”€â”€ 14
        --- Collapse Node 1 ---
        â•™â”€â”€ 0
            â”œâ”€â”€ 1 â”€ 3, 4
            â”‚   â””â”€â”€  ...
            â””â”€â”€ 2
                â”œâ”€â”€ 5
                â”‚   â”œâ”€â”€ 11
                â”‚   â””â”€â”€ 12
                â””â”€â”€ 6
                    â”œâ”€â”€ 13
                    â””â”€â”€ 14
        --- Add alternate path (5, 3) to collapsed zone
        â•™â”€â”€ 0
            â”œâ”€â”€ 1 â”€ 3, 4
            â”‚   â””â”€â”€  ...
            â””â”€â”€ 2
                â”œâ”€â”€ 5
                â”‚   â”œâ”€â”€ 11
                â”‚   â”œâ”€â”€ 12
                â”‚   â””â”€â”€ 3 â”€ 1
                â”‚       â”œâ”€â”€ 7
                â”‚       â””â”€â”€ 8
                â””â”€â”€ 6
                    â”œâ”€â”€ 13
                    â””â”€â”€ 14
        --- Collapse Node 0 ---
        â•™â”€â”€ 0 â”€ 1, 2
            â””â”€â”€  ...
        )r   r   r.   r   r&   r   r8   r'   r   r   r   r~   r!   r!   r"   Útest_collapse_undirected†  s,   
ÿ/Ñ0r¾   c            	   
   c   s   ddl } |  d¡}d}dD ]}}|rtjntj}tdƒD ]2}|ƒ }| t|ƒ¡ |V  |dkrNdD ]}t|ƒD ]}tj||||d}|V  q7q1t ||¡V  qtj	d|d	V  tj
d
d|dV  |s‹tjd|d	V  tjd|d	V  tjdd|d	V  tjd|d	V  tjd|d	V  qdS )zP
    Generate a gauntlet of different test graphs with different properties
    r   Nip7:r2   ©r   r1   é   )gš™™™™™¹?g333333Ó?g      à?gffffffæ?gÍÌÌÌÌÌì?r¡   rS   r1   r   r3   rj   r   r=   )rm   rn   r   r   r.   Úranger7   r¦   rT   rŠ   r   r   rˆ   rŒ   rŽ   r’   )	rm   rr   Únum_randomizedr¢   ÚclsÚ	num_nodesr   Úpr£   r!   r!   r"   Úgenerate_test_graphsÊ  s<   €
ÿü€€årÆ   ©r±   r,   c                 C   s   g | ]}d D ]}||f‘qqS )r¿   r!   )rI   r±   r,   r!   r!   r"   r°   ô  s    ýþÿr°   r¿   c              	   C   s–   ddl m} tƒ D ]?}t |dd„ |jD ƒ¡}ttj|| |dƒ}||ƒ}z|j|jks.J ‚|j|jks6J ‚W q	 t	yH   t
dƒ t |¡ ‚ w dS )zÍ
    Write the graph to network text format, then parse it back in, assert it is
    the same as the original graph. Passing this test is strong validation of
    both the format generator and parser.
    r   )Ú_parse_network_textc                 S   s   i | ]}|t |ƒ“qS r!   )ÚstrrH   r!   r!   r"   rL     s    z0test_network_text_round_trip.<locals>.<dictcomp>rÇ   zERROR in round trip with graphN)Únetworkx.readwrite.textrÈ   rÆ   r   rM   r   ro   Úgenerate_network_textr´   Ú	Exceptionr   r&   )r±   r,   rÈ   r   r    Únewr!   r!   r"   Útest_network_text_round_tripñ  s$   
ÿÿ
ýõrÎ   )*rm   Ú	itertoolsr   Útextwrapr   rU   Únetworkxr   r#   r/   r;   rF   rO   rR   rZ   r_   rh   ri   rt   r|   r   r   r„   r†   r‰   r‹   r   r   r‘   r“   rŸ   r§   r¨   rª   r·   r½   r¾   rÆ   ÚmarkÚparametrizeÚtuplerÎ   r!   r!   r!   r"   Ú<module>   sZ    5Z4); iOI%TM?GkfAeDD'þÿþ
