+
    )i=                     X   R t ^ RIt^ RIt. R
Ot]P
                  ! RR7      RR l4       tR t]P
                  ! RR7      R 4       t]P
                  ! RR7      R 4       t	]P
                  ! RR7      R 4       t
]P
                  ! RR7      R 4       t]P
                  ! RR7      R	 4       tR# )zTest sequences for graphiness.N)graphsc                    VR8X  d   \        \        V 4      4      pV# VR8X  d   \        \        V 4      4      pV# Rp\        P                  ! V4      h)u  Returns True if sequence is a valid degree sequence.

A degree sequence is valid if some graph can realize it.

Parameters
----------
sequence : list or iterable container
    A sequence of integer node degrees

method : "eg" | "hh"  (default: 'eg')
    The method used to validate the degree sequence.
    "eg" corresponds to the Erdős-Gallai algorithm
    [EG1960]_, [choudum1986]_, and
    "hh" to the Havel-Hakimi algorithm
    [havel1955]_, [hakimi1962]_, [CL1996]_.

Returns
-------
valid : bool
    True if the sequence is a valid degree sequence and False if not.

Examples
--------
>>> G = nx.path_graph(4)
>>> sequence = (d for n, d in G.degree())
>>> nx.is_graphical(sequence)
True

To test a non-graphical sequence:
>>> sequence_list = [d for n, d in G.degree()]
>>> sequence_list[-1] += 1
>>> nx.is_graphical(sequence_list)
False

References
----------
.. [EG1960] Erdős and Gallai, Mat. Lapok 11 264, 1960.
.. [choudum1986] S.A. Choudum. "A simple proof of the Erdős-Gallai theorem on
   graph sequences." Bulletin of the Australian Mathematical Society, 33,
   pp 67-70, 1986. https://doi.org/10.1017/S0004972700002872
.. [havel1955] Havel, V. "A Remark on the Existence of Finite Graphs"
   Casopis Pest. Mat. 80, 477-480, 1955.
.. [hakimi1962] Hakimi, S. "On the Realizability of a Set of Integers as
   Degrees of the Vertices of a Graph." SIAM J. Appl. Math. 10, 496-506, 1962.
.. [CL1996] G. Chartrand and L. Lesniak, "Graphs and Digraphs",
   Chapman and Hall/CRC, 1996.
eghhz`method` must be 'eg' or 'hh')%is_valid_degree_sequence_erdos_gallailist%is_valid_degree_sequence_havel_hakiminxNetworkXException)sequencemethodvalidmsgs   &&  [/var/www/html/photoedit/myenv/lib/python3.14/site-packages/networkx/algorithms/graphical.pyis_graphicalr      sW    b ~5d8nE L 
45d8nE L .""3''    c                    \         P                  P                  V 4      p \        V 4      p^ .V,          p^ V^ ^ 3w  r4rVV  Fe  pV^ 8  g   Wq8  d   \         P                  hV^ 8  g   K)  \        W74      \        WG4      WW,           V^,           3w  r4rVW';;,          ^,          uu&   Kg  	  V^,          '       g   WVV^,
          ,          8  d   \         P                  hW4WVV3# )    )r	   utilsmake_list_of_intslenNetworkXUnfeasiblemaxmin)deg_sequencepnum_degsdmaxdmindsumnds   &       r   _basic_graphical_testsr"   L   s    88--l;LLAsQwHQ1*Dq5AF'''U"%d,DdhA"MDK1K  axx4q1u+%###t((r   c                    \        V 4      w  rr4pT^ 8X  g7   ^T,          T,          Y,           ^,           Y,           ^,           ,          8  d   R# ^ .T^,           ,          pT^ 8  d   YQ,          ^ 8X  d   T^,          pK  Y^,
          8  d   R# YQ,          ^,
          T^,
          uYQ&   p^ pTp\        T4       FS  p	YX,          ^ 8X  d   T^,          pK  YX,          ^,
          T^,
          uYX&   pT^8  g   K?  T^,
          Yg&   T^,          pKU  	  \        T4       F&  p	Yi,          p
