Forráskód Böngészése

export Arithmetic funcs individually. Use existing Delim

d98762625 7 éve
szülő
commit
6ddc1b1c9c

+ 104 - 128
src/core/lib/Arithmetic.mjs

@@ -8,156 +8,132 @@
 import Utils from "../Utils";
 import Utils from "../Utils";
 import BigNumber from "bignumber.js";
 import BigNumber from "bignumber.js";
 
 
+
 /**
 /**
- * Arithmetic functions used by Sum, Multiply, Divide, Subtract (etc)
- * functions.
+ * Converts a string array to a number array.
+ *
+ * @param {string[]} input
+ * @param {string} delim
+ * @returns {BigNumber[]}
  */
  */
-class Arithmetic {
-
-    /**
-     * @constant
-     * @default
-     */
-    static get DELIM_OPTIONS() {
-        return ["Line feed", "Space", "Comma", "Semi-colon", "Colon", "CRLF"];
-    }
-
-    /**
-     * Converts a string array to a number array.
-     *
-     * @private
-     * @param {string[]} input
-     * @param {string} delim
-     * @returns {BigNumber[]}
-     */
-    static _createNumArray(input, delim) {
-        delim = Utils.charRep(delim || "Space");
-        const splitNumbers = input.split(delim);
-        const numbers = [];
-        let num;
-
-        splitNumbers.map((number) => {
-            try {
-                num = BigNumber(number.trim());
-                if (!num.isNaN()) {
-                    numbers.push(num);
-                }
-            } catch (err) {
-                // This line is not a valid number
+export function createNumArray(input, delim) {
+    delim = Utils.charRep(delim || "Space");
+    const splitNumbers = input.split(delim);
+    const numbers = [];
+    let num;
+
+    splitNumbers.map((number) => {
+        try {
+            num = BigNumber(number.trim());
+            if (!num.isNaN()) {
+                numbers.push(num);
             }
             }
-        });
-        return numbers;
-    }
+        } catch (err) {
+            // This line is not a valid number
+        }
+    });
+    return numbers;
+}
 
 
 
 
-    /**
-     * Adds an array of numbers and returns the value.
-     *
-     * @private
-     * @param {BigNumber[]} data
-     * @returns {BigNumber}
-     */
-    static _sum(data) {
-        if (data.length > 0) {
-            return data.reduce((acc, curr) => acc.plus(curr));
-        }
+/**
+ * Adds an array of numbers and returns the value.
+ *
+ * @param {BigNumber[]} data
+ * @returns {BigNumber}
+ */
+export function sum(data) {
+    if (data.length > 0) {
+        return data.reduce((acc, curr) => acc.plus(curr));
     }
     }
+}
 
 
 
 
-    /**
-     * Subtracts an array of numbers and returns the value.
-     *
-     * @private
-     * @param {BigNumber[]} data
-     * @returns {BigNumber}
-     */
-    static _sub(data) {
-        if (data.length > 0) {
-            return data.reduce((acc, curr) => acc.minus(curr));
-        }
+/**
+ * Subtracts an array of numbers and returns the value.
+ *
+ * @param {BigNumber[]} data
+ * @returns {BigNumber}
+ */
+export function sub(data) {
+    if (data.length > 0) {
+        return data.reduce((acc, curr) => acc.minus(curr));
     }
     }
+}
 
 
 
 
-    /**
-     * Multiplies an array of numbers and returns the value.
-     *
-     * @private
-     * @param {BigNumber[]} data
-     * @returns {BigNumber}
-     */
-    static _multi(data) {
-        if (data.length > 0) {
-            return data.reduce((acc, curr) => acc.times(curr));
-        }
+/**
+ * Multiplies an array of numbers and returns the value.
+ *
+ * @param {BigNumber[]} data
+ * @returns {BigNumber}
+ */
+export function multi(data) {
+    if (data.length > 0) {
+        return data.reduce((acc, curr) => acc.times(curr));
     }
     }
+}
 
 
 
 
-    /**
-     * Divides an array of numbers and returns the value.
-     *
-     * @private
-     * @param {BigNumber[]} data
-     * @returns {BigNumber}
-     */
-    static _div(data) {
-        if (data.length > 0) {
-            return data.reduce((acc, curr) => acc.div(curr));
-        }
+/**
+ * Divides an array of numbers and returns the value.
+ *
+ * @param {BigNumber[]} data
+ * @returns {BigNumber}
+ */
+export function div(data) {
+    if (data.length > 0) {
+        return data.reduce((acc, curr) => acc.div(curr));
     }
     }
+}
 
 
 
 
-    /**
-     * Computes mean of a number array and returns the value.
-     *
-     * @private
-     * @param {BigNumber[]} data
-     * @returns {BigNumber}
-     */
-    static _mean(data) {
-        if (data.length > 0) {
-            return Arithmetic._sum(data).div(data.length);
-        }
+/**
+ * Computes mean of a number array and returns the value.
+ *
+ * @param {BigNumber[]} data
+ * @returns {BigNumber}
+ */
+export function mean(data) {
+    if (data.length > 0) {
+        return sum(data).div(data.length);
     }
     }
+}
 
 
 
 
-    /**
-     * Computes median of a number array and returns the value.
-     *
-     * @private
-     * @param {BigNumber[]} data
-     * @returns {BigNumber}
-     */
-    static _median(data) {
-        if ((data.length % 2) === 0 && data.length > 0) {
-            data.sort(function(a, b){
-                return a.minus(b);
-            });
-            const first = data[Math.floor(data.length / 2)];
-            const second = data[Math.floor(data.length / 2) - 1];
-            return Arithmetic._mean([first, second]);
-        } else {
-            return data[Math.floor(data.length / 2)];
-        }
+/**
+ * Computes median of a number array and returns the value.
+ *
+ * @param {BigNumber[]} data
+ * @returns {BigNumber}
+ */
+export function median(data) {
+    if ((data.length % 2) === 0 && data.length > 0) {
+        data.sort(function(a, b){
+            return a.minus(b);
+        });
+        const first = data[Math.floor(data.length / 2)];
+        const second = data[Math.floor(data.length / 2) - 1];
+        return mean([first, second]);
+    } else {
+        return data[Math.floor(data.length / 2)];
     }
     }
+}
 
 
 
 
-    /**
-     * Computes standard deviation of a number array and returns the value.
-     *
-     * @private
-     * @param {BigNumber[]} data
-     * @returns {BigNumber}
-     */
-    static _stdDev(data) {
-        if (data.length > 0) {
-            const avg = Arithmetic._mean(data);
-            let devSum = new BigNumber(0);
-            data.map((datum) => {
-                devSum = devSum.plus(datum.minus(avg).pow(2));
-            });
-            return devSum.div(data.length).sqrt();
-        }
+/**
+ * Computes standard deviation of a number array and returns the value.
+ *
+ * @param {BigNumber[]} data
+ * @returns {BigNumber}
+ */
+export function stdDev(data) {
+    if (data.length > 0) {
+        const avg = mean(data);
+        let devSum = new BigNumber(0);
+        data.map((datum) => {
+            devSum = devSum.plus(datum.minus(avg).pow(2));
+        });
+        return devSum.div(data.length).sqrt();
     }
     }
 }
 }
