§
    bŠtj„D  ã                   ó.  — d Z ddlmZ ddlmZ ddlmZ ddlZddl	m
Z
 ddlmZ dd	gZ ej        d
¬¦  «        dd„¦   «         Zdd„Zdd„Z ed¦  «         ed¦  «         ej        d
¬¦  «        d„ ¦   «         ¦   «         ¦   «         Zd„ Zd„ Zd„ Zdd„ZdS )z%Functions for generating line graphs.é    )Údefaultdict)Úpartial)ÚcombinationsN)Úarbitrary_element)Únot_implemented_forÚ
line_graphÚinverse_line_graphT)Úreturns_graphc                 óv   — |                       ¦   «         rt          | |¬¦  «        }nt          | d|¬¦  «        }|S )a¦  Returns the line graph of the graph or digraph `G`.

    The line graph of a graph `G` has a node for each edge in `G` and an
    edge joining those nodes if the two edges in `G` share a common node. For
    directed graphs, nodes are adjacent exactly when the edges they represent
    form a directed path of length two.

    The nodes of the line graph are 2-tuples of nodes in the original graph (or
    3-tuples for multigraphs, with the key of the edge as the third element).

    For information about self-loops and more discussion, see the **Notes**
    section below.

    Parameters
    ----------
    G : graph
        A NetworkX Graph, DiGraph, MultiGraph, or MultiDigraph.
    create_using : NetworkX graph constructor, optional (default=nx.Graph)
       Graph type to create. If graph instance, then cleared before populated.

    Returns
    -------
    L : graph
        The line graph of G.

    Examples
    --------
    >>> G = nx.star_graph(3)
    >>> L = nx.line_graph(G)
    >>> print(sorted(map(sorted, L.edges())))  # makes a 3-clique, K3
    [[(0, 1), (0, 2)], [(0, 1), (0, 3)], [(0, 2), (0, 3)]]

    Edge attributes from `G` are not copied over as node attributes in `L`, but
    attributes can be copied manually:

    >>> G = nx.path_graph(4)
    >>> G.add_edges_from((u, v, {"tot": u + v}) for u, v in G.edges)
    >>> G.edges(data=True)
    EdgeDataView([(0, 1, {'tot': 1}), (1, 2, {'tot': 3}), (2, 3, {'tot': 5})])
    >>> H = nx.line_graph(G)
    >>> H.add_nodes_from((node, G.edges[node]) for node in H)
    >>> H.nodes(data=True)
    NodeDataView({(0, 1): {'tot': 1}, (2, 3): {'tot': 5}, (1, 2): {'tot': 3}})

    Notes
    -----
    Graph, node, and edge data are not propagated to the new graph. For
    undirected graphs, the nodes in G must be sortable, otherwise the
    constructed line graph may not be correct.

    *Self-loops in undirected graphs*

    For an undirected graph `G` without multiple edges, each edge can be
    written as a set `\{u, v\}`.  Its line graph `L` has the edges of `G` as
    its nodes. If `x` and `y` are two nodes in `L`, then `\{x, y\}` is an edge
    in `L` if and only if the intersection of `x` and `y` is nonempty. Thus,
    the set of all edges is determined by the set of all pairwise intersections
    of edges in `G`.

    Trivially, every edge in G would have a nonzero intersection with itself,
    and so every node in `L` should have a self-loop. This is not so
    interesting, and the original context of line graphs was with simple
    graphs, which had no self-loops or multiple edges. The line graph was also
    meant to be a simple graph and thus, self-loops in `L` are not part of the
    standard definition of a line graph. In a pairwise intersection matrix,
    this is analogous to excluding the diagonal entries from the line graph
    definition.

    Self-loops and multiple edges in `G` add nodes to `L` in a natural way, and
    do not require any fundamental changes to the definition. It might be
    argued that the self-loops we excluded before should now be included.
    However, the self-loops are still "trivial" in some sense and thus, are
    usually excluded.

    *Self-loops in directed graphs*

    For a directed graph `G` without multiple edges, each edge can be written
    as a tuple `(u, v)`. Its line graph `L` has the edges of `G` as its
    nodes. If `x` and `y` are two nodes in `L`, then `(x, y)` is an edge in `L`
    if and only if the tail of `x` matches the head of `y`, for example, if `x
    = (a, b)` and `y = (b, c)` for some vertices `a`, `b`, and `c` in `G`.

    Due to the directed nature of the edges, it is no longer the case that
    every edge in `G` should have a self-loop in `L`. Now, the only time
    self-loops arise is if a node in `G` itself has a self-loop.  So such
    self-loops are no longer "trivial" but instead, represent essential
    features of the topology of `G`. For this reason, the historical
    development of line digraphs is such that self-loops are included. When the
    graph `G` has multiple edges, once again only superficial changes are
    required to the definition.

    References
    ----------
    * Harary, Frank, and Norman, Robert Z., "Some properties of line digraphs",
      Rend. Circ. Mat. Palermo, II. Ser. 9 (1960), 161--168.
    * Hemminger, R. L.; Beineke, L. W. (1978), "Line graphs and line digraphs",
      in Beineke, L. W.; Wilson, R. J., Selected Topics in Graph Theory,
      Academic Press Inc., pp. 271--305.

    )Úcreate_usingF)Ú	selfloopsr   )Úis_directedÚ_lg_directedÚ_lg_undirected)ÚGr   ÚLs      úV/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/networkx/generators/line.pyr   r      sC   € ðL 	‡}‚}�„ð JÝ˜¨Ð6Ñ6Ô6ˆˆå˜1¨¸LÐIÑIÔIˆØ€Hó    c                 ó8  — t          j        d|| j        ¬¦  «        }|                      ¦   «         rt	          | j        d¬¦  «        n| j        } |¦   «         D ]A}|                     |¦  «          ||d         ¦  «        D ]}|                     ||¦  «         ŒŒB|S )a6  Returns the line graph L of the (multi)digraph G.

    Edges in G appear as nodes in L, represented as tuples of the form (u,v)
    or (u,v,key) if G is a multidigraph. A node in L corresponding to the edge
    (u,v) is connected to every node corresponding to an edge (v,w).

    Parameters
    ----------
    G : digraph
        A directed graph or directed multigraph.
    create_using : NetworkX graph constructor, optional
       Graph type to create. If graph instance, then cleared before populated.
       Default is to use the same graph class as `G`.

    r   ©ÚdefaultT©Úkeysé   )ÚnxÚempty_graphÚ	__class__Úis_multigraphr   ÚedgesÚadd_nodeÚadd_edge)r   r   r   Ú	get_edgesÚ	from_nodeÚto_nodes         r   r   r   {   s¯   € õ  	Œ�q˜,°´Ð<Ñ<Ô<€Að 01¯ªÑ/@Ô/@ÐM•˜œ dÐ+Ñ+Ô+Ð+ÀaÄg€Ià�Y‘[”[ð +ð +ˆ	à	�
Š
�9ÑÔÐØ �y ¨1¤Ñ.Ô.ð 	+ð 	+ˆGØ�JŠJ�y 'Ñ*Ô*Ð*Ð*ð	+ð €Hr   Fc                 óL  ‡
‡‡— t          j        d|| j        ¬¦  «        }|                      ¦   «         rt	          | j        d¬¦  «        n| j        }|rdnd}d„ t          | ¦  «        D ¦   «         Šˆfd„Št          ¦   «         }| D ]‰}ˆfd„ ||¦  «        D ¦   «         }t          |¦  «        dk    r| 	                    |d         ¦  «         t          |¦  «        D ]2\  }	Š
| 
                    ˆ
