# Stubs for networkx.algorithms.tree.branchings (Python 3.5)
#
# NOTE: This dynamically typed stub was automatically generated by stubgen.

from typing import Any, Optional

from .recognition import *

def branching_weight(G, attr: str = ..., default: int = ...): ...
def greedy_branching(G, attr: str = ..., default: int = ..., kind: str = ...): ...

class MultiDiGraph_EdgeKey(networkx.MultiDiGraph):
    edge_index: Any = ...
    def __init__(self, incoming_graph_data: Optional[Any] = ..., **attr) -> None: ...
    def remove_node(self, n): ...
    def remove_nodes_from(self, nbunch): ...
    def fresh_copy(self): ...
    def add_edge(self, u_for_edge, v_for_edge, key_for_edge, **attr): ...
    def add_edges_from(self, ebunch_to_add, **attr): ...
    def remove_edge_with_key(self, key): ...
    def remove_edges_from(self, ebunch): ...

class Edmonds:
    G_original: Any = ...
    store: bool = ...
    edges: Any = ...
    template: Any = ...
    def __init__(self, G, seed: Optional[Any] = ...) -> None: ...
    def find_optimum(
        self, attr: str = ..., default: int = ..., kind: str = ..., style: str = ...
    ): ...

def maximum_branching(G, attr: str = ..., default: int = ...): ...
def minimum_branching(G, attr: str = ..., default: int = ...): ...
def maximum_spanning_arborescence(G, attr: str = ..., default: int = ...): ...
def minimum_spanning_arborescence(G, attr: str = ..., default: int = ...): ...
