Ë
    D^(h�  ã                   óú   — d Z ddlZddlmZ ddlmZ g d¢Zej                  d„ «       Z	d„ Z
 ed	«       ed
«      ej                  d„ «       «       «       Z ed	«       ed
«      ej                  d„ «       «       «       Zy)zI
=======================
Distance-regular graphs
=======================
é    N)Únot_implemented_foré   )Údiameter)Úis_distance_regularÚis_strongly_regularÚintersection_arrayÚglobal_parametersc                 óN   — 	 t        | «       y# t        j                  $ r Y yw xY w)a  Returns True if the graph is distance regular, False otherwise.

    A connected graph G is distance-regular if for any nodes x,y
    and any integers i,j=0,1,...,d (where d is the graph
    diameter), the number of vertices at distance i from x and
    distance j from y depends only on i,j and the graph distance
    between x and y, independently of the choice of x and y.

    Parameters
    ----------
    G: Networkx graph (undirected)

    Returns
    -------
    bool
      True if the graph is Distance Regular, False otherwise

    Examples
    --------
    >>> G = nx.hypercube_graph(6)
    >>> nx.is_distance_regular(G)
    True

    See Also
    --------
    intersection_array, global_parameters

    Notes
    -----
    For undirected and simple graphs only

    References
    ----------
    .. [1] Brouwer, A. E.; Cohen, A. M.; and Neumaier, A.
        Distance-Regular Graphs. New York: Springer-Verlag, 1989.
    .. [2] Weisstein, Eric W. "Distance-Regular Graph."
        http://mathworld.wolfram.com/Distance-RegularGraph.html

    TF)r   ÚnxÚNetworkXError©ÚGs    úb/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/algorithms/distance_regular.pyr   r      s+   € ðRÜ˜1ÔØøÜ×Ñò Ùðús   ‚ Ž$£$c                 ó>   ‡ — ˆ fd„t        ‰ dgz   dg|z   «      D «       S )a„  Returns global parameters for a given intersection array.

    Given a distance-regular graph G with integers b_i, c_i,i = 0,....,d
    such that for any 2 vertices x,y in G at a distance i=d(x,y), there
    are exactly c_i neighbors of y at a distance of i-1 from x and b_i
    neighbors of y at a distance of i+1 from x.

    Thus, a distance regular graph has the global parameters,
    [[c_0,a_0,b_0],[c_1,a_1,b_1],......,[c_d,a_d,b_d]] for the
    intersection array  [b_0,b_1,.....b_{d-1};c_1,c_2,.....c_d]
    where a_i+b_i+c_i=k , k= degree of every vertex.

    Parameters
    ----------
    b : list

    c : list

    Returns
    -------
    iterable
       An iterable over three tuples.

    Examples
    --------
    >>> G = nx.dodecahedral_graph()
    >>> b, c = nx.intersection_array(G)
    >>> list(nx.global_parameters(b, c))
    [(0, 0, 3), (1, 0, 2), (1, 1, 1), (1, 1, 1), (2, 0, 1), (3, 0, 0)]

    References
    ----------
    .. [1] Weisstein, Eric W. "Global Parameters."
       From MathWorld--A Wolfram Web Resource.
       http://mathworld.wolfram.com/GlobalParameters.html

    See Also
    --------
    intersection_array
    c              3   ó@   •K  — | ]  \  }}|‰d    |z
  |z
  |f–— Œ y­w)r   N© )Ú.0ÚxÚyÚbs      €r   ú	<genexpr>z$global_parameters.<locals>.<genexpr>m   s(   øè ø€ ÒC¡T Q¨ˆQ��!‘�q‘˜1‘˜aÔ ÑCùs   ƒr   )Úzip)r   Úcs   ` r   r	   r	   D   s%   ø€ óR D¬S°°a°S±¸1¸#À¹'Ó-BÔCÐCó    ÚdirectedÚ
multigraphc           
      óÜ  ‡— t        | «      dk(  rt        j                  d«      ‚t        | j	                  «       «      }t        |«      \  }}|D ]!  \  }}||k7  rt        j                  d«      ‚|}Œ# t        t        j                  | «      «      Št        ˆfd„‰D «       «      }i }i }| D ]±  }| D ]ª  }		 ‰|   |	   }
t        | |	   D �cg c]  }‰|   |   |
dz
  k(  sŒ|‘Œ c}«      }t        | |	   D �cg c]  }‰|   |   |
dz   k(  sŒ|‘Œ c}«      }|j                  |
|«      |k7  s|j                  |
|«      |k7  rt        j                  d«      ‚|||
<   |||
<   Œ¬ Œ³ t        |«      D �cg c]  }|j                  |d«      ‘Œ c}t        |«      D �cg c]  }|j                  |dz   d«      ‘Œ c}fS # t        $ r}t        j                  d«      |‚d}~ww xY wc c}w c c}w c c}w c c}w )a�  Returns the intersection array of a distance-regular graph.

    Given a distance-regular graph G with integers b_i, c_i,i = 0,....,d
    such that for any 2 vertices x,y in G at a distance i=d(x,y), there
    are exactly c_i neighbors of y at a distance of i-1 from x and b_i
    neighbors of y at a distance of i+1 from x.

    A distance regular graph's intersection array is given by,
    [b_0,b_1,.....b_{d-1};c_1,c_2,.....c_d]

    Parameters
    ----------
    G: Networkx graph (undirected)

    Returns
    -------
    b,c: tuple of lists

    Examples
    --------
    >>> G = nx.icosahedral_graph()
    >>> nx.intersection_array(G)
    ([5, 2, 1], [1, 2, 5])

    References
    ----------
    .. [1] Weisstein, Eric W. "Intersection Array."
       From MathWorld--A Wolfram Web Resource.
       http://mathworld.wolfram.com/IntersectionArray.html

    See Also
    --------
    global_parameters
    r   zGraph has no nodes.zGraph is not distance regular.c              3   óV   •K  — | ]   }t        ‰|   j                  «       «      –— Œ" y ­w)N)ÚmaxÚvalues)r   ÚnÚpath_lengths     €r   r   z%intersection_array.<locals>.<genexpr>    s#   øè ø€ ÒE°A”3�{ 1‘~×,Ñ,Ó.×/ÑEùs   ƒ&)Nr   zGraph is not distance regular)Úlenr   ÚNetworkXPointlessConceptÚiterÚdegreeÚnextr   ÚdictÚall_pairs_shortest_path_lengthr   ÚKeyErrorÚgetÚrange)r   r&   Ú_ÚkÚknextr   ÚbintÚcintÚuÚvÚiÚerrr!   r   r   Újr"   s                   @r   r   r   p   sø  ø€ ôN ˆ1ƒv�‚{Ü×)Ñ)Ð*?Ó@Ð@Ü�!—(‘(“*Ó€FÜ�&‹\�F€QˆØò ‰ˆˆ5Ø�AŠ:Ü×"Ñ"Ð#CÓDÐDØ‰ðô ”r×8Ñ8¸Ó;Ó<€KÜÓE¸ÔEÓE€HØ€DØ€DØò ˆØò 	ˆAðRØ ‘N 1Ñ%�ô   !¡ÖC˜1¨°A©°qÑ(9¸QÀ¹UÓ(B’QÒCÓDˆAä  !¡ÖC˜1¨°A©°qÑ(9¸QÀ¹UÓ(B’QÒCÓDˆAà�x‰x˜˜1‹~ Ò" d§h¡h¨q°!£n¸Ò&9Ü×&Ñ&Ð'FÓGÐGØˆD�‰GØˆD�ŠGñ	ðô  "' x£Ö1˜Aˆ�‰�!�Q�Ò1Ü%*¨8£_Ö5 ˆ�‰�!�a‘%˜Õ	Ò5ðð øô ò RÜ×&Ñ&Ð'GÓHÈcÐQûðRüò DùâCùò 	2ùÚ5s<   Â3F3ÃGÃGÃ2GÄGÅ+G$ÆG)Æ3	GÆ<GÇGc                 ó8   — t        | «      xr t        | «      dk(  S )a  Returns True if and only if the given graph is strongly
    regular.

    An undirected graph is *strongly regular* if

    * it is regular,
    * each pair of adjacent vertices has the same number of neighbors in
      common,
    * each pair of nonadjacent vertices has the same number of neighbors
      in common.

    Each strongly regular graph is a distance-regular graph.
    Conversely, if a distance-regular graph has diameter two, then it is
    a strongly regular graph. For more information on distance-regular
    graphs, see :func:`is_distance_regular`.

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

    Returns
    -------
    bool
        Whether `G` is strongly regular.

    Examples
    --------

    The cycle graph on five vertices is strongly regular. It is
    two-regular, each pair of adjacent vertices has no shared neighbors,
    and each pair of nonadjacent vertices has one shared neighbor::

        >>> G = nx.cycle_graph(5)
        >>> nx.is_strongly_regular(G)
        True

    é   )r   r   r   s    r   r   r   ¹   s   € ôj ˜qÓ!Ò6¤h¨q£k°QÑ&6Ð6r   )Ú__doc__Únetworkxr   Únetworkx.utilsr   Údistance_measuresr   Ú__all__Ú_dispatchabler   r	   r   r   r   r   r   ú<module>r?      s©   ðñó Ý .å 'ò€ð ×Ññ,ó ð,ò^)DñX �ZÓ Ù�\Ó"Ø×ÑñBó ó #ó !ðBñL �ZÓ Ù�\Ó"Ø×Ññ27ó ó #ó !ñ27r   