ó
    …~i  ã                   óà   • S r SSKrSSKJr  / SQr\R                  S 5       r\" S5      \R                  S 5       5       r\" S5      \" S5      \R                  " S	S	S
9SS j5       5       5       r	g)z5Functions for computing and verifying regular graphs.é    N)Únot_implemented_for)Ú
is_regularÚis_k_regularÚk_factorc                 óð  ^^^• [        U 5      S:X  a  [        R                  " S5      e[        R                  R	                  U 5      nU R                  5       (       d0  U R                  U5      m[        U4S jU R                   5       5      $ U R                  U5      mU4S jU R                   5       nU R                  U5      mU4S jU R                   5       n[        U5      =(       a    [        U5      $ )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   ó2   >#   • U  H  u  pTU:H  v •  M     g 7f©N© )Ú.0Ú_ÚdÚd1s      €ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/networkx/algorithms/regular.pyÚ	<genexpr>Úis_regular.<locals>.<genexpr>&   s   øé € Ð0¢x™t˜q�2˜–7¢xùó   ƒc              3   ó2   >#   • U  H  u  pTU:H  v •  M     g 7fr	   r
   )r   r   r   Úd_ins      €r   r   r   )   s   øé € Ð8ªK¡D A�d˜a–iªKùr   c              3   ó2   >#   • U  H  u  pTU:H  v •  M     g 7fr	   r
   )r   r   r   Úd_outs      €r   r   r   +   s   øé € Ð;ªl¡d a�u –zªlù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�ƒ{Ü×)Ò)Ð*?Ó@Ð@Ü	�‰×	#Ñ	# AÓ	&€BØ�=‰=�?‰?Ø�X‰X�b‹\ˆÜÔ0 q§x¢xÓ0Ó0Ð0à�{‰{˜2‹ˆÜ8¨A¯KªKÓ8ˆ
Ø—‘˜RÓ ˆÜ;¨a¯lªlÓ;ˆÜ�:‹×3¤3 {Ó#3Ð3ó    Údirectedc                 óB   ^• [        U4S jU R                   5       5      $ )aJ  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   ó2   >#   • U  H  u  pUT:H  v •  M     g 7fr	   r
   )r   Únr   Úks      €r   r   Úis_k_regular.<locals>.<genexpr>F   s   øé € Ð+¢(™$˜!ˆq�AŽv¢(ùr   )r   r   )r!   r*   s    `r   r   r   /   s   ø€ ô. Ô+ !§(¢(Ó+Ó+Ð+r%   Ú
multigraphT)Úpreserve_edge_attrsÚreturns_graphc                 óR  ^^^^^• [        U4S jU R                   5       5      (       a  [        R                  " S5      eU R	                  5       n/ nU R                   GH8  u  pVTUS-  :¬  m[        U5       Vs/ s H  ouU4PM     snmT(       a&  [        USU-  T-
  5       Vs/ s H  ouU4PM     nn/ mOG[        SU-  SU-  T-   5       Vs/ s H  ouU4PM     nn[        USU-  5       Vs/ s H  ouU4PM     snmUR                  [        TT5      5        [        TX5   R                  5       5       H  u  n	u  p«UR                  " Xš40 UD6  M     UR                  UUU4S jU 5       5        UR                  U5        UR                  UTUT45        GM;     [        R                  " USUS9m[        R                  " UT5      (       d  [        R                  " S5      eUR                  U4S	 jUR                   5       5        U H…  u  nmnmUR!                  U5        [#        U5      nT HD  n	UR$                  U	   R                  5        H   u  p«X¬;  d  M  UR                  " XZ40 UD6    MB     MF     UR'                  TU-   T-   5        M‡     U$ s  snf s  snf s  snf s  snf )
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   ó2   >#   • U  H  u  pUT:  v •  M     g 7fr	   r
   )r   r   r   r*   s      €r   r   Úk_factor.<locals>.<genexpr>t   s   øé € Ð
&šX‘T�Qˆ1ˆqŽ5šXùr   z/Graph contains a vertex with degree less than kg       @é   c              3   óP   >#   • U  H  nT(       a  TOT  H  o!U4v •  M
     M     g 7fr	   r
   )r   ÚuÚvÚinnerÚis_largeÚouters      €€€r   r   r1   �   s#   øé € ÐVª AÆ¹ÈuÓ8T°!˜Q�Ñ8T™ªùs   ƒ#&T)ÚmaxcardinalityÚweightz7Cannot find k-factor because no perfect matching existsc              3   óR   >#   • U  H  oT;  d  M
  US S S2   T;  d  M  Uv •  M     g 7f)Néÿÿÿÿr
   )r   ÚeÚms     €r   r   r1   š   s(   øé € ÐN¢7˜a°q©j›¸Q¹tÀ¸t¹WÈAÑ=MŸ™¢7ùs   ƒ	'�
'ž	')Ú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ÚgadgetsÚnoder   ÚiÚcoreÚouter_nÚneighborÚattrsÚcore_setr6   r7   r>   r8   s    `           @@@@r   r   r   I   sm  ü€ ôV Ô
&˜QŸXšXÓ
&×&Ñ&Ü×#Ò#Ð$UÓVÐVà	�‰‹€AØ€Gð Ÿ�‰ˆØ˜ ™Ñ$ˆô %*¨&¤MÓ2¢M˜q˜“¡MÑ2ˆÞÜ',¨V°Q¸±ZÀ!±^Ô'DÓEÒ'D !˜1“IÑ'DˆDÐEØ‰Eä',¨Q°©Z¸¸V¹Àa¹Ô'HÓIÒ'H !˜1“IÑ'HˆDÐIÜ(-¨f°a¸&±jÔ(AÓBÒ(A 1˜A“YÑ(AÑBˆEð 	
×Ñœ˜U EÓ*Ô+Ü*-¨e°Q±W·]±]³_Ö*EÑ&ˆGÑ&�hØ�JŠJ�wÑ2¨EÔ2ñ +Fð 	
×ÑÖV©ÓVÔVà	�‰�dÔØ�‰˜˜e T¨5Ð1×2ñ+ !ô0 	×Ò˜q°¸oÑN€AÜ×!Ò! ! Q×'Ñ'Ü×#Ò#ØEó
ð 	
ð
 ×ÑÔN 1§7¢7ÓNÔNó %,Ñ ˆˆe�T˜5Ø	�
‰
�4ÔÜ�t“9ˆÛˆGØ#$§6¡6¨'¡?×#8Ñ#8Ö#:‘�ØÕ+Ø—J’J˜tÑ7°Ò7Úó $;ñ ð
 	
×Ñ˜E D™L¨5Ñ0Ö1ñ %,ð €HùòQ 3ùâEùò JùÚBs   Á9JÂ$JÃJÃ-J$)r:   )
Ú__doc__Únetworkxr   Únetworkx.utilsr   Ú__all__Ú_dispatchabler   r   r   r
   r%   r   Ú<module>r`      s“   ðÙ ;ã Ý .â
4€ð ×Ññ"4ó ð"4ñJ �ZÓ Ø×Ññ,ó ó !ð,ñ0 �ZÓ Ù�\Ó"Ø×Ò d¸$Ñ?ó[ó @ó #ó !ñ[r%   