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