{"version":3,"file":"ml-savitzky-golay-generalized.esm.js","sources":["../node_modules/is-any-array/lib/index.js","../lib/index.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Apply Savitzky Golay algorithm.\n * @param ys - Array of y values.\n * @param xs - Array of X or deltaX.\n * @param options - Options controlling window size, derivative and polynomial order.\n * @returns Array containing the new ys (same length).\n */\nexport function sgg(ys, xs, options = {}) {\n    const { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (xs === undefined) {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const ans = new Float64Array(np);\n    const weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = xs ** derivative;\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        const wg1 = weights[half - i - 1];\n        const wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    const wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return (hs / count) ** derivative;\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else if (k === 0 && s === 0) {\n        Grampoly = 1;\n    }\n    else {\n        Grampoly = 0;\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * Compute the full weights matrix for every position inside the window.\n * @param m - Number of points.\n * @param n - Polynomial grade.\n * @param s - Derivative.\n * @returns Array of Float64Array weight vectors, one per position in the window.\n */\nfunction fullWeights(m, n, s) {\n    const weights = new Array(m);\n    const np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map"],"names":["toString","Object","prototype","isAnyArray","value","tag","call","endsWith","includes","sgg","ys","xs","options","windowSize","derivative","polynomial","Number","isInteger","RangeError","TypeError","undefined","length","console","warn","half","Math","floor","np","ans","Float64Array","weights","fullWeights","hs","constantH","i","wg1","wg2","d1","d2","l","getHs","wg","d","h","center","count","gramPoly","m","k","s","Grampoly","genFact","a","b","gf","j","weight","t","n","sum","Array"],"mappings":"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","x_google_ignoreList":[0]}