§
    d˜ºhŠ  ã                   ó  — d Z ddlZddlmZ g d¢Zej        d„ ¦   «         Z ed¦  «        ej        d„ ¦   «         ¦   «         Z ed¦  «         ed¦  «         ej        d	d	¬
¦  «        dd„¦   «         ¦   «         ¦   «         Z	dS )z5Functions for computing and verifying regular graphs.é    N)Únot_implemented_for)Ú
is_regularÚis_k_regularÚk_factorc                 ó  ‡‡‡— t          | ¦  «        dk    rt          j        d¦  «        ‚t          j                             | ¦  «        }|                      ¦   «         s5|                      |¦  «        Št          ˆfd„| j        D ¦   «         ¦  «        S |                      |¦  «        Št          ˆfd„| j        D ¦   «         ¦  «        }|  	                    |¦  «        Št          ˆfd„| j	        D ¦   «         ¦  «        }|o|S )aè  Determines whether the graph ``G`` is a regular graph.

    A regular graph is a graph where each vertex has the same degree. A
    regular digraph is a graph where the indegree and outdegree of each
    vertex are equal.

    Parameters
    ----------
    G : NetworkX graph

    Returns
    -------
    bool
        Whether the given graph or digraph is regular.

    Examples
    --------
    >>> G = nx.DiGraph([(1, 2), (2, 3), (3, 4), (4, 1)])
    >>> nx.is_regular(G)
    True

    r   zGraph has no nodes.c              3   ó*   •K  — | ]\  }}‰|k    V — Œd S ©N© )Ú.0Ú_ÚdÚd1s      €úc/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/networkx/algorithms/regular.pyú	<genexpr>zis_regular.<locals>.<genexpr>&   s+   øè è € Ð0Ð0™t˜q !�2˜’7Ð0Ð0Ð0Ð0Ð0Ð0ó    c              3   ó*   •K  — | ]\  }}‰|k    V — Œd S r	   r
   )r   r   r   Úd_ins      €r   r   zis_regular.<locals>.<genexpr>)   s+   øè è € Ð;Ð;¡t q¨!˜ šÐ;Ð;Ð;Ð;Ð;Ð;r   c              3   ó*   •K  — | ]\  }}‰|k    V — Œd S r	   r
   )r   r   r   Úd_outs      €r   r   zis_regular.<locals>.<genexpr>+   s+   øè è € Ð>Ð>©¨¨A˜% 1š*Ð>Ð>Ð>Ð>Ð>Ð>r   )
