Ë
    Þ¨sgØ  ã                   óp  — d dl Z d dlmZ d dlmZ d dlZd dlZd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$ejJ                  jM                  d! e'd"D  cg c]  } d"D ]  }| |f‘Œ Œ c}} «      «      d#„ «       Z(yc c}} w )$é    N)Úproduct)Údedentc                  óÞ  — t        j                  ddt         j                  ¬«      } | j                  D ],  }dt	        t        d«      |z   «      z   | j                  |   d<   Œ. t        d«      j                  «       }t        d«      j                  «       }t        j                  | d¬	«      }d
j                  |«      |k(  sJ ‚t        j                  | d¬	«      }d
j                  |«      |k(  sJ ‚y )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_labelsú
T)
ÚnxÚbalanced_treeÚDiGraphÚnodesÚchrÚordr   ÚstripÚgenerate_network_textÚjoin)ÚgraphÚnodeÚnode_targetÚlabel_targetÚrets        úU/var/www/html/venv/lib/python3.12/site-packages/networkx/readwrite/tests/test_text.pyÚ*test_generate_network_text_forest_directedr   
   sâ   € ä×Ñ˜q A´B·J±JÔ?€EØ—‘ò DˆØ%,¬s´3°s³8¸d±?Ó/CÑ%Cˆ‰DÑ˜'Ò"ðDô ð	ó
÷ eƒgð ô ð	ó
÷ eƒgð ô ×
"Ñ
" 5°eÔ
<€CØ9‰9S‹>˜[Ò(Ð(Ð(ô ×
"Ñ
" 5°dÔ
;€CØ9‰9S‹>˜\Ò)Ð)Ñ)ó    c                  ó
  — d„ }  | t        j                  «       «      dk(  sJ ‚ | t        j                  «       «      dk(  sJ ‚ | t        j                  «       d¬«      dk(  sJ ‚ | t        j                  «       d¬«      dk(  sJ ‚y )Nc                 ón   — g }t        j                  | |j                  fddi|¤Ž dj                  |«      S )NÚendÚ r   )r   Úwrite_network_textÚappendr   )ÚgÚkwÚprintbufs      r   Ú
_graph_strz7test_write_network_text_empty_graph.<locals>._graph_str2   s4   € ØˆÜ
×Ñ˜a §¡Ñ?°bÐ?¸BÒ?Øy‰y˜Ó"Ð"r    u   â•™T)Ú
ascii_onlyú+)r   r   ÚGraph)r*   s    r   Ú#test_write_network_text_empty_graphr.   1   sq   € ò#ñ
 ”b—j‘j“lÓ# uÒ,Ð,Ð,Ù”b—h‘h“jÓ! UÒ*Ð*Ð*Ù”b—j‘j“l¨tÔ4¸Ò;Ð;Ð;Ù”b—h‘h“j¨TÔ2°cÒ9Ð9Ñ9r    c                  óV  — t        j                  «       } | j                  g d¢«       | j                  dd«       g }|j                  }t        j
                  | |d¬«       t        j
                  | |dd¬«       dj                  |«      }t        d	«      j                  «       }||k(  sJ ‚y )
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'   ÚlinesÚwriteÚtextÚtargets        r   Ú+test_write_network_text_within_forest_glyphr=   =   s”   € Ü

‰
‹€AØ×Ñ’\Ô"Ø‡JJˆq!ÔØ€EØL‰L€EÜ×Ñ˜! %¨RÕ0Ü×Ñ˜! %°D¸bÕAØ9‰9UÓ€DÜð		ó÷ eƒgð ð 6Š>Ð‰>r    c                  óð  — t        j                  ddt         j                  ¬«      } t        j                  ddt         j                  ¬«      }t        j                  | |g«      }dj	                  t        j
                  |«      «      }t        d«      j                  «       }||k(  sJ ‚t        j                  ddt         j                  ¬«      }t        j                  | ||g«      }dj	                  t        j
                  |g d¢¬«      «      }t        d«      j                  «       }||k(  sJ ‚dj	                  t        j
                  |g d¢d¬	«      «      }t        d
