§
    bŠtj  ã                   ó  — 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 |                      |¦  «        Šˆfd„| j        D ¦   «         }|  	                    |¦  «        Šˆfd„| j	        D ¦   «         }t          |¦  «        ot          |¦  «        S )aê  Determines whether a graph is regular.

    A regular graph is a graph where all nodes have the same degree. A regular
    digraph is a graph where all nodes have the same indegree and all nodes
    have the same outdegree.

    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      €úY/var/www/html/CA-Chatbot/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+   øè è € Ð8Ð8¡D A q�d˜a’iÐ8Ð8Ð8Ð8Ð8Ð8r   c              3   ó*   •K  — | ]\  }}‰|k    V — Œd S r	   r
   )r   r   r   Úd_outs      €r   r   zis_regular.<locals>.<genexpr>+   s+   øè è € Ð;Ð;¡d a¨�u ’zÐ;Ð;Ð;Ð;Ð;Ð;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Ø�=Š=‰?Œ?ð 4Ø�XŠX�b‰\Œ\ˆÝÐ0Ð0Ð0Ð0 q¤xÐ0Ñ0Ô0Ñ0Ô0Ð0à�{Š{˜2‰ŒˆØ8Ð8Ð8Ð8¨A¬KÐ8Ñ8Ô8ˆ
Ø—’˜RÑ Ô ˆØ;Ð;Ð;Ð;¨a¬lÐ;Ñ;Ô;ˆÝ�:‰ŒÐ3¥3 {Ñ#3Ô#3Ð3r   Ú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                 ó&  ‡‡‡‡‡‡— t          ˆfd„| j        D ¦   «         ¦  «        rt          j        d¦  «        ‚|                      ¦   «         }g }| j        D �]I\  Š}‰|dz  k    Šˆfd„t          |¦  «        D ¦   «         Š‰r%ˆfd„t          |d|z  ‰z
  ¦  «        D ¦   «         }g ŠnDˆfd„t          d|z  d|z  ‰z   ¦  «        D ¦   «         }ˆfd„t          |d|z  ¦  «        D ¦   «         Š|                     t          ‰‰¦  «        ¦  «         t          ‰|‰                              ¦   «         ¦  «        D ]\  }\  }}	 |j	        ||fi |	¤Ž Œ|                     ˆˆˆfd	„|D ¦   «         ¦  «         | 
                    ‰¦  «         |                     ‰‰|‰f¦  «         �ŒKt          j        |d
|¬¦  «        Št          j        |‰¦  «        st          j        d¦  «        ‚|                     ˆfd„|j        D ¦   «         ¦  «         |D ]…\  ŠŠ}Š|                     ‰¦  «         t#          |¦  «        }
‰D ]<}|j        |                              ¦   «         D ]\  }}	||
vr |j	        ‰|fi |	¤Ž  nŒŒ=|                     ‰|z   ‰z   ¦  «         Œ†|S )u<  Compute a `k`-factor of a graph.

    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 node of `G` and a subset of the edges of `G` such that each
    node has degree `k`.

    Parameters
    ----------
    G : NetworkX graph
        An undirected graph.

    k : int
        The degree of the `k`-factor.

    matching_weight: string, optional (default="weight")
        Edge attribute name corresponding to the edge weight.
        If not present, the edge is assumed to have weight 1.
        Used for finding the max-weighted perfect matching.

    Returns
    -------
    NetworkX graph
        A `k`-factor of `G`.

    Examples
    --------
    >>> G = nx.Graph([(1, 2), (2, 3), (3, 4), (4, 1)])
    >>> KF = nx.k_factor(G, k=1)
    >>> KF.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.
    c              3   ó*   •K  — | ]\  }}|‰k     V — Œd S r	   r
   )r   r   r   r(   s      €r   r   zk_factor.<locals>.<genexpr>t   s+   øè è € Ð
&Ð
&‘T�Q˜ˆ1ˆqŠ5Ð
&Ð
&Ð
&Ð
&Ð
&Ð
&r   z/Graph contains a vertex with degree less than kg       @c                 ó   •— g | ]}‰|f‘ŒS r
   r
   ©r   ÚiÚnodes     €r   ú
