Ë
    D^(h•  ã                   ór   — d Z ddlZddlmZ dgZ ed«       ed«      ej                  d„ «       «       «       Zy)zŸProvides a function for computing the extendability of a graph which is
undirected, simple, connected and bipartite and contains at least one perfect matching.é    N)Únot_implemented_forÚmaximal_extendabilityÚdirectedÚ
multigraphc           
      ó¼  — t        j                  | «      st        j                  d«      ‚t         j                  j	                  | «      st        j                  d«      ‚t         j                  j                  | «      \  }}t         j                  j                  | «      }t        j                  | |«      st        j                  d«      ‚||j                  «       z  D �cg c]	  }|||   f‘Œ }}| j                  D ��cg c]!  \  }}||v r||f|v s
||v r
||f|vr||fn||f‘Œ# }}}t        j                  «       }	|	j                  | «       |	j                  |«       t        j                  |	«      st        j                  d«      ‚t        d«      }
|D ]9  }|D ]2  }t        d„ t        j                   |	||«      D «       «      }|
|k  r|
n|}
Œ4 Œ; |
S c c}w c c}}w )ux  Computes the extendability of a graph.

    The extendability of a graph is defined as the maximum $k$ for which `G`
    is $k$-extendable. Graph `G` is $k$-extendable if and only if `G` has a
    perfect matching and every set of $k$ independent edges can be extended
    to a perfect matching in `G`.

    Parameters
    ----------
    G : NetworkX Graph
        A fully-connected bipartite graph without self-loops

    Returns
    -------
    extendability : int

    Raises
    ------
    NetworkXError
       If the graph `G` is disconnected.
       If the graph `G` is not bipartite.
       If the graph `G` does not contain a perfect matching.
       If the residual graph of `G` is not strongly connected.

    Notes
    -----
    Definition:
    Let `G` be a simple, connected, undirected and bipartite graph with a perfect
    matching M and bipartition (U,V). The residual graph of `G`, denoted by $G_M$,
    is the graph obtained from G by directing the edges of M from V to U and the
    edges that do not belong to M from U to V.

    Lemma [1]_ :
    Let M be a perfect matching of `G`. `G` is $k$-extendable if and only if its residual
    graph $G_M$ is strongly connected and there are $k$ vertex-disjoint directed
    paths between every vertex of U and every vertex of V.

    Assuming that input graph `G` is undirected, simple, connected, bipartite and contains
    a perfect matching M, this function constructs the residual graph $G_M$ of G and
    returns the minimum value among the maximum vertex-disjoint directed paths between
    every vertex of U and every vertex of V in $G_M$. By combining the definitions
    and the lemma, this value represents the extendability of the graph `G`.

    Time complexity O($n^3$ $m^2$)) where $n$ is the number of vertices
    and $m$ is the number of edges.

    References
    ----------
    .. [1] "A polynomial algorithm for the extendability problem in bipartite graphs",
          J. Lakhal, L. Litzler, Information Processing Letters, 1998.
    .. [2] "On n-extendible graphs", M. D. Plummer, Discrete Mathematics, 31:201â€“210, 1980
          https://doi.org/10.1016/0012-365X(80)90037-0

    zGraph G is not connectedzGraph G is not bipartitez+Graph G does not contain a perfect matchingz1The residual graph of G is not strongly connectedÚinfc              3   ó    K  — | ]  }d –— Œ y­w)é   N© )Ú.0Ú_s     úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/algorithms/bipartite/extendability.pyú	<genexpr>z(maximal_extendability.<locals>.<genexpr>g   s   è ø€ ÒP !œAÑPùs   ‚)ÚnxÚis_connectedÚNetworkXErrorÚ	bipartiteÚis_bipartiteÚsetsÚhopcroft_karp_matchingÚis_perfect_matchingÚkeysÚedgesÚDiGraphÚadd_nodes_fromÚadd_edges_fromÚis_strongly_connectedÚfloatÚsumÚnode_disjoint_paths)ÚGÚUÚVÚmaximum_matchingÚnodeÚpmÚxÚyÚdirected_edgesÚ
residual_GÚkÚuÚvÚ	num_pathss                 r   r   r   
   sÎ  € ôt �?‰?˜1ÔÜ×ÑÐ9Ó:Ð:ä�<‰<×$Ñ$ QÔ'Ü×ÑÐ9Ó:Ð:ä�<‰<×Ñ˜QÓ�D€A€qä—|‘|×:Ñ:¸1Ó=Ðä×!Ñ! !Ð%5Ô6Ü×ÑÐLÓMÐMð 67Ð9I×9NÑ9NÓ9PÑ5PÖ	Q¨Tˆ4Ð! $Ñ'Ò
(Ð	Q€BÐ	Qð
 —G‘G÷áˆAˆqð ˜‘6˜q !˜f¨™l°°Q±¸A¸q¸6ÈÑ;KˆˆA‰ÐSTÐVWÐRXÑXð€Nñ ô —‘“€JØ×Ñ˜aÔ Ø×Ñ˜nÔ-ä×#Ñ# JÔ/Ü×ÑÐRÓSÐSô 	ˆe‹€AØò 2ˆØò 	2ˆAÜÑP¤r×'=Ñ'=¸jÈ!ÈQÓ'OÔPÓPˆIØ˜’]‘¨	‰Añ	2ð2ð €Hùò/ 
Rùós   Ã GÃ?&G)Ú__doc__Únetworkxr   Únetworkx.utilsr   Ú__all__Ú_dispatchabler   r   ó    r   ú<module>r5      sQ   ðñ[ó Ý .à"Ð
#€ñ �ZÓ Ù�\Ó"Ø×Ññ\ó ó #ó !ñ\r4   