ó
    †~iž™  ã                   óŒ  • S r SSKrSSKJr  SSKrSSKJr  / SQr\" SSS9     SS j5       r	\" SSS9     SS j5       r
    SS jr\" SSS9\R                  " SS	S9\\S
4S j5       5       r\R                  " SS	S9\\S
4S j5       r " S S5      r " S S\5      r " S S5      r " S S\5      r\
r " S S\5      rg)aH  
*******
GraphML
*******
Read and write graphs in GraphML format.

.. warning::

    This parser uses the standard xml library present in Python, which is
    insecure - see :external+python:mod:`xml` for additional information.
    Only parse GraphML files you trust.

This implementation does not support mixed graphs (directed and unidirected
edges together), hyperedges, nested graphs, or ports.

"GraphML is a comprehensive and easy-to-use file format for graphs. It
consists of a language core to describe the structural properties of a
graph and a flexible extension mechanism to add application-specific
data. Its main features include support of

    * directed, undirected, and mixed graphs,
    * hypergraphs,
    * hierarchical graphs,
    * graphical representations,
    * references to external data,
    * application-specific attribute data, and
    * light-weight parsers.

Unlike many other file formats for graphs, GraphML does not use a
custom syntax. Instead, it is based on XML and hence ideally suited as
a common denominator for all kinds of services generating, archiving,
or processing graphs."

http://graphml.graphdrawing.org/

Format
------
GraphML is an XML format.  See
http://graphml.graphdrawing.org/specification.html for the specification and
http://graphml.graphdrawing.org/primer/graphml-primer.html
for examples.
é    N)Údefaultdict)Ú	open_file)Úwrite_graphmlÚread_graphmlÚgenerate_graphmlÚwrite_graphml_xmlÚwrite_graphml_lxmlÚparse_graphmlÚGraphMLWriterÚGraphMLReaderé   Úwb)ÚmodeTFc                 ób   • [        UUUUUS9nUR                  U 5        UR                  U5        g)a™  Write G in GraphML XML format to path

Parameters
----------
G : graph
   A networkx graph
path : file or string
   File or filename to write.
   Filenames ending in .gz or .bz2 will be compressed.
encoding : string (optional)
   Encoding for text data.
prettyprint : bool (optional)
   If True use line breaks and indenting in output XML.
infer_numeric_types : boolean
   Determine if numeric types should be generalized.
   For example, if edges have both int and float 'weight' attributes,
   we infer in GraphML that both are floats.
named_key_ids : bool (optional)
   If True use attr.name as value for key elements' id attribute.
edge_id_from_attribute : dict key (optional)
    If provided, the graphml edge id is set by looking up the corresponding
    edge data attribute keyed by this parameter. If `None` or the key does not exist in edge data,
    the edge id is set by the edge key if `G` is a MultiGraph, else the edge id is left unset.

Examples
--------
>>> G = nx.path_graph(4)
>>> nx.write_graphml(G, "test.graphml")

Notes
-----
This implementation does not support mixed graphs (directed
and unidirected edges together) hyperedges, nested graphs, or ports.
)ÚencodingÚprettyprintÚinfer_numeric_typesÚnamed_key_idsÚedge_id_from_attributeN)r   Úadd_graph_elementÚdump)ÚGÚpathr   r   r   r   r   Úwriters           ÚW/home/mande/repo/quber/.venv/lib/python3.13/site-packages/networkx/readwrite/graphml.pyr   r   >   s:   € ôX ØØØ/Ø#Ø5ñ€Fð ×Ñ˜QÔØ
‡K�K�Õó    c           
      ó’   •  SSK Jn  [	        UU UUUUUS9nUR                  5         g! [         a    [        U UUUUUU5      s $ f = f)a  Write G in GraphML XML format to path

This function uses the LXML framework and should be faster than
the version using the xml library.

Parameters
----------
G : graph
   A networkx graph
path : file or string
   File or filename to write.
   Filenames ending in .gz or .bz2 will be compressed.
encoding : string (optional)
   Encoding for text data.
prettyprint : bool (optional)
   If True use line breaks and indenting in output XML.
infer_numeric_types : boolean
   Determine if numeric types should be generalized.
   For example, if edges have both int and float 'weight' attributes,
   we infer in GraphML that both are floats.
named_key_ids : bool (optional)
   If True use attr.name as value for key elements' id attribute.
edge_id_from_attribute : dict key (optional)
    If provided, the graphml edge id is set by looking up the corresponding
    edge data attribute keyed by this parameter. If `None` or the key does not exist in edge data,
    the edge id is set by the edge key if `G` is a MultiGraph, else the edge id is left unset.

Examples
--------
>>> G = nx.path_graph(4)
>>> nx.write_graphml_lxml(G, "fourpath.graphml")

Notes
-----
This implementation does not support mixed graphs (directed
and unidirected edges together) hyperedges, nested graphs, or ports.
r   N)Úgraphr   r   r   r   r   )Ú
lxml.etreeÚetreeÚImportErrorr   ÚGraphMLWriterLxmlr   )	r   r   r   r   r   r   r   Ú	lxmletreer   s	            r   r	   r	   u   sj   € ð^
Ý&ô ØØØØØ/Ø#Ø5ñ€Fð ‡K�K…Møô) ó 	
Ü ØØØØØØØ"ó
ò 	
ð	
ús   ‚( ¨AÁAc              #   óŒ   #   • [        UUUUS9nUR                  U 5        [        U5      R                  5        Sh  v•N   g N7f)aÚ  Generate GraphML lines for G

Parameters
----------
G : graph
   A networkx graph
encoding : string (optional)
   Encoding for text data.
prettyprint : bool (optional)
   If True use line breaks and indenting in output XML.
named_key_ids : bool (optional)
   If True use attr.name as value for key elements' id attribute.
edge_id_from_attribute : dict key (optional)
    If provided, the graphml edge id is set by looking up the corresponding
    edge data attribute keyed by this parameter. If `None` or the key does not exist in edge data,
    the edge id is set by the edge key if `G` is a MultiGraph, else the edge id is left unset.

Examples
--------
>>> G = nx.path_graph(4)
>>> linefeed = chr(10)  # linefeed = 

>>> s = linefeed.join(nx.generate_graphml(G))
>>> for line in nx.generate_graphml(G):  # doctest: +SKIP
...     print(line)

Notes
-----
This implementation does not support mixed graphs (directed and unidirected
edges together) hyperedges, nested graphs, or ports.
)r   r   r   r   N)r   r   ÚstrÚ
splitlines)r   r   r   r   r   r   s         r   r   r   ½   sD   é € ôJ ØØØ#Ø5ñ	€Fð ×Ñ˜QÔÜ�6‹{×%Ñ%Ó'×'Ó'ùs   ‚:A¼A½AÚrb)ÚgraphsÚreturns_graphc                 ó2  • [        XU5      n[        U" U S95      n[        U5      S:X  ai  SnU R                  S5        U R	                  5       nUR                  SU5      n[        U" US95      n[        U5      S:X  a  [        R                  " S5      eUS   $ )aý  Read graph in GraphML format from path.