ˆfd	„||	|z   d
…         D ¦   «         ¦  «         Œ3ŒŠ|                     |¦  «         |S )a  Returns the line graph L of the (multi)graph G.

    Edges in G appear as nodes in L, represented as sorted tuples of the form
    (u,v), or (u,v,key) if G is a multigraph. A node in L corresponding to
    the edge {u,v} is connected to every node corresponding to an edge that
    involves u or v.

    Parameters
    ----------
    G : graph
        An undirected graph or multigraph.
    selfloops : bool
        If `True`, then self-loops are included in the line graph. If `False`,
        they are excluded.
    create_using : NetworkX graph constructor, optional (default=nx.Graph)
       Graph type to create. If graph instance, then cleared before populated.

    Notes
    -----
    The standard algorithm for line graphs of undirected graphs does not
    produce self-loops.

    r   r   Tr   r   c                 ó   — i | ]\  }}||“Œ	S © r'   )Ú.0ÚiÚns      r   ú
<dictcomp>z"_lg_undirected.<locals>.<dictcomp>º   s   € Ð0Ð0Ð0™4˜1˜a�!�QÐ0Ð0Ð0r   c                 ó<   •— ‰| d                  ‰| d                  fS )Nr   r   r'   )ÚedgeÚ
node_indexs    €r   Úedge_key_functionz)_lg_undirected.<locals>.edge_key_function½   s    ø€ Ø˜$˜qœ'Ô" J¨t°A¬wÔ$7Ð7Ð7r   c           	      ó|   •— g | ]8}t          t          |d d…         ‰j        ¬¦  «        ¦  «        |dd …         z   ‘Œ9S )Né   ©Úkey)ÚtupleÚsortedÚget)r(   Úxr.   s     €r   ú
<listcomp>z"_lg_undirected.<locals>.<listcomp>Å   sE   ø€ ÐXÐXÐXÀa••v˜a   œe¨¬Ð8Ñ8Ô8Ñ9Ô9¸A¸a¸b¸b¼EÑAÐXÐXÐXr   c                 óP   •— g | ]"}t          t          ‰|f‰¬ ¦  «        ¦  «        ‘Œ#S )r2   )r4   r5   )r(   ÚbÚar/   s     €€r   r8   z"_lg_undirected.<locals>.<listcomp>Ð   sC   ø€ ð ð ð àõ �& ! Q Ð->Ð?Ñ?Ô?Ñ@Ô@ðð ð r   N)r   r   r   r   r   r   Ú	enumerateÚsetÚlenr    ÚupdateÚadd_edges_from)r   r   r   r   r"   Úshiftr   ÚuÚnodesr)   r;   r/   r.   s             @@@r   r   r   ™   sƒ  øøø€ õ0 	Œ�q˜,°´Ð<Ñ<Ô<€Að 01¯ªÑ/@Ô/@ÐM•˜œ dÐ+Ñ+Ô+Ð+ÀaÄg€Ið Ð!ˆAˆA €Eð 1Ð0¥9¨Q¡<¤<Ð0Ñ0Ô0€Jð8ð 8ð 8ð 8ð 8õ ‰EŒE€EØð ð ˆð YÐXÐXÐXÈ9È9ÐUVÉ<Ì<ÐXÑXÔXˆåˆu‰:Œ:˜Š?ˆ?à�JŠJ�u˜Q”xÑ Ô Ð õ
 ˜eÑ$Ô$ð 	ð 	‰DˆAˆqØ�LŠLðð ð ð ð à" 1 u¡9 ; ;Ô/ðñ ô ñô ð ð ð	ð ×Ò�UÑÔÐØ€Hr   ÚdirectedÚ