ÚlenÚnxÚNetworkXPointlessConceptÚutilsÚarbitrary_elementÚis_directedÚdegreeÚallÚ	in_degreeÚ
out_degree)ÚGÚn1Ú
in_regularÚout_regularr   r   r   s       @@@r   r   r   	   sô   øøø€ õ0 ˆ1�v„v�‚{€{ÝÔ)Ð*?Ñ@Ô@Ð@Ý	Œ×	#Ò	# AÑ	&Ô	&€BØ�=Š=‰?Œ?ð *Ø�XŠX�b‰\Œ\ˆÝÐ0Ð0Ð0Ð0 q¤xÐ0Ñ0Ô0Ñ0Ô0Ð0à�{Š{˜2‰ŒˆÝÐ;Ð;Ð;Ð;¨q¬{Ð;Ñ;Ô;Ñ;Ô;ˆ
Ø—’˜RÑ Ô ˆÝÐ>Ð>Ð>Ð>°´Ð>Ñ>Ô>Ñ>Ô>ˆØÐ)˜kÐ)r   Údirectedc                 óD   ‡— t          ˆfd„| j        D ¦   «         ¦  «        S )a‚  Determines whether the graph ``G`` is a k-regular graph.

    A k-regular graph is a graph where each vertex has degree k.

    Parameters
    ----------
    G : NetworkX graph

    Returns
    -------
    bool
        Whether the given graph is k-regular.

    Examples
    --------
    >>> G = nx.Graph([(1, 2), (2, 3), (3, 4), (4, 1)])
    >>> nx.is_k_regular(G, k=3)
    False

    c              3   ó*   •K  — | ]\  }}|‰k    V — Œd S r	   r
   )r   Únr   Úks      €r   r   zis_k_regular.<locals>.<genexpr>F   s+   øè è € Ð+Ð+™$˜!˜Qˆq�AŠvÐ+Ð+Ð+Ð+Ð+Ð+r   )r   r   )r    r(   s    `r   r   r   /   s*   ø€ õ. Ð+Ð+Ð+Ð+ !¤(Ð+Ñ+Ô+Ñ+Ô+Ð+r   Ú
multigraphT)Úpreserve_edge_attrsÚreturns_graphÚweightc                 óä  ‡‡— ddl m}m}  G ˆfd„d¦  «        } G d„ d¦  «        }t          ˆfd„| j        D ¦   «         ¦  «        rt          j        d¦  «        ‚|                      ¦   «         Šg }t          ‰j        ¦  «        D ]T\  }}	‰|	d	z  k     r |‰|	|‰¦  «        }
n |‰|	|‰¦  «        }
|
 	                    ¦   «          | 
                    |
¦  «         ŒU |‰d
|¬¦  «        } |‰|¦  «        st          j        d¦  «        ‚‰                     ¦   «         D ]:}||vr4|d         |d         f|vr"‰                     |d         |d         ¦  «         Œ;|D ]}
|
                     ¦   «          Œ‰S )uÕ  Compute a k-factor of G

    A k-factor of a graph is a spanning k-regular subgraph.
    A spanning k-regular subgraph of G is a subgraph that contains
    each vertex of G and a subset of the edges of G such that each
    vertex has degree k.

    Parameters
    ----------
    G : NetworkX graph
      Undirected graph

    matching_weight: string, optional (default='weight')
       Edge data key corresponding to the edge weight.
       Used for finding the max-weighted perfect matching.
       If key not found, uses 1 as weight.

    Returns
    -------
    G2 : NetworkX graph
        A k-factor of G

    Examples
    --------
    >>> G = nx.Graph([(1, 2), (2, 3), (3, 4), (4, 1)])
    >>> G2 = nx.k_factor(G, k=1)
    >>> G2.edges()
    EdgeView([(1, 2), (3, 4)])

    References
    ----------
    .. [1] "An algorithm for computing simple k-factors.",
       Meijer, Henk, Yurai NÃºÃ±ez-RodrÃ­guez, and David Rappaport,
       Information processing letters, 2009.
    r   )Úis_perfect_matchingÚmax_weight_matchingc                   ó&   •— e Zd Zd„ Zd„ Zˆ fd„ZdS )úk_factor.<locals>.LargeKGadgetc                 óÊ   ‡‡— ‰| _         || _        || _        ‰| _        ˆfd„t	          ‰¦  «        D ¦   «         | _        ˆˆfd„t	          ‰|z
  ¦  «        D ¦   «         | _        d S )Nc                 ó   •— g | ]}‰|f‘ŒS r
   r
   ©r   ÚxÚnodes     €r   ú
<listcomp>z;k_factor.<locals>.LargeKGadget.__init__.<locals>.<listcomp>z   ó   ø€ Ð"DÐ"DÐ"D° D¨! 9Ð"DÐ"DÐ"Dr   c                 ó   •— g | ]	}‰|‰z   f‘Œ
S r
   r
   ©r   r5   r   r6   s     €€r   r7   z;k_factor.<locals>.LargeKGadget.__init__.<locals>.<listcomp>{   s"   ø€ Ð!PÐ!PÐ!P¸ 4¨¨V©Ð"4Ð!PÐ!PÐ!Pr   )ÚoriginalÚgr(   r   ÚrangeÚouter_verticesÚcore_vertices©Úselfr(   r   r6   r<   s     `` r   Ú__init__z'k_factor.<locals>.LargeKGadget.__init__t   ss   øø€ Ø ˆDŒMØˆDŒFØˆDŒFØ ˆDŒKà"DÐ"DÐ"DÐ"Dµe¸F±m´mÐ"DÑ"DÔ"DˆDÔØ!PÐ!PÐ!PÐ!PÐ!P½eÀFÈQÁJÑ>OÔ>OÐ!PÑ!PÔ!PˆDÔÐÐr   c                 ó¬  — | j         | j                 }t          |                     ¦   «         ¦  «        }t          |                     ¦   «         ¦  «        }t          | j        ||¦  «        D ]\  }}} | j         j        ||fi |¤Ž Œ| j        D ]'}| j        D ]}| j                              ||¦  «         ŒŒ(| j          	                    | j        ¦  «         d S r	   )
r<   r;   ÚlistÚkeysÚvaluesÚzipr>   Úadd_edger?   Úremove_node)rA   Úadj_viewÚ	neighborsÚ
edge_attrsÚouterÚneighborÚcores          r   Úreplace_nodez+k_factor.<locals>.LargeKGadget.replace_node}   sé   € Ø”v˜dœmÔ,ˆHÝ˜XŸ]š]™_œ_Ñ-Ô-ˆIÝ˜hŸošoÑ/Ô/Ñ0Ô0ˆJÝ/2ØÔ# Y°
ñ0ô 0ð ?ð ?Ñ+��x ð  �””  xÐ>Ð>°:Ð>Ð>Ð>Ð>ØÔ*ð 1ð 1�Ø!Ô0ð 1ð 1�EØ”F—O’O D¨%Ñ0Ô0Ð0Ð0ð1àŒF×Ò˜tœ}Ñ-Ô-Ð-Ð-Ð-r   c                 ór  •— | j                              | j        ¦  «         | j        D ]Z}| j         |         }t	          |                     ¦   «         ¦  «        D ])\  }}|| j        vr | j         j        | j        |fi |¤Ž  nŒ*Œ[‰                     | j        ¦  «         ‰                     | j        ¦  «         d S r	   )	r<   Úadd_noder;   r>   rD   Úitemsr?   rH   Úremove_nodes_from)rA   rM   rJ   rN   rL   r<   s        €r   Úrestore_nodez+k_factor.<locals>.LargeKGadget.restore_nodeŠ   sË   ø€ ØŒF�OŠO˜DœMÑ*Ô*Ð*ØÔ,ð ð �Øœ6 %œ=�Ý,0°·²Ñ1AÔ1AÑ,BÔ,Bð ð Ñ(�H˜jØ tÔ'9Ð9Ð9Ø'˜œœ¨¬°xÐNÐNÀ:ÐNÐNÐNØ˜ð :øð ×Ò Ô 3Ñ4Ô4Ð4Ø×Ò Ô 2Ñ3Ô3Ð3Ð3Ð3r   N©Ú__name__Ú
__module__Ú__qualname__rB   rP   rU   )r<   s   €r   ÚLargeKGadgetr1   s   sO   ø€ € € € € ð	Qð 	Qð 	Qð	.ð 	.ð 	.ð		4ð 		4ð 		4ð 		4ð 		4ð 		4ð 		4r   rZ   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )úk_factor.<locals>.SmallKGadgetc                 ó  ‡‡— ‰| _         || _        ‰| _        || _        ˆfd„t	          ‰¦  «        D ¦   «         | _        ˆˆfd„t	          ‰¦  «        D ¦   «         | _        ˆˆfd„t	          |¦  «        D ¦   «         | _        d S )Nc                 ó   •— g | ]}‰|f‘ŒS r
   r
   r4   s     €r   r7   z;k_factor.<locals>.SmallKGadget.__init__.<locals>.<listcomp>œ   r8   r   c                 ó   •— g | ]	}‰|‰z   f‘Œ
S r
   r
   r:   s     €€r   r7   z;k_factor.<locals>.SmallKGadget.__init__.<locals>.<listcomp>�   s"   ø€ Ð"MÐ"MÐ"M¸! D¨!¨f©*Ð#5Ð"MÐ"MÐ"Mr   c                 ó$   •— g | ]}‰|d ‰z  z   f‘ŒS )é   r
   r:   s     €€r   r7   z;k_factor.<locals>.SmallKGadget.__init__.<locals>.<listcomp>ž   s&   ø€ Ð!KÐ!KÐ!K¸Q 4¨¨Q°©Z©Ð"8Ð!KÐ!KÐ!Kr   )r;   r(   r   r<   r=   r>   Úinner_verticesr?   r@   s     `` r   rB   z'k_factor.<locals>.SmallKGadget.__init__–   s’   øø€ Ø ˆDŒMØˆDŒFØ ˆDŒKØˆDŒFà"DÐ"DÐ"DÐ"Dµe¸F±m´mÐ"DÑ"DÔ"DˆDÔØ"MÐ"MÐ"MÐ"MÐ"M½uÀV¹}¼}Ð"MÑ"MÔ"MˆDÔØ!KÐ!KÐ!KÐ!KÐ!KÅ%ÈÁ(Ä(Ð!KÑ!KÔ!KˆDÔÐÐr   c                 ó¬  — | j         | j                 }t          | j        | j        t          |                     ¦   «         ¦  «        ¦  «        D ]8\  }}\  }}| j                              ||¦  «          | j         j        ||fi |¤Ž Œ9| j        D ]'}| j        D ]}| j                              ||¦  «         ŒŒ(| j          	                    | j        ¦  «         d S r	   )
r<   r;   rG   r>   rb   rD   rS   rH   r?   rI   )rA   rJ   rM   ÚinnerrN   rL   rO   s          r   rP   z+k_factor.<locals>.SmallKGadget.replace_node    sí   € Ø”v˜dœmÔ,ˆHÝ8;ØÔ# TÔ%8½$¸x¿~º~Ñ?OÔ?OÑ:PÔ:Pñ9ô 9ð ?ð ?Ñ4��uÑ4˜x¨ð ”—’  uÑ-Ô-Ð-Ø�””  xÐ>Ð>°:Ð>Ð>Ð>Ð>ØÔ*ð 1ð 1�Ø!Ô0ð 1ð 1�EØ”F—O’O D¨%Ñ0Ô0Ð0Ð0ð1àŒF×Ò˜tœ}Ñ-Ô-Ð-Ð-Ð-r   c                 ó¨  — | j                              | j        ¦  «         | j        D ]M}| j         |         }|                     ¦   «         D ])\  }}|| j        vr | j         j        | j        |fi |¤Ž  nŒ*ŒN| j                              | j        ¦  «         | j                              | j        ¦  «         | j                              | j        ¦  «         d S r	   )	r<   rR   r;   r>   rS   r?   rH   rT   rb   )rA   rM   rJ   rN   rL   s        r   rU   z+k_factor.<locals>.SmallKGadget.restore_node¬   sß   € ØŒF�OŠO˜DœMÑ*Ô*Ð*ØÔ,ð ð �Øœ6 %œ=�Ø,4¯NªNÑ,<Ô,<ð ð Ñ(�H˜jØ tÔ'9Ð9Ð9Ø'˜œœ¨¬°xÐNÐNÀ:ÐNÐNÐNØ˜ð :øð ŒF×$Ò$ TÔ%8Ñ9Ô9Ð9ØŒF×$Ò$ TÔ%8Ñ9Ô9Ð9ØŒF×$Ò$ TÔ%7Ñ8Ô8Ð8Ð8Ð8r   NrV   r
   r   r   ÚSmallKGadgetr\   •   sD   € € € € € ð	Lð 	Lð 	Lð
	.ð 
	.ð 
	.ð
	9ð 
	9ð 
	9ð 
	9ð 
	9r   rf   c              3   ó*   •K  — | ]\  }}|‰k     V — Œd S r	   r
   )r   r   r   r(   s      €r   r   zk_factor.<locals>.<genexpr>¹   s+   øè è € Ð
&Ð
&‘T�Q˜ˆ1ˆqŠ5Ð
&Ð
&Ð
&Ð
&Ð
&Ð
&r   z/Graph contains a vertex with degree less than kg       @T)Úmaxcardinalityr,   z7Cannot find k-factor because no perfect matching existsé   )Únetworkx.algorithms.matchingr.   r/   Úanyr   r   ÚNetworkXUnfeasibleÚcopyrD   rP   ÚappendÚedgesÚremove_edgerU   )r    r(   Úmatching_weightr.   r/   rZ   rf   Úgadgetsr6   r   ÚgadgetÚmatchingÚedger<   s    `           @r   r   r   I   s  øø€ ðP VÐUÐUÐUÐUÐUÐUÐUð 4ð  4ð  4ð  4ð  4ð  4ð  4ñ  4ô  4ð  4ðD!9ð !9ð !9ð !9ð !9ñ !9ô !9ð !9õH Ð
&Ð
&Ð
&Ð
&˜QœXÐ
&Ñ
&Ô
&Ñ&Ô&ð WÝÔ#Ð$UÑVÔVÐVØ	�Š‰Œ€Að €GÝ˜QœX™œð ð ‰ˆˆfØˆv˜‰|ÒÐØ!�\ ! V¨T°1Ñ5Ô5ˆFˆFà!�\ ! V¨T°1Ñ5Ô5ˆFØ×ÒÑÔÐØ�Š�vÑÔÐÐð #Ð" 1°TÀ/ÐRÑRÔR€Hð Ð˜q (Ñ+Ô+ð 
ÝÔ#ØEñ
ô 
ð 	
ð —’‘	”	ð ,ð ,ˆØ�xÐÐ T¨!¤W¨d°1¬gÐ$6¸hÐ$FÐ$FØ�MŠM˜$˜qœ' 4¨¤7Ñ+Ô+Ð+øàð ð ˆØ×ÒÑÔÐÐà€Hr   )r,   )
Ú__doc__Únetworkxr   Únetworkx.utilsr   Ú__all__Ú_dispatchabler   r   r   r
   r   r   ú<module>r{      sù   ðØ ;Ð ;à Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .à
4Ð
4Ð
4€ð Ôð"*ð "*ñ Ôð"*ðJ Ð�ZÑ Ô ØÔð,ð ,ñ Ôñ !Ô ð,ð0 Ð�ZÑ Ô ØÐ�\Ñ"Ô"Ø€Ô d¸$Ð?Ñ?Ô?ðKð Kð Kñ @Ô?ñ #Ô"ñ !Ô ðKð Kð Kr   