Parameters
----------
path : file or string
   Filename or file handle to read.
   Filenames ending in .gz or .bz2 will be decompressed.

node_type: Python type (default: str)
   Convert node ids to this type

edge_key_type: Python type (default: int)
   Convert graphml edge ids to this type. Multigraphs use id as edge key.
   Non-multigraphs add to edge attribute dict with name "id".

force_multigraph : bool (default: False)
   If True, return a multigraph with edge keys. If False (the default)
   return a multigraph when multiedges are in the graph.

Returns
-------
graph: NetworkX graph
    If parallel edges are present or `force_multigraph=True` then
    a MultiGraph or MultiDiGraph is returned. Otherwise a Graph/DiGraph.
    The returned graph is directed if the file indicates it should be.

Notes
-----
Default node and edge attributes are not propagated to each node and edge.
They can be obtained from `G.graph` and applied to node and edge attributes
if desired using something like this:

>>> default_color = G.graph["node_default"]["color"]  # doctest: +SKIP
>>> for node, data in G.nodes(data=True):  # doctest: +SKIP
...     if "color" not in data:
...         data["color"] = default_color
>>> default_color = G.graph["edge_default"]["color"]  # doctest: +SKIP
>>> for u, v, data in G.edges(data=True):  # doctest: +SKIP
...     if "color" not in data:
...         data["color"] = default_color

This implementation does not support mixed graphs (directed and unidirected
edges together), hypergraphs, nested graphs, or ports.

For multigraphs the GraphML edge "id" will be used as the edge
key.  If not specified then they "key" attribute will be used.  If
there is no "key" attribute a default NetworkX multigraph edge key
will be provided.

Files with the yEd "yfiles" extension can be read. The type of the node's
shape is preserved in the `shape_type` node attribute.

yEd compressed files ("file.graphmlz" extension) can be read by renaming
the file to "file.graphml.gz".

)r   r   s7   <graphml xmlns="http://graphml.graphdrawing.org/xmlns">s	   <graphml>©Ústringú%file not successfully read as graphml)r   ÚlistÚlenÚseekÚreadÚreplaceÚnxÚNetworkXError)	r   Ú	node_typeÚedge_key_typeÚforce_multigraphÚreaderÚglistÚheaderÚ	old_bytesÚ	new_bytess	            r   r   r   ì   sŽ   € ôv ˜9Ð5EÓF€Fä‘˜TÑ"Ó#€EÜ
ˆ5ƒz�QƒàKˆØ�	‰	�!ŒØ—I‘I“Kˆ	Ø×%Ñ% l°FÓ;ˆ	Ü‘V 9Ñ-Ó.ˆÜˆu‹:˜‹?Ü×"Ò"Ð#JÓKÐKØ�‰8€Or   c                 óð   • [        XU5      n[        U" U S95      n[        U5      S:X  aH  SnU R                  SU5      n[        U" US95      n[        U5      S:X  a  [        R
                  " S5      eUS   $ )aP  Read graph in GraphML format from string.

Parameters
----------
graphml_string : string
   String containing graphml information
   (e.g., contents of a graphml file).

node_type: Python type (default: str)
   Convert node ids to this type

edge_key_type: Python type (default: int)
   Convert graphml edge ids to this type. Multigraphs use id as edge key.
   Non-multigraphs add to edge attribute dict with name "id".

force_multigraph : bool (default: False)
   If True, return a multigraph with edge keys. If False (the default)
   return a multigraph when multiedges are in the graph.


Returns
-------
graph: NetworkX graph
    If no parallel edges are found a Graph or DiGraph is returned.
    Otherwise a MultiGraph or MultiDiGraph is returned.

Examples
--------
>>> G = nx.path_graph(4)
>>> linefeed = chr(10)  # linefeed = 

>>> s = linefeed.join(nx.generate_graphml(G))
>>> H = nx.parse_graphml(s)

Notes
-----
Default node and edge attributes are not propagated to each node and edge.
They can be obtained from `G.graph` and applied to node and edge attributes
if desired using something like this:

>>> default_color = G.graph["node_default"]["color"]  # doctest: +SKIP
>>> for node, data in G.nodes(data=True):  # doctest: +SKIP
...     if "color" not in data:
...         data["color"] = default_color
>>> default_color = G.graph["edge_default"]["color"]  # doctest: +SKIP
>>> for u, v, data in G.edges(data=True):  # doctest: +SKIP
...     if "color" not in data:
...         data["color"] = default_color

This implementation does not support mixed graphs (directed and unidirected
edges together), hypergraphs, nested graphs, or ports.

For multigraphs the GraphML edge "id" will be used as the edge
key.  If not specified then they "key" attribute will be used.  If
there is no "key" attribute a default NetworkX multigraph edge key
will be provided.

r+   r   z7<graphml xmlns="http://graphml.graphdrawing.org/xmlns">z	<graphml>r-   )r   r.   r/   r2   r3   r4   )Úgraphml_stringr5   r6   r7   r8   r9   r:   Ú
new_strings           r   r
   r
   6  sx   € ôz ˜9Ð5EÓF€Fä‘˜~Ñ.Ó/€EÜ
ˆ5ƒz�QƒàJˆØ#×+Ñ+¨K¸Ó@ˆ
Ü‘V :Ñ.Ó/ˆÜˆu‹:˜‹?Ü×"Ò"Ð#JÓKÐKØ�‰8€Or   c                   ód   • \ rS rSrSrSrSrSR                  SS/5      rS r	SS	S	S	SSS
.r
S rSrg)ÚGraphMLi€  z%http://graphml.graphdrawing.org/xmlnsz)http://www.w3.org/2001/XMLSchema-instancez!http://www.yworks.com/xml/graphmlÚ z5http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsdc                 ón  • [         S4[        S4[        S4[         S4[         S4[        S4[        S4[        S4/n S	S KnUR
                  S4UR                  S4UR                  S4UR                  S4UR                  S4UR                  S4UR                  S4UR                  S4UR                  S4UR                  S4UR                  S4UR                   S4UR                  S4UR"                  S4UR$                  S4/U-   n['        U5      U l        ['        S
 U 5       5      U l        g !    N,= f)NÚintegerÚyfilesr,   ÚintÚlongÚfloatÚdoubleÚbooleanr   c              3   ó8   #   • U  H  n[        U5      v •  M     g 7f©N)Úreversed)Ú.0Úas     r   Ú	<genexpr>Ú*GraphML.construct_types.<locals>.<genexpr>²  s   é € Ð;²U°¤¨§ ²Uùs   ‚)rF   r%   rH   ÚboolÚnumpyÚfloat64Úfloat32Úfloat16Úint_Úint8Úint16Úint32Úint64Úuint8Úuint16Úuint32Úuint64ÚintcÚintpÚdictÚxml_typeÚpython_type)ÚselfÚtypesÚnps      r   Úconstruct_typesÚGraphML.construct_typesŒ  s>  € ä�)ÐÜ�(ˆOÜ�(ˆOÜ�%ˆLÜ�&ˆMÜ�GÐÜ�HÐÜ�9Ðð	
