import type { NodeId } from '../r-bridge/lang-4.x/ast/model/processing/node-id';
import type { GenericDiffConfiguration, GenericDifferenceInformation, WriteableDifferenceReport } from './diff';
import type { DataflowGraph } from '../dataflow/graph/graph';
export interface NamedGraph<Graph = DataflowGraph> {
    name: string;
    graph: Graph;
}
interface ProblematicVertex {
    tag: 'vertex';
    id: NodeId;
}
interface ProblematicEdge {
    tag: 'edge';
    from: NodeId;
    to: NodeId;
}
export type ProblematicDiffInfo = ProblematicVertex | ProblematicEdge;
/**
 * To be produced by a function differencing two graphs (e.g., {@link DataflowGraph|DFGs} or {@link ControlFlowGraph|CFGs}).
 *
 * @see {@link GraphDifferenceReport#isEqual|isEqual} - to check whether the graphs are equal
 * @see {@link GraphDifferenceReport#addComment|addComment} - to add comments to the report
 * @see {@link GraphDifferenceReport#comments|comments} - to get the attached comments
 * @see {@link GraphDifferenceReport#problematic|problematic} - to get the problematic vertices/edges
 */
export declare class GraphDifferenceReport implements WriteableDifferenceReport {
    _comments: string[] | undefined;
    _problematic: ProblematicDiffInfo[] | undefined;
    addComment(comment: string, ...related: readonly ProblematicDiffInfo[]): void;
    comments(): readonly string[] | undefined;
    problematic(): readonly ProblematicDiffInfo[] | undefined;
    isEqual(): boolean;
}
/**
 * A context that can be used by differencing functions to compare two graphs
 * See {@link initDiffContext} for a function that creates such a context.
 */
export interface GraphDiffContext<Graph = DataflowGraph> extends GenericDifferenceInformation<GraphDifferenceReport> {
    left: Graph;
    right: Graph;
    config: GenericDiffConfiguration;
}
/**
 * Create the context for differencing two graphs
 */
export declare function initDiffContext<Graph>(left: NamedGraph<Graph>, right: NamedGraph<Graph>, config?: Partial<GenericDiffConfiguration>): GraphDiffContext<Graph>;
export {};
