@obliczeniowo/elementary
Version:
Library made in Angular version 20
1 lines • 17.9 kB
Source Map (JSON)
{"version":3,"file":"obliczeniowo-elementary-math.mjs","sources":["../../../../projects/components/math/elementary-math.ts","../../../../projects/components/math/obliczeniowo-elementary-math.ts"],"sourcesContent":["/* eslint-disable eqeqeq */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { MinMax } from './interfaces/min-max';\n\nexport type Operations = string | number | boolean | Operations[];\nexport class ElementaryMath {\n /**\n * Calc modulo of two decimal places numbers\n */\n static fmod(value: number, base: number): number {\n return value - Math.floor(value / base) * base;\n }\n\n static radiansToDegrees(angle: number): number {\n return angle * 180 / Math.PI;\n }\n\n static degreesToRadians(angle: number): number {\n return angle * Math.PI / 180;\n }\n\n static minmax(value: number, min: number, max: number): number {\n return value < min ? min : value > max ? max : value;\n }\n\n static getMinMax(array: number[]): MinMax {\n if (array.length) {\n const minMax = { min: array[0], max: array[0] };\n\n array.forEach(v => {\n if (v > minMax.max) {\n minMax.max = v;\n }\n if (v < minMax.min) {\n minMax.min = v;\n }\n });\n\n return minMax;\n }\n return { min: NaN, max: NaN };\n }\n\n /**\n * Check if string is number\n * @param n number/string to check if number\n * @param fully if true will tests if string contain only number format like:\n *\n * -1432\n * -123.45\n * -123.45e10\n * -123.45e-10\n * 123.45e-10\n * 123.45e10\n * 123.45\n * 123\n *\n * format 123.45e is not proper number so it is not consider as number, as well as:\n *\n * 123 some string\n * some string 123\n * 123..\n * 123.123.\n * 123e-10e-10\n *\n * @returns true if is number (not NaN or infinity)\n */\n static isNumeric(n: string | number, fully = false): boolean {\n if (typeof n === 'number') {\n return !isNaN(n) && isFinite(n);\n }\n\n if (fully) {\n const reg = /^-?\\d*\\.?\\d*e?-?\\d{1,}$/\n if (!reg.test(n)) {\n return false;\n }\n }\n\n return !isNaN(parseFloat(n));\n }\n\n static precision(value: number): number {\n return (value - Math.floor(value)) < 0.5 && Math.floor(value) || Math.ceil(value);\n }\n\n static average(values: number[]): number {\n return values.reduce((p, c) => (p += c, p), 0) / values.length;\n }\n\n static standardDeviation(values: number[]): number {\n const average = ElementaryMath.average(values);\n return Math.sqrt(values.reduce((p, c) => (p += (c - average) * (c - average), p), 0) / values.length);\n }\n\n static averageAndStandardDeviation(values: number[]): {\n middle: number;\n standardDeviation: number;\n } {\n const middle = ElementaryMath.average(values);\n return {\n middle,\n standardDeviation: Math.sqrt(values.reduce((p, c) => (p += (c - middle) * (c - middle), p), 0) / values.length)\n };\n }\n\n static normalization(values: number[]): number[] {\n const params = ElementaryMath.averageAndStandardDeviation(values);\n\n return values.map(value => (value - params.middle) / (params.standardDeviation || 1));\n }\n\n /**\n * Calc how many times each unique value exist in table of numbers\n * @param values numeric values to count\n * @returns Map object to collect counted times numeric values as key: value, value: count\n *\n * @example\n *\n * countUnique([10, 10, 10, 20, 20, 30])\n *\n * return: Map(3) { 10 → 3, 20 → 2, 30 → 1 }\n */\n static countUnique(values: number[]): Map<number, number> {\n const map = new Map<number, number>();\n\n values.forEach(value => {\n map.set(value, map.has(value) ? (map.get(value) || 1) + 1 : 1)\n })\n\n return map;\n }\n\n /**\n * Calc weighted average\n * @param values values table\n * @param weights weights table\n * @returns calculated average if values.length === weights.length, else NaN\n */\n static averageWeighted(values: number[], weights: number[]): number {\n if (values.length !== weights.length) {\n return NaN;\n } else if (values.length) {\n return values.reduce((p, c, index) => (p += c * weights[index], p), 0) / (weights.reduce((p, c) => (p += c, p), 0) || 1);\n }\n\n return 0;\n }\n\n /**\n * Pick up n% position of sorted array of numbers\n * @param percentages table of percentage as for example [10, 20, 30, 40, 50]\n * @param values table of numeric values [5, 10, 15, 20, 20, 20, 20, 20, 50, 60]\n * @returns for given above inputs [10, 15, 20, 20, 20]\n */\n static percentagesByPosition(percentages: number[], values: number[]): number[] {\n values = values.sort((a, b) => a - b);\n\n return percentages.map(percentage => values[Math.floor(values.length * percentage / 100)]);\n }\n\n /**\n * Calc sum of values and divide all elements by it and multiply by multiplier\n * @param values vector of numbers [100, 200, 300, 400, 1000]\n * @param multiply by default 100 to get percentages\n * @returns for given input [5, 10, 15, 20, 50] as percentages\n */\n static percentagesBySum(values: number[], multiply: number = 100): number[] {\n const sum = ElementaryMath.sum(values);\n\n return values.map(value => value / sum * multiply);\n }\n\n /**\n * Find abs max value in values numbers vector and divide each value by it and multiply by 100\n * @param values example: [10, 20, 30, 200, 40, 20, -400]\n * @param multiply multiplier example: 100\n * @returns [2.5, 5, 7.5, 50, 10, 5, -100]\n */\n static percentageByAbsMax(values: number[], multiply: number = 100): number[] {\n const max = values.reduce((p, c, index) => (p = !index ? c : ElementaryMath.absMax(p, c), p));\n\n return values.map(value => value / max * multiply);\n }\n\n /**\n * Find max value in values numbers vector and divide each value by it and multiply by 100\n * @param values example: [10, 20, 30, 200, 40, 20, -400]\n * @param multiply multiplier example: 100\n * @returns [5, 10, 15, 100, 20, 10, -200]\n */\n static percentageByMax(values: number[], multiply: number = 100): number[] {\n const max = values.reduce((p, c, index) => (p = !index ? c : Math.max(p, c), p));\n\n return values.map(value => value / max * multiply);\n }\n\n static sum(values: number[]): number {\n return values.reduce((p, c) => p += c, 0);\n }\n\n static absMax(a: number, b: number): number {\n return Math.abs(a) < Math.abs(b) ? b : a;\n }\n\n static calculate<T = string | number | boolean>(val: Operations, variables: { [name: string]: number }): T {\n if (val instanceof Array) {\n const rec = val.map(v => ElementaryMath.calculate<any>(v, variables));\n switch (rec[0]) {\n case 'get': {\n return variables[rec[1].toString()] as T;\n }\n case '*':\n case 'multiply': {\n return (rec.slice(1).reduce((p: number, c: number) => (p *= c, p), 1)) as T;\n }\n case '/':\n case 'divide': {\n return (rec[1] / rec[2]) as T;\n }\n case '+':\n case 'add': {\n return (rec.slice(1).reduce((p: number, c: number) => (p += c, p), 0)) as T;\n }\n case '-':\n case 'subtract': {\n return (rec[1] - rec[2]) as T;\n }\n case 'mod': {\n return (rec[1] % rec[2]) as T;\n }\n case 'exp': {\n return Math.exp(rec[1]) as T;\n }\n case 'pow': {\n return Math.pow(rec[1], rec[2]) as T;\n }\n case 'sin': {\n return Math.sin(rec[1]) as T;\n }\n case 'cos': {\n return Math.cos(rec[1]) as T;\n }\n case 'tan': {\n return Math.tan(rec[1]) as T;\n }\n case 'atan': {\n return Math.atan(rec[1]) as T;\n }\n case 'acos': {\n return Math.acos(rec[1]) as T;\n }\n case 'asin': {\n return Math.asin(rec[1]) as T;\n }\n case 'sinh': {\n return Math.sinh(rec[1]) as T;\n }\n case 'cosh': {\n return Math.cosh(rec[1]) as T;\n }\n case 'tanh': {\n return Math.tanh(rec[1]) as T;\n }\n case 'asinh': {\n return Math.asinh(rec[1]) as T;\n }\n case 'acosh': {\n return Math.acosh(rec[1]) as T;\n }\n case 'atanh': {\n return Math.atanh(rec[1]) as T;\n }\n case 'or': {\n return (rec[1] || rec[2]) as T;\n }\n case 'and': {\n return (rec[1] && rec[2]) as T;\n }\n case 'not': {\n return (!rec[1]) as T;\n }\n case '==': {\n return (rec[1] == rec[2]) as T;\n }\n case '!=': {\n return (rec[1] != rec[2]) as T;\n }\n case '<': {\n return (rec[1] < rec[2]) as T;\n }\n case '<=': {\n return (rec[1] <= rec[2]) as T;\n }\n case '>': {\n return (rec[1] > rec[2]) as T;\n }\n case '>=': {\n return (rec[1] >= rec[2]) as T;\n }\n case 'toRadians': {\n return ElementaryMath.degreesToRadians(rec[1]) as T;\n }\n case 'toDegrees': {\n return ElementaryMath.degreesToRadians(rec[1]) as T;\n }\n case 'join': {\n return rec.slice(1).map(v => v.toString()).join('') as T;\n }\n case 'pi': {\n return Math.PI as T;\n }\n case 'e': {\n return Math.E as T;\n }\n case 'if-else': {\n return rec[1] ? rec[2] : rec[3];\n }\n case 'goldenRatio': {\n return 1.618033988749894 as T;\n }\n }\n }\n return val as T;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}