ganit-core 0.3.11

Spreadsheet formula engine — parser and evaluator for Excel-compatible formulas
Documentation
use super::super::{FunctionMeta, Registry};

pub mod abs;
pub mod average;
pub mod averageif;
pub mod base;
pub mod ceiling_floor;
pub mod ceiling_floor_math;
pub mod combin;
pub mod combina;
pub mod countif;
pub mod countifs;
pub mod countunique;
pub mod criterion;
pub mod decimal;
pub mod exp;
pub mod fact;
pub mod factdouble;
pub mod gcd;
pub mod int_fn;
pub mod lcm;
pub mod log;
pub mod mod_fn;
pub mod multinomial;
pub mod power;
pub mod product;
pub mod quotient;
pub mod rand;
pub mod round;
pub mod seriessum;
pub mod sign;
pub mod sqrt;
pub mod sqrtpi;
pub mod sum;
pub mod sumif;
pub mod sumifs;
pub mod sumsq;
pub mod trig;

pub fn register_math(registry: &mut Registry) {
    registry.register_eager("SUM",        sum::sum_fn,                  FunctionMeta { category: "math",        signature: "SUM(value1,...)",                       description: "Sum of arguments" });
    registry.register_eager("AVERAGE",    average::average_fn,          FunctionMeta { category: "statistical", signature: "AVERAGE(value1,...)",                   description: "Arithmetic mean of arguments" });
    registry.register_eager("PRODUCT",    product::product_fn,          FunctionMeta { category: "math",        signature: "PRODUCT(value1,...)",                   description: "Product of arguments" });
    registry.register_eager("ROUND",      round::round_fn,              FunctionMeta { category: "math",        signature: "ROUND(number, digits)",                 description: "Round to specified decimal places" });
    registry.register_eager("ROUNDUP",    round::roundup_fn,            FunctionMeta { category: "math",        signature: "ROUNDUP(number, digits)",               description: "Round away from zero" });
    registry.register_eager("ROUNDDOWN",  round::rounddown_fn,          FunctionMeta { category: "math",        signature: "ROUNDDOWN(number, digits)",             description: "Round toward zero" });
    registry.register_eager("INT",        int_fn::int_fn,               FunctionMeta { category: "math",        signature: "INT(number)",                           description: "Round down to nearest integer" });
    registry.register_eager("ABS",        abs::abs_fn,                  FunctionMeta { category: "math",        signature: "ABS(number)",                           description: "Absolute value of a number" });
    registry.register_eager("SIGN",       sign::sign_fn,                FunctionMeta { category: "math",        signature: "SIGN(number)",                          description: "Sign of a number: -1, 0, or 1" });
    registry.register_eager("MOD",        mod_fn::mod_fn,               FunctionMeta { category: "math",        signature: "MOD(number, divisor)",                  description: "Remainder after division" });
    registry.register_eager("POWER",      power::power_fn,              FunctionMeta { category: "math",        signature: "POWER(number, power)",                  description: "Number raised to a power" });
    registry.register_eager("SQRT",       sqrt::sqrt_fn,                FunctionMeta { category: "math",        signature: "SQRT(number)",                          description: "Square root" });
    registry.register_eager("LOG",        log::log_fn,                  FunctionMeta { category: "math",        signature: "LOG(number, base)",                     description: "Logarithm to specified base" });
    registry.register_eager("LOG10",      log::log10_fn,                FunctionMeta { category: "math",        signature: "LOG10(number)",                         description: "Base-10 logarithm" });
    registry.register_eager("LN",         log::ln_fn,                   FunctionMeta { category: "math",        signature: "LN(number)",                            description: "Natural logarithm" });
    registry.register_eager("EXP",        exp::exp_fn,                  FunctionMeta { category: "math",        signature: "EXP(number)",                           description: "e raised to a power" });
    registry.register_eager("CEILING",         ceiling_floor::ceiling_fn,                    FunctionMeta { category: "math", signature: "CEILING(number, significance)",                description: "Round up to nearest multiple of significance" });
    registry.register_eager("FLOOR",           ceiling_floor::floor_fn,                      FunctionMeta { category: "math", signature: "FLOOR(number, significance)",                  description: "Round down to nearest multiple of significance" });
    registry.register_eager("CEILING.MATH",    ceiling_floor_math::ceiling_math_fn,          FunctionMeta { category: "math", signature: "CEILING.MATH(number, [significance], [mode])", description: "Round up to nearest multiple; handles negative numbers via mode" });
    registry.register_eager("CEILING.PRECISE", ceiling_floor_math::ceiling_precise_fn,       FunctionMeta { category: "math", signature: "CEILING.PRECISE(number, [significance])",      description: "Round up to nearest multiple; sign of significance ignored" });
    registry.register_eager("FLOOR.MATH",      ceiling_floor_math::floor_math_fn,            FunctionMeta { category: "math", signature: "FLOOR.MATH(number, [significance], [mode])",   description: "Round down to nearest multiple; handles negative numbers via mode" });
    registry.register_eager("FLOOR.PRECISE",   ceiling_floor_math::floor_precise_fn,         FunctionMeta { category: "math", signature: "FLOOR.PRECISE(number, [significance])",        description: "Round down to nearest multiple; sign of significance ignored" });
    registry.register_eager("ISO.CEILING",     ceiling_floor_math::iso_ceiling_fn,           FunctionMeta { category: "math", signature: "ISO.CEILING(number, [significance])",          description: "ISO standard ceiling; identical to CEILING.PRECISE" });
    registry.register_eager("RAND",       rand::rand_fn,                FunctionMeta { category: "math",        signature: "RAND()",                                description: "Random number between 0 and 1" });
    registry.register_eager("RANDBETWEEN",rand::randbetween_fn,         FunctionMeta { category: "math",        signature: "RANDBETWEEN(low, high)",                description: "Random integer between two values" });
    registry.register_eager("PI",         trig::pi_fn,                  FunctionMeta { category: "math",        signature: "PI()",                                  description: "The value of pi (3.14159...)" });
    registry.register_eager("SIN",        trig::sin_fn,                 FunctionMeta { category: "math",        signature: "SIN(angle)",                            description: "Sine of an angle in radians" });
    registry.register_eager("COS",        trig::cos_fn,                 FunctionMeta { category: "math",        signature: "COS(angle)",                            description: "Cosine of an angle in radians" });
    registry.register_eager("TAN",        trig::tan_fn,                 FunctionMeta { category: "math",        signature: "TAN(angle)",                            description: "Tangent of an angle in radians" });
    registry.register_eager("ACOS",       trig::acos_fn,                FunctionMeta { category: "math",        signature: "ACOS(number)",                          description: "Arccosine in radians" });
    registry.register_eager("ASIN",       trig::asin_fn,                FunctionMeta { category: "math",        signature: "ASIN(number)",                          description: "Arcsine in radians" });
    registry.register_eager("ATAN",       trig::atan_fn,                FunctionMeta { category: "math",        signature: "ATAN(number)",                          description: "Arctangent in radians" });
    registry.register_eager("ATAN2",      trig::atan2_fn,               FunctionMeta { category: "math",        signature: "ATAN2(x, y)",                           description: "Arctangent of y/x in radians" });
    registry.register_eager("DEGREES",    trig::degrees_fn,             FunctionMeta { category: "math",        signature: "DEGREES(angle)",                        description: "Convert radians to degrees" });
    registry.register_eager("RADIANS",    trig::radians_fn,             FunctionMeta { category: "math",        signature: "RADIANS(angle)",                        description: "Convert degrees to radians" });
    registry.register_eager("SINH",       trig::sinh_fn,                FunctionMeta { category: "math",        signature: "SINH(number)",                          description: "Hyperbolic sine" });
    registry.register_eager("COSH",       trig::cosh_fn,                FunctionMeta { category: "math",        signature: "COSH(number)",                          description: "Hyperbolic cosine" });
    registry.register_eager("TANH",       trig::tanh_fn,                FunctionMeta { category: "math",        signature: "TANH(number)",                          description: "Hyperbolic tangent" });
    registry.register_eager("ACOSH",      trig::acosh_fn,               FunctionMeta { category: "math",        signature: "ACOSH(number)",                         description: "Inverse hyperbolic cosine" });
    registry.register_eager("ASINH",      trig::asinh_fn,               FunctionMeta { category: "math",        signature: "ASINH(number)",                         description: "Inverse hyperbolic sine" });
    registry.register_eager("ATANH",      trig::atanh_fn,               FunctionMeta { category: "math",        signature: "ATANH(number)",                         description: "Inverse hyperbolic tangent" });
    registry.register_eager("COT",        trig::cot_fn,                 FunctionMeta { category: "math",        signature: "COT(angle)",                            description: "Cotangent of an angle in radians" });
    registry.register_eager("COTH",       trig::coth_fn,                FunctionMeta { category: "math",        signature: "COTH(number)",                          description: "Hyperbolic cotangent" });
    registry.register_eager("CSC",        trig::csc_fn,                 FunctionMeta { category: "math",        signature: "CSC(angle)",                            description: "Cosecant of an angle in radians" });
    registry.register_eager("CSCH",       trig::csch_fn,                FunctionMeta { category: "math",        signature: "CSCH(number)",                          description: "Hyperbolic cosecant" });
    registry.register_eager("SEC",        trig::sec_fn,                 FunctionMeta { category: "math",        signature: "SEC(angle)",                            description: "Secant of an angle in radians" });
    registry.register_eager("SECH",       trig::sech_fn,                FunctionMeta { category: "math",        signature: "SECH(number)",                          description: "Hyperbolic secant" });
    registry.register_eager("ACOT",       trig::acot_fn,                FunctionMeta { category: "math",        signature: "ACOT(number)",                          description: "Inverse cotangent in radians" });
    registry.register_eager("ACOTH",      trig::acoth_fn,               FunctionMeta { category: "math",        signature: "ACOTH(number)",                         description: "Inverse hyperbolic cotangent" });
    registry.register_eager("QUOTIENT",   quotient::quotient_fn,        FunctionMeta { category: "math",        signature: "QUOTIENT(numerator, denominator)",       description: "Integer portion of division" });
    registry.register_eager("EVEN",       round::even_fn,               FunctionMeta { category: "math",        signature: "EVEN(number)",                          description: "Round up to nearest even integer" });
    registry.register_eager("ODD",        round::odd_fn,                FunctionMeta { category: "math",        signature: "ODD(number)",                           description: "Round up to nearest odd integer" });
    registry.register_eager("FACT",       fact::fact_fn,                FunctionMeta { category: "math",        signature: "FACT(number)",                          description: "Factorial of a number" });
    registry.register_eager("BASE",       base::base_fn,                FunctionMeta { category: "math",        signature: "BASE(value, base, [min_length])",        description: "Convert number to string in given base" });
    registry.register_eager("DECIMAL",    decimal::decimal_fn,          FunctionMeta { category: "math",        signature: "DECIMAL(text, base)",                   description: "Convert string in given base to decimal" });
    registry.register_eager("MROUND",     round::mround_fn,             FunctionMeta { category: "math",        signature: "MROUND(number, multiple)",               description: "Round to nearest multiple" });
    registry.register_eager("TRUNC",      round::trunc_fn,              FunctionMeta { category: "math",        signature: "TRUNC(number, digits)",                 description: "Truncate to integer or decimal places" });
    registry.register_eager("COUNTIF",    countif::countif_fn,          FunctionMeta { category: "math",        signature: "COUNTIF(range, criterion)",              description: "Count cells matching criterion" });
    registry.register_eager("COUNTIFS",   countifs::countifs_fn,        FunctionMeta { category: "math",        signature: "COUNTIFS(range1, criterion1, ...)",                     description: "Count rows where all criteria match" });
    registry.register_eager("COUNTUNIQUE",countunique::countunique_fn,  FunctionMeta { category: "math",        signature: "COUNTUNIQUE(value1, ...)",                              description: "Count unique distinct values" });
    registry.register_eager("SUMIF",      sumif::sumif_fn,              FunctionMeta { category: "math",        signature: "SUMIF(range, criterion, [sum_range])",   description: "Sum cells where range matches criterion" });
    registry.register_eager("SUMIFS",     sumifs::sumifs_fn,            FunctionMeta { category: "math",        signature: "SUMIFS(sum_range, range1, criterion1, ...)",            description: "Sum cells where all criteria match" });
    registry.register_eager("AVERAGEIF",  averageif::averageif_fn,      FunctionMeta { category: "statistical", signature: "AVERAGEIF(range, criterion, [avg_range])", description: "Average cells where range matches criterion" });
    registry.register_eager("SQRTPI",     sqrtpi::sqrtpi_fn,            FunctionMeta { category: "math",        signature: "SQRTPI(n)",                                 description: "Square root of n times pi" });
    registry.register_eager("SUMSQ",      sumsq::sumsq_fn,              FunctionMeta { category: "math",        signature: "SUMSQ(value1,...)",                          description: "Sum of squares of arguments" });
    registry.register_eager("FACTDOUBLE", factdouble::factdouble_fn,    FunctionMeta { category: "math",        signature: "FACTDOUBLE(n)",                              description: "Double factorial of a number" });
    registry.register_eager("SERIESSUM",  seriessum::seriessum_fn,      FunctionMeta { category: "math",        signature: "SERIESSUM(x, n, m, coefficients)",           description: "Sum of a power series" });

    registry.register_eager("COMBIN",      combin::combin_fn,            FunctionMeta { category: "math",        signature: "COMBIN(n, k)",                               description: "Number of combinations without repetition" });
    registry.register_eager("COMBINA",     combina::combina_fn,          FunctionMeta { category: "math",        signature: "COMBINA(n, k)",                              description: "Number of combinations with repetition" });
    registry.register_eager("MULTINOMIAL", multinomial::multinomial_fn,  FunctionMeta { category: "math",        signature: "MULTINOMIAL(value1,...)",                    description: "Multinomial coefficient of given arguments" });
    registry.register_eager("GCD",         gcd::gcd_fn,                  FunctionMeta { category: "math",        signature: "GCD(value1,...)",                            description: "Greatest common divisor" });
    registry.register_eager("LCM",         lcm::lcm_fn,                  FunctionMeta { category: "math",        signature: "LCM(value1,...)",                            description: "Least common multiple" });
}