ˆð	Ûð —‘˜WÐ%Ø—‘˜WÐ%Ø—‘˜WÐ%Ø—‘˜%Ð Ø—‘˜%Ð Ø—‘˜5Ð!Ø—‘˜5Ð!Ø—‘˜5Ð!Ø—‘˜5Ð!Ø—‘˜EÐ"Ø—‘˜EÐ"Ø—‘˜EÐ"Ø—‘˜%Ð Ø—‘˜%Ð Ø—‘˜%Ð ðð  ñ!ˆEô$ ˜U›ˆŒÜÑ;±UÓ;Ó;ˆÕøð/	Ùús   ¼D0 Ä0D4TF)ÚtrueÚfalseÚ0r   Ú1r   c                 óf   •  U R                   U   $ ! [         a  n[        SU S35      UeSnAff = f)z–Wrapper around the xml_type dict that raises a more informative
exception message when a user attempts to use data of a type not
supported by GraphML.zGraphML does not support type ú as data values.N)rc   ÚKeyErrorÚ	TypeError)re   ÚkeyÚerrs      r   Úget_xml_typeÚGraphML.get_xml_typeÃ  sC   € ð	Ø—=‘= Ñ%Ð%øÜó 	ÜØ0°°Ð5EÐFóàðûð	ús   ‚ ‘
0›+«0)rd   rc   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú
NS_GRAPHMLÚNS_XSIÚNS_YÚjoinÚSCHEMALOCATIONrh   Úconvert_boolrt   Ú__static_attributes__© r   r   rA   rA   €  sP   † Ø8€JØ8€Fà.€DØ—X‘Xà3ØCð	
ó€Nò&<ð\ ØàØØØñ	€Lõ	r   rA   c                   ót   • \ rS rSr      SS jrS rS rS rSS jrS r	S	 r
S
 rS rS rS rSS jrSrg)r   iÏ  Nc                 ór  • U R                  5         SSKJn  Xpl        X@l        X0l        XPl        X`l        X l        U R                  SU R                  U R                  U R                  S.5      U l        0 U l        [        [        5      U l        [        ["        5      U l        Ub  U R'                  U5        g g )Nr   )ÚElementÚgraphml©Úxmlnsz	xmlns:xsizxsi:schemaLocation)rh   Úxml.etree.ElementTreer„   Ú	myElementr   r   r   r   r   rz   r{   r~   ÚxmlÚkeysr   r.   Ú
attributesÚsetÚattribute_typesr   )re   r   r   r   r   r   r   r„   s           r   Ú__init__ÚGraphMLWriter.__init__Ð  sŸ   € ð 	×ÑÔÝ1à Œà#6Ô Ø&ÔØ*ÔØ&<Ô#Ø ŒØ—>‘>ØàŸ™Ø!Ÿ[™[Ø&*×&9Ñ&9ñó
ˆŒð ˆŒ	Ü%¤dÓ+ˆŒÜ*¬3Ó/ˆÔàÑØ×"Ñ" 5Õ)ð r   c                 óÀ   • SSK Jn  U R                  (       a  U R                  U R                  5        U" U R                  5      R                  U R                  5      nU$ )Nr   )Útostring)rˆ   r’   r   ÚindentrŠ   Údecoder   )re   r’   Úss      r   Ú__str__ÚGraphMLWriter.__str__ò  s@   € Ý2à××Ø�K‰K˜Ÿ™Ô!Ù�T—X‘XÓ×%Ñ% d§m¡mÓ4ˆØˆr   c                 ó&  • U R                   (       aq  U R                  X4   n[        U5      S:”  aD  U Vs1 s H  oPR                  U5      iM     nnSU;   a  [        $ SU;   d  SU;   a  [
        $ [        $ [        U5      S   $ [        U5      $ s  snf )aX  Infer the attribute type of data named name. Currently this only
supports inference of numeric types.

If self.infer_numeric_types is false, type is used. Otherwise, pick the
most general of types found across all values with name and scope. This
means edges with data named 'weight' are treated separately from nodes
with data named 'weight'.
r   r,   rH   rI   r   )	r   rŽ   r/   rt   r%   rH   rF   r.   Útype)re   ÚnameÚscopeÚvaluerf   Úts         r   Ú	attr_typeÚGraphMLWriter.attr_typeú  sŠ   € ð ×#×#Ø×(Ñ(¨$¨Ñ7ˆEä�5‹z˜A‹~Ù7<Ó=²u°!×*Ñ*¨1Ö-±u�Ð=Ø˜uÓ$Ü�JØ Ó%¨°UÓ):Ü �Lä�Jä˜E“{ 1‘~Ð%ä˜“;Ðùò >s   µBc                 ó¦  • XU4n U R                   U   $ ! [         a±    U R                  (       a  UnO!S[        [	        U R                   5      5       3nX`R                   U'   UUUUS.nU R
                  " S0 UD6nUb2  U R                  S5      n	[        U5      U	l        UR                  U	5        U R                  R                  SU5         U$ f = f)NÚd)ÚidÚforú	attr.nameú	attr.typeÚdefaultr   ©rr   )r‹   rp   r   r/   r.   r‰   r%   ÚtextÚappendrŠ   Úinsert)
