time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

number.js (5326B)


      1 import { REArgumentError } from "../errors/messages.js";
      2 import { makeDefinition } from "../library/registry/fnDefinition.js";
      3 import { frArray, frNumber, frDict } from "../library/registry/frTypes.js";
      4 import { FnFactory } from "../library/registry/helpers.js";
      5 import * as E_A_Floats from "../utility/E_A_Floats.js";
      6 import { NumericRangeDomain } from "../value/domain.js";
      7 import { vArray, vDomain, vNumber } from "../value/index.js";
      8 const maker = new FnFactory({
      9     nameSpace: "Number",
     10     requiresNamespace: false,
     11 });
     12 const throwEmptyList = () => {
     13     throw new REArgumentError("List is empty");
     14 };
     15 function makeNumberArrayToNumberDefinition(fn, throwIfEmpty = true) {
     16     return makeDefinition([frArray(frNumber)], ([arr]) => {
     17         if (arr.length === 0 && throwIfEmpty) {
     18             return throwEmptyList();
     19         }
     20         return vNumber(fn(arr));
     21     });
     22 }
     23 function makeNumberArrayToNumberArrayDefinition(fn, throwIfEmpty = true) {
     24     return makeDefinition([frArray(frNumber)], ([arr]) => {
     25         if (arr.length === 0 && throwIfEmpty) {
     26             return throwEmptyList();
     27         }
     28         return vArray(fn(arr).map(vNumber));
     29     });
     30 }
     31 export const library = [
     32     maker.n2n({
     33         name: "floor",
     34         examples: [`floor(3.5)`],
     35         fn: Math.floor,
     36     }),
     37     maker.n2n({
     38         name: "ceil",
     39         examples: ["ceil(3.5)"],
     40         fn: Math.ceil,
     41     }),
     42     maker.n2n({
     43         name: "abs",
     44         description: "absolute value",
     45         examples: [`abs(3.5)`],
     46         fn: Math.abs,
     47     }),
     48     maker.n2n({
     49         name: "exp",
     50         description: "exponent",
     51         examples: [`exp(3.5)`],
     52         fn: Math.exp,
     53     }),
     54     maker.n2n({
     55         name: "log",
     56         examples: [`log(3.5)`],
     57         fn: Math.log,
     58     }),
     59     maker.n2n({
     60         name: "log10",
     61         examples: [`log10(3.5)`],
     62         fn: Math.log10,
     63     }),
     64     maker.n2n({
     65         name: "log2",
     66         examples: [`log2(3.5)`],
     67         fn: Math.log2,
     68     }),
     69     maker.n2n({
     70         name: "round",
     71         examples: [`round(3.5)`],
     72         fn: Math.round,
     73     }),
     74     maker.make({
     75         name: "sum",
     76         output: "Number",
     77         examples: [`sum([3,5,2])`],
     78         definitions: [
     79             makeNumberArrayToNumberDefinition((arr) => E_A_Floats.sum(arr), false),
     80         ],
     81     }),
     82     maker.make({
     83         name: "product",
     84         output: "Number",
     85         examples: [`product([3,5,2])`],
     86         definitions: [
     87             makeNumberArrayToNumberDefinition((arr) => E_A_Floats.product(arr), false),
     88         ],
     89     }),
     90     maker.make({
     91         name: "min",
     92         output: "Number",
     93         examples: [`min([3,5,2])`],
     94         definitions: [makeNumberArrayToNumberDefinition((arr) => Math.min(...arr))],
     95     }),
     96     maker.make({
     97         name: "max",
     98         output: "Number",
     99         examples: [`max([3,5,2])`],
    100         definitions: [makeNumberArrayToNumberDefinition((arr) => Math.max(...arr))],
    101     }),
    102     maker.make({
    103         name: "mean",
    104         output: "Number",
    105         examples: [`mean([3,5,2])`],
    106         definitions: [
    107             makeNumberArrayToNumberDefinition((arr) => E_A_Floats.mean(arr)),
    108         ],
    109     }),
    110     maker.make({
    111         name: "geomean",
    112         description: "geometric mean",
    113         output: "Number",
    114         examples: [`geomean([3,5,2])`],
    115         definitions: [
    116             makeNumberArrayToNumberDefinition((arr) => E_A_Floats.geomean(arr)),
    117         ],
    118     }),
    119     maker.make({
    120         name: "stdev",
    121         description: "standard deviation",
    122         output: "Number",
    123         examples: [`stdev([3,5,2,3,5])`],
    124         definitions: [
    125             makeNumberArrayToNumberDefinition((arr) => E_A_Floats.stdev(arr)),
    126         ],
    127     }),
    128     maker.make({
    129         name: "variance",
    130         output: "Number",
    131         examples: [`variance([3,5,2,3,5])`],
    132         definitions: [
    133             makeNumberArrayToNumberDefinition((arr) => E_A_Floats.variance(arr)),
    134         ],
    135     }),
    136     maker.make({
    137         name: "sort",
    138         output: "Array",
    139         examples: [`sort([3,5,2,3,5])`],
    140         definitions: [
    141             makeNumberArrayToNumberArrayDefinition((arr) => E_A_Floats.sort(arr), false),
    142         ],
    143     }),
    144     maker.make({
    145         name: "cumsum",
    146         output: "Array",
    147         description: "cumulative sum",
    148         examples: [`cumsum([3,5,2,3,5])`],
    149         definitions: [
    150             makeNumberArrayToNumberArrayDefinition(E_A_Floats.cumSum, false),
    151         ],
    152     }),
    153     maker.make({
    154         name: "cumprod",
    155         description: "cumulative product",
    156         output: "Array",
    157         examples: [`cumprod([3,5,2,3,5])`],
    158         definitions: [
    159             makeNumberArrayToNumberArrayDefinition(E_A_Floats.cumProd, false),
    160         ],
    161     }),
    162     maker.make({
    163         name: "diff",
    164         output: "Array",
    165         examples: [`diff([3,5,2,3,5])`],
    166         definitions: [makeNumberArrayToNumberArrayDefinition(E_A_Floats.diff)],
    167     }),
    168     maker.make({
    169         name: "rangeDomain",
    170         requiresNamespace: true,
    171         output: "Domain",
    172         examples: ["Number.rangeDomain({ min: 5, max: 10 })"],
    173         definitions: [
    174             makeDefinition([frDict(["min", frNumber], ["max", frNumber])], ([{ min, max }]) => {
    175                 return vDomain(new NumericRangeDomain(min, max));
    176             }),
    177         ],
    178     }),
    179 ];
    180 //# sourceMappingURL=number.js.map