diff --git a/stubs/networkx/METADATA.toml b/stubs/networkx/METADATA.toml index 0f83cc29aabf..e8f26e707d76 100644 --- a/stubs/networkx/METADATA.toml +++ b/stubs/networkx/METADATA.toml @@ -1,6 +1,6 @@ -version = "3.6.1" -upstream-repository = "https://github.com/networkx/networkx" # Requires a version of NumPy with `numpy.typing.NDArray`. +version = "3.7" +upstream-repository = "https://github.com/networkx/networkx" optional-dependencies = ["numpy>=1.21"] [tool.stubtest] diff --git a/stubs/networkx/networkx/algorithms/bipartite/__init__.pyi b/stubs/networkx/networkx/algorithms/bipartite/__init__.pyi index 7b9c7b3c0d3c..f86e07b915fb 100644 --- a/stubs/networkx/networkx/algorithms/bipartite/__init__.pyi +++ b/stubs/networkx/networkx/algorithms/bipartite/__init__.pyi @@ -1,6 +1,7 @@ from networkx.algorithms.bipartite.basic import * from networkx.algorithms.bipartite.centrality import * from networkx.algorithms.bipartite.cluster import * +from networkx.algorithms.bipartite.community import * from networkx.algorithms.bipartite.covering import * from networkx.algorithms.bipartite.edgelist import * from networkx.algorithms.bipartite.extendability import * diff --git a/stubs/networkx/networkx/algorithms/bipartite/cluster.pyi b/stubs/networkx/networkx/algorithms/bipartite/cluster.pyi index 1a341ef85e92..821a4b7ab48b 100644 --- a/stubs/networkx/networkx/algorithms/bipartite/cluster.pyi +++ b/stubs/networkx/networkx/algorithms/bipartite/cluster.pyi @@ -4,7 +4,7 @@ from collections.abc import Callable, Iterable from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable -__all__ = ["clustering", "average_clustering", "latapy_clustering", "robins_alexander_clustering"] +__all__ = ["butterflies", "clustering", "average_clustering", "latapy_clustering", "robins_alexander_clustering"] def cc_dot(nu, nv) -> float: ... def cc_max(nu, nv) -> float: ... @@ -23,3 +23,5 @@ clustering = latapy_clustering def average_clustering(G: Graph[_Node], nodes: Iterable[Incomplete] | None = None, mode: str = "dot") -> float: ... @_dispatchable def robins_alexander_clustering(G: Graph[_Node]) -> float: ... +@_dispatchable +def butterflies(G: Graph[_Node], nodes: Iterable[_Node] | None = None) -> dict[_Node, int]: ... diff --git a/stubs/networkx/networkx/algorithms/bipartite/community.pyi b/stubs/networkx/networkx/algorithms/bipartite/community.pyi new file mode 100644 index 000000000000..5d27b5f45109 --- /dev/null +++ b/stubs/networkx/networkx/algorithms/bipartite/community.pyi @@ -0,0 +1,16 @@ +from collections.abc import Iterable, Set as AbstractSet + +from networkx.classes.graph import Graph, _Node +from networkx.utils.backends import _dispatchable + +__all__ = ["modularity"] + +@_dispatchable +def modularity( + G: Graph[_Node], + communities: Iterable[AbstractSet[_Node]], + nodes: Iterable[_Node], + *, + weight: str | None = "weight", + resolution: float = 1, +) -> float: ... diff --git a/stubs/networkx/networkx/algorithms/centrality/closeness.pyi b/stubs/networkx/networkx/algorithms/centrality/closeness.pyi index 7719ca78e687..acd0da3dc2fc 100644 --- a/stubs/networkx/networkx/algorithms/centrality/closeness.pyi +++ b/stubs/networkx/networkx/algorithms/centrality/closeness.pyi @@ -1,4 +1,5 @@ from _typeshed import Incomplete, SupportsKeysAndGetItem +from collections.abc import Mapping from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable @@ -7,7 +8,12 @@ __all__ = ["closeness_centrality", "incremental_closeness_centrality"] @_dispatchable def closeness_centrality( - G: Graph[_Node], u: _Node | None = None, distance=None, wf_improved: bool | None = True + G: Graph[_Node], + u: _Node | None = None, + distance=None, + wf_improved: bool | None = True, + *, + sp: Mapping[_Node, Mapping[_Node, float]] | None = None, ) -> dict[_Node, float]: ... @_dispatchable def incremental_closeness_centrality( diff --git a/stubs/networkx/networkx/algorithms/community/community_utils.pyi b/stubs/networkx/networkx/algorithms/community/community_utils.pyi index b51294b995dd..f8be8282f290 100644 --- a/stubs/networkx/networkx/algorithms/community/community_utils.pyi +++ b/stubs/networkx/networkx/algorithms/community/community_utils.pyi @@ -3,7 +3,9 @@ from collections.abc import Container, Iterable from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable -__all__ = ["is_partition"] +__all__ = ["is_cover", "is_partition"] @_dispatchable def is_partition(G: Graph[_Node], communities: Iterable[Container[_Node]]) -> bool: ... +@_dispatchable +def is_cover(G: Graph[_Node], communities: Iterable[Container[_Node]]) -> bool: ... diff --git a/stubs/networkx/networkx/algorithms/community/leiden.pyi b/stubs/networkx/networkx/algorithms/community/leiden.pyi index 2cf5052c1229..97cbe2ed0886 100644 --- a/stubs/networkx/networkx/algorithms/community/leiden.pyi +++ b/stubs/networkx/networkx/algorithms/community/leiden.pyi @@ -1,20 +1,31 @@ -from _typeshed import Incomplete +from collections.abc import Generator +from random import Random +from typing import Literal +from networkx._typing import Seed from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable -from numpy.random import RandomState __all__ = ["leiden_communities", "leiden_partitions"] @_dispatchable def leiden_communities( G: Graph[_Node], + *, weight: str | None = "weight", - resolution: float = 1, + resolution: float = 1.0, max_level: int | None = None, - seed: int | RandomState | None = None, -) -> list[Incomplete]: ... + seed: Seed | Random | None = None, + metric: Literal["cpm", "modularity"] = "cpm", + theta: float = 0.01, +) -> list[set[_Node]]: ... @_dispatchable def leiden_partitions( - G: Graph[_Node], weight: str | None = "weight", resolution: float = 1, seed: int | RandomState | None = None -): ... + G: Graph[_Node], + *, + weight: str | None = "weight", + metric: Literal["cpm", "modularity"] = "cpm", + resolution: float = 1.0, + seed: Seed | Random | None = None, + theta: float = 0.01, +) -> Generator[list[set[_Node]]]: ... diff --git a/stubs/networkx/networkx/algorithms/community/quality.pyi b/stubs/networkx/networkx/algorithms/community/quality.pyi index 98aa38954f00..2df63d07a478 100644 --- a/stubs/networkx/networkx/algorithms/community/quality.pyi +++ b/stubs/networkx/networkx/algorithms/community/quality.pyi @@ -1,12 +1,12 @@ from _typeshed import Incomplete -from collections.abc import Iterable +from collections.abc import Iterable, Set as AbstractSet from networkx.classes.graph import Graph, _Node from networkx.exception import NetworkXError from networkx.utils.backends import _dispatchable from networkx.utils.decorators import argmap -__all__ = ["modularity", "partition_quality"] +__all__ = ["constant_potts_model", "overlapping_modularity", "modularity", "partition_quality"] class NotAPartition(NetworkXError): def __init__(self, G: Graph[_Node], collection) -> None: ... @@ -25,3 +25,15 @@ def modularity( ) -> float: ... @_dispatchable def partition_quality(G: Graph[_Node], partition: Iterable[Incomplete]) -> tuple[float, float]: ... +@_dispatchable +def constant_potts_model( + G: Graph[_Node], + communities: Iterable[AbstractSet[_Node]], + weight: str | None = "weight", + node_weight: str | None = "node_weight", + resolution: float = 1, +) -> float: ... +@_dispatchable +def overlapping_modularity( + G: Graph[_Node], communities: Iterable[AbstractSet[_Node]], *, weight: str | None = "weight", resolution: float = 1 +) -> float: ... diff --git a/stubs/networkx/networkx/algorithms/dag.pyi b/stubs/networkx/networkx/algorithms/dag.pyi index 62b93319e8b1..5799daec6161 100644 --- a/stubs/networkx/networkx/algorithms/dag.pyi +++ b/stubs/networkx/networkx/algorithms/dag.pyi @@ -62,3 +62,5 @@ def dag_longest_path( def dag_longest_path_length(G: DiGraph[_Node], weight: str | None = "weight", default_weight: int | None = 1) -> int: ... @_dispatchable def dag_to_branching(G: DiGraph[_Node, _NodeData, _EdgeData]) -> DiGraph[_Node, _NodeData, _EdgeData]: ... +@_dispatchable +def antichain_width(G: DiGraph[_Node]) -> int: ... diff --git a/stubs/networkx/networkx/algorithms/distance_measures.pyi b/stubs/networkx/networkx/algorithms/distance_measures.pyi index 8b109a2b9f5b..daa6cb16d90e 100644 --- a/stubs/networkx/networkx/algorithms/distance_measures.pyi +++ b/stubs/networkx/networkx/algorithms/distance_measures.pyi @@ -7,6 +7,7 @@ from networkx.utils.backends import _dispatchable _WeightFunction: TypeAlias = Callable[..., int] __all__ = [ + "centroid", "eccentricity", "diameter", "harmonic_diameter", @@ -51,7 +52,7 @@ def barycenter( G: Graph[_Node], weight: str | _WeightFunction | None = None, attr: str | None = None, - sp: Mapping[_Node, Mapping[_Node, int]] | None = None, + sp: Mapping[_Node, Mapping[_Node, float]] | None = None, ) -> list[_Node]: ... @_dispatchable def resistance_distance( @@ -61,3 +62,10 @@ def resistance_distance( def effective_graph_resistance(G: Graph[_Node], weight: str | None = None, invert_weight: bool = True) -> float: ... @_dispatchable def kemeny_constant(G: Graph[_Node], *, weight: str | None = None) -> float: ... +@_dispatchable +def centroid( + G: Graph[_Node], + weight: str | _WeightFunction | None = None, + attr: str | None = None, + sp: Mapping[_Node, Mapping[_Node, float]] | None = None, +) -> list[_Node]: ... diff --git a/stubs/networkx/networkx/algorithms/flow/boykovkolmogorov.pyi b/stubs/networkx/networkx/algorithms/flow/boykovkolmogorov.pyi index 767af34353d8..4e039ba3b9ef 100644 --- a/stubs/networkx/networkx/algorithms/flow/boykovkolmogorov.pyi +++ b/stubs/networkx/networkx/algorithms/flow/boykovkolmogorov.pyi @@ -1,5 +1,6 @@ from _typeshed import Incomplete +from networkx.algorithms.flow.utils import _CapacityFunc from networkx.classes.digraph import DiGraph from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable @@ -11,7 +12,7 @@ def boykov_kolmogorov( G: Graph[_Node], s: _Node, t: _Node, - capacity: str = "capacity", + capacity: str | _CapacityFunc[_Node] = "capacity", residual: Graph[_Node] | None = None, value_only: bool = False, cutoff: float | None = None, diff --git a/stubs/networkx/networkx/algorithms/flow/dinitz_alg.pyi b/stubs/networkx/networkx/algorithms/flow/dinitz_alg.pyi index 9b866da0d367..a4271db9879b 100644 --- a/stubs/networkx/networkx/algorithms/flow/dinitz_alg.pyi +++ b/stubs/networkx/networkx/algorithms/flow/dinitz_alg.pyi @@ -1,5 +1,6 @@ from _typeshed import Incomplete +from networkx.algorithms.flow.utils import _CapacityFunc from networkx.classes.digraph import DiGraph from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable @@ -11,7 +12,7 @@ def dinitz( G: Graph[_Node], s: _Node, t: _Node, - capacity: str = "capacity", + capacity: str | _CapacityFunc[_Node] = "capacity", residual: Graph[_Node] | None = None, value_only: bool = False, cutoff: float | None = None, diff --git a/stubs/networkx/networkx/algorithms/flow/edmondskarp.pyi b/stubs/networkx/networkx/algorithms/flow/edmondskarp.pyi index e43617b2dc61..3aa1cd284965 100644 --- a/stubs/networkx/networkx/algorithms/flow/edmondskarp.pyi +++ b/stubs/networkx/networkx/algorithms/flow/edmondskarp.pyi @@ -1,5 +1,6 @@ from _typeshed import Incomplete +from networkx.algorithms.flow.utils import _CapacityFunc from networkx.classes.digraph import DiGraph from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable @@ -11,7 +12,7 @@ def edmonds_karp( G: Graph[_Node], s: _Node, t: _Node, - capacity: str = "capacity", + capacity: str | _CapacityFunc[_Node] = "capacity", residual: Graph[_Node] | None = None, value_only: bool = False, cutoff: float | None = None, diff --git a/stubs/networkx/networkx/algorithms/flow/gomory_hu.pyi b/stubs/networkx/networkx/algorithms/flow/gomory_hu.pyi index 08c65356dea4..26b1bdaa2731 100644 --- a/stubs/networkx/networkx/algorithms/flow/gomory_hu.pyi +++ b/stubs/networkx/networkx/algorithms/flow/gomory_hu.pyi @@ -1,6 +1,7 @@ from _typeshed import Incomplete from collections.abc import Callable +from networkx.algorithms.flow.utils import _CapacityFunc from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable @@ -11,5 +12,5 @@ default_flow_func = edmonds_karp @_dispatchable def gomory_hu_tree( - G: Graph[_Node], capacity: str = "capacity", flow_func: Callable[..., Incomplete] | None = None + G: Graph[_Node], capacity: str | _CapacityFunc[_Node] = "capacity", flow_func: Callable[..., Incomplete] | None = None ) -> Graph[Incomplete]: ... diff --git a/stubs/networkx/networkx/algorithms/flow/maxflow.pyi b/stubs/networkx/networkx/algorithms/flow/maxflow.pyi index 65ec771c6e55..0860ee9ce06b 100644 --- a/stubs/networkx/networkx/algorithms/flow/maxflow.pyi +++ b/stubs/networkx/networkx/algorithms/flow/maxflow.pyi @@ -1,6 +1,7 @@ from _typeshed import Incomplete from collections.abc import Callable +from networkx.algorithms.flow.utils import _CapacityFunc from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable @@ -14,7 +15,7 @@ def maximum_flow( flowG: Graph[_Node], _s: _Node, _t: _Node, - capacity: str = "capacity", + capacity: str | _CapacityFunc[_Node] = "capacity", flow_func: Callable[..., Incomplete] | None = None, **kwargs, ) -> tuple[int | float, dict[Incomplete, Incomplete]]: ... @@ -23,7 +24,7 @@ def maximum_flow_value( flowG: Graph[_Node], _s: _Node, _t: _Node, - capacity: str = "capacity", + capacity: str | _CapacityFunc[_Node] = "capacity", flow_func: Callable[..., Incomplete] | None = None, **kwargs, ) -> int | float: ... @@ -32,7 +33,7 @@ def minimum_cut( flowG: Graph[_Node], _s: _Node, _t: _Node, - capacity: str = "capacity", + capacity: str | _CapacityFunc[_Node] = "capacity", flow_func: Callable[..., Incomplete] | None = None, **kwargs, ) -> tuple[int | float, tuple[set[Incomplete], set[Incomplete]]]: ... @@ -41,7 +42,7 @@ def minimum_cut_value( flowG: Graph[_Node], _s: _Node, _t: _Node, - capacity: str = "capacity", + capacity: str | _CapacityFunc[_Node] = "capacity", flow_func: Callable[..., Incomplete] | None = None, **kwargs, ) -> int | float: ... diff --git a/stubs/networkx/networkx/algorithms/flow/preflowpush.pyi b/stubs/networkx/networkx/algorithms/flow/preflowpush.pyi index d31bbb22ac4e..a549e1caa09b 100644 --- a/stubs/networkx/networkx/algorithms/flow/preflowpush.pyi +++ b/stubs/networkx/networkx/algorithms/flow/preflowpush.pyi @@ -1,5 +1,6 @@ from _typeshed import Incomplete +from networkx.algorithms.flow.utils import _CapacityFunc from networkx.classes.digraph import DiGraph from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable @@ -11,7 +12,7 @@ def preflow_push( G: Graph[_Node], s: _Node, t: _Node, - capacity: str = "capacity", + capacity: str | _CapacityFunc[_Node] = "capacity", residual: Graph[_Node] | None = None, global_relabel_freq: float = 1, value_only: bool = False, diff --git a/stubs/networkx/networkx/algorithms/flow/shortestaugmentingpath.pyi b/stubs/networkx/networkx/algorithms/flow/shortestaugmentingpath.pyi index 62ec86a862c3..f1f1977a544b 100644 --- a/stubs/networkx/networkx/algorithms/flow/shortestaugmentingpath.pyi +++ b/stubs/networkx/networkx/algorithms/flow/shortestaugmentingpath.pyi @@ -1,5 +1,6 @@ from _typeshed import Incomplete +from networkx.algorithms.flow.utils import _CapacityFunc from networkx.classes.digraph import DiGraph from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable @@ -11,7 +12,7 @@ def shortest_augmenting_path( G: Graph[_Node], s: _Node, t: _Node, - capacity: str = "capacity", + capacity: str | _CapacityFunc[_Node] = "capacity", residual: Graph[_Node] | None = None, value_only: bool = False, two_phase: bool = False, diff --git a/stubs/networkx/networkx/algorithms/flow/utils.pyi b/stubs/networkx/networkx/algorithms/flow/utils.pyi index 5bc9995b51c9..8b7472e06ed4 100644 --- a/stubs/networkx/networkx/algorithms/flow/utils.pyi +++ b/stubs/networkx/networkx/algorithms/flow/utils.pyi @@ -1,5 +1,6 @@ from _typeshed import Incomplete -from typing import overload +from collections.abc import Callable +from typing import Any, TypeAlias, overload from typing_extensions import Never, deprecated from networkx.classes.graph import Graph, _Node @@ -29,11 +30,17 @@ class GlobalRelabelThreshold: @overload @deprecated("MultiGraph and MultiDiGraph not supported (yet).") -def build_residual_network(G: MultiGraph[_Node], capacity, *, backend: str | None = None, **backend_kwargs) -> Never: ... +def build_residual_network( + G: MultiGraph[_Node], capacity: str | _CapacityFunc[_Node], *, backend: str | None = None, **backend_kwargs +) -> Never: ... @overload -def build_residual_network(G: Graph[_Node], capacity, *, backend: str | None = None, **backend_kwargs): ... +def build_residual_network( + G: Graph[_Node], capacity: str | _CapacityFunc[_Node], *, backend: str | None = None, **backend_kwargs +): ... @_dispatchable def detect_unboundedness(R, s, t) -> None: ... @_dispatchable def build_flow_dict(G: Graph[_Node], R): ... + +_CapacityFunc: TypeAlias = Callable[[_Node, _Node, dict[str, Any]], float] diff --git a/stubs/networkx/networkx/algorithms/isomorphism/ismags.pyi b/stubs/networkx/networkx/algorithms/isomorphism/ismags.pyi index 2f7db7c1ec00..5225c14cf1e7 100644 --- a/stubs/networkx/networkx/algorithms/isomorphism/ismags.pyi +++ b/stubs/networkx/networkx/algorithms/isomorphism/ismags.pyi @@ -30,3 +30,5 @@ class ISMAGS: def subgraph_is_isomorphic(self, symmetry: bool = False) -> bool: ... def isomorphisms_iter(self, symmetry: bool = True) -> Generator[Incomplete, Incomplete]: ... def subgraph_isomorphisms_iter(self, symmetry: bool = True): ... + def is_monomorphic(self, symmetry: bool = False) -> bool: ... + def monomorphisms_iter(self, symmetry: bool = True) -> Generator[dict[Hashable, Hashable]]: ... diff --git a/stubs/networkx/networkx/algorithms/isomorphism/isomorph.pyi b/stubs/networkx/networkx/algorithms/isomorphism/isomorph.pyi index ebfbdf83d147..f6a6ef6f1456 100644 --- a/stubs/networkx/networkx/algorithms/isomorphism/isomorph.pyi +++ b/stubs/networkx/networkx/algorithms/isomorphism/isomorph.pyi @@ -1,6 +1,5 @@ from _typeshed import Incomplete from collections.abc import Callable -from typing_extensions import deprecated from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable @@ -9,22 +8,10 @@ __all__ = ["could_be_isomorphic", "fast_could_be_isomorphic", "faster_could_be_i @_dispatchable def could_be_isomorphic(G1: Graph[_Node], G2: Graph[_Node], *, properties: str = "dtc") -> bool: ... -@deprecated("`graph_could_be_isomorphic` is a deprecated alias for `could_be_isomorphic`. Use `could_be_isomorphic` instead.") -def graph_could_be_isomorphic(G1: Graph[_Node], G2: Graph[_Node]) -> bool: ... @_dispatchable def fast_could_be_isomorphic(G1: Graph[_Node], G2: Graph[_Node]) -> bool: ... -@deprecated( - "`fast_graph_could_be_isomorphic` is a deprecated alias for `fast_could_be_isomorphic`. " - "Use `fast_could_be_isomorphic` instead." -) -def fast_graph_could_be_isomorphic(G1: Graph[_Node], G2: Graph[_Node]) -> bool: ... @_dispatchable def faster_could_be_isomorphic(G1: Graph[_Node], G2: Graph[_Node]) -> bool: ... -@deprecated( - "`faster_graph_could_be_isomorphic` is a deprecated alias for `faster_could_be_isomorphic`. " - "Use `faster_could_be_isomorphic` instead." -) -def faster_graph_could_be_isomorphic(G1: Graph[_Node], G2: Graph[_Node]) -> bool: ... @_dispatchable def is_isomorphic( G1: Graph[_Node], diff --git a/stubs/networkx/networkx/algorithms/isomorphism/vf2pp.pyi b/stubs/networkx/networkx/algorithms/isomorphism/vf2pp.pyi index f5cbbc1516b2..fd4196a7f5b0 100644 --- a/stubs/networkx/networkx/algorithms/isomorphism/vf2pp.pyi +++ b/stubs/networkx/networkx/algorithms/isomorphism/vf2pp.pyi @@ -1,42 +1,56 @@ -from _typeshed import Incomplete -from collections.abc import Generator -from typing import NamedTuple +from collections.abc import Generator, Hashable +from typing import TypeVar from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable -__all__ = ["vf2pp_isomorphism", "vf2pp_is_isomorphic", "vf2pp_all_isomorphisms"] +_Node2 = TypeVar("_Node2", bound=Hashable) -class _GraphParameters(NamedTuple): - G1: Incomplete - G2: Incomplete - G1_labels: Incomplete - G2_labels: Incomplete - nodes_of_G1Labels: Incomplete - nodes_of_G2Labels: Incomplete - G2_nodes_of_degree: Incomplete - -class _StateParameters(NamedTuple): - mapping: Incomplete - reverse_mapping: Incomplete - T1: Incomplete - T1_in: Incomplete - T1_tilde: Incomplete - T1_tilde_in: Incomplete - T2: Incomplete - T2_in: Incomplete - T2_tilde: Incomplete - T2_tilde_in: Incomplete +__all__ = [ + "vf2pp_all_monomorphisms", + "vf2pp_is_monomorphic", + "vf2pp_monomorphism", + "vf2pp_all_subgraph_isomorphisms", + "vf2pp_subgraph_is_isomorphic", + "vf2pp_subgraph_isomorphism", + "vf2pp_isomorphism", + "vf2pp_is_isomorphic", + "vf2pp_all_isomorphisms", +] @_dispatchable def vf2pp_isomorphism( - G1: Graph[_Node], G2: Graph[_Node], node_label: str | None = None, default_label: float | None = None -) -> dict[Incomplete, Incomplete] | None: ... + FG: Graph[_Node], SG: Graph[_Node2], node_label: str | None = None, default_label: object = None +) -> dict[_Node, _Node2] | None: ... @_dispatchable def vf2pp_is_isomorphic( - G1: Graph[_Node], G2: Graph[_Node], node_label: str | None = None, default_label: float | None = None + FG: Graph[_Node], SG: Graph[_Node2], node_label: str | None = None, default_label: object = None ) -> bool: ... @_dispatchable def vf2pp_all_isomorphisms( - G1: Graph[_Node], G2: Graph[_Node], node_label: str | None = None, default_label: float | None = None -) -> Generator[Incomplete, None, Incomplete]: ... + FG: Graph[_Node], SG: Graph[_Node2], node_label: str | None = None, default_label: object = None +) -> Generator[dict[_Node, _Node2]]: ... +@_dispatchable +def vf2pp_subgraph_isomorphism( + FG: Graph[_Node], SG: Graph[_Node2], node_label: str | None = None, default_label: object = None +) -> dict[_Node, _Node2] | None: ... +@_dispatchable +def vf2pp_subgraph_is_isomorphic( + FG: Graph[_Node], SG: Graph[_Node2], node_label: str | None = None, default_label: object = None +) -> bool: ... +@_dispatchable +def vf2pp_all_subgraph_isomorphisms( + FG: Graph[_Node], SG: Graph[_Node2], node_label: str | None = None, default_label: object = None +) -> Generator[dict[_Node, _Node2]]: ... +@_dispatchable +def vf2pp_monomorphism( + FG: Graph[_Node], SG: Graph[_Node2], node_label: str | None = None, default_label: object = None +) -> dict[_Node, _Node2] | None: ... +@_dispatchable +def vf2pp_is_monomorphic( + FG: Graph[_Node], SG: Graph[_Node2], node_label: str | None = None, default_label: object = None +) -> bool: ... +@_dispatchable +def vf2pp_all_monomorphisms( + FG: Graph[_Node], SG: Graph[_Node2], node_label: str | None = None, default_label: object = None +) -> Generator[dict[_Node, _Node2]]: ... diff --git a/stubs/networkx/networkx/algorithms/link_analysis/hits_alg.pyi b/stubs/networkx/networkx/algorithms/link_analysis/hits_alg.pyi index f0def237e02f..2aadfd63d409 100644 --- a/stubs/networkx/networkx/algorithms/link_analysis/hits_alg.pyi +++ b/stubs/networkx/networkx/algorithms/link_analysis/hits_alg.pyi @@ -1,4 +1,5 @@ from collections.abc import Mapping +from typing import Literal from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable @@ -12,4 +13,6 @@ def hits( tol: float | None = 1e-08, nstart: Mapping[_Node, float] | None = None, normalized: bool = True, + *, + method: Literal["power_iteration", "svd"] = "power_iteration", ) -> tuple[dict[_Node, float], dict[_Node, float]]: ... diff --git a/stubs/networkx/networkx/algorithms/mis.pyi b/stubs/networkx/networkx/algorithms/mis.pyi index b0b6a9914384..351ff4481b16 100644 --- a/stubs/networkx/networkx/algorithms/mis.pyi +++ b/stubs/networkx/networkx/algorithms/mis.pyi @@ -10,4 +10,4 @@ __all__ = ["maximal_independent_set"] @_dispatchable def maximal_independent_set( G: Graph[_Node], nodes: Iterable[Incomplete] | None = None, seed: int | RandomState | None = None -) -> list[Incomplete]: ... +) -> set[_Node]: ... diff --git a/stubs/networkx/networkx/algorithms/planarity.pyi b/stubs/networkx/networkx/algorithms/planarity.pyi index 082bfb94007b..0e8ad8714b3e 100644 --- a/stubs/networkx/networkx/algorithms/planarity.pyi +++ b/stubs/networkx/networkx/algorithms/planarity.pyi @@ -93,6 +93,7 @@ class LRPlanarity: # we're only overriding methods that differ in signature from the base classes # to use inheritance to our advantage and reduce complexity class PlanarEmbedding(DiGraph[_Node]): + def faces(self) -> Generator[list[_Node]]: ... def get_data(self) -> dict[_Node, list[_Node]]: ... def set_data(self, data: Mapping[_Node, Reversible[_Node]]) -> None: ... def neighbors_cw_order(self, v: _Node) -> Generator[_Node]: ... diff --git a/stubs/networkx/networkx/algorithms/richclub.pyi b/stubs/networkx/networkx/algorithms/richclub.pyi index 2f2b25d7b987..dcb663a6a503 100644 --- a/stubs/networkx/networkx/algorithms/richclub.pyi +++ b/stubs/networkx/networkx/algorithms/richclub.pyi @@ -8,5 +8,5 @@ __all__ = ["rich_club_coefficient"] @_dispatchable def rich_club_coefficient( - G: Graph[_Node], normalized: bool = True, Q: float = 100, seed: int | RandomState | None = None + G: Graph[_Node], normalized: bool = True, Q: float = 100, seed: int | RandomState | None = None, *, n_samples: int = 1 ) -> dict[Incomplete, Incomplete]: ... diff --git a/stubs/networkx/networkx/algorithms/shortest_paths/dense.pyi b/stubs/networkx/networkx/algorithms/shortest_paths/dense.pyi index 1290fe33c14c..427c8726588c 100644 --- a/stubs/networkx/networkx/algorithms/shortest_paths/dense.pyi +++ b/stubs/networkx/networkx/algorithms/shortest_paths/dense.pyi @@ -3,10 +3,17 @@ from collections import defaultdict from collections.abc import Collection import numpy as np +from networkx.algorithms.shortest_paths.weighted import _WeightFunc from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable -__all__ = ["floyd_warshall", "floyd_warshall_predecessor_and_distance", "reconstruct_path", "floyd_warshall_numpy"] +__all__ = [ + "floyd_warshall_tree", + "floyd_warshall", + "floyd_warshall_predecessor_and_distance", + "reconstruct_path", + "floyd_warshall_numpy", +] @_dispatchable def floyd_warshall_numpy( @@ -14,9 +21,15 @@ def floyd_warshall_numpy( ) -> np.ndarray[Incomplete, Incomplete]: ... @_dispatchable def floyd_warshall_predecessor_and_distance( - G: Graph[_Node], weight: str | None = "weight" + G: Graph[_Node], weight: str | _WeightFunc[_Node] | None = "weight" ) -> tuple[dict[Incomplete, dict[Incomplete, Incomplete]], dict[Incomplete, dict[Incomplete, float]]]: ... @_dispatchable def reconstruct_path(source: _Node, target: _Node, predecessors: SupportsGetItem[Incomplete, Incomplete]) -> list[Incomplete]: ... @_dispatchable -def floyd_warshall(G: Graph[_Node], weight: str | None = "weight") -> dict[Incomplete, defaultdict[Incomplete, float]]: ... +def floyd_warshall( + G: Graph[_Node], weight: str | _WeightFunc[_Node] | None = "weight" +) -> dict[Incomplete, defaultdict[Incomplete, float]]: ... +@_dispatchable +def floyd_warshall_tree( + G: Graph[_Node], weight: str | _WeightFunc[_Node] | None = "weight" +) -> tuple[dict[_Node, dict[_Node, _Node]], dict[_Node, dict[_Node, float]]]: ... diff --git a/stubs/networkx/networkx/algorithms/tree/mst.pyi b/stubs/networkx/networkx/algorithms/tree/mst.pyi index dc175b1cb1f0..d97413581634 100644 --- a/stubs/networkx/networkx/algorithms/tree/mst.pyi +++ b/stubs/networkx/networkx/algorithms/tree/mst.pyi @@ -29,7 +29,7 @@ class EdgePartition(Enum): @_dispatchable def boruvka_mst_edges( - G: Graph[_Node], minimum: bool = True, weight: str = "weight", keys: bool = False, data: bool = True, ignore_nan: bool = False + G: Graph[_Node], minimum: bool = True, weight: str = "weight", keys: bool = True, data: bool = True, ignore_nan: bool = False ): ... @_dispatchable def kruskal_mst_edges( diff --git a/stubs/networkx/networkx/algorithms/walks.pyi b/stubs/networkx/networkx/algorithms/walks.pyi index 44a872420ab5..c43be6ccc868 100644 --- a/stubs/networkx/networkx/algorithms/walks.pyi +++ b/stubs/networkx/networkx/algorithms/walks.pyi @@ -1,9 +1,16 @@ from _typeshed import Incomplete +from collections.abc import Generator +from random import Random +from networkx._typing import Seed from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable -__all__ = ["number_of_walks"] +__all__ = ["random_walk", "number_of_walks"] @_dispatchable def number_of_walks(G: Graph[_Node], walk_length: int) -> dict[Incomplete, Incomplete]: ... +@_dispatchable +def random_walk( + G: Graph[_Node], *, start: _Node, weight: str | None = None, seed: Seed | Random | None = None +) -> Generator[_Node]: ... diff --git a/stubs/networkx/networkx/convert_matrix.pyi b/stubs/networkx/networkx/convert_matrix.pyi index 98179313bcea..ffba3e1b13d4 100644 --- a/stubs/networkx/networkx/convert_matrix.pyi +++ b/stubs/networkx/networkx/convert_matrix.pyi @@ -40,9 +40,9 @@ def to_pandas_adjacency( ) -> _DataFrame: ... @overload -def from_pandas_adjacency(df: _DataFrame, create_using: type[_G]) -> _G: ... +def from_pandas_adjacency(df: _DataFrame, create_using: type[_G], *, nonedge: object = 0) -> _G: ... @overload -def from_pandas_adjacency(df: _DataFrame, create_using: None = None) -> Graph[Incomplete]: ... +def from_pandas_adjacency(df: _DataFrame, create_using: None = None, *, nonedge: object = 0) -> Graph[Incomplete]: ... @_dispatchable def to_pandas_edgelist( @@ -111,9 +111,31 @@ def to_numpy_array( @overload def from_numpy_array( - A: numpy.ndarray[Incomplete, Incomplete], parallel_edges: bool = False, create_using: None = None + A: numpy.ndarray[Incomplete, Incomplete], + parallel_edges: bool = False, + create_using: None = None, + edge_attr: str | None = "weight", + *, + nodelist: Iterable[Incomplete] | None = None, + nonedge: object = 0, ) -> Graph[Incomplete]: ... @overload -def from_numpy_array(A: numpy.ndarray[Incomplete, Incomplete], parallel_edges: bool = False, *, create_using: type[_G]) -> _G: ... +def from_numpy_array( + A: numpy.ndarray[Incomplete, Incomplete], + parallel_edges: bool = False, + *, + create_using: type[_G], + edge_attr: str | None = "weight", + nodelist: Iterable[Incomplete] | None = None, + nonedge: object = 0, +) -> _G: ... @overload -def from_numpy_array(A: numpy.ndarray[Incomplete, Incomplete], parallel_edges: bool, create_using: type[_G]) -> _G: ... +def from_numpy_array( + A: numpy.ndarray[Incomplete, Incomplete], + parallel_edges: bool, + create_using: type[_G], + edge_attr: str | None = "weight", + *, + nodelist: Iterable[Incomplete] | None = None, + nonedge: object = 0, +) -> _G: ... diff --git a/stubs/networkx/networkx/generators/random_graphs.pyi b/stubs/networkx/networkx/generators/random_graphs.pyi index d9e1d6c05571..af5feafec00c 100644 --- a/stubs/networkx/networkx/generators/random_graphs.pyi +++ b/stubs/networkx/networkx/generators/random_graphs.pyi @@ -1,12 +1,14 @@ from _typeshed import Incomplete from collections.abc import Callable, Iterable -from typing_extensions import deprecated +from random import Random +from networkx._typing import Seed from networkx.utils.backends import _dispatchable -from ..classes.graph import Graph +from ..classes.graph import Graph, _Node __all__ = [ + "random_k_lift", "fast_gnp_random_graph", "gnp_random_graph", "dense_gnm_random_graph", @@ -21,7 +23,6 @@ __all__ = [ "dual_barabasi_albert_graph", "extended_barabasi_albert_graph", "powerlaw_cluster_graph", - "random_lobster", "random_lobster_graph", "random_shell_graph", "random_powerlaw_tree", @@ -64,9 +65,6 @@ def powerlaw_cluster_graph(n: int, m: int, p: float, seed=None, *, create_using= @_dispatchable def random_lobster_graph(n: int, p1: float, p2: float, seed=None, *, create_using=None): ... @_dispatchable -@deprecated("`random_lobster` is a deprecated alias for `random_lobster_graph`. Use `random_lobster_graph` instead.") -def random_lobster(n, p1, p2, seed=None, *, create_using=None): ... -@_dispatchable def random_shell_graph(constructor: Iterable[tuple[int, int, float]], seed=None, *, create_using=None): ... @_dispatchable def random_powerlaw_tree(n: int, gamma: float = 3, seed=None, tries: int = 100, *, create_using=None): ... @@ -81,3 +79,5 @@ def random_kernel_graph( *, create_using=None, ): ... +@_dispatchable +def random_k_lift(G: Graph[_Node], k: int, seed: Seed | Random | None = None) -> Graph[tuple[_Node, int]]: ... diff --git a/stubs/networkx/networkx/generators/small.pyi b/stubs/networkx/networkx/generators/small.pyi index c440b1d46c74..8ec6ae4b7d23 100644 --- a/stubs/networkx/networkx/generators/small.pyi +++ b/stubs/networkx/networkx/generators/small.pyi @@ -4,6 +4,7 @@ from networkx.classes.graph import Graph from networkx.utils.backends import _dispatchable __all__ = [ + "shrikhande_graph", "LCF_graph", "bull_graph", "chvatal_graph", @@ -78,3 +79,5 @@ def truncated_cube_graph(create_using: Graph[Incomplete] | type[Graph[Incomplete def truncated_tetrahedron_graph(create_using: Graph[Incomplete] | type[Graph[Incomplete]] | None = None) -> Graph[Incomplete]: ... @_dispatchable def tutte_graph(create_using: Graph[Incomplete] | type[Graph[Incomplete]] | None = None) -> Graph[Incomplete]: ... +@_dispatchable +def shrikhande_graph(create_using: Graph[Incomplete] | type[Graph[Incomplete]] | None = None) -> Graph[Incomplete]: ... diff --git a/stubs/networkx/networkx/linalg/graphmatrix.pyi b/stubs/networkx/networkx/linalg/graphmatrix.pyi index 7d08761770d7..ddcbbc32196a 100644 --- a/stubs/networkx/networkx/linalg/graphmatrix.pyi +++ b/stubs/networkx/networkx/linalg/graphmatrix.pyi @@ -3,7 +3,7 @@ from collections.abc import Collection, Hashable from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable from numpy.typing import DTypeLike -from scipy.sparse import csc_array, csr_array # type: ignore[import-untyped] # pyright: ignore[reportMissingImports] +from scipy.sparse import csc_array, sparray # type: ignore[import-untyped] # pyright: ignore[reportMissingImports] __all__ = ["incidence_matrix", "adjacency_matrix"] @@ -27,5 +27,10 @@ def incidence_matrix( ) -> csc_array: ... @_dispatchable def adjacency_matrix( - G: Graph[_Node], nodelist: Collection[_Node] | None = None, dtype: DTypeLike | None = None, weight: str | None = "weight" -) -> csr_array: ... + G: Graph[_Node], + nodelist: Collection[_Node] | None = None, + dtype: DTypeLike | None = None, + weight: str | None = "weight", + *, + format: str = "csr", +) -> sparray: ... diff --git a/stubs/networkx/networkx/linalg/laplacianmatrix.pyi b/stubs/networkx/networkx/linalg/laplacianmatrix.pyi index 089d31900cfb..4fe94b513fe5 100644 --- a/stubs/networkx/networkx/linalg/laplacianmatrix.pyi +++ b/stubs/networkx/networkx/linalg/laplacianmatrix.pyi @@ -9,6 +9,7 @@ from networkx.utils.backends import _dispatchable from scipy.sparse import csr_array # type: ignore[import-untyped] # pyright: ignore[reportMissingImports] __all__ = [ + "magnetic_laplacian_matrix", "laplacian_matrix", "normalized_laplacian_matrix", "directed_laplacian_matrix", @@ -37,3 +38,12 @@ def directed_combinatorial_laplacian_matrix( walk_type: Literal["random", "lazy", "pagerank"] | None = None, alpha: float = 0.95, ) -> Array2D[np.float64]: ... +@_dispatchable +def magnetic_laplacian_matrix( + G: DiGraph[_Node], + *, + nodelist: Collection[_Node] | None = None, + normalized: bool = False, + q: float = 0.25, + weight: str | None = "weight", +) -> csr_array: ... diff --git a/stubs/networkx/networkx/linalg/spectrum.pyi b/stubs/networkx/networkx/linalg/spectrum.pyi index 05e4455eb7da..3cebda7e41c3 100644 --- a/stubs/networkx/networkx/linalg/spectrum.pyi +++ b/stubs/networkx/networkx/linalg/spectrum.pyi @@ -1,9 +1,11 @@ import numpy as np from networkx._typing import Array1D +from networkx.classes.digraph import DiGraph from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable __all__ = [ + "magnetic_spectrum", "laplacian_spectrum", "adjacency_spectrum", "modularity_spectrum", @@ -21,3 +23,7 @@ def adjacency_spectrum(G: Graph[_Node], weight: str | None = "weight") -> Array1 def modularity_spectrum(G: Graph[_Node]) -> Array1D[np.complex128]: ... @_dispatchable def bethe_hessian_spectrum(G: Graph[_Node], r: float | None = None) -> Array1D[np.float64]: ... +@_dispatchable +def magnetic_spectrum( + G: DiGraph[_Node], *, q: float = 0.25, weight: str | None = "weight", normalized: bool = False +) -> Array1D[np.float64]: ... diff --git a/stubs/networkx/networkx/readwrite/gexf.pyi b/stubs/networkx/networkx/readwrite/gexf.pyi index bebb998dfe93..b71440393235 100644 --- a/stubs/networkx/networkx/readwrite/gexf.pyi +++ b/stubs/networkx/networkx/readwrite/gexf.pyi @@ -69,7 +69,7 @@ class GEXFReader(GEXF): xml: Incomplete def __call__(self, stream): ... timeformat: Incomplete - def make_graph(self, graph_xml): ... + def make_graph(self, graph_xml, meta_xml=None): ... def add_node(self, G: Graph[_Node], node_xml, node_attr, node_pid=None) -> None: ... def add_start_end(self, data, xml): ... def add_viz(self, data, node_xml): ...