«      j                  «       }||k(  sJ ‚y )Nr   r   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©rB   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<   Útree3s         r   Ú.test_generate_network_text_directed_multi_treerI   U   sF  € Ü×Ñ˜q A´B·J±JÔ?€EÜ×Ñ˜q A´B·J±JÔ?€EÜ×"Ñ" E¨5 >Ó2€FØ
)‰)”B×,Ñ,¨VÓ4Ó
5€Cäð	ó÷" eƒgð# ð$ &Š=Ðˆ=ä×Ñ˜q A´B·J±JÔ?€EÜ×"Ñ" E¨5°%Ð#8Ó9€FØ
)‰)”B×,Ñ,¨VºZÔHÓ
I€Cäð	ó÷0 eƒgð1 ð2 &Š=Ðˆ=à
)‰)Ü
× Ñ  ²ÈÔMó€Cô ð	ó÷0 eƒgð1 ð2 &Š=Ð‰=r    c                  ój  — t        j                  ddt         j                  ¬«      } t        j                  ddt         j                  ¬«      }t        j                  ||j                  D ci c]  }||t        | «      z   “Œ c}«      }t        j                  | |«      }dj                  t        j                  |ddg¬«      «      }t        d«      j                  «       }||k(  sJ ‚dj                  t        j                  |ddgd¬	«      «      }t        d
«      j                  «       }||k(  sJ ‚y c c}w )Nr   r   r   r   r@   rA   u‰  
        â•Ÿâ”€â”€ 0
        â•Ž   â”œâ”€â”€ 1
        â•Ž   â”‚   â”œâ”€â”€ 3
        â•Ž   â”‚   â””â”€â”€ 4
        â•Ž   â””â”€â”€ 2
        â•Ž       â”œâ”€â”€ 5
        â•Ž       â””â”€â”€ 6
        â•™â”€â”€ 7
            â”œâ”€â”€ 8
            â”‚   â”œâ”€â”€ 10
            â”‚   â””â”€â”€ 11
            â””â”€â”€ 9
                â”œâ”€â”€ 12
                â””â”€â”€ 13
        TrC   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   ÚlenÚunionr   r   r   r   )rE   rF   ÚnrG   r   r<   s         r   Ú0test_generate_network_text_undirected_multi_treerO   ®   s
  € Ü×Ñ˜q A´B·H±HÔ=€EÜ×Ñ˜q A´B·H±HÔ=€EÜ×Ñ˜UÀÇÁÖ$L¸1 Q¨¬C°«J©Ñ%6Ò$LÓM€EÜX‰Xe˜UÓ#€FØ
)‰)”B×,Ñ,¨V¸aÀ¸VÔDÓ
E€Cäð	ó÷" eƒgð# ð$ &Š=Ðˆ=à
)‰)”B×,Ñ,¨V¸aÀ¸VÐPTÔUÓ
V€Cäð	ó÷" eƒgð# ð$ &Š=Ð‰=ùòY %Ms   Á+D0
c                  ól  — t        j                  ddt         j                  ¬«      } t        d«      j	                  «       }dj                  t        j                  | dg¬«      «      }||k(  sJ ‚t        d«      j	                  «       }dj                  t        j                  | dg¬«      «      }||k(  sJ ‚y )Nr   r   uÁ   
        â•™â”€â”€ 0
            â”œâ”€â”€ 1
            â”‚   â”œâ”€â”€ 3
            â”‚   â””â”€â”€ 4
            â””â”€â”€ 2
                â”œâ”€â”€ 5
                â””â”€â”€ 6
        r   r   rA   uÇ   
        â•™â”€â”€ 2
            â”œâ”€â”€ 0
            â”‚   â””â”€â”€ 1
            â”‚       â”œâ”€â”€ 3
            â”‚       â””â”€â”€ 4
            â”œâ”€â”€ 5
            â””â”€â”€ 6
        )r   r   r-   r   r   r   r   )r   Únode_target0r   Únode_target2s       r   Ú,test_generate_network_text_forest_undirectedrS   à   s¬   € ä×Ñ˜q A´B·H±HÔ=€Eäð	ó