multigraphc                 ó,  ‡
‡— |                       ¦   «         dk    rt          j        d¦  «        S |                       ¦   «         dk    r0t          | ¦  «        }|df}|dfŠt          j        |‰fg¦  «        }|S |                       ¦   «         dk    r.|                      ¦   «         dk    rd}t          j        |¦  «        ‚t          j        | ¦  «        dk    rd}t          j        |¦  «        ‚t          | ¦  «        }t          | |¦  «        }d„ | j
        D ¦   «         Š
|D ]}|D ]}‰
|xx         dz  cc<   ŒŒt          ‰
                     ¦   «         ¦  «        dk    rd}t          j        |¦  «        ‚t          ˆ
fd„‰
D ¦   «         ¦  «        }	t          j        ¦   «         }|                     |¦  «         |                     |	¦  «         t          |j
        d¦  «        D ]6\  }Št!          ˆfd	„|D ¦   «         ¦  «        r|                     |‰¦  «         Œ7|S )
af  Returns the inverse line graph of graph G.

    If H is a graph, and G is the line graph of H, such that G = L(H).
    Then H is the inverse line graph of G.

    Not all graphs are line graphs and these do not have an inverse line graph.
    In these cases this function raises a NetworkXError.

    Parameters
    ----------
    G : graph
        A NetworkX Graph

    Returns
    -------
    H : graph
        The inverse line graph of G.

    Raises
    ------
    NetworkXNotImplemented
        If G is directed or a multigraph

    NetworkXError
        If G is not a line graph

    Notes
    -----
    This is an implementation of the Roussopoulos algorithm[1]_.

    If G consists of multiple components, then the algorithm doesn't work.
    You should invert every component separately:

    >>> K5 = nx.complete_graph(5)
    >>> P4 = nx.Graph([("a", "b"), ("b", "c"), ("c", "d")])
    >>> G = nx.union(K5, P4)
    >>> root_graphs = []
    >>> for comp in nx.connected_components(G):
    ...     root_graphs.append(nx.inverse_line_graph(G.subgraph(comp)))
    >>> len(root_graphs)
    2

    References
    ----------
    .. [1] Roussopoulos, N.D. , "A max {m, n} algorithm for determining the graph H from
       its line graph G", Information Processing Letters 2, (1973), 108--112, ISSN 0020-0190,
       `DOI link <https://doi.org/10.1016/0020-0190(73)90029-X>`_

    r   r   zninverse_line_graph() doesn't work on an edgeless graph. Please use this function on each component separately.z‰A line graph as generated by NetworkX has no selfloops, so G has no inverse line graph. Please remove the selfloops from G and try again.c                 ó   — i | ]}|d “ŒS )r   r'   )r(   rB   s     r   r+   z&inverse_line_graph.<locals>.<dictcomp>(  s   € Ð%Ð%Ð%˜ˆq�!Ð%Ð%Ð%r   r1   zEG is not a line graph (vertex found in more than two partition cells)c              3   ó6   •K  — | ]}‰|         d k    ¯|fV — ŒdS )r   Nr'   )r(   rB   ÚP_counts     €r   ú	<genexpr>z%inverse_line_graph.<locals>.<genexpr>0  s-   øè è € Ð7Ð7�q w¨q¤z°Q¢ ˆqˆd    Ð7Ð7r   c              3   ó    •K  — | ]}|‰v V — Œ	d S ©Nr'   )r(   Úa_bitr:   s     €r   rJ   z%inverse_line_graph.<locals>.<genexpr>5  s'   øè è € Ð)Ð)˜eˆu˜ˆzÐ)Ð)Ð)Ð)Ð)Ð)r   )Únumber_of_nodesr   r   r   ÚGraphÚnumber_of_edgesÚNetworkXErrorÚnumber_of_selfloopsÚ_select_starting_cellÚ_find_partitionrC   ÚmaxÚvaluesr4   Úadd_nodes_fromr   Úanyr!   )r   Úvr;   ÚHÚmsgÚstarting_cellÚPÚprB   ÚWrI   r:   s             @@r   r	   r	   Ú   sP  øø€ ðj 	×ÒÑÔ˜aÒÐÝŒ~˜aÑ Ô Ð Ø	
×	Ò	Ñ	Ô	 Ò	!Ð	!Ý˜aÑ Ô ˆØ�ˆFˆØ�ˆFˆÝŒH�q˜!�f�XÑÔˆØˆØ	
×	Ò	Ñ	Ô	˜qÒ	 Ð	  Q×%6Ò%6Ñ%8Ô%8¸AÒ%=Ð%=ðEð 	õ Ô˜sÑ#Ô#Ð#å	Ô˜aÑ Ô  AÒ%Ð%ðTð 	õ Ô˜sÑ#Ô#Ð#å)¨!Ñ,Ô,€MÝ˜˜=Ñ)Ô)€Aà%Ð%˜QœWÐ%Ñ%Ô%€GØð ð ˆØð 	ð 	ˆAØ�AˆJˆJŒJ˜!‰OˆJˆJ‰JˆJð	õ ˆ7�>Š>ÑÔÑÔ˜qÒ Ð ØUˆÝÔ˜sÑ#Ô#Ð#ÝÐ7Ð7Ð7Ð7˜GÐ7Ñ7Ô7Ñ7Ô7€AÝ
Œ‰
Œ
€AØ×Ò�QÑÔÐØ×Ò�QÑÔÐÝ˜QœW aÑ(Ô(ð ð ‰ˆˆ1ÝÐ)Ð)Ð)Ð) qÐ)Ñ)Ô)Ñ)Ô)ð 	Ø�JŠJ�q˜!ÑÔÐøØ€Hr   c                 óð   — |\  }}|| vrt          j        d|› d�¦  «        ‚|| |         vrt          j        d|› d|› d�¦  «        ‚g }| |         D ]$}|| |         v r|                     |||f¦  «         Œ%|S )z.Return list of all triangles containing edge eúVertex ú not in graphúEdge (ú, ú) not in graph)r   rQ   Úappend)r   ÚerB   rY   Útriangle_listr7   s         r   Ú
_trianglesri   :  s©   € à�D€A€qØ�€z€zÝÔÐ9¨Ð9Ð9Ð9Ñ:Ô:Ð:Ø��!”€}€}ÝÔÐ>¨Ð>Ð>¨QÐ>Ð>Ð>Ñ?Ô?Ð?Ø€MØˆqŒTð ,ð ,ˆØ��!”ˆ9ˆ9Ø× Ò  ! Q¨ Ñ+Ô+Ð+øØÐr   c                 óÊ  ‡— |D ]0}||                       ¦   «         vrt          j        d|› d�¦  «        ‚Œ1t          t	          |d¦  «        ¦  «        D ]?}|d         | |d                  vr't          j        d|d         › d|d         › d�¦  «        ‚Œ@t          t          ¦  «        Š|D ]!}| |         D ]}||vr‰|xx         dz  cc<   ŒŒ"t          ˆfd	„‰D ¦   «         ¦  «        S )
aì  Test whether T is an odd triangle in G

    Parameters
    ----------
    G : NetworkX Graph
    T : 3-tuple of vertices forming triangle in G

    Returns
    -------
    True is T is an odd triangle
    False otherwise

    Raises
    ------
    NetworkXError
        T is not a triangle in G

    Notes
    -----
    An odd triangle is one in which there exists another vertex in G which is
    adjacent to either exactly one or exactly all three of the vertices in the
    triangle.

    ra   rb   r1   r   r   rc   rd   re   c              3   ó,   •K  — | ]}‰|         d v V — ŒdS ))r   é   Nr'   )r(   rY   ÚT_nbrss     €r   rJ   z _odd_triangle.<locals>.<genexpr>m  s,   øè è € Ð3Ð3 qˆv�aŒy˜FÐ"Ð3Ð3Ð3Ð3Ð3Ð3r   )rC   r   rQ   Úlistr   r   ÚintrX   )r   ÚTrB   rg   ÚtrY   rm   s         @r   Ú_odd_trianglerr   H  s/  ø€ ð2 ð ?ð ?ˆØ�A—G’G‘I”IÐÐÝÔ"Ð#=¨QÐ#=Ð#=Ð#=Ñ>Ô>Ð>ð å•,˜q !Ñ$Ô$Ñ%Ô%ð Jð JˆØˆQŒ4�q˜˜1œ”wÐÐÝÔ"Ð#H¨A¨a¬DÐ#HÐ#H°A°a´DÐ#HÐ#HÐ#HÑIÔIÐIð õ �ÑÔ€FØð ð ˆØ�1”ð 	ð 	ˆAØ˜ˆzˆzØ�q�	�	”	˜Q‘�	�	‘	øð	õ Ð3Ð3Ð3Ð3¨FÐ3Ñ3Ô3Ñ3Ô3Ð3r   c                 ó°  — |                       ¦   «         }|g}|                     t          t          |d¦  «        ¦  «        ¦  «         t          |¦  «        }|                     ¦   «         dk    rç|                     ¦   «         }t          ||         ¦  «        }|dk    r |gt          ||         ¦  «        z   }|D ]-}|D ](}||k    r |||         vrd}	t          j        |	¦  «        ‚Œ)Œ.| 	                    t          |¦  «        ¦  «         |                     t          t          |d¦  «        ¦  «        ¦  «         ||z  }|                     ¦   «         dk    °ç|S )ai  Find a partition of the vertices of G into cells of complete graphs

    Parameters
    ----------
    G : NetworkX Graph
    starting_cell : tuple of vertices in G which form a cell

    Returns
    -------
    List of tuples of vertices of G

    Raises
    ------
    NetworkXError
        If a cell is not a complete subgraph then G is not a line graph
    r1   r   z>G is not a line graph (partition cell not a complete subgraph))ÚcopyÚremove_edges_fromrn   r   rP   Úpopr>   r   rQ   rf   r4   )
