import { LinkAccessor } from './linklengths';
export interface LinkTypeAccessor extends LinkAccessor {
getType(l: Link): number;
}
export declare class PowerEdge {
source: any;
target: any;
type: number;
constructor(source: any, target: any, type: number);
}
export declare class Configuration {
private linkAccessor;
modules: Module[];
roots: ModuleSet[];
R: number;
constructor(n: number, edges: Link[], linkAccessor: LinkTypeAccessor, rootGroup?: any[]);
private initModulesFromGroup;
merge(a: Module, b: Module, k?: number): Module;
private rootMerges;
greedyMerge(): boolean;
private nEdges;
getGroupHierarchy(retargetedEdges: PowerEdge[]): any[];
allEdges(): PowerEdge[];
static getEdges(modules: ModuleSet, es: PowerEdge[]): void;
}
export declare class Module {
id: number;
outgoing: LinkSets;
incoming: LinkSets;
children: ModuleSet;
definition?: any;
gid: number;
constructor(id: number, outgoing?: LinkSets, incoming?: LinkSets, children?: ModuleSet, definition?: any);
getEdges(es: PowerEdge[]): void;
isLeaf(): boolean;
isIsland(): boolean;
isPredefined(): boolean;
}
export declare class ModuleSet {
table: any;
count(): number;
intersection(other: ModuleSet): ModuleSet;
intersectionCount(other: ModuleSet): number;
contains(id: number): boolean;
add(m: Module): void;
remove(m: Module): void;
forAll(f: (m: Module) => void): void;
modules(): Module[];
}
export declare class LinkSets {
sets: any;
n: number;
count(): number;
contains(id: number): boolean;
add(linktype: number, m: Module): void;
remove(linktype: number, m: Module): void;
forAll(f: (ms: ModuleSet, linktype: number) => void): void;
forAllModules(f: (m: Module) => void): void;
intersection(other: LinkSets): LinkSets;
}
export declare function getGroups(nodes: any[], links: Link[], la: LinkTypeAccessor, rootGroup?: any[]): {
groups: any[];
powerEdges: PowerEdge[];
};