U
    ¹mœd¹  ã                   @   s  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!dS )8é    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svt
‚t j| d
d	�}t	|ƒ ||ks˜t
‚g }t j| |jdd�}|d ksºt
‚|| d¡ksÌt
‚t j| t	d�}|d ksæt
‚d S )Né   ©ÚrÚhÚcreate_usingZ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ÚAssertionErrorÚappendÚsplit)ÚgraphÚnodeZnode_targetZlabel_targetÚretÚlines© r   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/networkx/readwrite/tests/test_text.pyÚtest_forest_str_directed
   s*    
 ÿÿr!   c                  C   sd   dd„ } | t  ¡ ƒdkst‚| t  ¡ ƒdks0t‚| t  ¡ dd�dksHt‚| t  ¡ dd�dks`t‚d S )Nc                 [   s(   g }t j| |jfddi|—Ž d |¡S )NÚendÚ r   )r   Úwrite_network_textr   Újoin)ÚgÚkwZprintbufr   r   r    Ú
_graph_str@   s    z7test_write_network_text_empty_graph.<locals>._graph_stru   ╙T)Ú
ascii_onlyú+)r   r   r   ÚGraph)r(   r   r   r    Ú#test_write_network_text_empty_graph?   s
    r,   c                  C   s€   t  ¡ } |  ddddg¡ |  dd¡ g }|j}t j| |dd� t j| |ddd� d	 |¡}t|ƒ td
ƒ 	¡ }||ks|t
‚d S )Né   r   é   é   r#   ©Úpathr"   T©r1   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   r   ÚtextÚtargetr   r   r    Ú+test_write_network_text_within_forest_glyphK   s    
ÿr7   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\t‚t jddt jd�}t  | ||g¡}t j|dddgd�}t|ƒ tdƒ ¡ }||ks²t‚t j|dddgd	d
�}t|ƒ tdƒ ¡ }||ksèt‚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   r   )Útree1Útree2Úforestr   r6   Ztree3r   r   r    Ú#test_forest_str_directed_multi_treed   s.    
ÿÿÿrA   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~t
‚t j|ddgd	d
�}t|ƒ tdƒ 	¡ }||ks²t
‚d S )Nr   r   c                    s   i | ]}||t ˆ ƒ “qS r   )Úlen)Ú.0Ún©r>   r   r    Ú
<dictcomp>Á   s      z9test_forest_str_undirected_multi_tree.<locals>.<dictcomp>r   r9   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+   Zrelabel_nodesr   Úunionr   r   r   r   r   )r?   r@   r   r6   r   rE   r    Ú%test_forest_str_undirected_multi_tree¾   s     ÿÿrH   c                  C   s€   t jddt jd�} t  | ¡ tdƒ ¡ }t j| dgd�}t|ƒ ||ksLt‚tdƒ ¡ }t j| dgd�}t|ƒ ||ks|t‚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   )r   Znode_target0r   Znode_target2r   r   r    Útest_forest_str_undirectedò   s    
ÿÿrI   c               	   C   sh   t jdt jd�} t t j¡� t  | ¡ W 5 Q R X t jdt jd�}t t j¡� t  |¡ W 5 Q R X d S )Nr.   ©r   )r   Úcomplete_graphr+   ÚpytestZraisesZNetworkXNotImplementedr   r   )ZugraphZdgraphr   r   r    Útest_forest_str_errors  s    rM   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¾t‚||ksÊt‚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   r-   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   r=   r   r   r   r   r   r   r   r%   r   r   )r   Ztarget1Ztarget2r   Zgot1Zgot2r   r   r    Ú%test_forest_str_overspecified_sources'  s0    ýÿ	ÿÿ

rN   c                  C   s´   t  ¡ } |  ddddg¡ g }|j}|dƒ t j| |dd� t| j| jƒD ]:\}}|d|› d	|› d
�ƒ |  ||¡ t j| |dd� qJd |¡}t	|ƒ t
dƒ ¡ }||ks°t‚dS )úS
    Walk through the cases going from a disconnected to fully connected graph
    r-   r   r.   r/   ú--- initial state ---r#   r0   ú--- 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   r3   r   r$   r   r   r4   r%   r   r   r   r   ©r   r   r   ÚiÚjr5   r6   r   r   r    Ú4test_write_network_text_iterative_add_directed_edgesb  s"    
ÿ rW   c                  C   s¾   t  ¡ } |  ddddg¡ g }|j}|dƒ t j| |dd� t| j| jƒD ]D\}}||kr\qJ|d|› d	|› d
�ƒ |  ||¡ t j| |dd� qJd |¡}t	|ƒ t
dƒ ¡ }||ksºt‚dS )rO   r-   r   r.   r/   rP   r#   r0   rQ   rR   rS   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+   r3   r   r$   r   r   r4   r%   r   r   r   r   rT   r   r   r    Ú6test_write_network_text_iterative_add_undirected_edgesö  s$    
ÿTrX   c            	      C   sì   t  d¡} t ¡ }| dddddg¡ 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sèt‚dS )rO   i°y.+r-   r   r.   r/   é   r   é   rP   r#   r0   é   rQ   rR   rS   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   r3   Úlistr   r   ÚshuffleZadd_edges_fromr   r$   r4   r%   r   r   r   r   )	Úrngr   Zpossible_edgesr   r   rU   rV   r5   r6   r   r   r    Ú;test_write_network_text_iterative_add_random_directed_edges_  s(    


ÿ7ra   c                  C   s2  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.t‚d S )Nr-   r   rY   r.   r/   é   r9   rZ   ú--- directed case ---r#   r0   z"--- add (1, 8), (4, 2), (6, 3) ---ú--- undirected case ---©r1   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   r4   Úcopyr   r$   Úto_undirectedr%   r   r   r   r   )r&   Úorigr   r   r5   r6   r   r   r    Ú%test_write_network_text_nearly_forest®  s8    
ÿ-ri   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~t‚d S )
NrY   rJ   rc   Tr#   r2   rd   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   Ú
generatorsrK   r   r   r$   rg   r%   r   r   r   r   ©r   r   r   r5   r6   r   r   r    Ú1test_write_network_text_complete_graph_ascii_only÷  s    
ÿrl   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|t‚d S )NrY   rJ   zNode(n=ú)r
   TFr#   )r1   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   rj   rK   r   r   r   r$   r%   r   r   r   r   )r   rD   r   r   r5   r6   r   r   r    Ú#test_write_network_text_with_labels  s    

ÿrn   c                  C   s¨   g } | j }dD ]0}tj |¡}|d|› d�ƒ tj||dd� qdD ]4}tj |tj¡}|d|› d�ƒ tj||dd� qDd | ¡}t|ƒ tdƒ 	¡ }||ks¤t
‚d S )	N)r   r-   r   r.   r/   rY   z--- undirected k=ú ---r#   r0   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   rj   rK   r$   r   r%   r   r   r   r   )r   r   Úkr&   r5   r6   r   r   r    Ú'test_write_network_text_complete_graphs8  s     
ÿCrq   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
� q‚d |¡}t|ƒ t	dƒ 
¡ }||ksÖt‚d S )Nr-   r   r.   r/   rY   rb   z--- source node: ro   r#   re   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   r4   r   Úsortedr   r$   r%   r   r   r   r   )r&   r   r   r   rD   r5   r6   r   r   r    Ú(test_write_network_text_multiple_sourcesŒ  s*    
ÿ6rs   c                  C   sX   t jdt jd�} g }|j}t j| |dd� d |¡}t|ƒ tdƒ ¡ }||ksTt	‚d S )NrY   rJ   r#   r0   r   u¥   
        ╙── 1
            └── 0
                ├── 2
                ├── 3
                ├── 4
                └── 5
        )
r   Z
star_graphr+   r   r$   r%   r   r   r   r   rk   r   r   r    Ú"test_write_network_text_star_graphÙ  s    
ÿ
rt   c                  C   sX   t jdt jd�} g }|j}t j| |dd� d |¡}t|ƒ tdƒ ¡ }||ksTt	‚d S )Nr.   rJ   r#   r0   r   uQ   
        ╙── 0
            └── 1
                └── 2
        )
r   Z
path_graphr+   r   r$   r%   r   r   r   r   rk   r   r   r    Ú"test_write_network_text_path_graphí  s    
ÿru   c                  C   sZ   t jddt jd�} g }|j}t j| |dd� d |¡}t|ƒ tdƒ ¡ }||ksVt	‚d S )Nr/   r   rJ   r#   r0   r   u  
        ╙── 5
            └── 4
                └── 3
                    ├── 0
                    │   ├── 1 ─ 3
                    │   │   └── 2 ─ 0, 3
                    │   └──  ...
                    └──  ...
        )
r   Zlollipop_graphr+   r   r$   r%   r   r   r   r   rk   r   r   r    Ú&test_write_network_text_lollipop_graphþ  s    
ÿrv   c                  C   sX   t jdt jd�} g }|j}t j| |dd� d |¡}t|ƒ tdƒ ¡ }||ksTt	‚d S )Nr9   rJ   r#   r0   r   uX  
        ╙── 1
            ├── 0
            │   ├── 2 ─ 1
            │   │   └── 3 ─ 0
            │   │       └── 4 ─ 0
            │   │           └── 5 ─ 0
            │   │               └── 6 ─ 0, 1
            │   └──  ...
            └──  ...
        )
r   Zwheel_graphr+   r   r$   r%   r   r   r   r   rk   r   r   r    Ú#test_write_network_text_wheel_graph  s    
ÿrw   c                  C   sX   t jdt jd�} g }|j}t j| |dd� d |¡}t|ƒ tdƒ ¡ }||ksTt	‚d S )Nr/   rJ   r#   r0   r   uê  
        ╙── 0
            ├── 1
            │   ├── 2
            │   │   ├── 3 ─ 0
            │   │   │   └── 7
            │   │   │       ├── 6 ─ 2
            │   │   │       │   └── 5 ─ 1
            │   │   │       │       └── 4 ─ 0, 7
            │   │   │       └──  ...
            │   │   └──  ...
            │   └──  ...
            └──  ...
        )
r   Zcircular_ladder_graphr+   r   r$   r%   r   r   r   r   rk   r   r   r    Ú-test_write_network_text_circular_ladder_graph+  s    
ÿrx   c                  C   sX   t jdt jd�} g }|j}t j| |dd� d |¡}t|ƒ tdƒ ¡ }||ksTt	‚d S )Nr/   rJ   r#   r0   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   Z dorogovtsev_goltsev_mendes_graphr+   r   r$   r%   r   r   r   r   rk   r   r   r    Ú8test_write_network_text_dorogovtsev_goltsev_mendes_graphE  s    
ÿ5ry   c                  C   sd  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`t
‚d S )Nr-   r.   r   ú"--- directed case, max_depth=0 ---r#   r   ©r1   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 ---r/   ú$--- 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$   rg   r%   r   r   r   r   ©rh   r   r   r5   r6   r   r   r    Ú&test_write_network_text_tree_max_depth„  s:    
ÿ*r…   c                  C   sd  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`t	‚d S )Né
   g333333Ã?Tiȝ  ©ZdirectedÚseedú%--- directed case, max_depth=None ---r#   r{   rz   r   r}   r-   r~   r   r   r.   ú'--- 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$   rg   r%   r   r   r   r   r„   r   r   r    Ú'test_write_network_text_graph_max_depthË  s:    
ÿ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\t
‚d S )NrY   r‰   r#   r{   rz   r   r}   r-   r~   r   r   r.   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   rK   r   r   r$   rg   r%   r   r   r   r   r„   r   r   r    Ú(test_write_network_text_clique_max_depth6  s:    
ÿ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t‚d S )NrY   gš™™™™™Ù?TiVLir‡   zNode(rm   r
   r	   r-   r   r   r   Úpartz4--- when with_labels=True, uses the 'label' attr ---r#   )r1   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   r   r5   r6   r   r   r    Ú$test_write_network_text_custom_labelœ  s,    

ÿ(r�   )"r\   Ú	itertoolsr   Útextwrapr   rL   Znetworkxr   r!   r,   r7   rA   rH   rI   rM   rN   rW   rX   ra   ri   rl   rn   rq   rs   rt   ru   rv   rw   rx   ry   r…   rŒ   r�   r�   r   r   r   r    Ú<module>   s>   5Z4); iOI%TM?Gkf