r   r\   ÚG_partitionr]   Úpartitioned_verticesrB   Údeg_uÚnew_cellrY   r[   s
             r   rT   rT   p  sl  € ð" —&’&‘(”(€KØ	ˆ€AØ×!Ò!¥$¥|°MÀ1Ñ'EÔ'EÑ"FÔ"FÑGÔGÐGå Ñ.Ô.ÐØ
×
%Ò
%Ñ
'Ô
'¨!Ò
+Ð
+à ×$Ò$Ñ&Ô&ˆÝ�K ”NÑ#Ô#ˆØ�AŠ:ˆ:ð �s�T +¨a¤.Ñ1Ô1Ñ1ˆHØð 4ð 4�Ø!ð 4ð 4�AØ˜Qš˜ Q¨k¸!¬nÐ%<Ð%<ðGð õ !Ô.¨sÑ3Ô3Ð3øð4ð �HŠH•U˜8‘_”_Ñ%Ô%Ð%Ø×)Ò)­$­|¸HÀaÑ/HÔ/HÑ*IÔ*IÑJÔJÐJØ  HÑ,Ð ð' ×
%Ò
%Ñ
'Ô
'¨!Ò
+Ð
+ð( €Hr   c                 óT  — |€"t          |                      ¦   «         ¦  «        }n{|}|d         |                      ¦   «         vrt          j        d|d         › d�¦  «        ‚|d         | |d                  vr)d|d         › d|d         › d�}t          j        |¦  «        ‚t          | |¦  «        }t          |¦  «        }|dk    r|}�n_|dk    r�|d         }|\  }}	}
t          t          | ||
f¦  «        ¦  «        }t          t          | |	|
f¦  «        ¦  «        }|dk    r|dk    r|}nþt          | |	|
f¬	¦  «        S t          | ||
f¬	¦  «        S d}g }|D ],}t          | |¦  «        r|dz  }| 	                    |¦  «         Œ-|d
k    r	|dk    r|}n–|dz
  |cxk    r|k    rpn nmt          ¦   «         }|D ]}|D ]}|                     |¦  «         ŒŒ|D ]-}|D ](}||k    r || |         vrd}t          j        |¦  «        ‚Œ)Œ.t          |¦  «        }nd}t          j        |¦  «        ‚|S )a_  Select a cell to initiate _find_partition

    Parameters
    ----------
    G : NetworkX Graph
    starting_edge: an edge to build the starting cell from

    Returns
    -------
    Tuple of vertices in G

    Raises
    ------
    NetworkXError
        If it is determined that G is not a line graph

    Notes
    -----
    If starting edge not specified then pick an arbitrary edge - doesn't
    matter which. However, this function may call itself requiring a
    specific starting edge. Note that the r, s notation for counting
    triangles is the same as in the Roussopoulos paper cited above.
    Nr   ra   rb   r   zstarting_edge (rd   z) is not in the Graph)Ústarting_edger1   zCG is not a line graph (odd triangles do not form complete subgraph)zNG is not a line graph (incorrect number of odd triangles around starting edge))r   r   rC   r   rQ   ri   r>   rS   rr   rf   r=   Úaddr4   )r   r|   rg   r[   Úe_trianglesÚrr\   rp   r;   r:   ÚcÚac_edgesÚbc_edgesÚsÚodd_trianglesÚtriangle_nodesr7   rB   rY   s                      r   rS   rS   �  s½  € ð0 ÐÝ˜aŸgšg™iœiÑ(Ô(ˆˆàˆØˆQŒ4�q—w’w‘y”yÐ Ð ÝÔ"Ð#@¨Q¨q¬TÐ#@Ð#@Ð#@ÑAÔAÐAØˆQŒ4�q˜˜1œ”wÐÐØG A a¤DÐGÐG¨A¨a¬DÐGÐGÐGˆCÝÔ" 3Ñ'Ô'Ð'Ý˜Q Ñ"Ô"€KÝˆKÑÔ€AØˆA‚v€vàˆ‰Ø	
ˆaŠˆð ˜ŒNˆØ‰ˆˆ1ˆaå•z ! a¨ VÑ,Ô,Ñ-Ô-ˆÝ•z ! a¨ VÑ,Ô,Ñ-Ô-ˆØ�qŠ=ˆ=Ø˜1Š}ˆ}Ø !��å,¨Q¸qÀ!¸fÐEÑEÔEÐEå(¨¸1¸a¸&ÐAÑAÔAÐAð ˆØˆØð 	(ð 	(ˆAÝ˜Q Ñ"Ô"ð (Ø�Q‘�Ø×$Ò$ QÑ'Ô'Ð'øØ�Š6ˆ6�a˜1’f�fàˆMˆMØ�‰U�aˆ_ˆ_Š_ˆ_˜1Š_ˆ_ˆ_ˆ_ˆ_å ™UœUˆNØ"ð *ð *�Øð *ð *�AØ"×&Ò& qÑ)Ô)Ð)Ð)ð*ð $ð 4ð 4�Ø'ð 4ð 4�AØ˜A’v�v 1¨A¨a¬D = =ð=ð õ !Ô.¨sÑ3Ô3Ð3øð4õ " .Ñ1Ô1ˆMˆMð6ð õ Ô" 3Ñ'Ô'Ð'ØÐr   rL   )FN)Ú__doc__Úcollectionsr   Ú	functoolsr   Ú	itertoolsr   Únetworkxr   Únetworkx.utilsr   Únetworkx.utils.decoratorsr   Ú__all__Ú_dispatchabler   r   r   r	   ri   rr   rT   rS   r'   r   r   ú<module>r�      sŠ  ðØ +Ð +à #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9àÐ-Ð
.€ð €Ô Ð%Ñ%Ô%ðið ið iñ &Ô%ðiðXð ð ð ð<>ð >ð >ð >ðB Ð�ZÑ Ô ØÐ�\Ñ"Ô"Ø€Ô Ð%Ñ%Ô%ðZð Zñ &Ô%ñ #Ô"ñ !Ô ðZðzð ð ð%4ð %4ð %4ðP*ð *ð *ðZXð Xð Xð Xð Xð Xr   