hyperformula-dc
Version:
HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas
257 lines (256 loc) • 7.97 kB
TypeScript
/**
* @license
* Copyright (c) 2021 Handsoncode. All rights reserved.
*/
import { ProcedureAst } from '../../parser';
import { InterpreterState } from '../InterpreterState';
import { ExtendedNumber, InternalScalarValue } from '../InterpreterValue';
import { ArgumentTypes, FunctionPlugin, FunctionPluginTypecheck } from './FunctionPlugin';
export declare type BinaryOperation<T> = (left: T, right: T) => T;
export declare type MapOperation<T> = (arg: ExtendedNumber) => T;
export declare class NumericAggregationPlugin extends FunctionPlugin implements FunctionPluginTypecheck<NumericAggregationPlugin> {
static implementedFunctions: {
SUM: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
SUMSQ: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
MAX: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
MIN: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
MAXA: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
MINA: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
COUNT: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
COUNTA: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
AVERAGE: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
AVERAGEA: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
PRODUCT: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
'VAR.S': {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
'VAR.P': {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
VARA: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
VARPA: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
'STDEV.S': {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
'STDEV.P': {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
STDEVA: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
STDEVPA: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
SUBTOTAL: {
method: string;
parameters: {
argumentType: ArgumentTypes;
}[];
repeatLastArgs: number;
};
};
static aliases: {
VAR: string;
VARP: string;
STDEV: string;
STDEVP: string;
VARS: string;
STDEVS: string;
};
/**
* Corresponds to SUM(Number1, Number2, ...).
*
* Returns a sum of given numbers.
*
* @param ast
* @param state
*/
sum(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
sumsq(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
/**
* Corresponds to MAX(Number1, Number2, ...).
*
* Returns a max of given numbers.
*
* @param ast
* @param state
*/
max(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
maxa(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
/**
* Corresponds to MIN(Number1, Number2, ...).
*
* Returns a min of given numbers.
*
* @param ast
* @param state
*/
min(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
mina(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
count(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
counta(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
average(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
averagea(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
vars(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
varp(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
vara(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
varpa(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
stdevs(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
stdevp(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
stdeva(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
stdevpa(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
product(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
subtotal(ast: ProcedureAst, state: InterpreterState): InternalScalarValue;
private reduceAggregate;
private reduceAggregateA;
private doAverage;
private doVarS;
private doVarP;
private doStdevS;
private doStdevP;
private doCount;
private doCounta;
private doMax;
private doMin;
private doSum;
private doProduct;
private addWithEpsilonRaw;
/**
* Reduces procedure arguments with given reducing function
*
* @param args
* @param state
* @param initialAccValue - "neutral" value (equivalent of 0)
* @param functionName - function name to use as cache key
* @param reducingFunction - reducing function
* @param mapFunction
* @param coercionFunction
* */
private reduce;
/**
* Performs range operation on given range
*
* @param ast - cell range ast
* @param state
* @param initialAccValue - initial accumulator value for reducing function
* @param functionName - function name to use as cache key
* @param reducingFunction - reducing function
* @param mapFunction
* @param coercionFunction
*/
private evaluateRange;
/**
* Returns list of values for given range and function name
*
* If range is dependent on smaller range, list will contain value of smaller range for this function
* and values of cells that are not present in smaller range
*
* @param functionName - function name (e.g. SUM)
* @param range - cell range
* @param mapFunction
* @param coercionFunction
*/
private getRangeValues;
}