YZ,          ^,           T^,           uYZ&   pK(  	  K  R#   \        P                   d     R# i ; i)a  Returns True if deg_sequence can be realized by a simple graph.

The validation proceeds using the Havel-Hakimi theorem
[havel1955]_, [hakimi1962]_, [CL1996]_.
Worst-case run time is $O(s)$ where $s$ is the sum of the sequence.

Parameters
----------
deg_sequence : list
    A list of integers where each element specifies the degree of a node
    in a graph.

Returns
-------
valid : bool
    True if deg_sequence is graphical and False if not.

Examples
--------
>>> G = nx.Graph([(1, 2), (1, 3), (2, 3), (3, 4), (4, 2), (5, 1), (5, 4)])
>>> sequence = (d for _, d in G.degree())
>>> nx.is_valid_degree_sequence_havel_hakimi(sequence)
True

To test a non-valid sequence:
>>> sequence_list = [d for _, d in G.degree()]
>>> sequence_list[-1] += 1
>>> nx.is_valid_degree_sequence_havel_hakimi(sequence_list)
False

Notes
-----
The ZZ condition says that for the sequence d if

.. math::
    |d| >= \frac{(\max(d) + \min(d) + 1)^2}{4*\min(d)}

then d is graphical.  This was shown in Theorem 6 in [1]_.

References
----------
.. [1] I.E. Zverovich and V.E. Zverovich. "Contributions to the theory
   of graphic sequences", Discrete Mathematics, 105, pp. 292-303 (1992).
.. [havel1955] Havel, V. "A Remark on the Existence of Finite Graphs"
   Casopis Pest. Mat. 80, 477-480, 1955.
.. [hakimi1962] Hakimi, S. "On the Realizability of a Set of Integers as
   Degrees of the Vertices of a Graph." SIAM J. Appl. Math. 10, 496-506, 1962.
.. [CL1996] G. Chartrand and L. Lesniak, "Graphs and Digraphs",
   Chapman and Hall/CRC, 1996.
FTr"   r	   r   range)r   r   r   r   r    r   modstubsmslenkistubs   &          r   r   r   `   sE   h(>|(L%DX 	AvTA$+/dkAo!FFsdQhH
a%n!AID a%< %NQ.AtA+"Q%[1_a!eNHK1u"#a%
  uA;D ( 2AEHNA  C    s   E	 	E"!E"c                    \        V 4      w  rr4pT^ 8X  g7   ^T,          T,          Y,           ^,           Y,           ^,           ,          8  d   R# Rw  rgr\        Y^,
          R4       F  p
Y^,           8  d    R# YZ,          ^ 8  g   K"  YZ,          pYT,           8  d	   Y,
          pY{T
,          ,          p\        T4       F;  pYYl,           ,          ,          pYT,           YVT,           ,          ,          ,          p	K=  	  Yk,          pYvT^,
          ,          Yh,          ,
          T	,           8  g   K   R# 	  R#   \        P                   d     R# i ; i)u;  Returns True if deg_sequence can be realized by a simple graph.

The validation is done using the Erdős-Gallai theorem [EG1960]_.

Parameters
----------
deg_sequence : list
    A list of integers

Returns
-------
valid : bool
    True if deg_sequence is graphical and False if not.

Examples
--------
>>> G = nx.Graph([(1, 2), (1, 3), (2, 3), (3, 4), (4, 2), (5, 1), (5, 4)])
>>> sequence = (d for _, d in G.degree())
>>> nx.is_valid_degree_sequence_erdos_gallai(sequence)
True

To test a non-valid sequence:
>>> sequence_list = [d for _, d in G.degree()]
>>> sequence_list[-1] += 1
>>> nx.is_valid_degree_sequence_erdos_gallai(sequence_list)
False

Notes
-----

This implementation uses an equivalent form of the Erdős-Gallai criterion.
Worst-case run time is $O(n)$ where $n$ is the length of the sequence.

Specifically, a sequence d is graphical if and only if the
sum of the sequence is even and for all strong indices k in the sequence,

 .. math::

   \sum_{i=1}^{k} d_i \leq k(k-1) + \sum_{j=k+1}^{n} \min(d_i,k)
         = k(n-1) - ( k \sum_{j=0}^{k-1} n_j - \sum_{j=0}^{k-1} j n_j )

A strong index k is any index where d_k >= k and the value n_j is the
number of occurrences of j in d.  The maximal strong index is called the
Durfee index.

This particular rearrangement comes from the proof of Theorem 3 in [2]_.

The ZZ condition says that for the sequence d if

.. math::
    |d| >= \frac{(\max(d) + \min(d) + 1)^2}{4*\min(d)}

then d is graphical.  This was shown in Theorem 6 in [2]_.

References
----------
.. [1] A. Tripathi and S. Vijay. "A note on a theorem of Erdős & Gallai",
   Discrete Mathematics, 265, pp. 417-420 (2003).
.. [2] I.E. Zverovich and V.E. Zverovich. "Contributions to the theory
   of graphic sequences", Discrete Mathematics, 105, pp. 292-303 (1992).
.. [EG1960] Erdős and Gallai, Mat. Lapok 11 264, 1960.
FT)r   r   r   r   r$   )r   r   r   r   r    r   r(   sum_degsum_njsum_jnjdkrun_sizevs   &            r   r   r      s   @(>|(L%DX 	AvTA$+/dkAo!FF #-AD(B'A:<!|HL 6"}$G8_15/)EX!e_44 % MAa!eqz1G;; ( -    s   D9 9EEc                    \         P                  P                  V 4      p^ ^ r2T F  pT^ 8  d    R# Y$,           \	        Y44      r2K!  	  T^,          '       g   T^T,          8  d   R# R#   \         P                   d     R# i ; i)a=  Returns True if some multigraph can realize the sequence.

Parameters
----------
sequence : list
    A list of integers

Returns
-------
valid : bool
    True if deg_sequence is a multigraphic degree sequence and False if not.

Examples
--------
>>> G = nx.MultiGraph([(1, 2), (1, 3), (2, 3), (3, 4), (4, 2), (5, 1), (5, 4)])
>>> sequence = (d for _, d in G.degree())
>>> nx.is_multigraphical(sequence)
True

To test a non-multigraphical sequence:
>>> sequence_list = [d for _, d in G.degree()]
>>> sequence_list[-1] += 1
>>> nx.is_multigraphical(sequence_list)
False

Notes
-----
The worst-case run time is $O(n)$ where $n$ is the length of the sequence.

References
----------
.. [1] S. L. Hakimi. "On the realizability of a set of integers as
   degrees of the vertices of a linear graph", J. SIAM, 10, pp. 496-506
   (1962).
FT)r	   r   r   NetworkXErrorr   )r   r   r   r   r!   s   &    r   is_multigraphicalr5     s{    Jxx11(; A$q5Xs4|d  axx4!d(?  s   A* *BBc                     \         P                  P                  V 4      p\	        T4      ^,          ^ 8H  ;'       d    \        T4      ^ 8  #   \         P                   d     R# i ; i)a  Returns True if some pseudograph can realize the sequence.

Every nonnegative integer sequence with an even sum is pseudographical
(see [1]_).

Parameters
----------
sequence : list or iterable container
    A sequence of integer node degrees

Returns
-------
valid : bool
  True if the sequence is a pseudographic degree sequence and False if not.

Examples
--------
>>> G = nx.Graph([(1, 2), (1, 3), (2, 3), (3, 4), (4, 2), (5, 1), (5, 4)])
>>> sequence = (d for _, d in G.degree())
>>> nx.is_pseudographical(sequence)
True

To test a non-pseudographical sequence:
>>> sequence_list = [d for _, d in G.degree()]
>>> sequence_list[-1] += 1
>>> nx.is_pseudographical(sequence_list)
False

Notes
-----
The worst-case run time is $O(n)$ where n is the length of the sequence.

References
----------
.. [1] F. Boesch and F. Harary. "Line removal algorithms for graphs
   and their degree lists", IEEE Trans. Circuits and Systems, CAS-23(12),
   pp. 778-782 (1976).
F)r	   r   r   r4   sumr   )r   r   s   & r   is_pseudographicalr8   H  s_    Pxx11(; |q A%@@#l*;q*@@  s   A A%$A%c                    \         P                  P                  V 4      p\         P                  P                  V4      p^ ^ \	        T4      \	        T4      3w  rErg\        Yg4      p^ p	T^ 8X  d   R# . . r\        T4       F  p^ ^ rY8  d	   Y<,          pY8  d	   Y,,          pT^ 8  g   T^ 8  d    R# YM,           Y^,           \        Y4      rpT^ 8  d$   T
P                  RT,          RT,          34       Kw  T^ 8  g   K  TP                  RT,          4       K  	  YE8w  d   R# \        P                  ! T
4       \        P                  ! T4       R.T	^,           ,          pT
'       Eds   \        P                  ! T
4      w  ppTR,          pT\	        T
4      \	        T4      ,           8  d   R# ^ p\        T4       F  pT'       d>   T
'       d   T
^ ,          ^ ,          T^ ,          8  d   \        P                  ! T4      p^ pM\        P                  ! T
4      w  ppT^ 8X  d    R# T^,           ^ 8  g
   T^ 8  g   K  T^,           T3TT&   T^,          pK  	  \        T4       FQ  pTT,          pT^,          ^ 8  d   \        P                  ! T
T4       K3  \        P                  ! TT^ ,          4       KS  	  T^ 8  g   EKa  \        P                  ! TT4       EK{  R#   \         P                   d     R# i ; i)a`  Returns True if some directed graph can realize the in- and out-degree
sequences.

Parameters
----------
in_sequence : list or iterable container
    A sequence of integer node in-degrees

out_sequence : list or iterable container
    A sequence of integer node out-degrees

Returns
-------
valid : bool
  True if in and out-sequences are digraphic False if not.

Examples
--------
>>> G = nx.DiGraph([(1, 2), (1, 3), (2, 3), (3, 4), (4, 2), (5, 1), (5, 4)])
>>> in_seq = (d for n, d in G.in_degree())
>>> out_seq = (d for n, d in G.out_degree())
>>> nx.is_digraphical(in_seq, out_seq)
True

To test a non-digraphical scenario:
>>> in_seq_list = [d for n, d in G.in_degree()]
>>> in_seq_list[-1] += 1
>>> nx.is_digraphical(in_seq_list, out_seq)
False

Notes
-----
This algorithm is from Kleitman and Wang [1]_.
The worst case runtime is $O(s \times \log n)$ where $s$ and $n$ are the
sum and length of the sequences respectively.

References
----------
.. [1] D.J. Kleitman and D.L. Wang
   Algorithms for Constructing Graphs and Digraphs with Given Valences
   and Factors, Discrete Mathematics, 6(1), pp. 79-88 (1973)
FTr,   )r   r   )r	   r   r   r4   r   r   r%   appendheapqheapifyheappopheappush)in_sequenceout_sequencein_deg_sequenceout_deg_sequencesuminsumoutninnoutmaxnmaxinstubheapzeroheapr    in_degout_degr&   freeoutfreeinr'   r)   stuboutstubinr*   s   &&                     r   is_digraphicalrQ   w  sh   X((44[A8855lC
  !!S%93?O;PPE3s>DEqyRh4[Q8&)G7$'FA:1$~v/?UASuA:OOR'\2;78q[OOBL)  	MM(	MM(x519%H
(!MM(3&"CMCM11 vAXa[^hqk-I--1$)MM($;!&!|{Q&1*#*Q;"7
  uAA;DAw{x.xa1  Q;NN8W-{  s   >K K65K6)r   r5   r8   rQ   r   r   )r   )__doc__r;   networkxr	   __all___dispatchabler   r"   r   r   r5   r8   rQ    r   r   <module>rW      s    $   7 7t)( V Vr W Wt / /d +A +A\ k kr   