{"version":3,"file":"analyze.mjs","sources":["../../../../../../../../node_modules/chroma-js/src/utils/analyze.js"],"sourcesContent":["import type from './type.js';\n\nconst { log, pow, floor, abs } = Math;\n\nexport function analyze(data, key = null) {\n    const r = {\n        min: Number.MAX_VALUE,\n        max: Number.MAX_VALUE * -1,\n        sum: 0,\n        values: [],\n        count: 0\n    };\n    if (type(data) === 'object') {\n        data = Object.values(data);\n    }\n    data.forEach((val) => {\n        if (key && type(val) === 'object') val = val[key];\n        if (val !== undefined && val !== null && !isNaN(val)) {\n            r.values.push(val);\n            r.sum += val;\n            if (val < r.min) r.min = val;\n            if (val > r.max) r.max = val;\n            r.count += 1;\n        }\n    });\n\n    r.domain = [r.min, r.max];\n\n    r.limits = (mode, num) => limits(r, mode, num);\n\n    return r;\n}\n\nexport function limits(data, mode = 'equal', num = 7) {\n    if (type(data) == 'array') {\n        data = analyze(data);\n    }\n    const { min, max } = data;\n    const values = data.values.sort((a, b) => a - b);\n\n    if (num === 1) {\n        return [min, max];\n    }\n\n    const limits = [];\n\n    if (mode.substr(0, 1) === 'c') {\n        // continuous\n        limits.push(min);\n        limits.push(max);\n    }\n\n    if (mode.substr(0, 1) === 'e') {\n        // equal interval\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            limits.push(min + (i / num) * (max - min));\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'l') {\n        // log scale\n        if (min <= 0) {\n            throw new Error(\n                'Logarithmic scales are only possible for values > 0'\n            );\n        }\n        const min_log = Math.LOG10E * log(min);\n        const max_log = Math.LOG10E * log(max);\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            limits.push(pow(10, min_log + (i / num) * (max_log - min_log)));\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'q') {\n        // quantile scale\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            const p = ((values.length - 1) * i) / num;\n            const pb = floor(p);\n            if (pb === p) {\n                limits.push(values[pb]);\n            } else {\n                // p > pb\n                const pr = p - pb;\n                limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);\n            }\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'k') {\n        // k-means clustering\n        /*\n        implementation based on\n        http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n        simplified for 1-d input values\n        */\n        let cluster;\n        const n = values.length;\n        const assignments = new Array(n);\n        const clusterSizes = new Array(num);\n        let repeat = true;\n        let nb_iters = 0;\n        let centroids = null;\n\n        // get seed values\n        centroids = [];\n        centroids.push(min);\n        for (let i = 1; i < num; i++) {\n            centroids.push(min + (i / num) * (max - min));\n        }\n        centroids.push(max);\n\n        while (repeat) {\n            // assignment step\n            for (let j = 0; j < num; j++) {\n                clusterSizes[j] = 0;\n            }\n            for (let i = 0; i < n; i++) {\n                const value = values[i];\n                let mindist = Number.MAX_VALUE;\n                let best;\n                for (let j = 0; j < num; j++) {\n                    const dist = abs(centroids[j] - value);\n                    if (dist < mindist) {\n                        mindist = dist;\n                        best = j;\n                    }\n                    clusterSizes[best]++;\n                    assignments[i] = best;\n                }\n            }\n\n            // update centroids step\n            const newCentroids = new Array(num);\n            for (let j = 0; j < num; j++) {\n                newCentroids[j] = null;\n            }\n            for (let i = 0; i < n; i++) {\n                cluster = assignments[i];\n                if (newCentroids[cluster] === null) {\n                    newCentroids[cluster] = values[i];\n                } else {\n                    newCentroids[cluster] += values[i];\n                }\n            }\n            for (let j = 0; j < num; j++) {\n                newCentroids[j] *= 1 / clusterSizes[j];\n            }\n\n            // check convergence\n            repeat = false;\n            for (let j = 0; j < num; j++) {\n                if (newCentroids[j] !== centroids[j]) {\n                    repeat = true;\n                    break;\n                }\n            }\n\n            centroids = newCentroids;\n            nb_iters++;\n\n            if (nb_iters > 200) {\n                repeat = false;\n            }\n        }\n\n        // finished k-means clustering\n        // the next part is borrowed from gabrielflor.it\n        const kClusters = {};\n        for (let j = 0; j < num; j++) {\n            kClusters[j] = [];\n        }\n        for (let i = 0; i < n; i++) {\n            cluster = assignments[i];\n            kClusters[cluster].push(values[i]);\n        }\n        let tmpKMeansBreaks = [];\n        for (let j = 0; j < num; j++) {\n            tmpKMeansBreaks.push(kClusters[j][0]);\n            tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);\n        }\n        tmpKMeansBreaks = tmpKMeansBreaks.sort((a, b) => a - b);\n        limits.push(tmpKMeansBreaks[0]);\n        for (let i = 1; i < tmpKMeansBreaks.length; i += 2) {\n            const v = tmpKMeansBreaks[i];\n            if (!isNaN(v) && limits.indexOf(v) === -1) {\n                limits.push(v);\n            }\n        }\n    }\n    return limits;\n}\n"],"names":["log","pow","abs"],"mappings":"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","x_google_ignoreList":[0]}