<listcomp>zk_factor.<locals>.<listcomp>   s   ø€ Ð2Ð2Ð2˜q�$˜�Ð2Ð2Ð2r   c                 ó   •— g | ]}‰|f‘ŒS r
   r
   r0   s     €r   r3   zk_factor.<locals>.<listcomp>�   s   ø€ ÐEÐEÐE !�T˜1�IÐEÐEÐEr   é   c                 ó   •— g | ]}‰|f‘ŒS r
   r
   r0   s     €r   r3   zk_factor.<locals>.<listcomp>„   s   ø€ ÐIÐIÐI !�T˜1�IÐIÐIÐIr   c                 ó   •— g | ]}‰|f‘ŒS r
   r
   r0   s     €r   r3   zk_factor.<locals>.<listcomp>…   s   ø€ ÐBÐBÐB 1�d˜A�YÐBÐBÐBr   c              3   ó2   •K  — | ]}‰r‰n‰D ]}||fV — Œ	Œd S r	   r
   )r   ÚuÚvÚinnerÚis_largeÚouters      €€€r   r   zk_factor.<locals>.<genexpr>�   s=   øè è € ÐVÐV AÀÐ8T¸¸ÈuÐVÐV°!˜!˜Q˜ÐVÐVÐVÐVÐVÐVÐVr   T)Úmaxcardinalityr,   z7Cannot find k-factor because no perfect matching existsc              3   ó>   •K  — | ]}|‰v¯|d d d…         ‰v¯|V — Œd S )Néÿÿÿÿr
   )r   ÚeÚms     €r   r   zk_factor.<locals>.<genexpr>š   s?   øè è € ÐNÐN˜a¨a°q¨j¨j¸Q¸t¸tÀ¸t¼WÈAÐ=MÐ=M˜Ð=MÐ=MÐ=MÐ=MÐNÐNr   )Úanyr   r   ÚNetworkXUnfeasibleÚcopyÚrangeÚadd_edges_fromÚzipÚitemsÚadd_edgeÚremove_nodeÚappendÚmax_weight_matchingÚis_perfect_matchingÚremove_edges_fromÚedgesÚadd_nodeÚsetÚ_adjÚremove_nodes_from)r    r(   Úmatching_weightÚgÚgadgetsr   ÚcoreÚouter_nÚneighborÚattrsÚcore_setr;   r<   rB   r2   r=   s    `         @@@@@r   r   r   I   s4  øøøøøø€ õV Ð
&Ð
&Ð
&Ð
&˜QœXÐ
&Ñ
&Ô
&Ñ&Ô&ð WÝÔ#Ð$UÑVÔVÐVà	�Š‰Œ€AØ€Gð œð 3ñ 3‰ˆˆfØ˜ ™Ò$ˆð 3Ð2Ð2Ð2¥E¨&¡M¤MÐ2Ñ2Ô2ˆØð 	CØEÐEÐEÐE¥u¨V°Q¸±ZÀ!±^Ñ'DÔ'DÐEÑEÔEˆDØˆEˆEàIÐIÐIÐI¥u¨Q°©Z¸¸V¹Àa¹Ñ'HÔ'HÐIÑIÔIˆDØBÐBÐBÐB­¨f°a¸&±jÑ(AÔ(AÐBÑBÔBˆEð 	
×Ò�˜U EÑ*Ô*Ñ+Ô+Ð+Ý*-¨e°Q°t´W·]²]±_´_Ñ*EÔ*Eð 	3ð 	3Ñ&ˆGÑ&�h ØˆAŒJ�w Ð2Ð2¨EÐ2Ð2Ð2Ð2ð 	
×ÒÐVÐVÐVÐVÐVÐV¨ÐVÑVÔVÑVÔVÐVà	�Š�dÑÔÐØ�Š˜˜e T¨5Ð1Ñ2Ô2Ð2Ñ2õ 	Ô˜q°¸oÐNÑNÔN€AÝÔ! ! QÑ'Ô'ð 
ÝÔ#ØEñ
ô 
ð 	
ð
 ×ÒÐNÐNÐNÐN 1¤7ÐNÑNÔNÑNÔNÐNð %,ð 2ð 2Ñ ˆˆe�T˜5Ø	�
Š
�4ÑÔÐÝ�t‘9”9ˆØð 	ð 	ˆGØ#$¤6¨'¤?×#8Ò#8Ñ#:Ô#:ð ð ‘�˜%Ø 8Ð+Ð+Ø�A”J˜t XÐ7Ð7°Ð7Ð7Ð7Ø�Eð ,øð 	
×Ò˜E D™L¨5Ñ0Ñ1Ô1Ð1Ð1à€Hr   )r,   )
Ú__doc__Únetworkxr   Únetworkx.utilsr   Ú__all__Ú_dispatchabler   r   r   r
   r   r   ú<module>rb      sù   ðØ ;Ð ;à Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .à
4Ð
4Ð
4€ð Ôð"4ð "4ñ Ôð"4ðJ Ð�ZÑ Ô ØÔð,ð ,ñ Ôñ !Ô ð,ð0 Ð�ZÑ Ô ØÐ�\Ñ"Ô"Ø€Ô d¸$Ð?Ñ?Ô?ð[ð [ð [ñ @Ô?ñ #Ô"ñ !Ô ð[ð [ð [r   