
    h                     r    S r SSKrSSKJr  S/r\" S5      \" S5      \R                  S 5       5       5       rg)zProvides 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           
          [         R                  " U 5      (       d  [         R                  " S5      e[         R                  R	                  U 5      (       d  [         R                  " S5      e[         R                  R                  U 5      u  p[         R                  R                  U 5      n[         R                  " X5      (       d  [         R                  " S5      eX#R                  5       -   Vs/ s H  oDX4   4PM
     nnU R                   VVs/ s H#  u  pgXb;   a  Xg4U;   d  Xa;   a
  Xv4U;  a  Xg4OXv4PM%     nnn[         R                  " 5       n	U	R                  U 5        U	R                  U5        [         R                  " U	5      (       d  [         R                  " S5      e[        S5      n
U H<  nU H3  n[        S [         R                   " XU5       5       5      nX:  a  U
OUn
M5     M>     U
$ s  snf s  snnf )u  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   &   #    U  H  nS v   M	     g7f)   N ).0_s     ]/var/www/html/env/lib/python3.13/site-packages/networkx/algorithms/bipartite/extendability.py	<genexpr>(maximal_extendability.<locals>.<genexpr>g   s     P'O!A'Os   )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DA||::1=!!!66LMM 679N9N9P5P	Q5PT!'
(5PB	Q
 GGDA 6qflA6;KSTRXX   Ja n-##J//RSS 	eAAPr'='=jQ'OPPI]	A   H/ 
Rs   1G5*G:)__doc__networkxr   networkx.utilsr   __all___dispatchabler   r       r   <module>r6      sQ   [  ."
# Z \"\  # !\r5   