import type { DecompositionReference } from "../decompositions";
import type { EntityByKey } from "../entities";
import { type PythonAstAssign, type PythonAstNode, type PythonAstAttribute, type PythonAstAugAssign, type PythonAstCall, type PythonAstDelete, type PythonAstFor, type PythonAstFunctionDef, type PythonAstGeneratorExp, type PythonAstListComp, type PythonAstName, type PythonAstReturn, type PythonAstSetComp, type PythonAstSubscript } from "./nodes";
import { AstVisitor } from "./visitors";
type VariableDescription = VariableDescriptionBoolean | VariableDescriptionDecomposition | VariableDescriptionOpenFiscaParameter | VariableDescriptionOpenFiscaVariable | VariableDescriptionOpenFiscaVariableList | VariableDescriptionString | VariableDescriptionStringListOrTuple;
interface VariableDescriptionBase {
    type: VariableType;
}
interface VariableDescriptionBoolean extends VariableDescriptionBase {
    type: VariableType.Boolean;
}
interface VariableDescriptionDecomposition extends VariableDescriptionBase {
    decomposition: DecompositionReference[];
    type: VariableType.Decomposition;
}
interface VariableDescriptionOpenFiscaParameter extends VariableDescriptionBase {
    name: string;
    type: VariableType.OpenFiscaParameter;
}
interface VariableDescriptionOpenFiscaVariable extends VariableDescriptionBase {
    name: string;
    type: VariableType.OpenFiscaVariable;
}
interface VariableDescriptionOpenFiscaVariableList extends VariableDescriptionBase {
    names: string[];
    type: VariableType.OpenFiscaVariableList;
}
interface VariableDescriptionString extends VariableDescriptionBase {
    value: string;
    type: VariableType.String;
}
interface VariableDescriptionStringListOrTuple extends VariableDescriptionBase {
    items: string[];
    type: VariableType.StringListOrTuple;
}
declare enum VariableType {
    Boolean = "Boolean",
    Decomposition = "Decomposition",
    OpenFiscaParameter = "OpenFiscaParameter",
    OpenFiscaVariable = "OpenFiscaVariable",
    OpenFiscaVariableList = "OpenFiscaVariableList",
    String = "String",
    StringListOrTuple = "StringListOrTuple"
}
declare class FormulaExtractor extends AstVisitor<PythonAstNode> {
    readonly entityByKey: EntityByKey;
    readonly leafParametersName: Set<string>;
    decomposition: DecompositionReference[] | undefined;
    openFiscaParametersName: Set<string>;
    openFiscaVariablesName: Set<string>;
    singlePersonRolesAndSubroles: Set<string>;
    variableDescriptionById: {
        [id: string]: VariableDescription | null;
    };
    constructor(entityByKey: EntityByKey, leafParametersName: Set<string>);
    extractDecomposition(node: PythonAstNode): DecompositionReference[] | null;
    extractOpenFiscaParameterName(node: PythonAstNode): string | null;
    extractOpenFiscaParameterNameFromAttribute(node: PythonAstAttribute): string | null;
    extractOpenFiscaParameterNameFromCall(node: PythonAstCall): string | null;
    extractOpenFiscaParameterNameFromSubscript(node: PythonAstSubscript): string | null;
    extractOpenFiscaVariablesName(node: PythonAstNode): string[] | null;
    extractOpenFiscaVariablesNameFromCall(node: PythonAstCall): string[] | null;
    extractString(node: PythonAstNode): string | null;
    extractStringList(node: PythonAstNode): string[] | null;
    isBoolean(node: PythonAstNode): boolean;
    visit_Assign(node: PythonAstAssign): void;
    visit_Attribute(node: PythonAstAttribute): void;
    visit_AugAssign(node: PythonAstAugAssign): void;
    visit_Call(node: PythonAstCall): void;
    visit_Delete(node: PythonAstDelete): void;
    visit_For(node: PythonAstFor): void;
    visit_GeneratorExp(node: PythonAstGeneratorExp): void;
    visit_ListComp(node: PythonAstListComp): void;
    visit_Name(node: PythonAstName): void;
    visit_Return(node: PythonAstReturn): void;
    visit_SetComp(node: PythonAstSetComp): void;
    visit_Subscript(node: PythonAstSubscript): void;
    visitSequenceGenerator(node: PythonAstGeneratorExp | PythonAstListComp | PythonAstSetComp): void;
}
export declare function extractFromFormulaAst(formula: PythonAstFunctionDef, entityByKey: EntityByKey, leafParametersName: Set<string>): FormulaExtractor;
export {};