re   rš   rž   r›   r¦   Úkeys_keyÚnew_idÚ
key_kwargsÚkey_elementÚdefault_elements
             r   Úget_keyÚGraphMLWriter.get_key  sÎ   € Ø UÐ+ˆð	,Ø—9‘9˜XÑ&Ð&øÜó 	,Ø×!×!Ø‘àœS¤ d§i¡i£Ó1Ð2Ð3�à"(�I‰I�hÑàØØ!Ø&ñ	ˆJð Ÿ.š.Ñ=°*Ñ=ˆKàÑ"Ø"&§.¡.°Ó";�Ü'*¨7£|�Ô$Ø×"Ñ" ?Ô3Ø�H‰H�O‰O˜A˜{Õ+Øˆð)	,ús   † •B7CÃCc                 óÚ   • X R                   ;  a  [        R                  " SU S35      eU R                  XR	                  U5      XE5      nU R                  SUS9n[        U5      Ul        U$ )zV
Make a data element for an edge or a node. Keep a log of the
type in the keys table.
z GraphML writer does not support ro   Údatar§   )rc   r3   r4   r°   rt   r‰   r%   r¨   )re   rš   Úelement_typerœ   r›   r¦   ÚkeyidÚdata_elements           r   Úadd_dataÚGraphMLWriter.add_data-  so   € ð
 Ÿ}™}Ó,Ü×"Ò"Ø2°<°.Ð@PÐQóð ð —‘˜T×#4Ñ#4°\Ó#BÀEÓSˆØ—~‘~ f°%�~Ð8ˆÜ ›JˆÔØÐr   c           	      óø   • UR                  5        Hf  u  pVU R                  [        U5      U4   R                  [	        U5      5        U R
                  U   R                  XVXR                  U5      /5        Mh     g)zpAppends attribute data to edges or nodes, and stores type information
to be added later. See add_graph_element.
N)ÚitemsrŽ   r%   Úaddr™   rŒ   r©   Úget)re   r›   Úxml_objr³   r¦   ÚkÚvs          r   Úadd_attributesÚGraphMLWriter.add_attributes;  s_   € ð —J‘J–L‰DˆAØ× Ñ ¤# a£&¨% Ñ1×5Ñ5´d¸1³gÔ>Ø�O‰O˜GÑ$×+Ñ+¨Q°5¿+¹+Àa».Ð,IÖJò !r   c                 óæ   • UR                   R                  S0 5      nUR                  SS9 HB  u  pEU R                  S[	        U5      S9nU R                  SXeU5        UR                  U5        MD     g )NÚnode_defaultT©r³   Únode)r¢   )r   r¼   Únodesr‰   r%   rÀ   r©   )re   r   Úgraph_elementr¦   rÅ   r³   Únode_elements          r   Ú	add_nodesÚGraphMLWriter.add_nodesC  sc   € Ø—'‘'—+‘+˜n¨bÓ1ˆØŸ'™' t˜'Ó,‰JˆDØŸ>™>¨&´S¸³Y˜>Ð?ˆLØ×Ñ ¨¸GÔDØ× Ñ  Ö.ò -r   c                 ó�  • UR                  5       (       aÍ  UR                  SSS9 H¸  u  p4pVU R                  S[        U5      [        U5      U R                  (       a4  U R                  U;   a$  [        UR                  U R                  5      5      O
[        U5      S9nUR                  R                  S0 5      nU R                  SXvU5        UR                  U5        Mº     g UR                  SS9 HÑ  u  p4nU R                  (       aW  U R                  U;   aG  U R                  S[        U5      [        U5      [        UR                  U R                  5      5      S9nO#U R                  S[        U5      [        U5      S9nUR                  R                  S0 5      nU R                  SXvU5        UR                  U5        MÓ     g )NT)r³   r‹   Úedge)ÚsourceÚtargetr¢   Úedge_defaultrÄ   )rÍ   rÎ   )	Úis_multigraphÚedgesr‰   r%   r   r¼   r   rÀ   r©   )	re   r   rÇ   Úur¿   rr   r³   Úedge_elementr¦   s	            r   Ú	add_edgesÚGraphMLWriter.add_edgesJ  s€  € Ø�?‰?×ÑØ#$§7¡7°¸4 7Ó#@‘��cØ#Ÿ~™~ØÜ˜q›6Ü˜q›6à×2×2Ø×3Ñ3°tÓ;ô ˜4Ÿ8™8 D×$?Ñ$?Ó@ÔAô ˜S›ð  .ð  �ð Ÿ'™'Ÿ+™+ n°bÓ9�Ø×#Ñ# F¨LÀÔHØ×$Ñ$ \Ö2ò $Að  Ÿg™g¨4˜gÓ0‘
��dØ×.×.°4×3NÑ3NÐRVÓ3Và#'§>¡>ØÜ" 1›vÜ" 1›vÜ˜tŸx™x¨×(CÑ(CÓDÓEð	 $2ð $‘Lð $(§>¡>°&ÄÀQÃÔPSÐTUÓPV >Ð#W�LØŸ'™'Ÿ+™+ n°bÓ9�Ø×#Ñ# F¨LÀÔHØ×$Ñ$ \Ö2ò 1r   c                 ó¼  • UR                  5       (       a  SnOSnUR                  R                  SS5      nUc  U R                  SUS9nOU R                  SX#S9n0 nUR                  R	                  5        VVs0 s H  u  pgUS;  d  M  Xg_M     nnnU R                  SXHU5        U R                  X5        U R                  X5        U R                  R	                  5        HV  u  p˜U HK  u  pgp¥U	R                  U R                  [        U5      U R                  XjU5      [        U5      X¥5      5        MM     MX     U R                  R                  U5        gs  snnf )	ú-
Serialize graph G in GraphML to the stream.
ÚdirectedÚ
undirectedr¢   Nr   ©Úedgedefault©rÛ   r¢   ©rÃ   rÏ   )Úis_directedr   Úpopr‰   rº   rÀ   rÉ   rÔ   rŒ   r©   r·   r%   rž   rŠ   )re   r   Údefault_edge_typeÚgraphidrÇ   r¦   r¾   r¿   r³   r½   r›   s              r   r   ÚGraphMLWriter.add_graph_elementj  sC  € ð �=‰=�?‰?Ø *Ñà ,Ðà—'‘'—+‘+˜d DÓ)ˆØ‰?Ø ŸN™N¨7Ð@Q˜NÐR‰Mà ŸN™NØÐ%6ð +ð ˆMð ˆð Ÿ'™'Ÿ-™-œ/ô
â)‘�ØÐ8Ñ8ó ˆAŠDÙ)ð 	ñ 
ð
 	×Ñ˜G ]¸'ÔBØ�‰�qÔ(Ø�‰�qÔ(ð "Ÿ_™_×2Ñ2Ö4‰MˆGÛ(,Ñ$��eØ—‘Ø—M‘MÜ˜A› §¡¨q¸Ó ;¼SÀ»VÀUóöó )-ñ 5ð 	�‰�‰˜Õ&ùó)