÷ eƒgð ð )‰)”B×,Ñ,¨U¸Q¸CÔ@Ó
A€CØ,ÒÐÐô ð	ó
÷ eƒgð ð )‰)”B×,Ñ,¨U¸Q¸CÔ@Ó
A€CØ,ÒÐÑr    c            	      ó4  — t        j                  t        j                  ddt         j                  ¬«      t        j                  ddt         j                  ¬«      t        j                  ddt         j                  ¬«      g«      } t	        d«      j                  «       }t	        d«      j                  «       }dj                  t        j                  | | j                  ¬«      «      }dj                  t        j                  | «      «      }||k(  sJ ‚||k(  sJ ‚y)	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   rA   N)	r   rD   r   r   r   r   r   r   r   )r   Útarget1Útarget2Úgot1Úgot2s        r   Ú0test_generate_network_text_overspecified_sourcesrY     sç   € ô ×!Ñ!ä×Ñ˜q A´B·J±JÔ?Ü×Ñ˜q A´B·J±JÔ?Ü×Ñ˜q A´B·J±JÔ?ð	
ó€Eô ð
	ó÷ eƒgð ô ð
	ó÷ eƒgð ð 9‰9”R×-Ñ-¨e¸U¿[¹[ÔIÓJ€DØ9‰9”R×-Ñ-¨eÓ4Ó5€DØ7Š?Ðˆ?Ø7Š?Ð‰?r    c                  óÒ  — t        j                  «       } | j                  g d¢«       g }|j                  } |d«       t        j                  | |d¬«       t        | j                  | j                  «      D ]>  \  }} |d|› d|› d«       | j                  ||«       t        j                  | |d¬«       Œ@ dj                  |«      }t        d	«      j                  «       }||k(  sJ ‚y
)ú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   r9   r:   ÚiÚjr;   r<   s          r   Ú4test_write_network_text_iterative_add_directed_edgesrc   5  sÝ   € ô J‰J‹L€EØ	×ÑšÔ&Ø€EØL‰L€EÙ	Ð
!Ô"Ü×Ñ˜% e°Õ4Ü˜Ÿ™ U§[¡[Ó1ò 9‰ˆˆ1Ù˜a˜S  1 # UÐ+Ô,Ø‰q˜!ÔÜ
×Ñ˜e¨%°RÖ8ð9ð 9‰9UÓ€Däð}	ó÷~ eƒgð ð@ TŠ>Ð‰>r    c                  óÞ  — t        j                  «       } | j                  g d¢«       g }|j                  } |d«       t        j                  | |d¬«       t        | j                  | j                  «      D ]D  \  }}||k(  rŒ |d|› d|› d«       | j                  ||«       t        j                  | |d¬«       ŒF dj                  |«      }t        d	«      j                  «       }||k(  sJ ‚y
)r[   r0   r\   r$   r4   r]   r^   r_   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`   s          r   Ú6test_write_network_text_iterative_add_undirected_edgesre   È  sç   € ô H‰H‹J€EØ	×ÑšÔ&Ø€EØL‰L€EÙ	Ð
!Ô"Ü×Ñ˜% e°Õ4Ü˜Ÿ™ U§[¡[Ó1ò 9‰ˆˆ1ØŠ6ØÙ˜a˜S  1 # UÐ+Ô,Ø‰q˜!ÔÜ
×Ñ˜e¨%°RÖ8ð9ð 9‰9UÓ€DÜðQ	óS÷f eƒgðg ðh TŠ>Ð‰>r    c                  ób  — t        j                  d«      } t        j                  «       }|j	                  g d¢«       t        t        |j                  |j                  «      «      }| j                  |«       |j                  |dd «       g }|j                  } |d«       t        j                  ||d¬«       |dd D ]>  \  }} |d	|› d
|› d«       |j                  ||«       t        j                  ||d¬«       Œ@ dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y)r[   i°y.+)r1   r   r2   r3   é   r   é   r\   r$   r4   é   r]   r^   r_   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   )	Úrngr   Úpossible_edgesr9   r:   ra   rb   r;   r<   s	            r   Ú;test_write_network_text_iterative_add_random_directed_edgesrq   0  s  € ô
 -‰-˜	Ó
"€CÜJ‰J‹L€EØ	×ÑšÔ)Üœ' %§+¡+¨u¯{©{Ó;Ó<€NØ‡KKÔØ	×Ñ˜¨¨!Ð,Ô-Ø€EØL‰L€EÙ	Ð
!Ô"Ü×Ñ˜% e°Õ4Ø˜q Ð$ò 9‰ˆˆ1Ù˜a˜S  1 # UÐ+Ô,Ø‰q˜!ÔÜ
×Ñ˜e¨%°RÖ8ð9ð 9‰9UÓ€DÜð4	ó6÷l eƒgðm ðn TŠ>Ð‰>r    c                  ór  — t        j                  «       } | j                  dd«       | j                  dd«       | j                  dd«       | j                  dd«       | j                  dd«       | j                  dd«       | j                  dd«       | j                  «       }| j                  dd«       | j                  dd«       | j                  dd«       g }|j                  } |d	«       t        j
                  ||d
¬«        |d«       t        j
                  | |d
¬«        |d«       t        j
                  |j                  «       |dgd
¬«        |d«       t        j
                  | j                  «       |dgd
¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nr1   r   rg   r2   r3   é   r@   rh   ú--- directed case ---r$   r4   z"--- add (1, 8), (4, 2), (6, 3) ---ú--- undirected case ---©r5   rB   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'   Úorigr9   r:   r;   r<   s         r   Ú%test_write_network_text_nearly_forestrz   ~  sp  € Ü

‰
‹€AØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ6‰6‹8€DØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ€EØL‰L€EÙ	Ð
!Ô"Ü×Ñ˜$ U°Õ3Ù	Ð
.Ô/Ü×Ñ˜! %¨RÕ0Ù	Ð
#Ô$Ü×Ñ˜$×,Ñ,Ó.°UÀQÀCÈRÕPÙ	Ð
.Ô/Ü×Ñ˜!Ÿ/™/Ó+°%À!ÀÈ"ÕMØ9‰9UÓ€DÜð*	ó,÷X eƒgðY ðZ TŠ>Ð‰>r    c                  ó€  — t         j                  j                  dt         j                  ¬«      } g }|j                  } |d«       t        j
                  | |dd¬«        |d«       t        j
                  | j                  «       |dd¬«       dj                  |«      }t        d	«      j                  «       }||k(  sJ ‚y )
Nrg   ©r
   rt   Tr$   r6   ru   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   Ú
generatorsÚcomplete_graphr   r&   r%   rx   r   r   r   ©r   r9   r:   r;   r<   s        r   Ú1test_write_network_text_complete_graph_ascii_onlyr€   Æ  s¨   € ÜM‰M×(Ñ(¨¼¿¹Ð(ÓD€EØ€EØL‰L€EÙ	Ð
!Ô"Ü×Ñ˜% e¸À"ÕEÙ	Ð
#Ô$Ü×Ñ˜%×-Ñ-Ó/°eÈÐRTÕUØ9‰9UÓ€DÜð	ó÷. eƒgð/ ð0 TŠ>Ð‰>r    c                  ób  — t         j                  j                  dt         j                  ¬«      } | j                  D ]  }d|› d| j                  |   d<   Œ g }|j
                  }t        j                  | |ddd¬	«       d
j                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nrg   r|   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}   r~   r   r   r&   r%   r   r   r   )r   rN   r9   r:   r;   r<   s         r   Ú#test_write_network_text_with_labelsrƒ   ê  sª   € ÜM‰M×(Ñ(¨¼¿¹Ð(ÓD€EØ[‰[ò 1ˆØ$+¨A¨3¨a .ˆ‰A‰wÒð1à€EØL‰L€EÜ×Ñ˜% e¸È%ÐUWÕXØ9‰9UÓ€Dô ð	ó÷ eƒgð ð TŠ>Ð‰>r    c                  óÈ  — g } | j                   }dD ]E  }t        j                  j                  |«      } |d|› d«       t        j                  ||d¬«       ŒG dD ]T  }t        j                  j                  |t        j
                  «      } |d|› d«       t        j                  ||d¬«       ŒV dj                  | «      }t        d«      j                  «       }||k(  sJ ‚y )	N)r   r1   r   r2   r3   rg   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}   r~   r%   r   r   r   r   )r9   r:   Úkr'   r;   r<   s         r   Ú'test_write_network_text_complete_graphsr‡     sã   € Ø€EØL‰L€EØò 5ˆÜM‰M×(Ñ(¨Ó+ˆÙÐ! !  DÐ)Ô*Ü
×Ñ˜a e°Ö4ð5ð
  ò 5ˆÜM‰M×(Ñ(¨¬B¯J©JÓ7ˆÙ ˜s $Ð'Ô(Ü
×Ñ˜a e°Ö4ð5ð 9‰9UÓ€DÜð@	óB÷D eƒgðE ðF TŠ>Ð‰>r    c                  óV  — t        j                  «       } | j                  dd«       | j                  dd«       | j                  dd«       | j                  dd«       | j                  dd«       | j                  dd«       | j                  dd«       | j                  dd«       g }|j                  }t	        | j                  «       «      }|D ](  } |d|› d«       t        j                  | ||gd	¬
«       Œ* dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nr1   r   r2   r3   rg   rs   z--- source node: r…   r$   rv   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'   r9   r:   r   rN   r;   r<   s          r   Ú(test_write_network_text_multiple_sourcesrŠ   X  s  € Ü

‰
‹€AØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ‡JJˆq!ÔØ€EØL‰L€Eô 1—7‘7“9Ó€EØò BˆÙÐ! !  DÐ)Ô*Ü
×Ñ˜a e°a°S¸bÖAðBð 9‰9UÓ€DÜð3	ó5÷j eƒgðk ðl TŠ>Ð‰>r    c                  óü   — t        j                  dt         j                  ¬«      } g }|j                  }t        j                  | |d¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nrg   r|   r$   r4   r   u¥   
        â•™â”€â”€ 1
            â””â”€â”€ 0
                â”œâ”€â”€ 2
                â”œâ”€â”€ 3
                â”œâ”€â”€ 4
                â””â”€â”€ 5
        )r   Ú
star_graphr-   r&   r%   r   r   r   r   s        r   Ú"test_write_network_text_star_graphr   ¤  sm   € ÜM‰M˜!¬"¯(©(Ô3€EØ€EØL‰L€EÜ×Ñ˜% e°Õ4Ø9‰9UÓ€DÜð	ó	÷ eƒgð ð TŠ>Ð‰>r    c                  óü   — t        j                  dt         j                  ¬«      } g }|j                  }t        j                  | |d¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nr2   r|   r$   r4   r   uQ   
        â•™â”€â”€ 0
            â””â”€â”€ 1
                â””â”€â”€ 2
        )r   Ú
path_graphr-   r&   r%   r   r   r   r   s        r   Ú"test_write_network_text_path_graphr   ·  sm   € ÜM‰M˜!¬"¯(©(Ô3€EØ€EØL‰L€EÜ×Ñ˜% e°Õ4Ø9‰9UÓ€DÜð	ó÷ eƒgð ð TŠ>Ð‰>r    c                  óþ   — t        j                  ddt         j                  ¬«      } g }|j                  }t        j                  | |d¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nr3   r   r|   r$   r4   r   u  
        â•™â”€â”€ 5
            â””â”€â”€ 4
                â””â”€â”€ 3
                    â”œâ”€â”€ 0
                    â”‚   â”œâ”€â”€ 1 â”€ 3
                    â”‚   â”‚   â””â”€â”€ 2 â”€ 0, 3
                    â”‚   â””â”€â”€  ...
                    â””â”€â”€  ...
        )r   Úlollipop_graphr-   r&   r%   r   r   r   r   s        r   Ú&test_write_network_text_lollipop_graphr“   Ç  sq   € Ü×Ñ˜a ´·±Ô:€EØ€EØL‰L€EÜ×Ñ˜% e°Õ4Ø9‰9UÓ€DÜð		ó÷ eƒgð ð TŠ>Ð‰>r    c                  óü   — t        j                  dt         j                  ¬«      } g }|j                  }t        j                  | |d¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nr@   r|   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   s        r   Ú#test_write_network_text_wheel_graphr–   Ü  sm   € ÜN‰N˜1¬2¯8©8Ô4€EØ€EØL‰L€EÜ×Ñ˜% e°Õ4Ø9‰9UÓ€DÜð
	ó÷ eƒgð ð TŠ>Ð‰>r    c                  óü   — t        j                  dt         j                  ¬«      } g }|j                  }t        j                  | |d¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nr3   r|   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   s        r   Ú-test_write_network_text_circular_ladder_graphr™   ò  so   € Ü×$Ñ$ Q´R·X±XÔ>€EØ€EØL‰L€EÜ×Ñ˜% e°Õ4Ø9‰9UÓ€DÜð	ó÷ eƒgð ð  TŠ>Ð‰>r    c                  óü   — t        j                  dt         j                  ¬«      } g }|j                  }t        j                  | |d¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nr3   r|   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   s        r   Ú8test_write_network_text_dorogovtsev_goltsev_mendes_graphrœ     sr   € Ü×/Ñ/°ÄÇÁÔI€EØ€EØL‰L€EÜ×Ñ˜% e°Õ4Ø9‰9UÓ€DÜð2	ó4÷h eƒgði ðj TŠ>Ð‰>r    c                  óî  — t        j                  ddt         j                  ¬«      } g }|j                  } |d«       t        j                  | |dd¬«        |d«       t        j                  | |dd¬«        |d	«       t        j                  | |dd
¬«        |d«       t        j                  | |dd¬«        |d«       t        j                  | |dd¬«        |d«       t        j                  | j                  «       |dd¬«        |d«       t        j                  | j                  «       |dd¬«        |d«       t        j                  | j                  «       |dd
¬«        |d«       t        j                  | j                  «       |dd¬«        |d«       t        j                  | j                  «       |dd¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )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%   rx   r   r   r   ©ry   r9   r:   r;   r<   s        r   Ú&test_write_network_text_tree_max_depthr©   I  s±  € Ü×Ñ˜a 1´2·:±:Ô>€DØ€EØL‰L€EÙ	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPØ9‰9UÓ€DÜð'	ó)÷R eƒgðS ðT TŠ>Ð‰>r    c                  óÔ  — t        j                  dddd¬«      } g }|j                  } |d«       t        j                  | |dd ¬«        |d	«       t        j                  | |dd
¬«        |d«       t        j                  | |dd¬«        |d«       t        j                  | |dd¬«        |d«       t        j                  | |dd¬«        |d«       t        j                  | j	                  «       |dd ¬«        |d«       t        j                  | j	                  «       |dd
¬«        |d«       t        j                  | j	                  «       |dd¬«        |d«       t        j                  | j	                  «       |dd¬«        |d«       t        j                  | j	                  «       |dd¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )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%   rx   r   r   r   r¨   s        r   Ú'test_write_network_text_graph_max_depthr²     s±  € Ü×Ñ  D°4¸eÔD€DØ€EØL‰L€EÙ	Ð
1Ô2Ü×Ñ˜$ U°¸dÕCÙ	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
3Ô4Ü×Ñ˜$×,Ñ,Ó.°UÀÈdÕSÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPØ9‰9UÓ€DÜðK	óM÷Z eƒgð[ ð\ TŠ>Ð‰>r    c                  óê  — t        j                  dt         j                  «      } g }|j                  } |d«       t        j                  | |dd ¬«        |d«       t        j                  | |dd¬«        |d«       t        j                  | |dd¬«        |d	«       t        j                  | |dd
¬«        |d«       t        j                  | |dd¬«        |d«       t        j                  | j                  «       |dd ¬«        |d«       t        j                  | j                  «       |dd¬«        |d«       t        j                  | j                  «       |dd¬«        |d«       t        j                  | j                  «       |dd
¬«        |d«       t        j                  | j                  «       |dd¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nrg   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   r~   r   r&   r%   rx   r   r   r   r¨   s        r   Ú(test_write_network_text_clique_max_depthr´   ù  s±  € Ü×Ñ˜Q¤§
¡
Ó+€DØ€EØL‰L€EÙ	Ð
1Ô2Ü×Ñ˜$ U°¸dÕCÙ	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
.Ô/Ü×Ñ˜$ U°¸aÕ@Ù	Ð
3Ô4Ü×Ñ˜$×,Ñ,Ó.°UÀÈdÕSÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPÙ	Ð
0Ô1Ü×Ñ˜$×,Ñ,Ó.°UÀÈaÕPØ9‰9UÓ€DÜðF	óH÷P eƒgðQ ðR TŠ>Ð‰>r    c                  óÆ  — t        j                  dddd¬«      } | j                  D ]r  }d|› d| j                  |   d<   t        |t	        d	«      z   d
z
  «      | j                  |   d<   |dz  dk(  sŒLt        |t	        d	«      z   «      | j                  |   d<   Œt 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j                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nrg   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   r9   r:   r;   r<   s         r   Ú$test_write_network_text_custom_labelr·   ^  s`  € ä× Ñ   C°$¸YÔG€EØ—‘ò =ˆØ',¨T¨F°! _ˆ‰DÑ˜'Ñ"Ü#& t¬c°#«h¡¸Ñ':Ó#;ˆ‰DÑ˜%Ñ Ø!‰8q‹=Ü(+¨D´3°s³8©OÓ(<ˆEK‰K˜Ñ˜fÒ%ð	=ð €EØL‰L€EÙ	Ð
