/**
 * @internal
 * Represents a graph. Each node is associated to a set of nodes that can be directly reached from it in a single step.
 */
export type Graph = {
    [node: string]: Set<string>;
};
/**
 * @internal
 * Represents from which all cycles have been removed using strongly connected components. Also holds information on all groups.
 */
export type StronglyConnectedGraph = {
    acyclicGraph: Graph;
    originalLabelToAcyclicLabel: {
        [originalLabel: string]: string;
    };
    acyclicLabelToGroup: {
        [newLabel: string]: string[];
    };
};
/**
 * @internal
 * Creates a graph from a series of edges and optionally additional nodes.
 * @param edges edges between nodes, [from, to].
 * @param additionalNodes nodes which do not appear in any edge.
 * @return a graph built using the provided parameters.
 */
export declare function graphFromEdges(edges: [string, string][], additionalNodes?: string[]): Graph;
/**
 * @internal
 * Get the nodes reachable from each node in an acyclic graph. Exclude the node itself.
 * @param graph an acyclic graph.
 * @return all nodes reachable from each node in the graph with 1 or more steps.
 */
export declare function reachSetsAcyclic(graph: Graph): {
    [node: string]: Set<string>;
};
/**
 * @internal
 * Get a new graph where each cycle has been replaced by a single node, with label chosen from the labels of nodes in the cycle (the specific way
 * the label is chosen is implementation-dependant).
 * @param graph a graph.
 * @return the new graph and dictionaries to allow mapping between original labels and labels in the new graph
 */
export declare function acyclic(graph: Graph): StronglyConnectedGraph;
