import { GraphPlugOuterSpec, GraphSubPinSpec, PinSpec, Spec, Specs } from '../../types';
import { Dict } from '../../types/Dict';
import { GraphMergeSpec } from '../../types/GraphMergeSpec';
import { GraphMergeUnitSpec } from '../../types/GraphMergeUnitSpec';
import { GraphMergesSpec } from '../../types/GraphMergesSpec';
import { GraphPinSpec } from '../../types/GraphPinSpec';
import { GraphSpec } from '../../types/GraphSpec';
import { GraphUnitPlugs } from '../../types/GraphUnitPlugs';
import { GraphUnitSpec } from '../../types/GraphUnitSpec';
import { IO } from '../../types/IO';
import { IOOf } from '../../types/IOOf';
export declare function isValidSpecName(name: string): boolean;
export declare function getPinNodeId(unitId: string, type: IO, pinId: string): string;
export declare function isUnitPinConstant(spec: GraphSpec, unitId: string, type: IO, pinId: string): boolean;
export declare function isUnitPinIgnored(spec: GraphSpec, unitId: string, type: IO, pinId: string): boolean;
export declare function isUnitComponent(specs: Specs, spec: GraphSpec, unitId: string): boolean;
export declare const isPinRef: (specs: Specs, spec: Spec, type: IO, pinId: string, visited?: Set<string>) => any;
export declare const isMergeRef: (specs: Specs, spec: GraphSpec, mergeId: string, visited?: Set<string>) => boolean;
export declare const isUnitPinRef: (specs: Specs, spec: GraphSpec, unitId: string, type: IO, pinId: string, visited?: Set<string>) => any;
export declare const isSelfPin: (type: IO, pinId: string) => boolean;
export declare function getInputNodeId(unitId: string, pinId: string): string;
export declare function getOutputNodeId(unitId: string, pinId: string): string;
export declare function getMergePinNodeId(mergeId: string, type: IO): string;
export declare function opposite(kind: IO): IO;
export declare const findFirstMergePin: (merge: GraphMergeSpec, type: IO) => {
    unitId: string;
    pinId: string;
} | undefined;
export declare const getExposedPinSpecs: (graph: GraphSpec) => {
    input: import("../../types").GraphPinsSpec;
    output: import("../../types").GraphPinsSpec;
};
export declare const getExposePinSpec: (graph: GraphSpec, type: IO, pinId: string) => any;
export declare const getUnitExposedPins: (graph: GraphSpec, unitId: string) => IOOf<Dict<{
    type: IO;
    pinId: string;
    subPinId: string;
}>>;
export declare const getPinSpec: (graph: Spec, type: IO, pinId: string) => GraphPinSpec;
export declare const getSpecPinIcon: (specs: Specs, graph: Spec, type: IO, pinId: string) => string | null;
export declare const getPlugSpecs: (spec: GraphSpec) => {
    input: {};
    output: {};
};
export declare const getSubPinSpec: (graph: GraphSpec, type: IO, pinId: string, subPinId: string) => GraphSubPinSpec;
export declare const findPinMergeId: (spec: GraphSpec, unitId: string, type: IO, pinId: string) => string | undefined;
export declare const getPlugCount: (spec: GraphSpec, type: IO, pinId: string) => number;
export declare const getMergePinCount: (merge: GraphMergeSpec) => number;
export declare const getMergePinTypeCount: (merge: GraphMergeSpec, type: IO) => number;
export declare const getMergeTypePinCount: (merge: GraphMergeSpec, type: IO) => number;
export declare const getMergeUnitPinCount: (mergeUnit: GraphMergeUnitSpec) => number;
export declare const getMergeUnitTypePinCount: (mergeUnit: GraphMergeUnitSpec, type: IO) => number;
export declare const forEachPinOnMerges: <T>(merges: Dict<Dict<IOOf<Dict<T>>>>, callback: (mergeId: string, unitId: string, type: IO, pinId: string, data: T) => void) => void;
export declare const forEachPinOnMerge: <T>(merge: Dict<IOOf<Dict<T>>>, callback: (unitId: string, type: IO, pinId: string, data: T) => void) => void;
export declare const forEachInputOnMerge: <T>(merge: Dict<IOOf<Dict<T>>>, callback: (unitId: string, pinId: string, data: T) => void) => void;
export declare const forEachOutputOnMerge: <T>(merge: Dict<IOOf<Dict<T>>>, callback: (unitId: string, type: IO, pinId: string, data: T) => void) => void;
export declare const forEachSpecPin: (spec: Spec, callback: (type: IO, pinId: string, pinSpec: PinSpec) => void) => void;
export declare const forEachGraphSpecPin: (spec: GraphSpec, callback: (type: IO, pinId: string, pinSpec: GraphPinSpec) => void) => void;
export declare const forEachGraphSpecPinPlug: (spec: GraphSpec, callback: (type: IO, pinId: string, pinSpec: GraphPinSpec, subPinId: string, subPinSpec: GraphSubPinSpec) => void) => void;
export declare const forEachGraphSpecPinType: (spec: GraphSpec, type: IO, callback: (type: IO, pinId: string, pinSpec: GraphPinSpec) => void) => void;
export declare const forEachGraphSpecPinOfType: (spec: GraphSpec, type: IO, callback: (pinId: string, pinSpec: GraphPinSpec) => void) => void;
export declare const hasUnit: (spec: GraphSpec, unitId: string) => boolean;
export declare const hasMerge: (spec: GraphSpec, mergeId: string) => boolean;
export declare const hasMergePin: (spec: GraphSpec, mergeId: string, unitId: string, type: IO, pinId: string) => boolean;
export declare const hasPin: (spec: Spec, type: IO, pinId: string) => boolean;
export declare const hasPlug: (spec: GraphSpec, type: IO, pinId: string, subPinId: string) => boolean;
export declare const findMergePlugOfType: (spec: GraphSpec, type: IO, mergeId: string) => GraphPlugOuterSpec[];
export declare const findMergePlugs: (spec: GraphSpec, mergeId: string) => IOOf<GraphPlugOuterSpec[]>;
export declare const countMergePlugs: (spec: GraphSpec, mergeId: string) => number;
export declare const findUnitPinPlug: (spec: GraphSpec, unitId: string, type: IO, pinId: string) => GraphPlugOuterSpec | null;
export declare function findUnitPlugs(spec: GraphSpec, unitId: string): GraphUnitPlugs;
export declare const findSpecAtPath: (specs: Specs, spec: Spec, path: string[]) => GraphSpec;
export declare const getUnitSpec: (specs: Specs, spec: Spec, unitId: string) => Spec;
export declare const findUnitAtPath: (specs: Specs, spec: Spec, path: string[], unit?: GraphUnitSpec) => GraphUnitSpec;
export declare const shouldExposePin: (type: IO, pinId: string, pinSpec: GraphPinSpec, subPinId: string, subPinSpec: GraphSubPinSpec, merged: boolean, outerPlug?: GraphPlugOuterSpec | null) => boolean;
export declare function isSubPinSpecRef(specs: Specs, spec: GraphSpec, type: IO, subPinSpec: GraphSubPinSpec, visited: Set<string>): boolean;
export declare function isPinSpecRef(specs: Specs, spec: GraphSpec, type: IO, pinSpec: GraphPinSpec, visited: Set<string>): boolean;
export declare function findUnitMerges(spec: GraphSpec, unitId: string): GraphMergesSpec;
export declare function buildUnitPinToPlug(source: GraphSpec, unitId: string): IOOf<Dict<GraphPlugOuterSpec>>;
export declare function buildUnitPinToMerge(source: GraphSpec, unitId: string): IOOf<Dict<string>>;
export declare function getUnit(spec: GraphSpec, unitId: string): GraphUnitSpec;
export declare function getMerge(spec: GraphSpec, mergeId: string): GraphMergeSpec;
export declare function getUnitPinDatum(spec: GraphSpec, unitId: string, type: IO, pinId: string): any;
export declare function getUnitInputDatum(spec: GraphSpec, unitId: string, pinId: string): any;
export declare function isEmptyMerge(mergeSpec: GraphMergeSpec): boolean;
export declare const hasPinId: (spec: Spec, type: IO, pinId: string) => boolean;
export declare const hasDatum: (spec: GraphSpec, datumId: string) => boolean;