-
-export default Arithmetic;

+ 6 - 4
src/core/operations/Divide.mjs

@@ -5,9 +5,11 @@
  * @license Apache-2.0
  * @license Apache-2.0
  */
  */
 
 
-import Operation from "../Operation";
-import Arithmetic from "../lib/Arithmetic";
 import BigNumber from "bignumber.js";
 import BigNumber from "bignumber.js";
+import Operation from "../Operation";
+import { div, createNumArray } from "../lib/Arithmetic";
+import { DELIM_OPTIONS } from "../lib/Delim";
+
 
 
 /**
 /**
  * Divide operation
  * Divide operation
@@ -29,7 +31,7 @@ class Divide extends Operation {
             {
             {
                 "name": "Delimiter",
                 "name": "Delimiter",
                 "type": "option",
                 "type": "option",
-                "value": Arithmetic.DELIM_OPTIONS,
+                "value": DELIM_OPTIONS,
             }
             }
         ];
         ];
     }
     }
@@ -40,7 +42,7 @@ class Divide extends Operation {
      * @returns {BigNumber}
      * @returns {BigNumber}
      */
      */
     run(input, args) {
     run(input, args) {
-        const val = Arithmetic._div(Arithmetic._createNumArray(input, args[0]));
+        const val = div(createNumArray(input, args[0]));
         return val instanceof BigNumber ? val : new BigNumber(NaN);
         return val instanceof BigNumber ? val : new BigNumber(NaN);
     }
     }
 
 