@ÔAÜ×Ñ˜% e¸À2ÐQUÕVÙ	Ð
@ÔAÜ×Ñ˜% e¸ÀBÐRVÕWÙ	Ð
?Ô@Ü×Ñ˜% e¸ÀBÐRVÕWÙ	Ð
FÔGÜ×Ñ˜% e¸ÀRÐSWÕXà9‰9UÓ€DÜð%	ó'÷N eƒgðO ðP TŠ>Ð‰>r    c                  óÞ  — t        j                  ddt         j                  ¬«      } | j                  dd«       | j                  dd«       | j                  dd«       | j	                  «       }|j                  |j                  D cg c]  \  }}||kD  sŒ||f‘Œ c}}«       g }|j                  } |d«       t        j                  | |d	d
¬«        |d«       t        j                  | |d	d
d
¬«        |d«       t        j                  ||d	d
¬«        |d«       t        j                  ||d	d
d
¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y c c}}w )Nr3   r   r|   r   éÿÿÿÿéþÿÿÿéýÿÿÿ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   )Úgraph1Úgraph2ÚuÚvr9   r:   r;   r<   s           r   Ú'test_write_network_text_vertical_chainsrÄ   ž  sP  € Ü×Ñ˜q !´"·(±(Ô;€FØ
‡OOArÔØ
‡OOB˜ÔØ
‡OOB˜Ôà×ÑÓ!€FØ
×Ñ°·±×G©¨¨AÀÀQÃ˜q !šfÓGÔHà€EØL‰L€EÙ	Ð
"Ô#Ü×Ñ˜& u°"ÀdÕKÙ	Ð
#Ô$Ü×ÑØU °DÀTõñ 
Ð
 Ô!Ü×Ñ˜& u°"ÀdÕKÙ	Ð
