ó
    …~i%
  ã                   óv   • S SK r S SKrS SKJr  S/r\R                  \" S5      \" S5      S 5       5       5       rg)é    N)Únot_implemented_forÚis_perfect_graphÚdirectedÚ
multigraphc                 óÒ   • [        S [        R                  " [        R                  " U 5      [        R                  " [        R
                  " U 5      5      5       5       5      (       + $ )uµ  Return True if G is a perfect graph, else False.

A graph G is perfect if, for every induced subgraph H of G, the chromatic
number of H equals the size of the largest clique in H.

According to the **Strong Perfect Graph Theorem (SPGT)**:
A graph is perfect if and only if neither the graph G nor its complement
:math:`\overline{G}` contains an **induced odd hole** â€” an induced cycle of
odd length at least five without chords.

Parameters
----------
G : NetworkX Graph
    The graph to check. Must be a finite, simple, undirected graph.

Returns
-------
bool
    True if G is a perfect graph, else False.

Notes
-----
This function uses a direct approach: cycle enumeration to detect
chordless odd cycles in G and :math:`\overline{G}`. This implementation
runs in exponential time in the worst case, since the number of chordless
cycles can grow exponentially.

The perfect-graph recognition problem is theoretically solvable in
polynomial time. Chudnovsky *et al.* (2006) proved it can be solved in
:math:`O(n^9)` time via a complex structural decomposition [1]_, [2]_.
This implementation opts for a direct, transparent check rather than
implementing that high-degree polynomial-time decomposition algorithm.

See Also
--------
is_chordal, is_bipartite :
    Related checks for specific categories of perfect graphs, such as chordal
    graphs, and bipartite graphs.
chordless_cycles :
    Used to detect "holes" in the graph

References
----------
.. [1] M. Chudnovsky, N. Robertson, P. Seymour, and R. Thomas,
       *The Strong Perfect Graph Theorem*,
       Annals of Mathematics, vol. 164, no. 1, pp. 51â€“229, 2006.
       https://doi.org/10.4007/annals.2006.164.51
.. [2] M. Chudnovsky, G. CornuÃ©jols, X. Liu, P. Seymour, and K. VuÅ¡koviÄ‡,
       *Recognizing Berge Graphs*,
       Combinatorica 25(2): 143â€“186, 2005.
       DOI: 10.1007/s00493-005-0003-8
       Preprint available at:
       https://web.math.princeton.edu/~pds/papers/algexp/Bergealg.pdf
c              3   ón   #   • U  H+  n[        U5      S :¬  =(       a    [        U5      S-  S:H  v •  M-     g7f)é   é   é   N)Úlen)Ú.0Úcs     Ú^/home/mande/repo/quber/.venv/lib/python3.13/site-packages/networkx/algorithms/perfect_graph.pyÚ	<genexpr>Ú#is_perfect_graph.<locals>.<genexpr>D   s7   é € ð ò
ˆAô 
ˆQ‹�1‰×+œ3˜q›6 A™:¨™?Ô+ò
ùs   ‚35)ÚanyÚ	itertoolsÚchainÚnxÚchordless_cyclesÚ
complement)ÚGs    r   r   r   	   sQ   € ôv ñ ä—’Ü×Ò Ó"¤B×$7Ò$7¼¿ºÀaÓ8HÓ$Iô
óó ô ð ó    )r   Únetworkxr   Únetworkx.utils.decoratorsr   Ú__all__Ú_dispatchabler   © r   r   Ú<module>r      sJ   ðÛ ã Ý 9àÐ
€ð ×ÑÙ�ZÓ Ù�\Ó"ñ=ó #ó !ó ñ=r   