s   Á:EÂ
Ec                 ó8   • U H  nU R                  U5        M     g)z)Add many graphs to this GraphML document.N)r   )re   Ú
graph_listr   s      r   Ú
add_graphsÚGraphMLWriter.add_graphs‘  s   € ãˆAØ×"Ñ" 1Ö%ò r   c                 óÀ   • SSK Jn  U R                  (       a  U R                  U R                  5        U" U R                  5      nUR                  XR                  SS9  g )Nr   )ÚElementTreeT)r   Úxml_declaration)rˆ   rè   r   r“   rŠ   Úwriter   )re   Ústreamrè   Údocuments       r   r   ÚGraphMLWriter.dump–  s@   € Ý5à××Ø�K‰K˜Ÿ™Ô!Ù˜tŸx™xÓ(ˆØ�‰�v¯©ÀtˆÒLr   c                 ó<  • SUS-  -   n[        U5      (       aÅ  UR                  (       a  UR                  R                  5       (       d
  US-   Ul        UR                  (       a  UR                  R                  5       (       d  X1l        U H  nU R	                  XS-   5        M     UR                  (       a  UR                  R                  5       (       d  X1l        g g U(       a8  UR                  (       a  UR                  R                  5       (       d  X1l        g g g )NÚ
z  r   )r/   r¨   ÚstripÚtailr“   )re   ÚelemÚlevelÚis       r   r“   ÚGraphMLWriter.indentž  sº   € à�5˜4‘<ÑˆÜˆt�9‰9Ø—9—9 D§I¡I§O¡O×$5Ñ$5Ø ™H�”	Ø—9—9 D§I¡I§O¡O×$5Ñ$5Ø”	Û�Ø—‘˜D¨!¡)Ö,ñ à—9—9 D§I¡I§O¡O×$5Ñ$5Ø•	ð %6ö ˜dŸiŸi¨t¯y©y¯©×/@Ñ/@Ø•	ð 0Aˆur   )
rŽ   rŒ   r   r   r   r‹   r‰   r   r   rŠ   ©Núutf-8TFFN)ÚallN)r   )rv   rw   rx   ry   r�   r–   rž   r°   r·   rÀ   rÉ   rÔ   r   rå   r   r“   r€   r�   r   r   r   r   Ï  sW   † ð ØØØ!ØØ#ô *òDòò2ô4òKò/ò3ò@%'òN&ò
M÷r   r   c                   ó$   • \ rS rSrSrS rS rSrg)ÚIncrementalElementi¯  z½Wrapper for _IncrementalWriter providing an Element like interface.

