sum.js (2279B)
1 import { containsCollections, deepForEach, reduce } from '../../utils/collection.js'; 2 import { factory } from '../../utils/factory.js'; 3 import { improveErrorMessage } from './utils/improveErrorMessage.js'; 4 var name = 'sum'; 5 var dependencies = ['typed', 'config', 'add', 'numeric']; 6 export var createSum = /* #__PURE__ */factory(name, dependencies, _ref => { 7 var { 8 typed, 9 config, 10 add, 11 numeric 12 } = _ref; 13 14 /** 15 * Compute the sum of a matrix or a list with values. 16 * In case of a (multi dimensional) array or matrix, the sum of all 17 * elements will be calculated. 18 * 19 * Syntax: 20 * 21 * math.sum(a, b, c, ...) 22 * math.sum(A) 23 * 24 * Examples: 25 * 26 * math.sum(2, 1, 4, 3) // returns 10 27 * math.sum([2, 1, 4, 3]) // returns 10 28 * math.sum([[2, 5], [4, 3], [1, 7]]) // returns 22 29 * 30 * See also: 31 * 32 * mean, median, min, max, prod, std, variance, cumsum 33 * 34 * @param {... *} args A single matrix or or multiple scalar values 35 * @return {*} The sum of all values 36 */ 37 return typed(name, { 38 // sum([a, b, c, d, ...]) 39 'Array | Matrix': _sum, 40 // sum([a, b, c, d, ...], dim) 41 'Array | Matrix, number | BigNumber': _nsumDim, 42 // sum(a, b, c, d, ...) 43 '...': function _(args) { 44 if (containsCollections(args)) { 45 throw new TypeError('Scalar values expected in function sum'); 46 } 47 48 return _sum(args); 49 } 50 }); 51 /** 52 * Recursively calculate the sum of an n-dimensional array 53 * @param {Array | Matrix} array 54 * @return {number} sum 55 * @private 56 */ 57 58 function _sum(array) { 59 var sum; 60 deepForEach(array, function (value) { 61 try { 62 sum = sum === undefined ? value : add(sum, value); 63 } catch (err) { 64 throw improveErrorMessage(err, 'sum', value); 65 } 66 }); // make sure returning numeric value: parse a string into a numeric value 67 68 if (sum === undefined) { 69 sum = numeric(0, config.number); 70 } 71 72 if (typeof sum === 'string') { 73 sum = numeric(sum, config.number); 74 } 75 76 return sum; 77 } 78 79 function _nsumDim(array, dim) { 80 try { 81 var sum = reduce(array, dim, add); 82 return sum; 83 } catch (err) { 84 throw improveErrorMessage(err, 'sum'); 85 } 86 } 87 });