!Ô"Ü×ÑØU °DÀTõð 9‰9UÓ€DÜðE	óG÷N eƒgðO ðP TŠ>Ð‰>ùóu Hs   ÂE)
ÂE)
c                  ó:  — t        j                  ddt         j                  ¬«      } g }|j                  } |d«       t        j                  | |d¬«       d| j
                  d   d	<    |d
«       t        j                  | |d¬«        |d«       | j                  dd«       t        j                  | |d¬«        |d«       d| j
                  d   d	<   t        j                  | |d¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nr   r2   r   ú--- Original ---r$   r4   Tr1   Úcollapseú--- Collapse Node 1 ---ú/--- Add alternate path (5, 3) to collapsed zonerg   ú--- 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   s        r   Útest_collapse_directedrË     s   € Ü×Ñ˜q A´B·J±JÔ?€EØ€EØL‰L€EÙ	Ð
ÔÜ×Ñ˜% e°Õ4Ø!%€E‡KKN:ÑÙ	Ð
#Ô$Ü×Ñ˜% e°Õ4Ù	Ð
;Ô<Ø	‡NN1aÔÜ×Ñ˜% e°Õ4Ù	Ð
#Ô$Ø!%€E‡KKN:ÑÜ×Ñ˜% e°Õ4Ø9‰9UÓ€DÜð-	ó/÷^ eƒgð_ ð` TŠ>Ð‰>r    c                  óJ  — t        j                  ddt         j                  ¬«      } g }|j                  } |d«       t        j                  | |ddg¬«       d| j
                  d	   d
