From 10b7c8c6ced9e74d68a5a980d46027f8ba6fd4a6 Mon Sep 17 00:00:00 2001 From: Daniel Shafer Date: Mon, 26 Oct 2026 17:03:34 +0000 Subject: [PATCH] [networkx] Use concrete types for the random tree generators --- stubs/networkx/networkx/generators/trees.pyi | 47 ++++++++++++++++---- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/stubs/networkx/networkx/generators/trees.pyi b/stubs/networkx/networkx/generators/trees.pyi index eb63cdb49e94..cf15e49544c8 100644 --- a/stubs/networkx/networkx/generators/trees.pyi +++ b/stubs/networkx/networkx/generators/trees.pyi @@ -1,8 +1,10 @@ from _typeshed import Incomplete from collections.abc import Iterable +from typing import overload from networkx.classes.graph import Graph from networkx.utils.backends import _dispatchable +from networkx.utils.misc import _RandomState from ..classes.digraph import DiGraph @@ -22,14 +24,41 @@ def prefix_tree(paths: Iterable[Incomplete]) -> DiGraph[Incomplete]: ... @_dispatchable def prefix_tree_recursive(paths: Iterable[Incomplete]) -> DiGraph[Incomplete]: ... @_dispatchable -def random_labeled_tree(n: int, *, seed=None): ... +def random_labeled_tree(n: int, *, seed: _RandomState = None) -> Graph[int]: ... @_dispatchable -def random_labeled_rooted_tree(n: int, *, seed=None) -> Graph[Incomplete]: ... -@_dispatchable -def random_unlabeled_rooted_tree(n: int, *, number_of_trees=None, seed=None) -> Incomplete | list[Incomplete]: ... -@_dispatchable -def random_labeled_rooted_forest(n: int, *, seed=None) -> Graph[Incomplete]: ... -@_dispatchable -def random_unlabeled_rooted_forest(n: int, *, q=None, number_of_forests=None, seed=None) -> Incomplete | list[Incomplete]: ... +def random_labeled_rooted_tree(n: int, *, seed: _RandomState = None) -> Graph[int]: ... + +@overload +def random_unlabeled_rooted_tree( + n: int, + *, + number_of_trees: None = None, + seed: _RandomState = None, + backend=None, # @_dispatchable adds these arguments, but we can't use this decorator with @overload + **backend_kwargs, +) -> Graph[int]: ... +@overload +def random_unlabeled_rooted_tree( + n: int, *, number_of_trees: int, seed: _RandomState = None, backend=None, **backend_kwargs +) -> list[Graph[int]]: ... + @_dispatchable -def random_unlabeled_tree(n: int, *, number_of_trees=None, seed=None) -> Incomplete | list[Incomplete]: ... +def random_labeled_rooted_forest(n: int, *, seed: _RandomState = None) -> Graph[int]: ... + +@overload +def random_unlabeled_rooted_forest( + n: int, *, q: int | None = None, number_of_forests: None = None, seed: _RandomState = None, backend=None, **backend_kwargs +) -> Graph[int]: ... +@overload +def random_unlabeled_rooted_forest( + n: int, *, q: int | None = None, number_of_forests: int, seed: _RandomState = None, backend=None, **backend_kwargs +) -> list[Graph[int]]: ... + +@overload +def random_unlabeled_tree( + n: int, *, number_of_trees: None = None, seed: _RandomState = None, backend=None, **backend_kwargs +) -> Graph[int]: ... +@overload +def random_unlabeled_tree( + n: int, *, number_of_trees: int, seed: _RandomState = None, backend=None, **backend_kwargs +) -> list[Graph[int]]: ...