+ 4 - 3
src/core/operations/Mean.mjs

@@ -6,7 +6,8 @@
  */
  */
 
 
 import Operation from "../Operation";
 import Operation from "../Operation";
-import Arithmetic from "../lib/Arithmetic";
+import { mean, createNumArray } from "../lib/Arithmetic";
+import { DELIM_OPTIONS } from "../lib/Delim";
 import BigNumber from "bignumber.js";
 import BigNumber from "bignumber.js";
 
 
 /**
 /**
@@ -29,7 +30,7 @@ class Mean extends Operation {
             {
             {
                 "name": "Delimiter",
                 "name": "Delimiter",
                 "type": "option",
                 "type": "option",
-                "value": Arithmetic.DELIM_OPTIONS,
+                "value": DELIM_OPTIONS,
             }
             }
         ];
         ];
     }
     }
@@ -40,7 +41,7 @@ class Mean extends Operation {
      * @returns {BigNumber}
      * @returns {BigNumber}
      */
      */
     run(input, args) {
     run(input, args) {
-        const val = Arithmetic._mean(Arithmetic._createNumArray(input, args[0]));
+        const val = mean(createNumArray(input, args[0]));
         return val instanceof BigNumber ? val : new BigNumber(NaN);
         return val instanceof BigNumber ? val : new BigNumber(NaN);
     }
     }
 
 

+ 5 - 4
src/core/operations/Median.mjs

@@ -5,9 +5,10 @@
  * @license Apache-2.0
  * @license Apache-2.0
  */
  */
 
 
-import Operation from "../Operation";
-import Arithmetic from "../lib/Arithmetic";
 import BigNumber from "bignumber.js";
 import BigNumber from "bignumber.js";
+import Operation from "../Operation";
+import { median, createNumArray } from "../lib/Arithmetic";
+import { DELIM_OPTIONS } from "../lib/Delim";
 
 
 /**
 /**
  * Median operation
  * Median operation
@@ -29,7 +30,7 @@ class Median extends Operation {
             {
             {
                 "name": "Delimiter",
                 "name": "Delimiter",
                 "type": "option",
                 "type": "option",
-                "value": Arithmetic.DELIM_OPTIONS,
+                "value": DELIM_OPTIONS,
             }
             }
         ];
         ];
     }
     }
@@ -40,7 +41,7 @@ class Median extends Operation {
      * @returns {BigNumber}
      * @returns {BigNumber}
      */
      */
     run(input, args) {
     run(input, args) {
-        const val = Arithmetic._median(Arithmetic._createNumArray(input, args[0]));
+        const val = median(createNumArray(input, args[0]));
         return val instanceof BigNumber ? val : new BigNumber(NaN);
         return val instanceof BigNumber ? val : new BigNumber(NaN);
     }
     }
 
 

+ 6 - 4
src/core/operations/Multiply.mjs

@@ -5,9 +5,11 @@
  * @license Apache-2.0
  * @license Apache-2.0
  */
  */
 
 
-import Operation from "../Operation";
-import Arithmetic from "../lib/Arithmetic";
 import BigNumber from "bignumber.js";
 import BigNumber from "bignumber.js";
+import Operation from "../Operation";
+import { multi, createNumArray } from "../lib/Arithmetic";
+import { DELIM_OPTIONS } from "../lib/Delim";
+
 
 
 /**
 /**
  * Multiply operation
  * Multiply operation
@@ -29,7 +31,7 @@ class Multiply extends Operation {
             {
             {
                 "name": "Delimiter",
                 "name": "Delimiter",
                 "type": "option",
                 "type": "option",
-                "value": Arithmetic.DELIM_OPTIONS,
+                "value": DELIM_OPTIONS,
             }
             }
         ];
         ];
     }
     }
@@ -40,7 +42,7 @@ class Multiply extends Operation {
      * @returns {BigNumber}
      * @returns {BigNumber}
      */
      */
     run(input, args) {
     run(input, args) {
-        const val = Arithmetic._multi(Arithmetic._createNumArray(input, args[0]));
+        const val = multi(createNumArray(input, args[0]));
         return val instanceof BigNumber ? val : new BigNumber(NaN);
         return val instanceof BigNumber ? val : new BigNumber(NaN);
     }
     }
 
 

+ 6 - 4
src/core/operations/StandardDeviation.mjs