This wrapper does not intend to be a complete implementation but rather to
deal with those calls used in GraphMLWriter.
c                 ó   • Xl         X l        g rL   )rŠ   r   )re   rŠ   r   s      r   r�   ÚIncrementalElement.__init__¶  s   € ØŒØ&Õr   c                 óJ   • U R                   R                  XR                  S9  g )N©Úpretty_print)rŠ   rê   r   )re   Úelements     r   r©   ÚIncrementalElement.appendº  s   € Ø�‰�‰�w×-=Ñ-=ˆÒ>r   )r   rŠ   N)rv   rw   rx   ry   Ú__doc__r�   r©   r€   r�   r   r   rú   rú   ¯  s   † ñò'õ?r   rú   c                   óF   • \ rS rSr      S	S jrS rS rS rS
S jrSr	g)r"   i¾  Nc                 ór  • U R                  5         SS KJn  UR                  U l        X0l        X@l        X`l        Xpl        XPl	        UR                  XS9U l        U R                  R                  5       U l        U R                  R                  5         / U l        U R                  U l        U R                  R#                  SU R$                  U R&                  U R(                  S.5      U l        U R*                  R                  5         0 U l        [/        [0        5      U l        Ub  U R5                  U5        g g )Nr   )r   r…   r†   )rh   r   r    r„   r‰   Ú	_encodingÚ_prettyprintr   r   r   ÚxmlfileÚ	_xml_baseÚ	__enter__Ú_xmlÚwrite_declarationrŠ   Ú_keysr   rz   r{   r~   Ú_graphmlr‹   r   r�   rŽ   r   )	re   r   r   r   r   r   r   r   r#   s	            r   r�   ÚGraphMLWriterLxml.__init__¿  sþ   € ð 	×ÑÔÝ&à"×*Ñ*ˆŒà!ŒØ'ÔØ*ÔØ&<Ô#Ø#6Ô à"×*Ñ*¨4Ð*ÐCˆŒØ—N‘N×,Ñ,Ó.ˆŒ	Ø�	‰	×#Ñ#Ô%ð ˆŒØ—X‘XˆŒ
ØŸ	™	×)Ñ)ØàŸ™Ø!Ÿ[™[Ø&*×&9Ñ&9ñó
ˆŒð 	�‰×ÑÔ!ØˆŒ	Ü*¬3Ó/ˆÔàÑØ×"Ñ" 5Õ)ð r   c           
      óè	  • UR                  5       (       a  SnOSnUR                  R                  SS5      nUc  U R                  R	                  SUS9nOU R                  R	                  SX#S9nUR                  R                  5        VVs0 s H  u  pVUS;  d  M  XV_M     nnnUR                  R                  S	0 5      nUR                  R                  S
0 5      n	UR                  5        H7  u  pVU R                  [        U5      S4   R                  [        U5      5        M9     UR                  5        HD  u  pVU R                  U R                  USU5      5      n
U R                  [        U5      U
SS5        MF     UR                  SS9 HP  u  p¼UR                  5        H7  u  pVU R                  [        U5      S4   R                  [        U5      5        M9     MR     UR                  SS9 Hl  u  p¼UR                  5        HS  u  pVU R                  U R                  USU5      5      nU R                  [        U5      USUR                  U5      5        MU     Mn     UR                  5       (       aç  UR!                  SSS9 HQ  u  pæpüUR                  5        H7  u  pVU R                  [        U5      S4   R                  [        U5      5        M9     MS     UR!                  SSS9 Hm  u  pæpüUR                  5        HS  u  pVU R                  U R                  USU5      5      nU R                  [        U5      USU	R                  U5      5        MU     Mo     OäUR!                  SS9 HQ  u  pænUR                  5        H7  u  pVU R                  [        U5      S4   R                  [        U5      5        M9     MS     UR!                  SS9 Hm  u  pænUR                  5        HS  u  pVU R                  U R                  USU5      5      nU R                  [        U5      USU	R                  U5      5        MU     Mo     U R"                   H'  nU R                  R%                  UU R&                  S9  M)     [)        U R                  U R&                  5      nU   U R+                  SUU0 5        U R-                  UU5        U R/                  UU5        SSS5        gs  snnf ! , (       d  f       g= f)r×   rØ   rÙ   r¢   Nr   rÚ   rÜ   rÝ   rÃ   rÏ   TrÄ   rÅ   )r‹   r³   rÌ   rþ   )rÞ   r   rß   r
  r   rº   r¼   rŽ   r%   r»   r™   rt   rž   r°   rÆ   rÐ   rÑ   rŠ   rê   r  rú   rÀ   rÉ   rÔ   )re   r   rà   rá   rÇ   r¾   r¿   Ú	graphdatarÃ   rÏ   r´   rÅ   r¡   ÚTrÒ   Úekeyrr   Úincremental_writers                     r   r   Ú#GraphMLWriterLxml.add_graph_elementí  s'  € ð �=‰=�?‰?Ø *Ñà ,Ðà—'‘'—+‘+˜d DÓ)ˆØ‰?Ø ŸI™I×-Ñ-¨gÐCTÐ-ÐU‰Mà ŸI™I×-Ñ-ØÐ%6ð .ð ˆMð Ÿ™Ÿ™œô
â'‘�ØÐ8Ñ8ó ˆAŠDÙ'ð 	ñ 
ð
 —w‘w—{‘{ >°2Ó6ˆØ—w‘w—{‘{ >°2Ó6ˆà—O‘OÖ%‰DˆAØ× Ñ ¤# a£&¨'Ð!2Ñ3×7Ñ7¼¸Q»Ö@ñ &à—O‘OÖ%‰DˆAØ×,Ñ,¨T¯^©^¸A¸wÈÓ-JÓKˆLØ�L‰Lœ˜Q› ¨w¸Ö=ñ &ð —w‘w D�wÓ)‰GˆDØŸ™ž	‘�Ø×$Ñ$¤c¨!£f¨fÐ%5Ñ6×:Ñ:¼4À»7ÖCó "ñ *ð —w‘w D�wÓ)‰GˆDØŸ™ž	‘�Ø×%Ñ% d§n¡n°Q¸ÀÓ&BÓC�Ø—‘œS ›V Q¨°×0@Ñ0@ÀÓ0CÖDó "ñ *ð
 �?‰?×ÑØ!"§¡¨d¸ Ó!>‘��dØŸG™GžI‘D�AØ×(Ñ(¬#¨a«&°&Ð)9Ñ:×>Ñ>¼tÀA»wÖGó &ñ "?ð "#§¡¨d¸ Ó!>‘��dØŸG™GžI‘D�AØ×)Ñ)¨$¯.©.¸¸FÀAÓ*FÓG�AØ—L‘L¤ Q£¨¨F°L×4DÑ4DÀQÓ4GÖHó &ò "?ð
 Ÿ7™7¨˜7Ó-‘��aØŸG™GžI‘D�AØ×(Ñ(¬#¨a«&°&Ð)9Ñ:×>Ñ>¼tÀA»wÖGó &ñ .ð Ÿ7™7¨˜7Ó-‘��aØŸG™GžI‘D�AØ×)Ñ)¨$¯.©.¸¸FÀAÓ*FÓG�AØ—L‘L¤ Q£¨¨F°L×4DÑ4DÀQÓ4GÖHó &ñ .ð —8”8ˆCØ�I‰I�O‰O˜C¨d×.?Ñ.?ˆOÓ@ñ ô 0°·	±	¸4×;LÑ;LÓMÐÚØ×Ñ Ð);¸YÈÔKØ�N‰N˜1Ð0Ô1Ø�N‰N˜1Ð0Ô1÷ ˆ]ùó[
÷Z �]ús   ÂSÂSÒ9S#Ó#
S1c           
      óô   • UR                  5        Hd  u  pVU R                  [        U5      U R                  [        U5      X5      [        U5      XR	                  U5      5      nUR                  U5        Mf     g)zAppends attribute data.N)rº   r·   r%   rž   r¼   r©   )re   r›   r½   r³   r¦   r¾   r¿   r¶   s           r   rÀ   Ú GraphMLWriterLxml.add_attributes3  sY   € à—J‘J–L‰DˆAØŸ=™=Ü�A“˜Ÿ™¤s¨1£v¨uÓ8¼#¸a»&À%ÏÉÐUVËóˆLð �N‰N˜<Ö(ò	 !r   c                 ó,   • [         R                  U 5      $ rL   )Úobjectr–   )re   s    r   r–   ÚGraphMLWriterLxml.__str__;  s   € Ü�~‰~˜dÓ#Ð#r   c                 óx   • U R                   R                  S S S 5        U R                  R                  S S S 5        g rL   )r  Ú__exit__r  )re   rë   s     r   r   ÚGraphMLWriterLxml.dump>  s.   € Ø�‰×Ñ˜t T¨4Ô0Ø�‰×Ñ  d¨DÕ1r   )r  r  r  r  r
  r  rŽ   r   r   r‹   r‰   r   rŠ   rö   rL   )
rv   rw   rx   ry   r�   r   rÀ   r–   r   r€   r�   r   r   r"   r"   ¾  s2   † ð ØØØ!ØØ#ô,*ò\D2òL)ò$÷2r   r"   c                   óT   • \ rS rSrSr\\S4S jrSS jrSS jr	S r
S	 rS
 rS rSrg)r   iG  z:Read a GraphML document.  Produces NetworkX graph objects.Fc                 óV   • U R                  5         Xl        X l        X0l        0 U l        g rL   )rh   r5   r6   Ú
multigraphÚedge_ids)re   r5   r6   r7   s       r   r�   ÚGraphMLReader.__init__J  s%   € Ø×ÑÔØ"ŒØ*ÔØ*ŒØˆ�r   Nc              #   ó4  #   • SSK JnJn  Ub  U" US9U l        OUb  U" U5      U l        O[	        S5      eU R                  U R                  5      u  pVU R                  R                  SU R                   S35       H  nU R                  XuU5      v •  M     g 7f)Nr   )rè   Ú
fromstring)Úfilez/Must specify either 'path' or 'string' as kwargÚ{ú}graph)	rˆ   rè   r#  rŠ   Ú
ValueErrorÚfind_graphml_keysÚfindallrz   Ú
make_graph)re   r   r,   rè   r#  r‹   ÚdefaultsÚgs           r   Ú__call__ÚGraphMLReader.__call__Q  sˆ   é € ßAàÑÙ"¨Ñ-ˆD�HØÑÙ! &Ó)ˆD�HäÐNÓOÐOØ×1Ñ1°$·(±(Ó;ÑˆØ—‘×!Ñ! B t§¡Ð&7°wÐ"?Ö@ˆAØ—/‘/ !¨8Ó4Ô4ò Aùs   ‚BBc                 óh  • UR                  SS 5      nUc1  US:X  a  [        R                  " 5       nO[        R                  " 5       n0 UR                  S'   0 UR                  S'   UR                  5        Hr  u  pgX&   S   nX&   S   n	X&   S   n
US:X  a%  UR                  S   R                  Xš" U5      05        US	:X  d  MM  UR                  S   R                  Xš" U5      05        Mt     UR                  S
U R                   S35      nUb  [        R                  " S5      eUR                  S
U R                   S35       H  nU R                  XLX#5        M     UR                  S
U R                   S35       H  nU R                  XMU5        M     U R                  X!5      nUR                  R                  U5        U R                  (       a  U$ UR                  5       (       a  [        R                   " U5      O[        R"                  " U5      n[        R$                  " X@R&                  SS9  U$ )NrÛ   rØ   rÃ   rÏ   r£   rš   r™   rÅ   rÌ   r%  z
}hyperedgez)GraphML reader doesn't support hyperedgesz}nodez}edger¢   )Úvaluesrš   )r¼   r3   ÚMultiDiGraphÚ
MultiGraphr   rº   ÚupdateÚfindrz   r4   r)  Úadd_nodeÚadd_edgeÚdecode_data_elementsr  rÞ   ÚDiGraphÚGraphÚset_edge_attributesr   )re   Ú	graph_xmlÚgraphml_keysr+  r   rÛ   Úkey_idrœ   Úkey_forrš   rd   Ú	hyperedgeÚnode_xmlÚedge_xmlr³   s                  r   r*  ÚGraphMLReader.make_graph^  sä  € à—m‘m M°4Ó8ˆØ‰9Ø˜jÓ(Ü—O’OÓ%‘ä—M’M“O�à"$ˆ�‰�ÑØ"$ˆ�‰�ÑØ%Ÿ^™^Ö-‰MˆFØ"Ñ*¨5Ñ1ˆGØÑ'¨Ñ/ˆDØ&Ñ.¨vÑ6ˆKØ˜&Ó Ø—‘˜Ñ'×.Ñ.°°kÀ%Ó6HÐ/IÔJØ˜&Õ Ø—‘˜Ñ'×.Ñ.°°kÀ%Ó6HÐ/IÖJñ .ð —N‘N R¨¯©Ð'8¸Ð#DÓEˆ	ØÑ Ü×"Ò"Ð#NÓOÐOà!×)Ñ)¨B¨t¯©Ð.?¸vÐ*FÖGˆHØ�M‰M˜! |Ö>ñ Hð "×)Ñ)¨B¨t¯©Ð.?¸vÐ*FÖGˆHØ�M‰M˜! |Ö4ñ Hð ×(Ñ(¨ÓAˆØ	�‰�‰�tÔð �?�?ØˆHàŸ]™]Ÿ_™_ŒB�JŠJ�qŒM´"·(²(¸1³+ˆä
×Ò˜q¯©¸TÒBØˆr   c                 óž  • UR                  SU R                   S35      nUb  [        R                  " S5        U R	                  UR                  S5      5      nU R                  X25      nUR                  " U40 UD6  UR                  R                  S5      S:X  a2  UR                  SU R                   S35      nU R                  XƒXA5        gg)	zAdd a node to the graph.r%  ú}portNúGraphML port tag not supported.r¢   zyfiles.foldertypeÚgroupr&  )
r4  rz   ÚwarningsÚwarnr5   r¼   r7  r5  Úattribr*  )	re   r   r@  r<  r+  ÚportsÚnode_idr³   r;  s	            r   r5  ÚGraphMLReader.add_nodeˆ  s²   € ð —‘  4§?¡?Ð"3°6Ð:Ó;ˆØÑÜ�MŠMÐ;Ô<à—.‘. §¡¨dÓ!3Ó4ˆà×(Ñ(¨Ó@ˆØ	�
Š
�7Ñ#˜dÒ#à�?‰?×ÑÐ2Ó3°wÓ>Ø Ÿ™¨¨4¯?©?Ð*;¸7Ð&CÓDˆIØ�O‰O˜I°XÕAð ?r   c                 ó  • UR                  SU R                   S35      nUb  [        R                  " S5        UR	                  S5      nUR                  5       (       a  US:X  a  Sn[        R                  " U5      eUR                  5       (       d  US:X  a  S	n[        R                  " U5      eU R                  UR	                  S
5      5      nU R                  UR	                  S5      5      nU R                  X25      n	UR	                  S5      n
U
(       a"  X R                  Xx4'    U R                  U
5      n
OU	R	                  S5      n
UR                  Xx5      (       a  SU l        UR                  XxX©4/5        g! [         a     N>f = f)zAdd an edge to the graph.r%  rD  NrE  rØ   rk   z,directed=false edge found in directed graph.rj   z-directed=true edge found in undirected graph.rÍ   rÎ   r¢   rr   T)r4  rz   rG  rH  r¼   rÞ   r3   r4   r5   r7  r   r6   r'  Úhas_edger  Úadd_edges_from)re   r   rÓ   r<  rJ  rØ   ÚmsgrÍ   rÎ   r³   Úedge_ids              r   r6  ÚGraphMLReader.add_edge˜  sb  € ð ×!Ñ! B t§¡Ð&7°vÐ">Ó?ˆØÑÜ�MŠMÐ;Ô<ð  ×#Ñ# JÓ/ˆØ�=‰=�?‰?˜x¨7Ó2Ø@ˆCÜ×"Ò" 3Ó'Ð'Ø—‘—‘ X°Ó%7ØAˆCÜ×"Ò" 3Ó'Ð'à—‘ × 0Ñ 0°Ó :Ó;ˆØ—‘ × 0Ñ 0°Ó :Ó;ˆØ×(Ñ(¨ÓDˆð ×"Ñ" 4Ó(ˆÞà,3�M‰M˜&˜.Ñ)ðØ×,Ñ,¨WÓ5‘ð —h‘h˜u“oˆGà�:‰:�f×%Ñ%à"ˆDŒOð 	
×Ñ˜6¨7Ð9Ð:Õ;øô ó Ùðús   Ä)E> Å>
FÆ
Fc           	      ó’  • 0 nUR                  SU R                   S35       GHô  nUR                  S5      n X   S   nX   S   nUR                  n	U	bN  [        [        U5      5      S:X  a6  U[        L a!  U R                  U	R                  5          X6'   Mu  U" U	5      X6'   M�  [        [        U5      5      S:”  GaP  Sn
UR                  SU R                   S	35      nUb  UR                  S
5      US'   S H¦  nSU R                   SU SU R                   S3nUR                  U S35      nUb(  UR                  S5      US'   UR                  S5      US'   U
c  UR                  U S35      n
UR                  U S35      nUc  M’  UR                  S5      US'   M¨     U
b  U
R                  US'   S H<  nSU R                   SU SU R                   S3nUR                  U S35      nUc  M<    O   Wb  UR                  US'   GMç  GMê  U	b  GMð  SX6'   GM÷     U$ ! [         a  n[        R
                  " SU 35      UeSnAff = f)z:Use the key information to decode the data XML if present.r%  z}datarr   rš   r™   zBad GraphML data: no key Nr   z}GenericNodeÚconfigurationÚ
shape_type)ÚGenericNodeÚ	ShapeNodeÚSVGNodeÚ	ImageNodeÚ}z/{ÚGeometryÚxÚyÚ	NodeLabelÚShapeÚlabel)ÚPolyLineEdgeÚ
SplineEdgeÚQuadCurveEdgeÚ
BezierEdgeÚArcEdgeÚ	EdgeLabelÚ )r)  rz   r¼   rp   r3   r4   r¨   r/   r.   rR   r   Úlowerr4  r|   )re   r<  Úobj_xmlr³   r¶   rr   Ú	data_nameÚ	data_typers   r¨   Ú
node_labelÚgnr5   ÚprefÚgeometryÚshapeÚ	edge_typeÚ
edge_labels                     r   r7  Ú"GraphMLReader.decode_data_elementsÁ  st  € àˆØ#ŸO™O¨b°·±Ð0AÀÐ,H×IˆLØ×"Ñ" 5Ó)ˆCðSØ(Ñ-¨fÑ5�	Ø(Ñ-¨fÑ5�	ð  ×$Ñ$ˆDàÑ¤C¬¨\Ó(:Ó$;¸qÓ$@Ø¤Ò$ð '+×&7Ñ&7¸¿
¹
»Ñ&E�D“Oá&/°£o�D“OÜ”T˜,Ó'Ó(¨1Ô,à!�
à!×&Ñ&¨¨D¯I©I¨;°mÐ'DÓE�Ø‘>Ø)+¯©°Ó)@�D˜Ñ&Û!U�IØ §	¡	˜{¨"¨Y¨K°s¸4¿9¹9¸+ÀRÐH�DØ+×0Ñ0°D°6¸Ð1BÓC�HØÑ+Ø$,§L¡L°Ó$5˜˜S™	Ø$,§L¡L°Ó$5˜˜S™	Ø!Ñ)Ø%1×%6Ñ%6¸$¸¸yÐ7IÓ%J˜
Ø(×-Ñ-°°°e¨nÓ=�EØÓ(Ø-2¯Y©Y°vÓ->˜˜\Ó*ñ "Vð Ñ)Ø$.§O¡O�D˜‘Mó"�Ið   §	¡	˜{¨"¨Y¨K°s¸4¿9¹9¸+ÀRÐH�DØ!-×!2Ñ!2°d°V¸9Ð3EÓ!F�JØ!Ó-Ùñ"ð Ñ)Ø$.§O¡O�D˜”Mò *à”Ø"$�”ñk Jðl ˆøôc ó SÜ×&Ò&Ð)BÀ3À%Ð'HÓIÈsÐRûðSús   ¸HÈ
IÈ'IÉIc                 óž  • 0 n0 nUR                  SU R                   S35       GH#  nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUb  UnSnUc  Sn[        R                  " S	U S
35        Uc  [
        R                  " SU S35      eUU R                  U   UR                  S5      S.X%'   UR                  SU R                   S35      n	U	c  MÓ  X%   S   n
U
[        L a,  U R                  U	R                  R                  5          X5'   GM  U
" U	R                  5      X5'   GM&     X#4$ )z4Extracts all the keys and key defaults from the xml.r%  z}keyr¢   r¥   r¤   zyfiles.typerE   r,   zNo key type for id z. Using stringzUnknown key for id Ú.r£   )rš   r™   r£   z}defaultr™   )r)  rz   r¼   rG  rH  r3   r4   rd   r4  rR   r   r¨   rh  )re   rÇ   r<  Úgraphml_key_defaultsr¾   Úattr_idrž   Ú	attr_nameÚyfiles_typer¦   rd   s              r   r(  ÚGraphMLReader.find_graphml_keysü  s]  € àˆØ!ÐØ×&Ñ&¨¨D¯O©OÐ+<¸EÐ'B×CˆAØ—e‘e˜D“kˆGØŸ™˜kÓ*ˆIØŸ™˜kÓ*ˆIØŸ%™% Ó.ˆKØÑ&Ø'�	Ø$�	ØÑ Ø$�	Ü—’Ð 3°G°9¸NÐKÔLØÑ Ü×&Ò&Ð)<¸W¸IÀQÐ'GÓHÐHà!Ø×(Ñ(¨Ñ3Ø—u‘u˜U“|ñ%ˆLÑ!ð —f‘f˜r $§/¡/Ð!2°)Ð<Ó=ˆGØÓ"à*Ñ3°FÑ;�Ø¤$Ò&Ø48×4EÑ4EØŸ™×*Ñ*Ó,ñ5Ð(Ô1ñ 5@ÀÇÁÓ4MÐ(Ô1ñ9 Dð: Ð1Ð1r   )r   r6   r  r5   rŠ   )NNrL   )rv   rw   rx   ry   r  r%   rF   r�   r-  r*  r5  r6  r7  r(  r€   r�   r   r   r   r   G  s3   † ÙDà!$°CÈ%ô ô5ô(òTBò '<òR9õv!2r   r   )r÷   TFFN)r÷   TFN)r  rG  Úcollectionsr   Únetworkxr3   Únetworkx.utilsr   Ú__all__r   r	   r   Ú_dispatchabler%   rF   r   r
   rA   r   rú   r"   r   r   r�   r   r   Ú<module>r€     s?  ðñ)óV Ý #ã Ý $ò	€ñ ˆ1�4Ñð ØØØØó3ó ð3ñl ˆ1�4Ñð ØØØØóDó ðDðR ØØØô,(ñ^ ˆ1�4ÑØ×Ò˜¨TÑ2Ø!$°CÈ%ó Eó 3ó ðEðP ×Ò˜¨TÑ2à!°ÀuóFó 3ðF÷RLñ Lô^]�Gô ]÷@?ñ ?ôB2˜ô B2ðL #€ôV2�Gõ V2r   