<    |d«       t        j                  | |ddg¬«        |d«       | j                  dd«       t        j                  | |ddg¬«        |d«       d| j
                  d   d
<   t        j                  | |ddg¬«       dj                  |«      }t        d«      j                  «       }||k(  sJ ‚y )Nr   r2   r   rÆ   r$   r   )r5   r#   rB   Tr1   rÇ   rÈ   rÉ   rg   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   s        r   Útest_collapse_undirectedrÍ   E  s  € Ü×Ñ˜q A´B·H±HÔ=€EØ€EØL‰L€EÙ	Ð
ÔÜ×Ñ˜% e°¸a¸SÕAØ!%€E‡KKN:ÑÙ	Ð
#Ô$Ü×Ñ˜% e°¸a¸SÕAÙ	Ð
;Ô<Ø	‡NN1aÔÜ×Ñ˜% e°¸a¸SÕAÙ	Ð
#Ô$Ø!%€E‡KKN:ÑÜ×Ñ˜% e°¸a¸SÕAØ9‰9UÓ€DÜð-	ó/÷^ eƒgð_ ð` TŠ>Ð‰>r    c            
   #   ó  K  — ddl }  | j                  d«      }d}dD ]`  }|rt        j                  nt        j                  }t        d«      D ]y  } |«       }|j                  t        |«      «       |–— |dkD  sŒ.dD ]/  }t        |«      D ]  }t        j                  ||||¬«      }|–— Œ! Œ1 t        j                  ||«      –— Œ{ t        j                  d|¬	«      –— t        j                  d