@@ -5,9 +5,11 @@
  * @license Apache-2.0
  * @license Apache-2.0
  */
  */
 
 
-import Operation from "../Operation";
-import Arithmetic from "../lib/Arithmetic";
 import BigNumber from "bignumber.js";
 import BigNumber from "bignumber.js";
+import Operation from "../Operation";
+import { stdDev, createNumArray } from "../lib/Arithmetic";
+import { DELIM_OPTIONS } from "../lib/Delim";
+
 
 
 /**
 /**
  * Standard Deviation operation
  * Standard Deviation operation
@@ -29,7 +31,7 @@ class StandardDeviation extends Operation {
             {
             {
                 "name": "Delimiter",
                 "name": "Delimiter",
                 "type": "option",
                 "type": "option",
-                "value": Arithmetic.DELIM_OPTIONS,
+                "value": DELIM_OPTIONS,
             }
             }
         ];
         ];
     }
     }
@@ -40,7 +42,7 @@ class StandardDeviation extends Operation {
      * @returns {BigNumber}
      * @returns {BigNumber}
      */
      */
     run(input, args) {
     run(input, args) {
-        const val = Arithmetic._stdDev(Arithmetic._createNumArray(input, args[0]));
+        const val = stdDev(createNumArray(input, args[0]));
         return val instanceof BigNumber ? val : new BigNumber(NaN);
         return val instanceof BigNumber ? val : new BigNumber(NaN);
 
 
     }
     }

+ 6 - 4
src/core/operations/Subtract.mjs

@@ -5,9 +5,11 @@
  * @license Apache-2.0
  * @license Apache-2.0
  */
  */
 
 
-import Operation from "../Operation";
-import Arithmetic from "../lib/Arithmetic";
 import BigNumber from "bignumber.js";
 import BigNumber from "bignumber.js";
+import Operation from "../Operation";
+import { sub, createNumArray } from "../lib/Arithmetic";
+import { DELIM_OPTIONS } from "../lib/Delim";
+
 
 
 /**
 /**
  * Subtract operation
  * Subtract operation
@@ -29,7 +31,7 @@ class Subtract extends Operation {
             {
             {
                 "name": "Delimiter",
                 "name": "Delimiter",
                 "type": "option",
                 "type": "option",
-                "value": Arithmetic.DELIM_OPTIONS,
+                "value": DELIM_OPTIONS,
             }
             }
         ];
         ];
     }
     }
@@ -40,7 +42,7 @@ class Subtract extends Operation {
      * @returns {BigNumber}
      * @returns {BigNumber}
      */
      */
     run(input, args) {
     run(input, args) {
-        const val = Arithmetic._sub(Arithmetic._createNumArray(input, args[0]));
+        const val = sub(createNumArray(input, args[0]));
         return val instanceof BigNumber ? val : new BigNumber(NaN);
         return val instanceof BigNumber ? val : new BigNumber(NaN);
     }
     }
 
 

+ 6 - 4
src/core/operations/Sum.mjs

@@ -4,9 +4,11 @@
  * @license Apache-2.0
  * @license Apache-2.0
  */
  */
 
 
-import Operation from "../Operation";
-import Arithmetic from "../lib/Arithmetic";
 import BigNumber from "bignumber.js";
 import BigNumber from "bignumber.js";
+import Operation from "../Operation";
+import { sum, createNumArray } from "../lib/Arithmetic";
+import { DELIM_OPTIONS } from "../lib/Delim";
+
 
 
 /**
 /**
  * Sum operation
  * Sum operation
@@ -28,7 +30,7 @@ class Sum extends Operation {
             {
             {
                 "name": "Delimiter",
                 "name": "Delimiter",
                 "type": "option",
                 "type": "option",
-                "value": Arithmetic.DELIM_OPTIONS,
+                "value": DELIM_OPTIONS,
             }
             }
         ];
         ];
     }
     }
@@ -39,7 +41,7 @@ class Sum extends Operation {
      * @returns {BigNumber}
      * @returns {BigNumber}
      */
      */
     run(input, args) {
     run(input, args) {
-        const val = Arithmetic._sum(Arithmetic._createNumArray(input, args[0]));
+        const val = sum(createNumArray(input, args[0]));
         return val instanceof BigNumber ? val : new BigNumber(NaN);
         return val instanceof BigNumber ? val : new BigNumber(NaN);
     }
     }