d|¬«      –— |rŒãt        j                  d|¬	«      –— t        j                  d|¬	«      –— t        j                  dd|¬	«      –— t        j                  d|¬	«      –— t        j                  d|¬	«      –— Œc y­w)zP
    Generate a gauntlet of different test graphs with different properties
    r   Nip7:r2   ©r   r1   é   )gš™™™™™¹?g333333Ó?g      à?gffffffæ?gÍÌÌÌÌÌì?r¬   r|   r1   r   r3   rg   r   r@   )rj   rk   r   r   r-   Úranger7   r±   r~   r   r   r˜   rŒ   r’   r•   r›   )	rj   ro   Únum_randomizedr­   ÚclsÚ	num_nodesr   Úpr®   s	            r   Úgenerate_test_graphsrÖ   ˆ  s]  è ø€ ó à
ˆ&-‰-˜	Ó
"€CØ€Nàó KˆÙ$ŒbjŠj¬"¯(©(ˆä˜r›ò 	8ˆIá“EˆEØ× Ñ ¤ yÓ!1Ô2ØŠKð ˜1‹}Ø2ò $AÜ % nÓ 5ò $˜Ü "× 4Ñ 4Ø% q°8À#ô!˜ð $›ñ	$ð$ô ×'Ñ'¨	°3Ó7Ó7ð	8ô" m‰m˜A¨CÔ0Ò0Ü×Ñ  a°cÔ:Ò:ÚÜ×*Ñ*¨1¸3Ô?Ò?Ü—-‘- °Ô4Ò4Ü×#Ñ# A q°sÔ;Ò;Ü—.‘. °Ô5Ò5Ü×5Ñ5°aÀcÔJÔJñ7Kùs   ‚A9FÁ<BFÄ BF©r¼   r+   rÏ   c                 ó®  — ddl m} t        «       D ]š  }t        j                  ||j
                  D ci c]  }|t        |«      “Œ c}«      }t        t        j                  || |¬«      «      } ||«      }	 |j
                  |j
                  k(  sJ ‚|j                  |j                  k(  sJ ‚Œœ yc c}w # t        $ r t        j                  |«       ‚ w xY w)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_textr×   N)Únetworkx.readwrite.textrÙ   rÖ   r   rK   r   Ústrrl   r   r¿   Ú	Exceptionr%   )r¼   r+   rÙ   r   rN   r9   Únews          r   Útest_network_text_round_triprÞ   ¯  sÃ   € õ  <ä%Ó'ò ˆÜ× Ñ  ¸E¿K¹KÖ(H°q¨¬C°«F©Ò(HÓIˆÜÜ×$Ñ$Ø À:ôó
ˆñ
 " %Ó(ˆð	Ø—9‘9 §¡Ò+Ð+Ð+Ø—9‘9 §¡Ò+Ð+Ñ+ñùÚ(Høô ò 	Ü×!Ñ! %Ô(Øð	ús   ²B/Á66B4Â4 C))rj   Ú	itertoolsr   Útextwrapr   ÚpytestÚnetworkxr   r   r.   r=   rI   rO   rS   rY   rc   re   rq   rz   r€   rƒ   r‡   rŠ   r   r   r“   r–   r™   rœ   r©   r²   r´   r·   rÄ   rË   rÍ   rÖ   ÚmarkÚparametrizeÚtuplerÞ   r×   s   00r   ú<module>ræ      s-  ðÛ Ý Ý ã ã ò$*òN	:òò0Vòr/òd!òH.òbPòfeòPKò\EòP!òHò6PòfIòXò&ò ò*ò,ò2;ò|CòLgòTbòJ=ò@aòH@òF@òF$KðN ‡×ÑØ%Ù	ð $*÷	
àØ$ò	
ð ð ˜jÒ)ð	
Ø)ó	
óó	ñó	ñùó	
s   ÂB2