datly 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"datly.umd.js","sources":["../src/core/dataLoader.js","../src/core/validator.js","../src/core/utils.js","../src/descriptive/centralTendency.js","../src/descriptive/dispersion.js","../src/descriptive/position.js","../src/descriptive/shape.js","../src/inferential/hypothesisTesting.js","../src/inferential/confidenceIntervals.js","../src/inferential/normalityTests.js","../src/multivariate/correlation.js","../src/multivariate/regression.js","../src/insights/reportGenerator.js","../src/insights/patternDetector.js","../src/insights/interpreter.js","../src/insights/autoAnalyser.js","../src/ml/baseModel.js","../src/ml/LinearRegression.js","../src/ml/LogisticRegression.js","../src/ml/KNearestNeighbors.js","../src/ml/DecisionTree.js","../src/ml/RandomForest.js","../src/ml/NaiveBayes.js","../src/ml/SupportVectorMachine.js","../src/ml/machineLearning.js","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/number.js","../node_modules/d3-array/src/extent.js","../node_modules/internmap/src/index.js","../node_modules/d3-array/src/identity.js","../node_modules/d3-array/src/sort.js","../node_modules/d3-array/src/array.js","../node_modules/d3-array/src/constant.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/threshold/sturges.js","../node_modules/d3-array/src/count.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/min.js","../node_modules/d3-array/src/quickselect.js","../node_modules/d3-array/src/range.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-scale/src/band.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/basis.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-scale/src/linear.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-axis/src/identity.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-axis/src/axis.js","../node_modules/d3-scale-chromatic/src/colors.js","../node_modules/d3-scale-chromatic/src/categorical/category10.js","../node_modules/d3-scale-chromatic/src/ramp.js","../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-path/src/path.js","../node_modules/d3-shape/src/path.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/curve/linear.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/curve/basis.js","../src/dataviz/index.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-selection/src/selectAll.js","../node_modules/d3-scale/src/sequential.js","../node_modules/d3-array/src/sum.js","../node_modules/d3-array/src/deviation.js","../node_modules/d3-array/src/variance.js","../node_modules/d3-array/src/mean.js","../node_modules/d3-array/src/quantile.js","../node_modules/d3-array/src/bin.js","../node_modules/d3-array/src/nice.js","../node_modules/d3-shape/src/area.js","../node_modules/d3-shape/src/pie.js","../src/index.js"],"sourcesContent":["class DataLoader {\n loadCSV(filePath, options = {}) {\n const defaultOptions = {\n delimiter: \",\",\n header: true,\n skipEmptyLines: true,\n encoding: \"utf8\",\n };\n\n const config = { ...defaultOptions, ...options };\n\n try {\n if (typeof window !== \"undefined\" && window.fs) {\n const content = window.fs.readFileSync\n ? window.fs.readFileSync(filePath, { encoding: config.encoding })\n : window.fs.readFile(filePath, { encoding: config.encoding });\n\n return this.parseCSV(content, config);\n } else {\n throw new Error(\"File system not available\");\n }\n } catch (error) {\n throw new Error(`Failed to load CSV: ${error.message}`);\n }\n }\n\n loadJSON(jsonInput, options = {}) {\n const defaultOptions = {\n validateTypes: true,\n autoInferHeaders: true,\n };\n\n const config = { ...defaultOptions, ...options };\n\n try {\n let jsonData;\n\n if (typeof jsonInput === \"string\") {\n if (\n jsonInput.endsWith(\".json\") &&\n typeof window !== \"undefined\" &&\n window.fs\n ) {\n const content = window.fs.readFileSync\n ? window.fs.readFileSync(jsonInput, { encoding: \"utf8\" })\n : window.fs.readFile(jsonInput, { encoding: \"utf8\" });\n jsonData = JSON.parse(content);\n } else {\n jsonData = JSON.parse(jsonInput);\n }\n } else if (typeof jsonInput === \"object\") {\n jsonData = jsonInput;\n } else {\n throw new Error(\n \"Invalid JSON input: must be string, file path, or object\"\n );\n }\n\n return this.parseJSON(jsonData, config);\n } catch (error) {\n throw new Error(`Failed to load JSON: ${error.message}`);\n }\n }\n\n parseJSON(jsonData, config) {\n if (!jsonData) {\n throw new Error(\"JSON data is empty or null\");\n }\n\n if (Array.isArray(jsonData)) {\n return this.parseJSONArray(jsonData, config);\n } else if (jsonData.headers && jsonData.data) {\n return this.parseStructuredJSON(jsonData, config);\n } else if (typeof jsonData === \"object\") {\n return this.parseJSONObject(jsonData, config);\n } else {\n throw new Error(\"Unsupported JSON format\");\n }\n }\n\n parseJSONArray(jsonArray, config) {\n if (jsonArray.length === 0) {\n throw new Error(\"JSON array is empty\");\n }\n\n const firstRow = jsonArray[0];\n if (typeof firstRow !== \"object\" || firstRow === null) {\n throw new Error(\"JSON array must contain objects\");\n }\n\n let headers;\n if (config.autoInferHeaders) {\n const allKeys = new Set();\n jsonArray.forEach((row) => {\n if (typeof row === \"object\" && row !== null) {\n Object.keys(row).forEach((key) => allKeys.add(key));\n }\n });\n headers = Array.from(allKeys);\n } else {\n headers = Object.keys(firstRow);\n }\n\n const data = jsonArray\n .map((row, index) => {\n if (typeof row !== \"object\" || row === null) {\n console.warn(`Row ${index} is not an object, skipping`);\n return null;\n }\n\n const processedRow = {};\n headers.forEach((header) => {\n let value = row[header];\n if (config.validateTypes) {\n value = this.inferType(value);\n }\n processedRow[header] = value;\n });\n return processedRow;\n })\n .filter((row) => row !== null);\n\n return {\n headers,\n data,\n length: data.length,\n columns: headers.length,\n source: \"json_array\",\n };\n }\n\n parseStructuredJSON(jsonData, config) {\n const { headers, data } = jsonData;\n\n if (!Array.isArray(headers)) {\n throw new Error(\"Headers must be an array\");\n }\n\n if (!Array.isArray(data)) {\n throw new Error(\"Data must be an array\");\n }\n\n if (headers.length === 0) {\n throw new Error(\"Headers array is empty\");\n }\n\n const processedData = data\n .map((row, index) => {\n if (Array.isArray(row)) {\n const processedRow = {};\n headers.forEach((header, i) => {\n let value = i < row.length ? row[i] : null;\n if (config.validateTypes) {\n value = this.inferType(value);\n }\n processedRow[header] = value;\n });\n return processedRow;\n } else if (typeof row === \"object\" && row !== null) {\n const processedRow = {};\n headers.forEach((header) => {\n let value = row[header];\n if (config.validateTypes) {\n value = this.inferType(value);\n }\n processedRow[header] = value;\n });\n return processedRow;\n } else {\n console.warn(`Row ${index} has invalid format, skipping`);\n return null;\n }\n })\n .filter((row) => row !== null);\n\n return {\n headers,\n data: processedData,\n length: processedData.length,\n columns: headers.length,\n source: \"structured_json\",\n };\n }\n\n parseJSONObject(jsonObject, config) {\n const entries = Object.entries(jsonObject);\n if (entries.length === 0) {\n throw new Error(\"JSON object is empty\");\n }\n\n const headers = [\"key\", \"value\"];\n const data = entries.map(([key, value]) => ({\n key: key,\n value: config.validateTypes ? this.inferType(value) : value,\n }));\n\n return {\n headers,\n data,\n length: data.length,\n columns: 2,\n source: \"json_object\",\n };\n }\n\n parseCSV(content, options) {\n const lines = content\n .split(\"\\n\")\n .filter((line) => (options.skipEmptyLines ? line.trim() !== \"\" : true));\n\n if (lines.length === 0) {\n throw new Error(\"CSV file is empty\");\n }\n\n const headers = options.header\n ? lines[0]\n .split(options.delimiter)\n .map((h) => h.trim().replace(/['\"]/g, \"\"))\n : Array.from(\n { length: lines[0].split(options.delimiter).length },\n (_, i) => `col_${i}`\n );\n\n const startIndex = options.header ? 1 : 0;\n const data = [];\n\n for (let i = startIndex; i < lines.length; i++) {\n const values = lines[i].split(options.delimiter);\n if (values.length === headers.length) {\n const row = {};\n headers.forEach((header, index) => {\n let value = values[index].trim().replace(/['\"]/g, \"\");\n row[header] = this.inferType(value);\n });\n data.push(row);\n }\n }\n\n return {\n headers,\n data,\n length: data.length,\n columns: headers.length,\n };\n }\n\n inferType(value) {\n if (\n value === \"\" ||\n value === \"null\" ||\n value === \"NULL\" ||\n value === \"NaN\"\n ) {\n return null;\n }\n\n if (value === \"true\" || value === \"TRUE\") return true;\n if (value === \"false\" || value === \"FALSE\") return false;\n\n if (/^-?\\d+$/.test(value)) {\n return parseInt(value, 10);\n }\n\n if (/^-?\\d*\\.\\d+$/.test(value)) {\n return parseFloat(value);\n }\n\n return value;\n }\n\n cleanData(dataset) {\n const cleaned = {\n ...dataset,\n data: dataset.data.filter((row) => {\n return Object.values(row).some(\n (value) => value !== null && value !== undefined\n );\n }),\n };\n\n cleaned.length = cleaned.data.length;\n return cleaned;\n }\n\n getDataInfo(dataset) {\n const info = {\n rows: dataset.length,\n columns: dataset.columns,\n headers: dataset.headers,\n types: {},\n nullCounts: {},\n uniqueCounts: {},\n };\n\n dataset.headers.forEach((header) => {\n const column = dataset.data.map((row) => row[header]);\n const nonNullValues = column.filter(\n (val) => val !== null && val !== undefined\n );\n const types = [...new Set(nonNullValues.map((val) => typeof val))];\n\n info.types[header] = types.length === 1 ? types[0] : \"mixed\";\n info.nullCounts[header] = column.length - nonNullValues.length;\n info.uniqueCounts[header] = new Set(nonNullValues).size;\n });\n\n return info;\n }\n\n getColumn(dataset, columnName) {\n if (!dataset.headers.includes(columnName.trim())) {\n throw new Error(`Column '${columnName}' not found`);\n }\n\n return dataset.data\n .map((row) => row[columnName])\n .filter((val) => val !== null && val !== undefined && !isNaN(val));\n }\n\n getColumns(dataset, columnNames) {\n const result = {};\n columnNames.forEach((name) => {\n result[name] = this.getColumn(dataset, name);\n });\n return result;\n }\n\n filterRows(dataset, condition) {\n return {\n ...dataset,\n data: dataset.data.filter(condition),\n length: dataset.data.filter(condition).length,\n };\n }\n\n sortBy(dataset, columnName, order = \"asc\") {\n const sortedData = [...dataset.data].sort((a, b) => {\n const aVal = a[columnName];\n const bVal = b[columnName];\n\n if (aVal === null || aVal === undefined) return 1;\n if (bVal === null || bVal === undefined) return -1;\n\n if (typeof aVal === \"string\" && typeof bVal === \"string\") {\n return order === \"asc\"\n ? aVal.localeCompare(bVal)\n : bVal.localeCompare(aVal);\n }\n\n return order === \"asc\" ? aVal - bVal : bVal - aVal;\n });\n\n return {\n ...dataset,\n data: sortedData,\n };\n }\n}\n\nexport default DataLoader;\n","class Validator {\n validateData(dataset) {\n const errors = [];\n const warnings = [];\n\n if (!dataset || typeof dataset !== 'object') {\n errors.push('Dataset must be an object');\n return { valid: false, errors, warnings };\n }\n\n if (!dataset.data || !Array.isArray(dataset.data)) {\n errors.push('Dataset must contain a data array');\n }\n\n if (!dataset.headers || !Array.isArray(dataset.headers)) {\n errors.push('Dataset must contain a headers array');\n }\n\n if (dataset.data && dataset.data.length === 0) {\n warnings.push('Dataset is empty');\n }\n\n if (dataset.data && dataset.headers) {\n const headerSet = new Set(dataset.headers);\n if (headerSet.size !== dataset.headers.length) {\n errors.push('Duplicate column headers found');\n }\n\n dataset.data.forEach((row, index) => {\n const rowKeys = Object.keys(row);\n const missingHeaders = dataset.headers.filter(h => !rowKeys.includes(h));\n const extraKeys = rowKeys.filter(k => !dataset.headers.includes(k));\n\n if (missingHeaders.length > 0) {\n warnings.push(`Row ${index}: Missing columns: ${missingHeaders.join(', ')}`);\n }\n\n if (extraKeys.length > 0) {\n warnings.push(`Row ${index}: Extra columns: ${extraKeys.join(', ')}`);\n }\n });\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings\n };\n }\n\n validateNumericColumn(column) {\n if (!Array.isArray(column)) {\n throw new Error('Column must be an array');\n }\n\n const numericValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (numericValues.length === 0) {\n throw new Error('Column contains no valid numeric values');\n }\n\n return {\n valid: true,\n validCount: numericValues.length,\n invalidCount: column.length - numericValues.length,\n cleanData: numericValues\n };\n }\n\n validateSampleSize(sample, minSize = 2) {\n if (!Array.isArray(sample)) {\n throw new Error('Sample must be an array');\n }\n\n if (sample.length < minSize) {\n throw new Error(`Sample size (${sample.length}) must be at least ${minSize}`);\n }\n\n return true;\n }\n\n validateConfidenceLevel(confidence) {\n if (typeof confidence !== 'number' || confidence <= 0 || confidence >= 1) {\n throw new Error('Confidence level must be a number between 0 and 1');\n }\n return true;\n }\n\n validateCorrelationInputs(col1, col2) {\n this.validateNumericColumn(col1);\n this.validateNumericColumn(col2);\n\n if (col1.length !== col2.length) {\n throw new Error('Columns must have the same length');\n }\n\n if (col1.length < 3) {\n throw new Error('Need at least 3 paired observations for correlation');\n }\n\n return true;\n }\n\n validateRegressionInputs(x, y) {\n this.validateNumericColumn(x);\n this.validateNumericColumn(y);\n\n if (x.length !== y.length) {\n throw new Error('X and Y arrays must have the same length');\n }\n\n if (x.length < 3) {\n throw new Error('Need at least 3 data points for regression');\n }\n\n const xVariance = this.calculateVariance(x);\n if (xVariance === 0) {\n throw new Error('X values must have non-zero variance');\n }\n\n return true;\n }\n\n calculateVariance(arr) {\n const mean = arr.reduce((sum, val) => sum + val, 0) / arr.length;\n return arr.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (arr.length - 1);\n }\n\n validateGroupsForANOVA(groups) {\n if (!Array.isArray(groups) || groups.length < 2) {\n throw new Error('ANOVA requires at least 2 groups');\n }\n\n groups.forEach((group, index) => {\n if (!Array.isArray(group)) {\n throw new Error(`Group ${index} must be an array`);\n }\n\n this.validateSampleSize(group, 2);\n this.validateNumericColumn(group);\n });\n\n return true;\n }\n\n validateContingencyTable(col1, col2) {\n if (!Array.isArray(col1) || !Array.isArray(col2)) {\n throw new Error('Both columns must be arrays');\n }\n\n if (col1.length !== col2.length) {\n throw new Error('Columns must have the same length');\n }\n\n if (col1.length < 5) {\n throw new Error('Need at least 5 observations for chi-square test');\n }\n\n return true;\n }\n\n isInteger(value) {\n return typeof value === 'number' && Number.isInteger(value);\n }\n\n isPositive(value) {\n return typeof value === 'number' && value > 0;\n }\n\n isInRange(value, min, max) {\n return typeof value === 'number' && value >= min && value <= max;\n }\n\n hasMinimumObservations(data, minimum) {\n return Array.isArray(data) && data.length >= minimum;\n }\n\n checkForConstantValues(column) {\n const uniqueValues = new Set(column);\n return uniqueValues.size === 1;\n }\n\n validateHypothesisTestInputs(sample1, sample2, testType) {\n this.validateSampleSize(sample1, 2);\n\n if (testType === 'two-sample' || testType === 'paired') {\n this.validateSampleSize(sample2, 2);\n\n if (testType === 'paired' && sample1.length !== sample2.length) {\n throw new Error('Paired samples must have the same length');\n }\n }\n\n this.validateNumericColumn(sample1);\n if (sample2) {\n this.validateNumericColumn(sample2);\n }\n\n return true;\n }\n}\n\nexport default Validator;","class Utils {\n detectOutliers(column, method = 'iqr') {\n const sortedData = [...column].sort((a, b) => a - b);\n const outliers = [];\n const indices = [];\n\n switch (method) {\n case 'iqr':\n const q1 = this.quantile(sortedData, 0.25);\n const q3 = this.quantile(sortedData, 0.75);\n const iqr = q3 - q1;\n const lowerBound = q1 - 1.5 * iqr;\n const upperBound = q3 + 1.5 * iqr;\n\n column.forEach((value, index) => {\n if (value < lowerBound || value > upperBound) {\n outliers.push(value);\n indices.push(index);\n }\n });\n break;\n\n case 'zscore':\n const mean = this.mean(column);\n const std = this.standardDeviation(column);\n\n column.forEach((value, index) => {\n const zscore = Math.abs((value - mean) / std);\n if (zscore > 3) {\n outliers.push(value);\n indices.push(index);\n }\n });\n break;\n\n case 'modified_zscore':\n const median = this.median(column);\n const deviations = column.map(x => Math.abs(x - median));\n const mad = this.median(deviations);\n\n column.forEach((value, index) => {\n const modifiedZScore = 0.6745 * (value - median) / mad;\n if (Math.abs(modifiedZScore) > 3.5) {\n outliers.push(value);\n indices.push(index);\n }\n });\n break;\n\n default:\n throw new Error(`Unknown outlier detection method: ${method}`);\n }\n\n return {\n outliers,\n indices,\n count: outliers.length,\n percentage: (outliers.length / column.length) * 100\n };\n }\n\n frequencyTable(column) {\n const frequencies = {};\n const total = column.length;\n\n column.forEach(value => {\n const key = value === null || value === undefined ? 'null' : String(value);\n frequencies[key] = (frequencies[key] || 0) + 1;\n });\n\n const result = Object.entries(frequencies).map(([value, count]) => ({\n value: value === 'null' ? null : value,\n frequency: count,\n relativeFrequency: count / total,\n percentage: (count / total) * 100\n }));\n\n return result.sort((a, b) => b.frequency - a.frequency);\n }\n\n groupBy(dataset, column, aggregation) {\n const groups = {};\n\n dataset.data.forEach(row => {\n const key = row[column];\n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(row);\n });\n\n const result = {};\n Object.entries(groups).forEach(([key, rows]) => {\n result[key] = {\n count: rows.length,\n data: rows\n };\n\n if (aggregation && typeof aggregation === 'object') {\n Object.entries(aggregation).forEach(([targetCol, func]) => {\n const values = rows.map(row => row[targetCol]).filter(v =>\n typeof v === 'number' && !isNaN(v)\n );\n\n if (values.length > 0) {\n result[key][`${func}_${targetCol}`] = this.applyAggregation(values, func);\n }\n });\n }\n });\n\n return result;\n }\n\n applyAggregation(values, func) {\n switch (func) {\n case 'mean': return this.mean(values);\n case 'median': return this.median(values);\n case 'sum': return values.reduce((a, b) => a + b, 0);\n case 'min': return Math.min(...values);\n case 'max': return Math.max(...values);\n case 'std': return this.standardDeviation(values);\n case 'var': return this.variance(values);\n case 'count': return values.length;\n default: throw new Error(`Unknown aggregation function: ${func}`);\n }\n }\n\n sample(dataset, size, method = 'random') {\n if (size >= dataset.length) {\n return { ...dataset };\n }\n\n let sampledData;\n\n switch (method) {\n case 'random':\n const indices = this.randomSample(dataset.length, size);\n sampledData = indices.map(i => dataset.data[i]);\n break;\n\n case 'systematic':\n const interval = Math.floor(dataset.length / size);\n sampledData = [];\n for (let i = 0; i < size; i++) {\n sampledData.push(dataset.data[i * interval]);\n }\n break;\n\n case 'first':\n sampledData = dataset.data.slice(0, size);\n break;\n\n case 'last':\n sampledData = dataset.data.slice(-size);\n break;\n\n default:\n throw new Error(`Unknown sampling method: ${method}`);\n }\n\n return {\n ...dataset,\n data: sampledData,\n length: sampledData.length\n };\n }\n\n randomSample(populationSize, sampleSize) {\n const indices = Array.from({ length: populationSize }, (_, i) => i);\n const sample = [];\n\n for (let i = 0; i < sampleSize; i++) {\n const randomIndex = Math.floor(Math.random() * indices.length);\n sample.push(indices.splice(randomIndex, 1)[0]);\n }\n\n return sample;\n }\n\n bootstrap(sample, statistic, iterations = 1000) {\n const bootstrapStats = [];\n\n for (let i = 0; i < iterations; i++) {\n const bootstrapSample = [];\n for (let j = 0; j < sample.length; j++) {\n const randomIndex = Math.floor(Math.random() * sample.length);\n bootstrapSample.push(sample[randomIndex]);\n }\n\n const stat = this.applyStatistic(bootstrapSample, statistic);\n bootstrapStats.push(stat);\n }\n\n return {\n bootstrapStats: bootstrapStats.sort((a, b) => a - b),\n mean: this.mean(bootstrapStats),\n standardError: this.standardDeviation(bootstrapStats),\n confidenceInterval: {\n lower: this.quantile(bootstrapStats, 0.025),\n upper: this.quantile(bootstrapStats, 0.975)\n }\n };\n }\n\n applyStatistic(sample, statistic) {\n switch (statistic) {\n case 'mean': return this.mean(sample);\n case 'median': return this.median(sample);\n case 'std': return this.standardDeviation(sample);\n case 'var': return this.variance(sample);\n default:\n if (typeof statistic === 'function') {\n return statistic(sample);\n }\n throw new Error(`Unknown statistic: ${statistic}`);\n }\n }\n\n contingencyTable(col1, col2) {\n const uniqueCol1 = [...new Set(col1)];\n const uniqueCol2 = [...new Set(col2)];\n\n const table = {};\n const totals = { row: {}, col: {}, grand: 0 };\n\n uniqueCol1.forEach(val1 => {\n table[val1] = {};\n totals.row[val1] = 0;\n });\n\n uniqueCol2.forEach(val2 => {\n totals.col[val2] = 0;\n });\n\n for (let i = 0; i < col1.length; i++) {\n const val1 = col1[i];\n const val2 = col2[i];\n\n if (!table[val1][val2]) {\n table[val1][val2] = 0;\n }\n\n table[val1][val2]++;\n totals.row[val1]++;\n totals.col[val2]++;\n totals.grand++;\n }\n\n uniqueCol1.forEach(val1 => {\n uniqueCol2.forEach(val2 => {\n if (!table[val1][val2]) {\n table[val1][val2] = 0;\n }\n });\n });\n\n return { table, totals, rows: uniqueCol1, columns: uniqueCol2 };\n }\n\n mean(arr) {\n return arr.reduce((sum, val) => sum + val, 0) / arr.length;\n }\n\n median(arr) {\n const sorted = [...arr].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n return sorted.length % 2 === 0 ?\n (sorted[mid - 1] + sorted[mid]) / 2 :\n sorted[mid];\n }\n\n quantile(arr, q) {\n const sorted = [...arr].sort((a, b) => a - b);\n const index = (sorted.length - 1) * q;\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n const weight = index % 1;\n\n if (lower === upper) {\n return sorted[lower];\n }\n\n return sorted[lower] * (1 - weight) + sorted[upper] * weight;\n }\n\n standardDeviation(arr) {\n return Math.sqrt(this.variance(arr));\n }\n\n variance(arr) {\n const mean = this.mean(arr);\n return arr.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (arr.length - 1);\n }\n\n round(value, decimals = 4) {\n return Math.round(value * Math.pow(10, decimals)) / Math.pow(10, decimals);\n }\n\n formatNumber(value, decimals = 4) {\n if (typeof value !== 'number') return value;\n return this.round(value, decimals);\n }\n}\n\nexport default Utils;","class CentralTendency {\n mean(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n return validValues.reduce((sum, val) => sum + val, 0) / validValues.length;\n }\n\n median(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const sorted = validValues.sort((a, b) => a - b);\n const middle = Math.floor(sorted.length / 2);\n\n return sorted.length % 2 === 0 ?\n (sorted[middle - 1] + sorted[middle]) / 2 :\n sorted[middle];\n }\n\n mode(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const frequency = {};\n let maxFreq = 0;\n\n column.forEach(value => {\n const key = value === null || value === undefined ? 'null' : String(value);\n frequency[key] = (frequency[key] || 0) + 1;\n maxFreq = Math.max(maxFreq, frequency[key]);\n });\n\n const modes = Object.entries(frequency)\n .filter(([_, freq]) => freq === maxFreq)\n .map(([value, _]) => value === 'null' ? null : this.parseValue(value));\n\n return {\n values: modes,\n frequency: maxFreq,\n isMultimodal: modes.length > 1,\n isUniform: maxFreq === 1 && Object.keys(frequency).length === column.length\n };\n }\n\n parseValue(str) {\n if (/^-?\\d+$/.test(str)) return parseInt(str, 10);\n if (/^-?\\d*\\.\\d+$/.test(str)) return parseFloat(str);\n if (str === 'true') return true;\n if (str === 'false') return false;\n return str;\n }\n\n geometricMean(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val) && val > 0\n );\n\n if (validValues.length === 0) {\n throw new Error('Geometric mean requires positive numeric values');\n }\n\n const logSum = validValues.reduce((sum, val) => sum + Math.log(val), 0);\n return Math.exp(logSum / validValues.length);\n }\n\n harmonicMean(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val) && val > 0\n );\n\n if (validValues.length === 0) {\n throw new Error('Harmonic mean requires positive numeric values');\n }\n\n const reciprocalSum = validValues.reduce((sum, val) => sum + (1 / val), 0);\n return validValues.length / reciprocalSum;\n }\n\n trimmedMean(column, percentage) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n if (typeof percentage !== 'number' || percentage < 0 || percentage >= 50) {\n throw new Error('Percentage must be between 0 and 50');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const sorted = validValues.sort((a, b) => a - b);\n const trimCount = Math.floor((percentage / 100) * sorted.length);\n const trimmed = sorted.slice(trimCount, sorted.length - trimCount);\n\n if (trimmed.length === 0) {\n throw new Error('Too much trimming - no values remain');\n }\n\n return trimmed.reduce((sum, val) => sum + val, 0) / trimmed.length;\n }\n\n quadraticMean(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const sumOfSquares = validValues.reduce((sum, val) => sum + val * val, 0);\n return Math.sqrt(sumOfSquares / validValues.length);\n }\n\n weightedMean(values, weights) {\n if (!Array.isArray(values) || !Array.isArray(weights)) {\n throw new Error('Values and weights must be arrays');\n }\n\n if (values.length !== weights.length) {\n throw new Error('Values and weights must have the same length');\n }\n\n if (values.length === 0) {\n throw new Error('Arrays must not be empty');\n }\n\n const validPairs = [];\n for (let i = 0; i < values.length; i++) {\n if (typeof values[i] === 'number' && typeof weights[i] === 'number' &&\n !isNaN(values[i]) && !isNaN(weights[i]) &&\n isFinite(values[i]) && isFinite(weights[i]) && weights[i] >= 0) {\n validPairs.push({ value: values[i], weight: weights[i] });\n }\n }\n\n if (validPairs.length === 0) {\n throw new Error('No valid value-weight pairs found');\n }\n\n const totalWeight = validPairs.reduce((sum, pair) => sum + pair.weight, 0);\n\n if (totalWeight === 0) {\n throw new Error('Total weight cannot be zero');\n }\n\n const weightedSum = validPairs.reduce((sum, pair) => sum + pair.value * pair.weight, 0);\n return weightedSum / totalWeight;\n }\n\n midrange(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const min = Math.min(...validValues);\n const max = Math.max(...validValues);\n\n return (min + max) / 2;\n }\n}\n\nexport default CentralTendency;","class Dispersion {\n variance(column, sample = true) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n if (sample && validValues.length < 2) {\n throw new Error('Sample variance requires at least 2 values');\n }\n\n const mean = validValues.reduce((sum, val) => sum + val, 0) / validValues.length;\n const sumSquaredDiff = validValues.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0);\n\n const denominator = sample ? validValues.length - 1 : validValues.length;\n return sumSquaredDiff / denominator;\n }\n\n standardDeviation(column, sample = true) {\n return Math.sqrt(this.variance(column, sample));\n }\n\n range(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const min = Math.min(...validValues);\n const max = Math.max(...validValues);\n\n return {\n range: max - min,\n min: min,\n max: max\n };\n }\n\n interquartileRange(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const sorted = validValues.sort((a, b) => a - b);\n const q1 = this.quantile(sorted, 0.25);\n const q3 = this.quantile(sorted, 0.75);\n\n return {\n iqr: q3 - q1,\n q1: q1,\n q3: q3\n };\n }\n\n quantile(sortedArray, q) {\n const index = (sortedArray.length - 1) * q;\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n const weight = index % 1;\n\n if (lower === upper) {\n return sortedArray[lower];\n }\n\n return sortedArray[lower] * (1 - weight) + sortedArray[upper] * weight;\n }\n\n coefficientOfVariation(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const mean = validValues.reduce((sum, val) => sum + val, 0) / validValues.length;\n\n if (mean === 0) {\n throw new Error('Cannot calculate coefficient of variation when mean is zero');\n }\n\n const std = this.standardDeviation(column);\n return {\n cv: std / Math.abs(mean),\n cvPercent: (std / Math.abs(mean)) * 100\n };\n }\n\n meanAbsoluteDeviation(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const mean = validValues.reduce((sum, val) => sum + val, 0) / validValues.length;\n const sumAbsDiff = validValues.reduce((sum, val) => sum + Math.abs(val - mean), 0);\n\n return {\n mad: sumAbsDiff / validValues.length,\n mean: mean\n };\n }\n\n medianAbsoluteDeviation(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const sorted = validValues.sort((a, b) => a - b);\n const median = this.quantile(sorted, 0.5);\n const deviations = validValues.map(val => Math.abs(val - median));\n const sortedDeviations = deviations.sort((a, b) => a - b);\n\n return {\n mad: this.quantile(sortedDeviations, 0.5),\n median: median\n };\n }\n\n standardError(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const std = this.standardDeviation(column);\n return std / Math.sqrt(validValues.length);\n }\n\n quartileCoefficient(column) {\n const iqrResult = this.interquartileRange(column);\n const q1 = iqrResult.q1;\n const q3 = iqrResult.q3;\n\n if (q1 + q3 === 0) {\n throw new Error('Cannot calculate quartile coefficient when Q1 + Q3 = 0');\n }\n\n return (q3 - q1) / (q3 + q1);\n }\n\n percentileRange(column, lowerPercentile, upperPercentile) {\n if (lowerPercentile >= upperPercentile) {\n throw new Error('Lower percentile must be less than upper percentile');\n }\n\n if (lowerPercentile < 0 || upperPercentile > 100) {\n throw new Error('Percentiles must be between 0 and 100');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const sorted = validValues.sort((a, b) => a - b);\n const lowerValue = this.quantile(sorted, lowerPercentile / 100);\n const upperValue = this.quantile(sorted, upperPercentile / 100);\n\n return {\n range: upperValue - lowerValue,\n lowerValue: lowerValue,\n upperValue: upperValue,\n lowerPercentile: lowerPercentile,\n upperPercentile: upperPercentile\n };\n }\n\n giniCoefficient(column) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val) && val >= 0\n );\n\n if (validValues.length === 0) {\n throw new Error('Gini coefficient requires non-negative numeric values');\n }\n\n const sorted = validValues.sort((a, b) => a - b);\n const n = sorted.length;\n const mean = sorted.reduce((sum, val) => sum + val, 0) / n;\n\n if (mean === 0) {\n return 0;\n }\n\n let numerator = 0;\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n numerator += Math.abs(sorted[i] - sorted[j]);\n }\n }\n\n return numerator / (2 * n * n * mean);\n }\n\n robustScale(column) {\n const iqrResult = this.interquartileRange(column);\n const median = this.quantile(column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n ).sort((a, b) => a - b), 0.5);\n\n const scaled = column.map(val => {\n if (typeof val === 'number' && !isNaN(val) && isFinite(val)) {\n return iqrResult.iqr !== 0 ? (val - median) / iqrResult.iqr : 0;\n }\n return null;\n });\n\n return {\n scaledValues: scaled,\n median: median,\n iqr: iqrResult.iqr\n };\n }\n}\n\nexport default Dispersion;","class Position {\n quantile(column, q) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n if (typeof q !== 'number' || q < 0 || q > 1) {\n throw new Error('Quantile must be between 0 and 1');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const sorted = validValues.sort((a, b) => a - b);\n const index = (sorted.length - 1) * q;\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n const weight = index % 1;\n\n if (lower === upper) {\n return sorted[lower];\n }\n\n return sorted[lower] * (1 - weight) + sorted[upper] * weight;\n }\n\n percentile(column, p) {\n if (typeof p !== 'number' || p < 0 || p > 100) {\n throw new Error('Percentile must be between 0 and 100');\n }\n\n return this.quantile(column, p / 100);\n }\n\n quartiles(column) {\n return {\n q1: this.quantile(column, 0.25),\n q2: this.quantile(column, 0.5),\n q3: this.quantile(column, 0.75),\n iqr: this.quantile(column, 0.75) - this.quantile(column, 0.25)\n };\n }\n\n quintiles(column) {\n return {\n q1: this.quantile(column, 0.2),\n q2: this.quantile(column, 0.4),\n q3: this.quantile(column, 0.6),\n q4: this.quantile(column, 0.8)\n };\n }\n\n deciles(column) {\n const deciles = {};\n for (let i = 1; i <= 9; i++) {\n deciles[`d${i}`] = this.quantile(column, i / 10);\n }\n return deciles;\n }\n\n percentileRank(column, value) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n if (typeof value !== 'number' || !isFinite(value)) {\n throw new Error('Value must be a finite number');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const countBelow = validValues.filter(val => val < value).length;\n const countEqual = validValues.filter(val => val === value).length;\n\n return ((countBelow + 0.5 * countEqual) / validValues.length) * 100;\n }\n\n zScore(column, value) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n if (typeof value !== 'number' || !isFinite(value)) {\n throw new Error('Value must be a finite number');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const mean = validValues.reduce((sum, val) => sum + val, 0) / validValues.length;\n const variance = validValues.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (validValues.length - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) {\n throw new Error('Cannot calculate z-score when standard deviation is zero');\n }\n\n return (value - mean) / stdDev;\n }\n\n boxplotStats(column) {\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const sorted = validValues.sort((a, b) => a - b);\n const q1 = this.quantile(sorted, 0.25);\n const q2 = this.quantile(sorted, 0.5);\n const q3 = this.quantile(sorted, 0.75);\n const iqr = q3 - q1;\n\n const lowerFence = q1 - 1.5 * iqr;\n const upperFence = q3 + 1.5 * iqr;\n\n const outliers = sorted.filter(val => val < lowerFence || val > upperFence);\n const inliers = sorted.filter(val => val >= lowerFence && val <= upperFence);\n\n return {\n min: Math.min(...inliers),\n q1: q1,\n median: q2,\n q3: q3,\n max: Math.max(...inliers),\n iqr: iqr,\n lowerFence: lowerFence,\n upperFence: upperFence,\n outliers: outliers,\n outlierCount: outliers.length\n };\n }\n\n fiveNumberSummary(column) {\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n return {\n minimum: Math.min(...validValues),\n q1: this.quantile(validValues, 0.25),\n median: this.quantile(validValues, 0.5),\n q3: this.quantile(validValues, 0.75),\n maximum: Math.max(...validValues)\n };\n }\n\n rank(column, method = 'average') {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validIndices = [];\n const validValues = [];\n\n column.forEach((val, index) => {\n if (typeof val === 'number' && !isNaN(val) && isFinite(val)) {\n validIndices.push(index);\n validValues.push({ value: val, originalIndex: index });\n }\n });\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n validValues.sort((a, b) => a.value - b.value);\n\n const ranks = new Array(column.length).fill(null);\n\n let currentRank = 1;\n for (let i = 0; i < validValues.length; i++) {\n const currentValue = validValues[i].value;\n const tiedIndices = [i];\n\n while (i + 1 < validValues.length && validValues[i + 1].value === currentValue) {\n i++;\n tiedIndices.push(i);\n }\n\n let assignedRank;\n switch (method) {\n case 'average':\n assignedRank = (currentRank + currentRank + tiedIndices.length - 1) / 2;\n break;\n case 'min':\n assignedRank = currentRank;\n break;\n case 'max':\n assignedRank = currentRank + tiedIndices.length - 1;\n break;\n case 'first':\n tiedIndices.forEach((idx, pos) => {\n ranks[validValues[idx].originalIndex] = currentRank + pos;\n });\n currentRank += tiedIndices.length;\n continue;\n default:\n throw new Error('Unknown ranking method. Use: average, min, max, or first');\n }\n\n tiedIndices.forEach(idx => {\n ranks[validValues[idx].originalIndex] = assignedRank;\n });\n\n currentRank += tiedIndices.length;\n }\n\n return ranks;\n }\n\n normalizedRank(column) {\n const ranks = this.rank(column);\n const validRanks = ranks.filter(rank => rank !== null);\n const maxRank = Math.max(...validRanks);\n\n return ranks.map(rank => rank !== null ? (rank - 1) / (maxRank - 1) : null);\n }\n\n standardizedValues(column) {\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const mean = validValues.reduce((sum, val) => sum + val, 0) / validValues.length;\n const variance = validValues.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (validValues.length - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) {\n return column.map(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val) ? 0 : null\n );\n }\n\n return column.map(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val) ?\n (val - mean) / stdDev : null\n );\n }\n}\n\nexport default Position;","class Shape {\n skewness(column, bias = true) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length < 3) {\n throw new Error('Skewness calculation requires at least 3 values');\n }\n\n const n = validValues.length;\n const mean = validValues.reduce((sum, val) => sum + val, 0) / n;\n\n const variance = validValues.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (n - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) {\n return 0;\n }\n\n const skewSum = validValues.reduce((sum, val) => {\n return sum + Math.pow((val - mean) / stdDev, 3);\n }, 0);\n\n if (bias) {\n return skewSum / n;\n } else {\n return (n / ((n - 1) * (n - 2))) * skewSum;\n }\n }\n\n kurtosis(column, bias = true, fisher = true) {\n if (!Array.isArray(column) || column.length === 0) {\n throw new Error('Column must be a non-empty array');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length < 4) {\n throw new Error('Kurtosis calculation requires at least 4 values');\n }\n\n const n = validValues.length;\n const mean = validValues.reduce((sum, val) => sum + val, 0) / n;\n\n const variance = validValues.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (n - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) {\n return fisher ? -3 : 0;\n }\n\n const kurtSum = validValues.reduce((sum, val) => {\n return sum + Math.pow((val - mean) / stdDev, 4);\n }, 0);\n\n let kurtosis;\n if (bias) {\n kurtosis = kurtSum / n;\n } else {\n kurtosis = ((n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) * kurtSum -\n (3 * Math.pow(n - 1, 2)) / ((n - 2) * (n - 3));\n }\n\n return fisher ? kurtosis - 3 : kurtosis;\n }\n\n isNormalDistribution(column, alpha = 0.05) {\n const shapiroResult = this.shapiroWilkTest(column);\n const jarqueBeraResult = this.jarqueBeraTest(column);\n\n return {\n shapiroWilk: {\n statistic: shapiroResult.statistic,\n pValue: shapiroResult.pValue,\n isNormal: shapiroResult.pValue > alpha\n },\n jarqueBera: {\n statistic: jarqueBeraResult.statistic,\n pValue: jarqueBeraResult.pValue,\n isNormal: jarqueBeraResult.pValue > alpha\n },\n skewness: this.skewness(column, false),\n kurtosis: this.kurtosis(column, false, true),\n isNormalByTests: shapiroResult.pValue > alpha && jarqueBeraResult.pValue > alpha\n };\n }\n\n shapiroWilkTest(column) {\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length < 3 || validValues.length > 5000) {\n throw new Error('Shapiro-Wilk test requires between 3 and 5000 observations');\n }\n\n const n = validValues.length;\n const sorted = [...validValues].sort((a, b) => a - b);\n\n const mean = sorted.reduce((sum, val) => sum + val, 0) / n;\n const ss = sorted.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0);\n\n let b = 0;\n for (let i = 0; i < Math.floor(n / 2); i++) {\n const a = this.shapiroWilkCoefficient(i + 1, n);\n b += a * (sorted[n - 1 - i] - sorted[i]);\n }\n\n const w = (b * b) / ss;\n const pValue = this.shapiroWilkPValue(w, n);\n\n return {\n statistic: w,\n pValue: pValue,\n isNormal: pValue > 0.05\n };\n }\n\n shapiroWilkCoefficient(i, n) {\n const c = [\n 0, 0.7071, 0.7071, 0.6872, 0.6646, 0.6431, 0.6233, 0.6052, 0.5888, 0.5739, 0.5601\n ];\n\n if (n <= 10 && i <= n) {\n return c[i] || 0.5;\n }\n\n const m = 0.5;\n const s = 1;\n return m + s * this.normalInverse((i - 0.375) / (n + 0.25));\n }\n\n normalInverse(p) {\n if (p <= 0 || p >= 1) {\n throw new Error('p must be between 0 and 1');\n }\n\n const a0 = -3.969683028665376e+01;\n const a1 = 2.209460984245205e+02;\n const a2 = -2.759285104469687e+02;\n const a3 = 1.383577518672690e+02;\n const a4 = -3.066479806614716e+01;\n const a5 = 2.506628277459239e+00;\n\n const b1 = -5.447609879822406e+01;\n const b2 = 1.615858368580409e+02;\n const b3 = -1.556989798598866e+02;\n const b4 = 6.680131188771972e+01;\n const b5 = -1.328068155288572e+01;\n\n if (p > 0.5) {\n return -this.normalInverse(1 - p);\n }\n\n const q = Math.sqrt(-2 * Math.log(p));\n return (((((a5 * q + a4) * q + a3) * q + a2) * q + a1) * q + a0) /\n ((((b5 * q + b4) * q + b3) * q + b2) * q + b1) * q + 1;\n }\n\n shapiroWilkPValue(w, n) {\n if (n < 3) return 1;\n if (w >= 1) return 1;\n if (w <= 0) return 0;\n\n const ln_w = Math.log(w);\n let z;\n\n if (n <= 11) {\n const gamma = 0.459 * n - 2.273;\n z = -gamma * ln_w;\n } else {\n const mu = -1.5861 - 0.31082 * Math.log(n) - 0.083751 * Math.log(n) ** 2 + 0.0038915 * Math.log(n) ** 3;\n const sigma = Math.exp(-0.4803 - 0.082676 * Math.log(n) + 0.0030302 * Math.log(n) ** 2);\n z = (ln_w - mu) / sigma;\n }\n\n return 1 - this.standardNormalCDF(z);\n }\n\n jarqueBeraTest(column) {\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length < 4) {\n throw new Error('Jarque-Bera test requires at least 4 observations');\n }\n\n const n = validValues.length;\n const skew = this.skewness(column, false);\n const kurt = this.kurtosis(column, false, true);\n\n const jb = (n / 6) * (Math.pow(skew, 2) + Math.pow(kurt, 2) / 4);\n const pValue = 1 - this.chiSquareCDF(jb, 2);\n\n return {\n statistic: jb,\n pValue: pValue,\n skewness: skew,\n kurtosis: kurt,\n isNormal: pValue > 0.05\n };\n }\n\n standardNormalCDF(z) {\n return 0.5 * (1 + this.erf(z / Math.sqrt(2)));\n }\n\n erf(x) {\n const a1 = 0.254829592;\n const a2 = -0.284496736;\n const a3 = 1.421413741;\n const a4 = -1.453152027;\n const a5 = 1.061405429;\n const p = 0.3275911;\n\n const sign = x < 0 ? -1 : 1;\n x = Math.abs(x);\n\n const t = 1.0 / (1.0 + p * x);\n const y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);\n\n return sign * y;\n }\n\n chiSquareCDF(x, df) {\n if (x <= 0) return 0;\n\n return this.incompleteGamma(df / 2, x / 2) / this.gamma(df / 2);\n }\n\n incompleteGamma(a, x) {\n if (x <= 0) return 0;\n if (a <= 0) return 1;\n\n let sum = 1;\n let term = 1;\n\n for (let n = 1; n < 100; n++) {\n term *= x / (a + n - 1);\n sum += term;\n if (Math.abs(term) < 1e-12) break;\n }\n\n return Math.pow(x, a) * Math.exp(-x) * sum;\n }\n\n gamma(x) {\n if (x < 0.5) {\n return Math.PI / (Math.sin(Math.PI * x) * this.gamma(1 - x));\n }\n\n x -= 1;\n let result = 1;\n const coefficients = [\n 0.99999999999980993, 676.5203681218851, -1259.1392167224028,\n 771.32342877765313, -176.61502916214059, 12.507343278686905,\n -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7\n ];\n\n result = coefficients[0];\n for (let i = 1; i < coefficients.length; i++) {\n result += coefficients[i] / (x + i);\n }\n\n const t = x + coefficients.length - 1.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, x + 0.5) * Math.exp(-t) * result;\n }\n\n momentCoefficient(column, moment) {\n if (typeof moment !== 'number' || moment < 1) {\n throw new Error('Moment must be a positive integer');\n }\n\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const mean = validValues.reduce((sum, val) => sum + val, 0) / validValues.length;\n const momentSum = validValues.reduce((sum, val) => sum + Math.pow(val - mean, moment), 0);\n\n return momentSum / validValues.length;\n }\n\n pearsonSkewness(column, mode = 1) {\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const mean = validValues.reduce((sum, val) => sum + val, 0) / validValues.length;\n const variance = validValues.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (validValues.length - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) {\n return 0;\n }\n\n if (mode === 1) {\n const sorted = [...validValues].sort((a, b) => a - b);\n const median = sorted.length % 2 === 0 ?\n (sorted[sorted.length / 2 - 1] + sorted[sorted.length / 2]) / 2 :\n sorted[Math.floor(sorted.length / 2)];\n\n return (mean - median) / stdDev;\n } else if (mode === 2) {\n return 3 * (mean - this.median(validValues)) / stdDev;\n } else {\n throw new Error('Mode must be 1 or 2');\n }\n }\n\n median(arr) {\n const sorted = [...arr].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n return sorted.length % 2 === 0 ?\n (sorted[mid - 1] + sorted[mid]) / 2 :\n sorted[mid];\n }\n}\n\nexport default Shape;","class HypothesisTesting {\n tTest(sample1, sample2, type = 'two-sample', alpha = 0.05) {\n const validSample1 = sample1.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample1.length < 2) {\n throw new Error('Sample 1 must have at least 2 valid values');\n }\n\n switch (type) {\n case 'one-sample':\n return this.oneSampleTTest(validSample1, sample2, alpha);\n case 'two-sample':\n const validSample2 = sample2.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n if (validSample2.length < 2) {\n throw new Error('Sample 2 must have at least 2 valid values');\n }\n return this.twoSampleTTest(validSample1, validSample2, alpha);\n case 'paired':\n if (sample1.length !== sample2.length) {\n throw new Error('Paired samples must have the same length');\n }\n return this.pairedTTest(validSample1, sample2, alpha);\n default:\n throw new Error('Unknown t-test type. Use: one-sample, two-sample, or paired');\n }\n }\n\n oneSampleTTest(sample, mu0, alpha = 0.05) {\n const n = sample.length;\n const mean = sample.reduce((sum, val) => sum + val, 0) / n;\n const variance = sample.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (n - 1);\n const stdError = Math.sqrt(variance / n);\n\n if (stdError === 0) {\n throw new Error('Cannot perform t-test when standard error is zero');\n }\n\n const tStat = (mean - mu0) / stdError;\n const df = n - 1;\n const pValue = 2 * (1 - this.tCDF(Math.abs(tStat), df));\n\n return {\n type: 'one-sample',\n statistic: tStat,\n pValue: pValue,\n degreesOfFreedom: df,\n sampleMean: mean,\n hypothesizedMean: mu0,\n standardError: stdError,\n criticalValue: this.tInverse(1 - alpha / 2, df),\n significant: pValue < alpha,\n alpha: alpha\n };\n }\n\n twoSampleTTest(sample1, sample2, alpha = 0.05, equalVariances = false) {\n const n1 = sample1.length;\n const n2 = sample2.length;\n\n const mean1 = sample1.reduce((sum, val) => sum + val, 0) / n1;\n const mean2 = sample2.reduce((sum, val) => sum + val, 0) / n2;\n\n const var1 = sample1.reduce((sum, val) => sum + Math.pow(val - mean1, 2), 0) / (n1 - 1);\n const var2 = sample2.reduce((sum, val) => sum + Math.pow(val - mean2, 2), 0) / (n2 - 1);\n\n let tStat, df, stdError;\n\n if (equalVariances) {\n const pooledVar = ((n1 - 1) * var1 + (n2 - 1) * var2) / (n1 + n2 - 2);\n stdError = Math.sqrt(pooledVar * (1/n1 + 1/n2));\n df = n1 + n2 - 2;\n } else {\n stdError = Math.sqrt(var1/n1 + var2/n2);\n df = Math.pow(var1/n1 + var2/n2, 2) /\n (Math.pow(var1/n1, 2)/(n1-1) + Math.pow(var2/n2, 2)/(n2-1));\n }\n\n if (stdError === 0) {\n throw new Error('Cannot perform t-test when standard error is zero');\n }\n\n tStat = (mean1 - mean2) / stdError;\n const pValue = 2 * (1 - this.tCDF(Math.abs(tStat), df));\n\n return {\n type: 'two-sample',\n statistic: tStat,\n pValue: pValue,\n degreesOfFreedom: df,\n sample1Mean: mean1,\n sample2Mean: mean2,\n meanDifference: mean1 - mean2,\n standardError: stdError,\n equalVariances: equalVariances,\n criticalValue: this.tInverse(1 - alpha / 2, df),\n significant: pValue < alpha,\n alpha: alpha\n };\n }\n\n pairedTTest(sample1, sample2, alpha = 0.05) {\n if (sample1.length !== sample2.length) {\n throw new Error('Paired samples must have equal length');\n }\n\n const differences = [];\n for (let i = 0; i < sample1.length; i++) {\n if (typeof sample1[i] === 'number' && typeof sample2[i] === 'number' &&\n !isNaN(sample1[i]) && !isNaN(sample2[i]) &&\n isFinite(sample1[i]) && isFinite(sample2[i])) {\n differences.push(sample1[i] - sample2[i]);\n }\n }\n\n if (differences.length < 2) {\n throw new Error('Need at least 2 valid paired observations');\n }\n\n return this.oneSampleTTest(differences, 0, alpha);\n }\n\n zTest(sample, populationMean, populationStd, alpha = 0.05) {\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n if (populationStd <= 0) {\n throw new Error('Population standard deviation must be positive');\n }\n\n const n = validSample.length;\n const sampleMean = validSample.reduce((sum, val) => sum + val, 0) / n;\n const standardError = populationStd / Math.sqrt(n);\n const zStat = (sampleMean - populationMean) / standardError;\n const pValue = 2 * (1 - this.normalCDF(Math.abs(zStat)));\n\n return {\n type: 'z-test',\n statistic: zStat,\n pValue: pValue,\n sampleMean: sampleMean,\n populationMean: populationMean,\n populationStd: populationStd,\n sampleSize: n,\n standardError: standardError,\n criticalValue: this.normalInverse(1 - alpha / 2),\n significant: pValue < alpha,\n alpha: alpha\n };\n }\n\n anovaTest(groups, alpha = 0.05) {\n if (!Array.isArray(groups) || groups.length < 2) {\n throw new Error('ANOVA requires at least 2 groups');\n }\n\n const validGroups = groups.map(group =>\n group.filter(val => typeof val === 'number' && !isNaN(val) && isFinite(val))\n );\n\n validGroups.forEach((group, index) => {\n if (group.length < 2) {\n throw new Error(`Group ${index + 1} must have at least 2 valid values`);\n }\n });\n\n const k = validGroups.length;\n const groupMeans = validGroups.map(group =>\n group.reduce((sum, val) => sum + val, 0) / group.length\n );\n const groupSizes = validGroups.map(group => group.length);\n const totalN = groupSizes.reduce((sum, n) => sum + n, 0);\n\n const allValues = validGroups.flat();\n const grandMean = allValues.reduce((sum, val) => sum + val, 0) / totalN;\n\n const ssb = validGroups.reduce((sum, group, index) => {\n return sum + groupSizes[index] * Math.pow(groupMeans[index] - grandMean, 2);\n }, 0);\n\n const ssw = validGroups.reduce((sum, group, index) => {\n const groupMean = groupMeans[index];\n return sum + group.reduce((groupSum, val) =>\n groupSum + Math.pow(val - groupMean, 2), 0\n );\n }, 0);\n\n const dfBetween = k - 1;\n const dfWithin = totalN - k;\n const msb = ssb / dfBetween;\n const msw = ssw / dfWithin;\n\n if (msw === 0) {\n throw new Error('Cannot perform ANOVA when within-group variance is zero');\n }\n\n const fStat = msb / msw;\n const pValue = 1 - this.fCDF(fStat, dfBetween, dfWithin);\n\n return {\n type: 'one-way-anova',\n statistic: fStat,\n pValue: pValue,\n dfBetween: dfBetween,\n dfWithin: dfWithin,\n sumOfSquaresBetween: ssb,\n sumOfSquaresWithin: ssw,\n meanSquareBetween: msb,\n meanSquareWithin: msw,\n groupMeans: groupMeans,\n grandMean: grandMean,\n significant: pValue < alpha,\n alpha: alpha\n };\n }\n\n chiSquareTest(col1, col2, alpha = 0.05) {\n if (col1.length !== col2.length) {\n throw new Error('Columns must have the same length');\n }\n\n const contingencyResult = this.createContingencyTable(col1, col2);\n const { table, totals, rows, columns } = contingencyResult;\n\n let chiSquareStat = 0;\n const expected = {};\n\n rows.forEach(row => {\n expected[row] = {};\n columns.forEach(col => {\n const expectedFreq = (totals.row[row] * totals.col[col]) / totals.grand;\n expected[row][col] = expectedFreq;\n\n if (expectedFreq < 5) {\n console.warn(`Warning: Expected frequency (${expectedFreq.toFixed(2)}) is less than 5`);\n }\n\n const observed = table[row][col];\n chiSquareStat += Math.pow(observed - expectedFreq, 2) / expectedFreq;\n });\n });\n\n const df = (rows.length - 1) * (columns.length - 1);\n const pValue = 1 - this.chiSquareCDF(chiSquareStat, df);\n\n return {\n type: 'chi-square-independence',\n statistic: chiSquareStat,\n pValue: pValue,\n degreesOfFreedom: df,\n observed: table,\n expected: expected,\n significant: pValue < alpha,\n alpha: alpha,\n cramersV: this.cramersV(chiSquareStat, totals.grand, Math.min(rows.length, columns.length))\n };\n }\n\n createContingencyTable(col1, col2) {\n const uniqueCol1 = [...new Set(col1)];\n const uniqueCol2 = [...new Set(col2)];\n\n const table = {};\n const totals = { row: {}, col: {}, grand: 0 };\n\n uniqueCol1.forEach(val1 => {\n table[val1] = {};\n totals.row[val1] = 0;\n });\n\n uniqueCol2.forEach(val2 => {\n totals.col[val2] = 0;\n });\n\n for (let i = 0; i < col1.length; i++) {\n const val1 = col1[i];\n const val2 = col2[i];\n\n if (!table[val1][val2]) {\n table[val1][val2] = 0;\n }\n\n table[val1][val2]++;\n totals.row[val1]++;\n totals.col[val2]++;\n totals.grand++;\n }\n\n uniqueCol1.forEach(val1 => {\n uniqueCol2.forEach(val2 => {\n if (!table[val1][val2]) {\n table[val1][val2] = 0;\n }\n });\n });\n\n return { table, totals, rows: uniqueCol1, columns: uniqueCol2 };\n }\n\n cramersV(chiSquare, n, minDimension) {\n return Math.sqrt(chiSquare / (n * (minDimension - 1)));\n }\n\n mannWhitneyTest(sample1, sample2, alpha = 0.05) {\n const validSample1 = sample1.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n const validSample2 = sample2.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample1.length === 0 || validSample2.length === 0) {\n throw new Error('Both samples must contain valid numeric values');\n }\n\n const n1 = validSample1.length;\n const n2 = validSample2.length;\n\n const combined = [\n ...validSample1.map(val => ({ value: val, group: 1 })),\n ...validSample2.map(val => ({ value: val, group: 2 }))\n ];\n\n combined.sort((a, b) => a.value - b.value);\n\n let currentRank = 1;\n for (let i = 0; i < combined.length; i++) {\n const tiedValues = [combined[i]];\n while (i + 1 < combined.length && combined[i + 1].value === combined[i].value) {\n i++;\n tiedValues.push(combined[i]);\n }\n\n const avgRank = (currentRank + currentRank + tiedValues.length - 1) / 2;\n tiedValues.forEach(item => item.rank = avgRank);\n currentRank += tiedValues.length;\n }\n\n const r1 = combined.filter(item => item.group === 1)\n .reduce((sum, item) => sum + item.rank, 0);\n\n const u1 = r1 - (n1 * (n1 + 1)) / 2;\n const u2 = n1 * n2 - u1;\n const uStat = Math.min(u1, u2);\n\n const meanU = (n1 * n2) / 2;\n const stdU = Math.sqrt((n1 * n2 * (n1 + n2 + 1)) / 12);\n const zStat = (uStat - meanU) / stdU;\n const pValue = 2 * (1 - this.normalCDF(Math.abs(zStat)));\n\n return {\n type: 'mann-whitney-u',\n statistic: uStat,\n u1: u1,\n u2: u2,\n zStatistic: zStat,\n pValue: pValue,\n sample1Size: n1,\n sample2Size: n2,\n significant: pValue < alpha,\n alpha: alpha\n };\n }\n\n tCDF(t, df) {\n const x = df / (t * t + df);\n return 1 - 0.5 * this.incompleteBeta(df / 2, 0.5, x);\n }\n\n tInverse(p, df) {\n if (p <= 0 || p >= 1) return NaN;\n\n let t = this.normalInverse(p);\n const c1 = t / 4;\n const c2 = (5 * t * t * t + 16 * t) / 96;\n const c3 = (3 * t * t * t * t * t + 19 * t * t * t + 17 * t) / 384;\n\n return t + c1 / df + c2 / (df * df) + c3 / (df * df * df);\n }\n\n normalCDF(z) {\n return 0.5 * (1 + this.erf(z / Math.sqrt(2)));\n }\n\n normalInverse(p) {\n if (p <= 0 || p >= 1) throw new Error('p must be between 0 and 1');\n\n const a = [-3.969683028665376e+01, 2.209460984245205e+02, -2.759285104469687e+02,\n 1.383577518672690e+02, -3.066479806614716e+01, 2.506628277459239e+00];\n const b = [-5.447609879822406e+01, 1.615858368580409e+02, -1.556989798598866e+02,\n 6.680131188771972e+01, -1.328068155288572e+01, 1];\n\n if (p > 0.5) return -this.normalInverse(1 - p);\n\n const q = Math.sqrt(-2 * Math.log(p));\n let num = a[5];\n let den = b[5];\n\n for (let i = 4; i >= 0; i--) {\n num = num * q + a[i];\n den = den * q + b[i];\n }\n\n return num / den;\n }\n\n fCDF(f, df1, df2) {\n const x = df2 / (df2 + df1 * f);\n return 1 - this.incompleteBeta(df2 / 2, df1 / 2, x);\n }\n\n chiSquareCDF(x, df) {\n if (x <= 0) return 0;\n return this.incompleteGamma(df / 2, x / 2) / this.gamma(df / 2);\n }\n\n erf(x) {\n const a1 = 0.254829592;\n const a2 = -0.284496736;\n const a3 = 1.421413741;\n const a4 = -1.453152027;\n const a5 = 1.061405429;\n const p = 0.3275911;\n\n const sign = x < 0 ? -1 : 1;\n x = Math.abs(x);\n\n const t = 1 / (1 + p * x);\n const y = 1 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);\n\n return sign * y;\n }\n\n incompleteBeta(a, b, x) {\n if (x <= 0) return 0;\n if (x >= 1) return 1;\n\n const bt = Math.exp(this.logGamma(a + b) - this.logGamma(a) - this.logGamma(b) +\n a * Math.log(x) + b * Math.log(1 - x));\n\n if (x < (a + 1) / (a + b + 2)) {\n return bt * this.continuedFractionBeta(a, b, x) / a;\n } else {\n return 1 - bt * this.continuedFractionBeta(b, a, 1 - x) / b;\n }\n }\n\n continuedFractionBeta(a, b, x) {\n const qab = a + b;\n const qap = a + 1;\n const qam = a - 1;\n let c = 1;\n let d = 1 - qab * x / qap;\n\n if (Math.abs(d) < 1e-30) d = 1e-30;\n d = 1 / d;\n let h = d;\n\n for (let m = 1; m <= 100; m++) {\n const m2 = 2 * m;\n let aa = m * (b - m) * x / ((qam + m2) * (a + m2));\n d = 1 + aa * d;\n if (Math.abs(d) < 1e-30) d = 1e-30;\n c = 1 + aa / c;\n if (Math.abs(c) < 1e-30) c = 1e-30;\n d = 1 / d;\n h *= d * c;\n\n aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));\n d = 1 + aa * d;\n if (Math.abs(d) < 1e-30) d = 1e-30;\n c = 1 + aa / c;\n if (Math.abs(c) < 1e-30) c = 1e-30;\n d = 1 / d;\n const del = d * c;\n h *= del;\n\n if (Math.abs(del - 1) < 1e-12) break;\n }\n\n return h;\n }\n\n logGamma(x) {\n const cof = [76.18009172947146, -86.50532032941677, 24.01409824083091,\n -1.231739572450155, 0.001208650973866179, -0.000005395239384953];\n let ser = 1.000000000190015;\n\n const xx = x;\n let y = x;\n let tmp = x + 5.5;\n tmp -= (x + 0.5) * Math.log(tmp);\n\n for (let j = 0; j < 6; j++) ser += cof[j] / ++y;\n\n return -tmp + Math.log(2.5066282746310005 * ser / xx);\n }\n\n incompleteGamma(a, x) {\n if (x <= 0) return 0;\n\n let sum = 1;\n let term = 1;\n\n for (let n = 1; n < 100; n++) {\n term *= x / (a + n - 1);\n sum += term;\n if (Math.abs(term) < 1e-12) break;\n }\n\n return Math.pow(x, a) * Math.exp(-x) * sum;\n }\n\n gamma(x) {\n return Math.exp(this.logGamma(x));\n }\n}\n\nexport default HypothesisTesting;","class ConfidenceIntervals {\n mean(sample, confidence = 0.95) {\n if (confidence <= 0 || confidence >= 1) {\n throw new Error('Confidence level must be between 0 and 1');\n }\n\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length < 2) {\n throw new Error('Need at least 2 valid observations');\n }\n\n const n = validSample.length;\n const mean = validSample.reduce((sum, val) => sum + val, 0) / n;\n const variance = validSample.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (n - 1);\n const stdError = Math.sqrt(variance / n);\n const alpha = 1 - confidence;\n const tCritical = this.tInverse(1 - alpha / 2, n - 1);\n const marginOfError = tCritical * stdError;\n\n return {\n mean: mean,\n standardError: stdError,\n marginOfError: marginOfError,\n lowerBound: mean - marginOfError,\n upperBound: mean + marginOfError,\n confidence: confidence,\n degreesOfFreedom: n - 1,\n sampleSize: n\n };\n }\n\n meanKnownVariance(sample, populationStd, confidence = 0.95) {\n if (confidence <= 0 || confidence >= 1) {\n throw new Error('Confidence level must be between 0 and 1');\n }\n\n if (populationStd <= 0) {\n throw new Error('Population standard deviation must be positive');\n }\n\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const n = validSample.length;\n const mean = validSample.reduce((sum, val) => sum + val, 0) / n;\n const stdError = populationStd / Math.sqrt(n);\n const alpha = 1 - confidence;\n const zCritical = this.normalInverse(1 - alpha / 2);\n const marginOfError = zCritical * stdError;\n\n return {\n mean: mean,\n standardError: stdError,\n marginOfError: marginOfError,\n lowerBound: mean - marginOfError,\n upperBound: mean + marginOfError,\n confidence: confidence,\n sampleSize: n,\n populationStd: populationStd\n };\n }\n\n proportion(successes, total, confidence = 0.95) {\n if (!Number.isInteger(successes) || !Number.isInteger(total)) {\n throw new Error('Successes and total must be integers');\n }\n\n if (successes < 0 || total <= 0 || successes > total) {\n throw new Error('Invalid values: 0 ≤ successes ≤ total, total > 0');\n }\n\n if (confidence <= 0 || confidence >= 1) {\n throw new Error('Confidence level must be between 0 and 1');\n }\n\n const p = successes / total;\n const alpha = 1 - confidence;\n const zCritical = this.normalInverse(1 - alpha / 2);\n\n if (total * p < 5 || total * (1 - p) < 5) {\n console.warn('Warning: Normal approximation may not be accurate. Consider using Wilson score interval.');\n }\n\n const stdError = Math.sqrt(p * (1 - p) / total);\n const marginOfError = zCritical * stdError;\n\n const normalInterval = {\n proportion: p,\n standardError: stdError,\n marginOfError: marginOfError,\n lowerBound: Math.max(0, p - marginOfError),\n upperBound: Math.min(1, p + marginOfError),\n confidence: confidence,\n sampleSize: total,\n successes: successes\n };\n\n const wilsonInterval = this.wilsonScoreInterval(successes, total, confidence);\n\n return {\n normal: normalInterval,\n wilson: wilsonInterval,\n recommended: total * p >= 5 && total * (1 - p) >= 5 ? normalInterval : wilsonInterval\n };\n }\n\n wilsonScoreInterval(successes, total, confidence = 0.95) {\n const p = successes / total;\n const alpha = 1 - confidence;\n const z = this.normalInverse(1 - alpha / 2);\n const z2 = z * z;\n\n const denominator = 1 + z2 / total;\n const center = (p + z2 / (2 * total)) / denominator;\n const halfWidth = z * Math.sqrt(p * (1 - p) / total + z2 / (4 * total * total)) / denominator;\n\n return {\n proportion: p,\n center: center,\n halfWidth: halfWidth,\n lowerBound: center - halfWidth,\n upperBound: center + halfWidth,\n confidence: confidence,\n sampleSize: total,\n successes: successes\n };\n }\n\n variance(sample, confidence = 0.95) {\n if (confidence <= 0 || confidence >= 1) {\n throw new Error('Confidence level must be between 0 and 1');\n }\n\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length < 2) {\n throw new Error('Need at least 2 valid observations');\n }\n\n const n = validSample.length;\n const mean = validSample.reduce((sum, val) => sum + val, 0) / n;\n const sampleVariance = validSample.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (n - 1);\n\n const alpha = 1 - confidence;\n const df = n - 1;\n const chiSquareLower = this.chiSquareInverse(alpha / 2, df);\n const chiSquareUpper = this.chiSquareInverse(1 - alpha / 2, df);\n\n const lowerBound = (df * sampleVariance) / chiSquareUpper;\n const upperBound = (df * sampleVariance) / chiSquareLower;\n\n return {\n sampleVariance: sampleVariance,\n lowerBound: lowerBound,\n upperBound: upperBound,\n confidence: confidence,\n degreesOfFreedom: df,\n sampleSize: n\n };\n }\n\n standardDeviation(sample, confidence = 0.95) {\n const varianceCI = this.variance(sample, confidence);\n\n return {\n sampleStandardDeviation: Math.sqrt(varianceCI.sampleVariance),\n lowerBound: Math.sqrt(varianceCI.lowerBound),\n upperBound: Math.sqrt(varianceCI.upperBound),\n confidence: confidence,\n degreesOfFreedom: varianceCI.degreesOfFreedom,\n sampleSize: varianceCI.sampleSize\n };\n }\n\n meanDifference(sample1, sample2, confidence = 0.95, equalVariances = false) {\n if (confidence <= 0 || confidence >= 1) {\n throw new Error('Confidence level must be between 0 and 1');\n }\n\n const validSample1 = sample1.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n const validSample2 = sample2.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample1.length < 2 || validSample2.length < 2) {\n throw new Error('Both samples must have at least 2 valid observations');\n }\n\n const n1 = validSample1.length;\n const n2 = validSample2.length;\n const mean1 = validSample1.reduce((sum, val) => sum + val, 0) / n1;\n const mean2 = validSample2.reduce((sum, val) => sum + val, 0) / n2;\n const meanDiff = mean1 - mean2;\n\n const var1 = validSample1.reduce((sum, val) => sum + Math.pow(val - mean1, 2), 0) / (n1 - 1);\n const var2 = validSample2.reduce((sum, val) => sum + Math.pow(val - mean2, 2), 0) / (n2 - 1);\n\n let stdError, df;\n\n if (equalVariances) {\n const pooledVar = ((n1 - 1) * var1 + (n2 - 1) * var2) / (n1 + n2 - 2);\n stdError = Math.sqrt(pooledVar * (1/n1 + 1/n2));\n df = n1 + n2 - 2;\n } else {\n stdError = Math.sqrt(var1/n1 + var2/n2);\n df = Math.pow(var1/n1 + var2/n2, 2) /\n (Math.pow(var1/n1, 2)/(n1-1) + Math.pow(var2/n2, 2)/(n2-1));\n }\n\n const alpha = 1 - confidence;\n const tCritical = this.tInverse(1 - alpha / 2, df);\n const marginOfError = tCritical * stdError;\n\n return {\n meanDifference: meanDiff,\n sample1Mean: mean1,\n sample2Mean: mean2,\n standardError: stdError,\n marginOfError: marginOfError,\n lowerBound: meanDiff - marginOfError,\n upperBound: meanDiff + marginOfError,\n confidence: confidence,\n degreesOfFreedom: df,\n equalVariances: equalVariances\n };\n }\n\n pairedMeanDifference(sample1, sample2, confidence = 0.95) {\n if (sample1.length !== sample2.length) {\n throw new Error('Paired samples must have equal length');\n }\n\n const differences = [];\n for (let i = 0; i < sample1.length; i++) {\n if (typeof sample1[i] === 'number' && typeof sample2[i] === 'number' &&\n !isNaN(sample1[i]) && !isNaN(sample2[i]) &&\n isFinite(sample1[i]) && isFinite(sample2[i])) {\n differences.push(sample1[i] - sample2[i]);\n }\n }\n\n if (differences.length < 2) {\n throw new Error('Need at least 2 valid paired observations');\n }\n\n return this.mean(differences, confidence);\n }\n\n correlation(x, y, confidence = 0.95, method = 'pearson') {\n if (confidence <= 0 || confidence >= 1) {\n throw new Error('Confidence level must be between 0 and 1');\n }\n\n if (x.length !== y.length) {\n throw new Error('x and y must have the same length');\n }\n\n const validPairs = [];\n for (let i = 0; i < x.length; i++) {\n if (typeof x[i] === 'number' && typeof y[i] === 'number' &&\n !isNaN(x[i]) && !isNaN(y[i]) && isFinite(x[i]) && isFinite(y[i])) {\n validPairs.push({ x: x[i], y: y[i] });\n }\n }\n\n if (validPairs.length < 3) {\n throw new Error('Need at least 3 valid paired observations');\n }\n\n const n = validPairs.length;\n let r;\n\n if (method === 'pearson') {\n const xVals = validPairs.map(pair => pair.x);\n const yVals = validPairs.map(pair => pair.y);\n r = this.pearsonCorrelation(xVals, yVals);\n } else {\n throw new Error('Only Pearson correlation is supported for confidence intervals');\n }\n\n if (Math.abs(r) >= 1) {\n throw new Error('Cannot calculate confidence interval for perfect correlation');\n }\n\n const fisherZ = 0.5 * Math.log((1 + r) / (1 - r));\n const stdError = 1 / Math.sqrt(n - 3);\n const alpha = 1 - confidence;\n const zCritical = this.normalInverse(1 - alpha / 2);\n const marginOfError = zCritical * stdError;\n\n const lowerZ = fisherZ - marginOfError;\n const upperZ = fisherZ + marginOfError;\n\n const lowerR = (Math.exp(2 * lowerZ) - 1) / (Math.exp(2 * lowerZ) + 1);\n const upperR = (Math.exp(2 * upperZ) - 1) / (Math.exp(2 * upperZ) + 1);\n\n return {\n correlation: r,\n fisherZ: fisherZ,\n standardError: stdError,\n lowerBound: lowerR,\n upperBound: upperR,\n confidence: confidence,\n sampleSize: n\n };\n }\n\n pearsonCorrelation(x, y) {\n const n = x.length;\n const meanX = x.reduce((sum, val) => sum + val, 0) / n;\n const meanY = y.reduce((sum, val) => sum + val, 0) / n;\n\n let numerator = 0;\n let sumXSquared = 0;\n let sumYSquared = 0;\n\n for (let i = 0; i < n; i++) {\n const xDiff = x[i] - meanX;\n const yDiff = y[i] - meanY;\n numerator += xDiff * yDiff;\n sumXSquared += xDiff * xDiff;\n sumYSquared += yDiff * yDiff;\n }\n\n const denominator = Math.sqrt(sumXSquared * sumYSquared);\n return denominator === 0 ? 0 : numerator / denominator;\n }\n\n median(sample, confidence = 0.95) {\n if (confidence <= 0 || confidence >= 1) {\n throw new Error('Confidence level must be between 0 and 1');\n }\n\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length < 3) {\n throw new Error('Need at least 3 valid observations for median CI');\n }\n\n const sorted = [...validSample].sort((a, b) => a - b);\n const n = sorted.length;\n const alpha = 1 - confidence;\n\n const z = this.normalInverse(1 - alpha / 2);\n const j = Math.floor(n / 2 - z * Math.sqrt(n) / 2);\n const k = Math.ceil(n / 2 + z * Math.sqrt(n) / 2);\n\n const lowerIndex = Math.max(0, j - 1);\n const upperIndex = Math.min(n - 1, k - 1);\n\n const median = n % 2 === 0 ?\n (sorted[n / 2 - 1] + sorted[n / 2]) / 2 :\n sorted[Math.floor(n / 2)];\n\n return {\n median: median,\n lowerBound: sorted[lowerIndex],\n upperBound: sorted[upperIndex],\n confidence: confidence,\n sampleSize: n,\n lowerIndex: lowerIndex + 1,\n upperIndex: upperIndex + 1\n };\n }\n\n bootstrapCI(sample, statistic, confidence = 0.95, iterations = 1000) {\n if (confidence <= 0 || confidence >= 1) {\n throw new Error('Confidence level must be between 0 and 1');\n }\n\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length === 0) {\n throw new Error('No valid numeric values found');\n }\n\n const bootstrapStats = [];\n\n for (let i = 0; i < iterations; i++) {\n const bootstrapSample = [];\n for (let j = 0; j < validSample.length; j++) {\n const randomIndex = Math.floor(Math.random() * validSample.length);\n bootstrapSample.push(validSample[randomIndex]);\n }\n\n const stat = this.calculateStatistic(bootstrapSample, statistic);\n bootstrapStats.push(stat);\n }\n\n bootstrapStats.sort((a, b) => a - b);\n\n const alpha = 1 - confidence;\n const lowerIndex = Math.floor((alpha / 2) * iterations);\n const upperIndex = Math.floor((1 - alpha / 2) * iterations) - 1;\n\n const originalStat = this.calculateStatistic(validSample, statistic);\n const bootstrapMean = bootstrapStats.reduce((sum, val) => sum + val, 0) / bootstrapStats.length;\n\n return {\n originalStatistic: originalStat,\n bootstrapMean: bootstrapMean,\n bias: bootstrapMean - originalStat,\n standardError: this.calculateStandardDeviation(bootstrapStats),\n lowerBound: bootstrapStats[lowerIndex],\n upperBound: bootstrapStats[upperIndex],\n confidence: confidence,\n iterations: iterations\n };\n }\n\n calculateStatistic(sample, statistic) {\n switch (statistic) {\n case 'mean':\n return sample.reduce((sum, val) => sum + val, 0) / sample.length;\n case 'median':\n const sorted = [...sample].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n return sorted.length % 2 === 0 ?\n (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];\n case 'std':\n return this.calculateStandardDeviation(sample);\n case 'var':\n return this.calculateVariance(sample);\n default:\n if (typeof statistic === 'function') {\n return statistic(sample);\n }\n throw new Error(`Unknown statistic: ${statistic}`);\n }\n }\n\n calculateStandardDeviation(sample) {\n const mean = sample.reduce((sum, val) => sum + val, 0) / sample.length;\n const variance = sample.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (sample.length - 1);\n return Math.sqrt(variance);\n }\n\n calculateVariance(sample) {\n const mean = sample.reduce((sum, val) => sum + val, 0) / sample.length;\n return sample.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (sample.length - 1);\n }\n\n normalInverse(p) {\n if (p <= 0 || p >= 1) throw new Error('p must be between 0 and 1');\n\n const a = [-3.969683028665376e+01, 2.209460984245205e+02, -2.759285104469687e+02,\n 1.383577518672690e+02, -3.066479806614716e+01, 2.506628277459239e+00];\n const b = [-5.447609879822406e+01, 1.615858368580409e+02, -1.556989798598866e+02,\n 6.680131188771972e+01, -1.328068155288572e+01, 1];\n\n if (p > 0.5) return -this.normalInverse(1 - p);\n\n const q = Math.sqrt(-2 * Math.log(p));\n let num = a[5];\n let den = b[5];\n\n for (let i = 4; i >= 0; i--) {\n num = num * q + a[i];\n den = den * q + b[i];\n }\n\n return num / den;\n }\n\n tInverse(p, df) {\n if (p <= 0 || p >= 1) return NaN;\n\n let t = this.normalInverse(p);\n const c1 = t / 4;\n const c2 = (5 * t * t * t + 16 * t) / 96;\n const c3 = (3 * t * t * t * t * t + 19 * t * t * t + 17 * t) / 384;\n\n return t + c1 / df + c2 / (df * df) + c3 / (df * df * df);\n }\n\n chiSquareInverse(p, df) {\n if (p <= 0 || p >= 1) throw new Error('p must be between 0 and 1');\n if (df <= 0) throw new Error('Degrees of freedom must be positive');\n\n let x = df;\n const tolerance = 1e-12;\n const maxIterations = 100;\n\n for (let i = 0; i < maxIterations; i++) {\n const fx = this.chiSquareCDF(x, df) - p;\n const fpx = this.chiSquarePDF(x, df);\n\n if (Math.abs(fx) < tolerance) break;\n if (fpx === 0) break;\n\n x = x - fx / fpx;\n if (x <= 0) x = df / 2;\n }\n\n return Math.max(0, x);\n }\n\n chiSquareCDF(x, df) {\n if (x <= 0) return 0;\n return this.incompleteGamma(df / 2, x / 2) / this.gamma(df / 2);\n }\n\n chiSquarePDF(x, df) {\n if (x <= 0) return 0;\n return Math.pow(x, df / 2 - 1) * Math.exp(-x / 2) / (Math.pow(2, df / 2) * this.gamma(df / 2));\n }\n\n incompleteGamma(a, x) {\n if (x <= 0) return 0;\n\n let sum = 1;\n let term = 1;\n\n for (let n = 1; n < 100; n++) {\n term *= x / (a + n - 1);\n sum += term;\n if (Math.abs(term) < 1e-12) break;\n }\n\n return Math.pow(x, a) * Math.exp(-x) * sum;\n }\n\n gamma(x) {\n const coefficients = [\n 0.99999999999980993, 676.5203681218851, -1259.1392167224028,\n 771.32342877765313, -176.61502916214059, 12.507343278686905,\n -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7\n ];\n\n if (x < 0.5) {\n return Math.PI / (Math.sin(Math.PI * x) * this.gamma(1 - x));\n }\n\n x -= 1;\n let result = coefficients[0];\n for (let i = 1; i < coefficients.length; i++) {\n result += coefficients[i] / (x + i);\n }\n\n const t = x + coefficients.length - 1.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, x + 0.5) * Math.exp(-t) * result;\n }\n}\n\nexport default ConfidenceIntervals;","class NormalityTests {\n shapiroWilk(sample, alpha = 0.05) {\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length < 3 || validSample.length > 5000) {\n throw new Error('Shapiro-Wilk test requires between 3 and 5000 observations');\n }\n\n const n = validSample.length;\n const sorted = [...validSample].sort((a, b) => a - b);\n\n const mean = sorted.reduce((sum, val) => sum + val, 0) / n;\n const ss = sorted.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0);\n\n if (ss === 0) {\n return {\n statistic: NaN,\n pValue: NaN,\n isNormal: false,\n error: 'All values are identical'\n };\n }\n\n let b = 0;\n for (let i = 0; i < Math.floor(n / 2); i++) {\n const a = this.shapiroWilkCoefficient(i + 1, n);\n b += a * (sorted[n - 1 - i] - sorted[i]);\n }\n\n const w = (b * b) / ss;\n const pValue = this.shapiroWilkPValue(w, n);\n\n return {\n statistic: w,\n pValue: pValue,\n isNormal: pValue > alpha,\n alpha: alpha,\n sampleSize: n,\n interpretation: this.interpretNormalityResult(pValue, alpha, 'Shapiro-Wilk')\n };\n }\n\n shapiroWilkCoefficient(i, n) {\n const c = [\n 0, 0.7071, 0.7071, 0.6872, 0.6646, 0.6431, 0.6233, 0.6052, 0.5888, 0.5739, 0.5601\n ];\n\n if (n <= 10 && i <= n) {\n return c[i] || 0.5;\n }\n\n const m = 0.5;\n const s = 1;\n return m + s * this.normalInverse((i - 0.375) / (n + 0.25));\n }\n\n shapiroWilkPValue(w, n) {\n if (n < 3) return 1;\n if (w >= 1) return 1;\n if (w <= 0) return 0;\n\n const ln_w = Math.log(w);\n let z;\n\n if (n <= 11) {\n const gamma = 0.459 * n - 2.273;\n z = -gamma * ln_w;\n } else {\n const mu = -1.5861 - 0.31082 * Math.log(n) - 0.083751 * Math.log(n) ** 2 + 0.0038915 * Math.log(n) ** 3;\n const sigma = Math.exp(-0.4803 - 0.082676 * Math.log(n) + 0.0030302 * Math.log(n) ** 2);\n z = (ln_w - mu) / sigma;\n }\n\n return 1 - this.standardNormalCDF(z);\n }\n\n kolmogorovSmirnov(sample, alpha = 0.05) {\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length < 5) {\n throw new Error('Kolmogorov-Smirnov test requires at least 5 observations');\n }\n\n const n = validSample.length;\n const sorted = [...validSample].sort((a, b) => a - b);\n\n const mean = sorted.reduce((sum, val) => sum + val, 0) / n;\n const variance = sorted.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (n - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) {\n return {\n statistic: NaN,\n pValue: NaN,\n isNormal: false,\n error: 'All values are identical'\n };\n }\n\n let maxD = 0;\n\n for (let i = 0; i < n; i++) {\n const standardized = (sorted[i] - mean) / stdDev;\n const empiricalCDF = (i + 1) / n;\n const theoreticalCDF = this.standardNormalCDF(standardized);\n\n const d1 = Math.abs(empiricalCDF - theoreticalCDF);\n const d2 = Math.abs((i / n) - theoreticalCDF);\n\n maxD = Math.max(maxD, d1, d2);\n }\n\n const sqrtN = Math.sqrt(n);\n const lambda = maxD * sqrtN;\n const pValue = this.kolmogorovSmirnovPValue(lambda);\n\n return {\n statistic: maxD,\n pValue: pValue,\n isNormal: pValue > alpha,\n alpha: alpha,\n sampleSize: n,\n lambda: lambda,\n interpretation: this.interpretNormalityResult(pValue, alpha, 'Kolmogorov-Smirnov')\n };\n }\n\n kolmogorovSmirnovPValue(lambda) {\n if (lambda <= 0) return 1;\n if (lambda > 7) return 0;\n\n let sum = 0;\n for (let k = 1; k <= 100; k++) {\n const term = 2 * Math.pow(-1, k - 1) * Math.exp(-2 * k * k * lambda * lambda);\n sum += term;\n if (Math.abs(term) < 1e-12) break;\n }\n\n return Math.min(1, Math.max(0, sum));\n }\n\n andersonDarling(sample, alpha = 0.05) {\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length < 8) {\n throw new Error('Anderson-Darling test requires at least 8 observations');\n }\n\n const n = validSample.length;\n const sorted = [...validSample].sort((a, b) => a - b);\n\n const mean = sorted.reduce((sum, val) => sum + val, 0) / n;\n const variance = sorted.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (n - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) {\n return {\n statistic: NaN,\n pValue: NaN,\n isNormal: false,\n error: 'All values are identical'\n };\n }\n\n let sum = 0;\n for (let i = 0; i < n; i++) {\n const standardized = (sorted[i] - mean) / stdDev;\n const phi = this.standardNormalCDF(standardized);\n const phiComplement = this.standardNormalCDF(-standardized);\n\n if (phi > 0 && phiComplement > 0) {\n sum += (2 * i + 1) * (Math.log(phi) + Math.log(phiComplement));\n }\n }\n\n const a2 = -n - (1 / n) * sum;\n const a2Star = a2 * (1 + 0.75 / n + 2.25 / (n * n));\n\n const pValue = this.andersonDarlingPValue(a2Star);\n\n return {\n statistic: a2,\n adjustedStatistic: a2Star,\n pValue: pValue,\n isNormal: pValue > alpha,\n alpha: alpha,\n sampleSize: n,\n interpretation: this.interpretNormalityResult(pValue, alpha, 'Anderson-Darling')\n };\n }\n\n andersonDarlingPValue(a2Star) {\n if (a2Star <= 0.2) {\n return 1 - Math.exp(-1.2337141 / a2Star) * (2.00012 + (0.247105 - (0.0649821 - (0.0347962 - (0.011672 - 0.00168691 * a2Star) * a2Star) * a2Star) * a2Star) * a2Star);\n } else if (a2Star <= 0.34) {\n return 1 - Math.exp(-0.9177603 - 1.25156 * a2Star) * (1.38033 + (0.421981 - 0.668119 * a2Star) * a2Star);\n } else if (a2Star < 0.6) {\n return Math.exp(0.731 - 3.009 * a2Star + 4.86 * a2Star * a2Star);\n } else if (a2Star < 10) {\n return Math.exp(1.0776 - (2.30695 - (0.43424 - (0.082433 - (0.008056 - 0.0003146 * a2Star) * a2Star) * a2Star) * a2Star) * a2Star);\n } else {\n return 0;\n }\n }\n\n jarqueBera(sample, alpha = 0.05) {\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length < 4) {\n throw new Error('Jarque-Bera test requires at least 4 observations');\n }\n\n const n = validSample.length;\n const skewness = this.calculateSkewness(validSample);\n const kurtosis = this.calculateKurtosis(validSample, true);\n\n const jb = (n / 6) * (Math.pow(skewness, 2) + Math.pow(kurtosis, 2) / 4);\n const pValue = 1 - this.chiSquareCDF(jb, 2);\n\n return {\n statistic: jb,\n pValue: pValue,\n isNormal: pValue > alpha,\n alpha: alpha,\n sampleSize: n,\n skewness: skewness,\n excessKurtosis: kurtosis,\n interpretation: this.interpretNormalityResult(pValue, alpha, 'Jarque-Bera')\n };\n }\n\n dagoTest(sample, alpha = 0.05) {\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length < 20) {\n throw new Error(\"D'Agostino test requires at least 20 observations\");\n }\n\n const n = validSample.length;\n const skewness = this.calculateSkewness(validSample);\n const kurtosis = this.calculateKurtosis(validSample, true);\n\n const skewnessZ = this.skewnessZScore(skewness, n);\n const kurtosisZ = this.kurtosisZScore(kurtosis, n);\n\n const k2 = skewnessZ * skewnessZ + kurtosisZ * kurtosisZ;\n const pValue = 1 - this.chiSquareCDF(k2, 2);\n\n return {\n statistic: k2,\n pValue: pValue,\n isNormal: pValue > alpha,\n alpha: alpha,\n sampleSize: n,\n skewness: skewness,\n excessKurtosis: kurtosis,\n skewnessZ: skewnessZ,\n kurtosisZ: kurtosisZ,\n interpretation: this.interpretNormalityResult(pValue, alpha, \"D'Agostino K-squared\")\n };\n }\n\n skewnessZScore(skewness, n) {\n const y = skewness * Math.sqrt((n + 1) * (n + 3) / (6 * (n - 2)));\n const beta2 = 3 * (n * n + 27 * n - 70) * (n + 1) * (n + 3) / ((n - 2) * (n + 5) * (n + 7) * (n + 9));\n const w2 = -1 + Math.sqrt(2 * (beta2 - 1));\n const delta = 1 / Math.sqrt(0.5 * Math.log(w2));\n const alpha = Math.sqrt(2 / (w2 - 1));\n\n return delta * Math.log(y / alpha + Math.sqrt((y / alpha) ** 2 + 1));\n }\n\n kurtosisZScore(kurtosis, n) {\n const e = 3 * (n - 1) / (n + 1);\n const varb2 = 24 * n * (n - 2) * (n - 3) / ((n + 1) * (n + 1) * (n + 3) * (n + 5));\n const x = (kurtosis - e) / Math.sqrt(varb2);\n const sqrtb1 = 6 * (n * n - 5 * n + 2) / ((n + 7) * (n + 9)) * Math.sqrt(6 * (n + 3) * (n + 5) / (n * (n - 2) * (n - 3)));\n\n const a = 6 + 8 / sqrtb1 * (2 / sqrtb1 + Math.sqrt(1 + 4 / (sqrtb1 ** 2)));\n\n return Math.sqrt(9 * a / 2) * ((1 - 2 / a) / (1 + x * Math.sqrt(2 / (a - 4))) - 1);\n }\n\n lillieforsTest(sample, alpha = 0.05) {\n const validSample = sample.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validSample.length < 4 || validSample.length > 1000) {\n throw new Error('Lilliefors test requires between 4 and 1000 observations');\n }\n\n const n = validSample.length;\n const sorted = [...validSample].sort((a, b) => a - b);\n\n const mean = sorted.reduce((sum, val) => sum + val, 0) / n;\n const variance = sorted.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (n - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) {\n return {\n statistic: NaN,\n pValue: NaN,\n isNormal: false,\n error: 'All values are identical'\n };\n }\n\n let maxD = 0;\n\n for (let i = 0; i < n; i++) {\n const standardized = (sorted[i] - mean) / stdDev;\n const empiricalCDF = (i + 1) / n;\n const theoreticalCDF = this.standardNormalCDF(standardized);\n\n const d1 = Math.abs(empiricalCDF - theoreticalCDF);\n const d2 = Math.abs((i / n) - theoreticalCDF);\n\n maxD = Math.max(maxD, d1, d2);\n }\n\n const pValue = this.lillieforsPValue(maxD, n);\n\n return {\n statistic: maxD,\n pValue: pValue,\n isNormal: pValue > alpha,\n alpha: alpha,\n sampleSize: n,\n interpretation: this.interpretNormalityResult(pValue, alpha, 'Lilliefors')\n };\n }\n\n lillieforsPValue(d, n) {\n const criticalValues = {\n 4: 0.381, 5: 0.337, 6: 0.319, 7: 0.300, 8: 0.285,\n 9: 0.271, 10: 0.258, 11: 0.249, 12: 0.242, 13: 0.234,\n 14: 0.227, 15: 0.220, 16: 0.213, 17: 0.206, 18: 0.200,\n 19: 0.195, 20: 0.190, 25: 0.173, 30: 0.161, 40: 0.144,\n 50: 0.131, 100: 0.096\n };\n\n let criticalValue;\n if (criticalValues[n]) {\n criticalValue = criticalValues[n];\n } else if (n > 100) {\n criticalValue = 0.886 / Math.sqrt(n);\n } else {\n const keys = Object.keys(criticalValues).map(Number).sort((a, b) => a - b);\n const lower = keys.filter(k => k <= n).pop();\n const upper = keys.filter(k => k >= n)[0];\n\n if (lower === upper) {\n criticalValue = criticalValues[lower];\n } else {\n const ratio = (n - lower) / (upper - lower);\n criticalValue = criticalValues[lower] + ratio * (criticalValues[upper] - criticalValues[lower]);\n }\n }\n\n if (d > criticalValue) {\n return 0.01;\n } else if (d < criticalValue * 0.8) {\n return 0.2;\n } else {\n return 0.05;\n }\n }\n\n batchNormalityTest(sample, alpha = 0.05) {\n const results = {};\n\n try {\n results.shapiroWilk = this.shapiroWilk(sample, alpha);\n } catch (error) {\n results.shapiroWilk = { error: error.message };\n }\n\n try {\n results.jarqueBera = this.jarqueBera(sample, alpha);\n } catch (error) {\n results.jarqueBera = { error: error.message };\n }\n\n try {\n results.andersonDarling = this.andersonDarling(sample, alpha);\n } catch (error) {\n results.andersonDarling = { error: error.message };\n }\n\n try {\n results.kolmogorovSmirnov = this.kolmogorovSmirnov(sample, alpha);\n } catch (error) {\n results.kolmogorovSmirnov = { error: error.message };\n }\n\n try {\n if (sample.length >= 20) {\n results.dagostino = this.dagoTest(sample, alpha);\n }\n } catch (error) {\n results.dagostino = { error: error.message };\n }\n\n const validTests = Object.entries(results).filter(([_, result]) => !result.error && result.pValue !== undefined);\n const normalCount = validTests.filter(([_, result]) => result.isNormal).length;\n const totalTests = validTests.length;\n\n return {\n individualTests: results,\n summary: {\n testsRun: totalTests,\n testsPassingNormality: normalCount,\n consensusNormal: normalCount >= Math.ceil(totalTests / 2),\n strongNormalEvidence: normalCount === totalTests,\n strongNonNormalEvidence: normalCount === 0\n },\n recommendation: this.getNormalityRecommendation(results, totalTests, normalCount)\n };\n }\n\n getNormalityRecommendation(results, totalTests, normalCount) {\n if (totalTests === 0) {\n return \"Unable to assess normality - insufficient data or all tests failed\";\n }\n\n const ratio = normalCount / totalTests;\n\n if (ratio === 1) {\n return \"Strong evidence for normality - all tests indicate normal distribution\";\n } else if (ratio >= 0.75) {\n return \"Good evidence for normality - most tests indicate normal distribution\";\n } else if (ratio >= 0.5) {\n return \"Mixed evidence - consider visual inspection and domain knowledge\";\n } else if (ratio > 0) {\n return \"Evidence against normality - most tests indicate non-normal distribution\";\n } else {\n return \"Strong evidence against normality - all tests indicate non-normal distribution\";\n }\n }\n\n calculateSkewness(sample, bias = false) {\n const n = sample.length;\n const mean = sample.reduce((sum, val) => sum + val, 0) / n;\n const variance = sample.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (n - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) return 0;\n\n const skewSum = sample.reduce((sum, val) => {\n return sum + Math.pow((val - mean) / stdDev, 3);\n }, 0);\n\n if (bias) {\n return skewSum / n;\n } else {\n return (n / ((n - 1) * (n - 2))) * skewSum;\n }\n }\n\n calculateKurtosis(sample, fisher = true, bias = false) {\n const n = sample.length;\n const mean = sample.reduce((sum, val) => sum + val, 0) / n;\n const variance = sample.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (n - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) return fisher ? -3 : 0;\n\n const kurtSum = sample.reduce((sum, val) => {\n return sum + Math.pow((val - mean) / stdDev, 4);\n }, 0);\n\n let kurtosis;\n if (bias) {\n kurtosis = kurtSum / n;\n } else {\n kurtosis = ((n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) * kurtSum -\n (3 * Math.pow(n - 1, 2)) / ((n - 2) * (n - 3));\n }\n\n return fisher ? kurtosis - 3 : kurtosis;\n }\n\n interpretNormalityResult(pValue, alpha, testName) {\n if (pValue > alpha) {\n return `${testName} test: Fail to reject null hypothesis (p-value = ${pValue.toFixed(4)} > α = ${alpha}). Data appears to be normally distributed.`;\n } else {\n return `${testName} test: Reject null hypothesis (p-value = ${pValue.toFixed(4)} ≤ α = ${alpha}). Data appears to be non-normally distributed.`;\n }\n }\n\n standardNormalCDF(z) {\n return 0.5 * (1 + this.erf(z / Math.sqrt(2)));\n }\n\n erf(x) {\n const a1 = 0.254829592;\n const a2 = -0.284496736;\n const a3 = 1.421413741;\n const a4 = -1.453152027;\n const a5 = 1.061405429;\n const p = 0.3275911;\n\n const sign = x < 0 ? -1 : 1;\n x = Math.abs(x);\n\n const t = 1 / (1 + p * x);\n const y = 1 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);\n\n return sign * y;\n }\n\n normalInverse(p) {\n if (p <= 0 || p >= 1) throw new Error('p must be between 0 and 1');\n\n const a = [-3.969683028665376e+01, 2.209460984245205e+02, -2.759285104469687e+02,\n 1.383577518672690e+02, -3.066479806614716e+01, 2.506628277459239e+00];\n const b = [-5.447609879822406e+01, 1.615858368580409e+02, -1.556989798598866e+02,\n 6.680131188771972e+01, -1.328068155288572e+01, 1];\n\n if (p > 0.5) return -this.normalInverse(1 - p);\n\n const q = Math.sqrt(-2 * Math.log(p));\n let num = a[5];\n let den = b[5];\n\n for (let i = 4; i >= 0; i--) {\n num = num * q + a[i];\n den = den * q + b[i];\n }\n\n return num / den;\n }\n\n chiSquareCDF(x, df) {\n if (x <= 0) return 0;\n return this.incompleteGamma(df / 2, x / 2) / this.gamma(df / 2);\n }\n\n incompleteGamma(a, x) {\n if (x <= 0) return 0;\n\n let sum = 1;\n let term = 1;\n\n for (let n = 1; n < 100; n++) {\n term *= x / (a + n - 1);\n sum += term;\n if (Math.abs(term) < 1e-12) break;\n }\n\n return Math.pow(x, a) * Math.exp(-x) * sum;\n }\n\n gamma(x) {\n const coefficients = [\n 0.99999999999980993, 676.5203681218851, -1259.1392167224028,\n 771.32342877765313, -176.61502916214059, 12.507343278686905,\n -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7\n ];\n\n if (x < 0.5) {\n return Math.PI / (Math.sin(Math.PI * x) * this.gamma(1 - x));\n }\n\n x -= 1;\n let result = coefficients[0];\n for (let i = 1; i < coefficients.length; i++) {\n result += coefficients[i] / (x + i);\n }\n\n const t = x + coefficients.length - 1.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, x + 0.5) * Math.exp(-t) * result;\n }\n}\n\nexport default NormalityTests;","class Correlation {\n pearson(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new Error('Both inputs must be arrays');\n }\n\n if (x.length !== y.length) {\n throw new Error('Arrays must have the same length');\n }\n\n const validPairs = [];\n for (let i = 0; i < x.length; i++) {\n if (typeof x[i] === 'number' && typeof y[i] === 'number' &&\n !isNaN(x[i]) && !isNaN(y[i]) && isFinite(x[i]) && isFinite(y[i])) {\n validPairs.push({ x: x[i], y: y[i] });\n }\n }\n\n if (validPairs.length < 3) {\n throw new Error('Need at least 3 valid paired observations');\n }\n\n const n = validPairs.length;\n const xValues = validPairs.map(pair => pair.x);\n const yValues = validPairs.map(pair => pair.y);\n\n const meanX = xValues.reduce((sum, val) => sum + val, 0) / n;\n const meanY = yValues.reduce((sum, val) => sum + val, 0) / n;\n\n let numerator = 0;\n let sumXSquared = 0;\n let sumYSquared = 0;\n\n for (let i = 0; i < n; i++) {\n const xDiff = xValues[i] - meanX;\n const yDiff = yValues[i] - meanY;\n numerator += xDiff * yDiff;\n sumXSquared += xDiff * xDiff;\n sumYSquared += yDiff * yDiff;\n }\n\n const denominator = Math.sqrt(sumXSquared * sumYSquared);\n\n if (denominator === 0) {\n return {\n correlation: 0,\n pValue: 1,\n tStatistic: 0,\n degreesOfFreedom: n - 2,\n significant: false,\n confidenceInterval: { lower: 0, upper: 0 },\n sampleSize: n\n };\n }\n\n const r = numerator / denominator;\n const tStat = r * Math.sqrt((n - 2) / (1 - r * r));\n const pValue = 2 * (1 - this.tCDF(Math.abs(tStat), n - 2));\n\n const confidenceInterval = this.pearsonConfidenceInterval(r, n);\n\n return {\n correlation: r,\n pValue: pValue,\n tStatistic: tStat,\n degreesOfFreedom: n - 2,\n significant: pValue < 0.05,\n confidenceInterval: confidenceInterval,\n sampleSize: n,\n interpretation: this.interpretCorrelation(r, pValue)\n };\n }\n\n spearman(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new Error('Both inputs must be arrays');\n }\n\n if (x.length !== y.length) {\n throw new Error('Arrays must have the same length');\n }\n\n const validPairs = [];\n for (let i = 0; i < x.length; i++) {\n if (typeof x[i] === 'number' && typeof y[i] === 'number' &&\n !isNaN(x[i]) && !isNaN(y[i]) && isFinite(x[i]) && isFinite(y[i])) {\n validPairs.push({ x: x[i], y: y[i], originalIndex: i });\n }\n }\n\n if (validPairs.length < 3) {\n throw new Error('Need at least 3 valid paired observations');\n }\n\n const n = validPairs.length;\n const xRanks = this.calculateRanks(validPairs.map(pair => pair.x));\n const yRanks = this.calculateRanks(validPairs.map(pair => pair.y));\n\n const rho = this.pearsonFromArrays(xRanks, yRanks);\n const tStat = rho * Math.sqrt((n - 2) / (1 - rho * rho));\n const pValue = 2 * (1 - this.tCDF(Math.abs(tStat), n - 2));\n\n return {\n correlation: rho,\n pValue: pValue,\n tStatistic: tStat,\n degreesOfFreedom: n - 2,\n significant: pValue < 0.05,\n sampleSize: n,\n xRanks: xRanks,\n yRanks: yRanks,\n interpretation: this.interpretCorrelation(rho, pValue, 'Spearman')\n };\n }\n\n kendall(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new Error('Both inputs must be arrays');\n }\n\n if (x.length !== y.length) {\n throw new Error('Arrays must have the same length');\n }\n\n const validPairs = [];\n for (let i = 0; i < x.length; i++) {\n if (typeof x[i] === 'number' && typeof y[i] === 'number' &&\n !isNaN(x[i]) && !isNaN(y[i]) && isFinite(x[i]) && isFinite(y[i])) {\n validPairs.push({ x: x[i], y: y[i] });\n }\n }\n\n if (validPairs.length < 3) {\n throw new Error('Need at least 3 valid paired observations');\n }\n\n const n = validPairs.length;\n let concordant = 0;\n let discordant = 0;\n let tiesX = 0;\n let tiesY = 0;\n let tiesXY = 0;\n\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const xDiff = validPairs[i].x - validPairs[j].x;\n const yDiff = validPairs[i].y - validPairs[j].y;\n\n if (xDiff === 0 && yDiff === 0) {\n tiesXY++;\n } else if (xDiff === 0) {\n tiesX++;\n } else if (yDiff === 0) {\n tiesY++;\n } else if (xDiff * yDiff > 0) {\n concordant++;\n } else {\n discordant++;\n }\n }\n }\n\n const totalPairs = n * (n - 1) / 2;\n const tau = (concordant - discordant) / Math.sqrt((totalPairs - tiesX) * (totalPairs - tiesY));\n\n const variance = (2 * (2 * n + 5)) / (9 * n * (n - 1));\n const zStat = tau / Math.sqrt(variance);\n const pValue = 2 * (1 - this.normalCDF(Math.abs(zStat)));\n\n return {\n correlation: tau,\n pValue: pValue,\n zStatistic: zStat,\n concordantPairs: concordant,\n discordantPairs: discordant,\n tiesX: tiesX,\n tiesY: tiesY,\n tiesXY: tiesXY,\n significant: pValue < 0.05,\n sampleSize: n,\n interpretation: this.interpretCorrelation(tau, pValue, 'Kendall')\n };\n }\n\n matrix(dataset, method = 'pearson') {\n if (!dataset || !dataset.headers || !dataset.data) {\n throw new Error('Invalid dataset format');\n }\n\n const numericColumns = dataset.headers.filter(header => {\n const column = dataset.data.map(row => row[header]);\n const numericValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n return numericValues.length > 0;\n });\n\n if (numericColumns.length < 2) {\n throw new Error('Need at least 2 numeric columns for correlation matrix');\n }\n\n const correlationMatrix = {};\n const pValueMatrix = {};\n const sampleSizeMatrix = {};\n\n numericColumns.forEach(col1 => {\n correlationMatrix[col1] = {};\n pValueMatrix[col1] = {};\n sampleSizeMatrix[col1] = {};\n\n numericColumns.forEach(col2 => {\n if (col1 === col2) {\n correlationMatrix[col1][col2] = 1;\n pValueMatrix[col1][col2] = 0;\n sampleSizeMatrix[col1][col2] = dataset.data.length;\n } else {\n const x = dataset.data.map(row => row[col1]);\n const y = dataset.data.map(row => row[col2]);\n\n try {\n let result;\n switch (method) {\n case 'pearson':\n result = this.pearson(x, y);\n break;\n case 'spearman':\n result = this.spearman(x, y);\n break;\n case 'kendall':\n result = this.kendall(x, y);\n break;\n default:\n throw new Error(`Unknown correlation method: ${method}`);\n }\n\n correlationMatrix[col1][col2] = result.correlation;\n pValueMatrix[col1][col2] = result.pValue;\n sampleSizeMatrix[col1][col2] = result.sampleSize;\n } catch (error) {\n correlationMatrix[col1][col2] = NaN;\n pValueMatrix[col1][col2] = NaN;\n sampleSizeMatrix[col1][col2] = 0;\n }\n }\n });\n });\n\n return {\n correlations: correlationMatrix,\n pValues: pValueMatrix,\n sampleSizes: sampleSizeMatrix,\n columns: numericColumns,\n method: method,\n strongCorrelations: this.findStrongCorrelations(correlationMatrix, pValueMatrix),\n summary: this.summarizeCorrelationMatrix(correlationMatrix, pValueMatrix, numericColumns)\n };\n }\n\n covariance(x, y, sample = true) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new Error('Both inputs must be arrays');\n }\n\n if (x.length !== y.length) {\n throw new Error('Arrays must have the same length');\n }\n\n const validPairs = [];\n for (let i = 0; i < x.length; i++) {\n if (typeof x[i] === 'number' && typeof y[i] === 'number' &&\n !isNaN(x[i]) && !isNaN(y[i]) && isFinite(x[i]) && isFinite(y[i])) {\n validPairs.push({ x: x[i], y: y[i] });\n }\n }\n\n if (validPairs.length < 2) {\n throw new Error('Need at least 2 valid paired observations');\n }\n\n const n = validPairs.length;\n const xValues = validPairs.map(pair => pair.x);\n const yValues = validPairs.map(pair => pair.y);\n\n const meanX = xValues.reduce((sum, val) => sum + val, 0) / n;\n const meanY = yValues.reduce((sum, val) => sum + val, 0) / n;\n\n const covariance = xValues.reduce((sum, xVal, i) => {\n return sum + (xVal - meanX) * (yValues[i] - meanY);\n }, 0) / (sample ? n - 1 : n);\n\n return {\n covariance: covariance,\n meanX: meanX,\n meanY: meanY,\n sampleSize: n,\n sample: sample\n };\n }\n\n covarianceMatrix(dataset, sample = true) {\n if (!dataset || !dataset.headers || !dataset.data) {\n throw new Error('Invalid dataset format');\n }\n\n const numericColumns = dataset.headers.filter(header => {\n const column = dataset.data.map(row => row[header]);\n const numericValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n return numericValues.length > 0;\n });\n\n if (numericColumns.length < 2) {\n throw new Error('Need at least 2 numeric columns for covariance matrix');\n }\n\n const covMatrix = {};\n\n numericColumns.forEach(col1 => {\n covMatrix[col1] = {};\n\n numericColumns.forEach(col2 => {\n const x = dataset.data.map(row => row[col1]);\n const y = dataset.data.map(row => row[col2]);\n\n const result = this.covariance(x, y, sample);\n covMatrix[col1][col2] = result.covariance;\n });\n });\n\n return {\n covariance: covMatrix,\n columns: numericColumns,\n sample: sample\n };\n }\n\n partialCorrelation(x, y, z) {\n const rxy = this.pearson(x, y);\n const rxz = this.pearson(x, z);\n const ryz = this.pearson(y, z);\n\n const numerator = rxy.correlation - (rxz.correlation * ryz.correlation);\n const denominator = Math.sqrt((1 - rxz.correlation ** 2) * (1 - ryz.correlation ** 2));\n\n if (denominator === 0) {\n return {\n correlation: 0,\n pValue: 1,\n significant: false\n };\n }\n\n const partialR = numerator / denominator;\n const n = Math.min(rxy.sampleSize, rxz.sampleSize, ryz.sampleSize);\n const df = n - 3;\n const tStat = partialR * Math.sqrt(df / (1 - partialR ** 2));\n const pValue = 2 * (1 - this.tCDF(Math.abs(tStat), df));\n\n return {\n correlation: partialR,\n pValue: pValue,\n tStatistic: tStat,\n degreesOfFreedom: df,\n significant: pValue < 0.05,\n sampleSize: n,\n controllingFor: 'third variable'\n };\n }\n\n calculateRanks(values) {\n const indexed = values.map((value, index) => ({ value, index }));\n indexed.sort((a, b) => a.value - b.value);\n\n const ranks = new Array(values.length);\n let currentRank = 1;\n\n for (let i = 0; i < indexed.length; i++) {\n const tiedValues = [indexed[i]];\n\n while (i + 1 < indexed.length && indexed[i + 1].value === indexed[i].value) {\n i++;\n tiedValues.push(indexed[i]);\n }\n\n const averageRank = (currentRank + currentRank + tiedValues.length - 1) / 2;\n tiedValues.forEach(item => {\n ranks[item.index] = averageRank;\n });\n\n currentRank += tiedValues.length;\n }\n\n return ranks;\n }\n\n pearsonFromArrays(x, y) {\n const n = x.length;\n const meanX = x.reduce((sum, val) => sum + val, 0) / n;\n const meanY = y.reduce((sum, val) => sum + val, 0) / n;\n\n let numerator = 0;\n let sumXSquared = 0;\n let sumYSquared = 0;\n\n for (let i = 0; i < n; i++) {\n const xDiff = x[i] - meanX;\n const yDiff = y[i] - meanY;\n numerator += xDiff * yDiff;\n sumXSquared += xDiff * xDiff;\n sumYSquared += yDiff * yDiff;\n }\n\n const denominator = Math.sqrt(sumXSquared * sumYSquared);\n return denominator === 0 ? 0 : numerator / denominator;\n }\n\n pearsonConfidenceInterval(r, n, confidence = 0.95) {\n if (Math.abs(r) >= 1) {\n return { lower: r, upper: r };\n }\n\n const fisherZ = 0.5 * Math.log((1 + r) / (1 - r));\n const standardError = 1 / Math.sqrt(n - 3);\n const alpha = 1 - confidence;\n const zCritical = this.normalInverse(1 - alpha / 2);\n const marginOfError = zCritical * standardError;\n\n const lowerZ = fisherZ - marginOfError;\n const upperZ = fisherZ + marginOfError;\n\n const lowerR = (Math.exp(2 * lowerZ) - 1) / (Math.exp(2 * lowerZ) + 1);\n const upperR = (Math.exp(2 * upperZ) - 1) / (Math.exp(2 * upperZ) + 1);\n\n return { lower: lowerR, upper: upperR };\n }\n\n findStrongCorrelations(correlationMatrix, pValueMatrix, threshold = 0.7) {\n const strongCorrelations = [];\n const columns = Object.keys(correlationMatrix);\n\n for (let i = 0; i < columns.length; i++) {\n for (let j = i + 1; j < columns.length; j++) {\n const col1 = columns[i];\n const col2 = columns[j];\n const correlation = correlationMatrix[col1][col2];\n const pValue = pValueMatrix[col1][col2];\n\n if (Math.abs(correlation) >= threshold && pValue < 0.05) {\n strongCorrelations.push({\n variable1: col1,\n variable2: col2,\n correlation: correlation,\n pValue: pValue,\n strength: this.getCorrelationStrength(Math.abs(correlation))\n });\n }\n }\n }\n\n return strongCorrelations.sort((a, b) => Math.abs(b.correlation) - Math.abs(a.correlation));\n }\n\n summarizeCorrelationMatrix(correlationMatrix, pValueMatrix, columns) {\n let totalCorrelations = 0;\n let significantCorrelations = 0;\n let strongPositive = 0;\n let strongNegative = 0;\n let maxCorrelation = 0;\n let minCorrelation = 0;\n\n for (let i = 0; i < columns.length; i++) {\n for (let j = i + 1; j < columns.length; j++) {\n const col1 = columns[i];\n const col2 = columns[j];\n const correlation = correlationMatrix[col1][col2];\n const pValue = pValueMatrix[col1][col2];\n\n if (!isNaN(correlation)) {\n totalCorrelations++;\n\n if (pValue < 0.05) {\n significantCorrelations++;\n }\n\n if (correlation > 0.7) strongPositive++;\n if (correlation < -0.7) strongNegative++;\n\n maxCorrelation = Math.max(maxCorrelation, correlation);\n minCorrelation = Math.min(minCorrelation, correlation);\n }\n }\n }\n\n return {\n totalPairs: totalCorrelations,\n significantPairs: significantCorrelations,\n strongPositiveCorrelations: strongPositive,\n strongNegativeCorrelations: strongNegative,\n maxCorrelation: maxCorrelation,\n minCorrelation: minCorrelation,\n averageAbsoluteCorrelation: this.calculateAverageAbsoluteCorrelation(correlationMatrix, columns)\n };\n }\n\n calculateAverageAbsoluteCorrelation(correlationMatrix, columns) {\n let sum = 0;\n let count = 0;\n\n for (let i = 0; i < columns.length; i++) {\n for (let j = i + 1; j < columns.length; j++) {\n const correlation = correlationMatrix[columns[i]][columns[j]];\n if (!isNaN(correlation)) {\n sum += Math.abs(correlation);\n count++;\n }\n }\n }\n\n return count > 0 ? sum / count : 0;\n }\n\n getCorrelationStrength(absCorrelation) {\n if (absCorrelation >= 0.9) return 'Very Strong';\n if (absCorrelation >= 0.7) return 'Strong';\n if (absCorrelation >= 0.5) return 'Moderate';\n if (absCorrelation >= 0.3) return 'Weak';\n return 'Very Weak';\n }\n\n interpretCorrelation(correlation, pValue, method = 'Pearson') {\n const strength = this.getCorrelationStrength(Math.abs(correlation));\n const direction = correlation > 0 ? 'positive' : 'negative';\n const significance = pValue < 0.05 ? 'significant' : 'not significant';\n\n return `${method} correlation: ${strength} ${direction} relationship (r = ${correlation.toFixed(4)}, p = ${pValue.toFixed(4)}, ${significance})`;\n }\n\n tCDF(t, df) {\n const x = df / (t * t + df);\n return 1 - 0.5 * this.incompleteBeta(df / 2, 0.5, x);\n }\n\n normalCDF(z) {\n return 0.5 * (1 + this.erf(z / Math.sqrt(2)));\n }\n\n normalInverse(p) {\n if (p <= 0 || p >= 1) throw new Error('p must be between 0 and 1');\n\n const a = [-3.969683028665376e+01, 2.209460984245205e+02, -2.759285104469687e+02,\n 1.383577518672690e+02, -3.066479806614716e+01, 2.506628277459239e+00];\n const b = [-5.447609879822406e+01, 1.615858368580409e+02, -1.556989798598866e+02,\n 6.680131188771972e+01, -1.328068155288572e+01, 1];\n\n if (p > 0.5) return -this.normalInverse(1 - p);\n\n const q = Math.sqrt(-2 * Math.log(p));\n let num = a[5];\n let den = b[5];\n\n for (let i = 4; i >= 0; i--) {\n num = num * q + a[i];\n den = den * q + b[i];\n }\n\n return num / den;\n }\n\n erf(x) {\n const a1 = 0.254829592;\n const a2 = -0.284496736;\n const a3 = 1.421413741;\n const a4 = -1.453152027;\n const a5 = 1.061405429;\n const p = 0.3275911;\n\n const sign = x < 0 ? -1 : 1;\n x = Math.abs(x);\n\n const t = 1 / (1 + p * x);\n const y = 1 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);\n\n return sign * y;\n }\n\n incompleteBeta(a, b, x) {\n if (x <= 0) return 0;\n if (x >= 1) return 1;\n\n const bt = Math.exp(this.logGamma(a + b) - this.logGamma(a) - this.logGamma(b) +\n a * Math.log(x) + b * Math.log(1 - x));\n\n if (x < (a + 1) / (a + b + 2)) {\n return bt * this.continuedFractionBeta(a, b, x) / a;\n } else {\n return 1 - bt * this.continuedFractionBeta(b, a, 1 - x) / b;\n }\n }\n\n continuedFractionBeta(a, b, x) {\n const qab = a + b;\n const qap = a + 1;\n const qam = a - 1;\n let c = 1;\n let d = 1 - qab * x / qap;\n\n if (Math.abs(d) < 1e-30) d = 1e-30;\n d = 1 / d;\n let h = d;\n\n for (let m = 1; m <= 100; m++) {\n const m2 = 2 * m;\n let aa = m * (b - m) * x / ((qam + m2) * (a + m2));\n d = 1 + aa * d;\n if (Math.abs(d) < 1e-30) d = 1e-30;\n c = 1 + aa / c;\n if (Math.abs(c) < 1e-30) c = 1e-30;\n d = 1 / d;\n h *= d * c;\n\n aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));\n d = 1 + aa * d;\n if (Math.abs(d) < 1e-30) d = 1e-30;\n c = 1 + aa / c;\n if (Math.abs(c) < 1e-30) c = 1e-30;\n d = 1 / d;\n const del = d * c;\n h *= del;\n\n if (Math.abs(del - 1) < 1e-12) break;\n }\n\n return h;\n }\n\n logGamma(x) {\n const cof = [76.18009172947146, -86.50532032941677, 24.01409824083091,\n -1.231739572450155, 0.001208650973866179, -0.000005395239384953];\n let ser = 1.000000000190015;\n\n const xx = x;\n let y = x;\n let tmp = x + 5.5;\n tmp -= (x + 0.5) * Math.log(tmp);\n\n for (let j = 0; j < 6; j++) ser += cof[j] / ++y;\n\n return -tmp + Math.log(2.5066282746310005 * ser / xx);\n }\n}\n\nexport default Correlation;","class Regression {\n linear(x, y) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new Error('Both inputs must be arrays');\n }\n\n if (x.length !== y.length) {\n throw new Error('Arrays must have the same length');\n }\n\n const validPairs = [];\n for (let i = 0; i < x.length; i++) {\n if (typeof x[i] === 'number' && typeof y[i] === 'number' &&\n !isNaN(x[i]) && !isNaN(y[i]) && isFinite(x[i]) && isFinite(y[i])) {\n validPairs.push({ x: x[i], y: y[i] });\n }\n }\n\n if (validPairs.length < 3) {\n throw new Error('Need at least 3 valid paired observations');\n }\n\n const n = validPairs.length;\n const xValues = validPairs.map(pair => pair.x);\n const yValues = validPairs.map(pair => pair.y);\n\n const meanX = xValues.reduce((sum, val) => sum + val, 0) / n;\n const meanY = yValues.reduce((sum, val) => sum + val, 0) / n;\n\n let numerator = 0;\n let denominator = 0;\n\n for (let i = 0; i < n; i++) {\n const xDiff = xValues[i] - meanX;\n const yDiff = yValues[i] - meanY;\n numerator += xDiff * yDiff;\n denominator += xDiff * xDiff;\n }\n\n if (denominator === 0) {\n throw new Error('Cannot perform regression: X values have zero variance');\n }\n\n const slope = numerator / denominator;\n const intercept = meanY - slope * meanX;\n\n const predicted = xValues.map(x => intercept + slope * x);\n const residuals = yValues.map((y, i) => y - predicted[i]);\n\n const ssResidual = residuals.reduce((sum, r) => sum + r * r, 0);\n const ssTotal = yValues.reduce((sum, y) => sum + Math.pow(y - meanY, 2), 0);\n const ssRegression = ssTotal - ssResidual;\n\n const rSquared = ssTotal === 0 ? 1 : ssRegression / ssTotal;\n const adjustedRSquared = 1 - ((ssResidual / (n - 2)) / (ssTotal / (n - 1)));\n\n const mse = ssResidual / (n - 2);\n const rmse = Math.sqrt(mse);\n const standardErrorSlope = Math.sqrt(mse / denominator);\n const standardErrorIntercept = Math.sqrt(mse * (1/n + (meanX * meanX) / denominator));\n\n const tStatSlope = slope / standardErrorSlope;\n const tStatIntercept = intercept / standardErrorIntercept;\n const df = n - 2;\n\n const pValueSlope = 2 * (1 - this.tCDF(Math.abs(tStatSlope), df));\n const pValueIntercept = 2 * (1 - this.tCDF(Math.abs(tStatIntercept), df));\n\n const fStatistic = (ssRegression / 1) / (ssResidual / df);\n const pValueModel = 1 - this.fCDF(fStatistic, 1, df);\n\n return {\n slope: slope,\n intercept: intercept,\n rSquared: rSquared,\n adjustedRSquared: adjustedRSquared,\n correlation: Math.sqrt(rSquared) * Math.sign(slope),\n standardErrorSlope: standardErrorSlope,\n standardErrorIntercept: standardErrorIntercept,\n tStatSlope: tStatSlope,\n tStatIntercept: tStatIntercept,\n pValueSlope: pValueSlope,\n pValueIntercept: pValueIntercept,\n fStatistic: fStatistic,\n pValueModel: pValueModel,\n degreesOfFreedom: df,\n mse: mse,\n rmse: rmse,\n residuals: residuals,\n predicted: predicted,\n sampleSize: n,\n equation: `y = ${intercept.toFixed(4)} + ${slope.toFixed(4)}x`,\n residualAnalysis: this.analyzeResiduals(residuals, predicted)\n };\n }\n\n multiple(dataset, dependentVariable, independentVariables) {\n if (!dataset || !dataset.data || !Array.isArray(dataset.data)) {\n throw new Error('Invalid dataset format');\n }\n\n if (!dataset.headers.includes(dependentVariable)) {\n throw new Error(`Dependent variable '${dependentVariable}' not found in dataset`);\n }\n\n const missingVars = independentVariables.filter(var_ => !dataset.headers.includes(var_));\n if (missingVars.length > 0) {\n throw new Error(`Independent variables not found: ${missingVars.join(', ')}`);\n }\n\n const validRows = dataset.data.filter(row => {\n return [dependentVariable, ...independentVariables].every(variable => {\n const value = row[variable];\n return typeof value === 'number' && !isNaN(value) && isFinite(value);\n });\n });\n\n if (validRows.length < independentVariables.length + 2) {\n throw new Error(`Need at least ${independentVariables.length + 2} valid observations`);\n }\n\n const n = validRows.length;\n const k = independentVariables.length;\n\n const y = validRows.map(row => row[dependentVariable]);\n const X = validRows.map(row => [1, ...independentVariables.map(var_ => row[var_])]);\n\n const XTranspose = this.transpose(X);\n const XTX = this.matrixMultiply(XTranspose, X);\n const XTXInverse = this.matrixInverse(XTX);\n const XTY = this.matrixVectorMultiply(XTranspose, y);\n const coefficients = this.matrixVectorMultiply(XTXInverse, XTY);\n\n const predicted = X.map(row =>\n coefficients.reduce((sum, coef, i) => sum + coef * row[i], 0)\n );\n\n const residuals = y.map((actual, i) => actual - predicted[i]);\n const meanY = y.reduce((sum, val) => sum + val, 0) / n;\n\n const ssResidual = residuals.reduce((sum, r) => sum + r * r, 0);\n const ssTotal = y.reduce((sum, val) => sum + Math.pow(val - meanY, 2), 0);\n const ssRegression = ssTotal - ssResidual;\n\n const rSquared = ssTotal === 0 ? 1 : ssRegression / ssTotal;\n const adjustedRSquared = 1 - ((ssResidual / (n - k - 1)) / (ssTotal / (n - 1)));\n\n const mse = ssResidual / (n - k - 1);\n const rmse = Math.sqrt(mse);\n\n const standardErrors = coefficients.map((_, i) => Math.sqrt(mse * XTXInverse[i][i]));\n const tStats = coefficients.map((coef, i) => coef / standardErrors[i]);\n const pValues = tStats.map(t => 2 * (1 - this.tCDF(Math.abs(t), n - k - 1)));\n\n const fStatistic = (ssRegression / k) / (ssResidual / (n - k - 1));\n const pValueModel = 1 - this.fCDF(fStatistic, k, n - k - 1);\n\n const coefficientData = coefficients.map((coef, i) => ({\n variable: i === 0 ? 'Intercept' : independentVariables[i - 1],\n coefficient: coef,\n standardError: standardErrors[i],\n tStatistic: tStats[i],\n pValue: pValues[i],\n significant: pValues[i] < 0.05\n }));\n\n return {\n coefficients: coefficientData,\n intercept: coefficients[0],\n rSquared: rSquared,\n adjustedRSquared: adjustedRSquared,\n fStatistic: fStatistic,\n pValueModel: pValueModel,\n mse: mse,\n rmse: rmse,\n residuals: residuals,\n predicted: predicted,\n sampleSize: n,\n degreesOfFreedom: n - k - 1,\n dependentVariable: dependentVariable,\n independentVariables: independentVariables,\n equation: this.buildEquation(coefficientData),\n residualAnalysis: this.analyzeResiduals(residuals, predicted)\n };\n }\n\n polynomial(x, y, degree = 2) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new Error('Both inputs must be arrays');\n }\n\n if (x.length !== y.length) {\n throw new Error('Arrays must have the same length');\n }\n\n if (degree < 1 || degree > 10) {\n throw new Error('Degree must be between 1 and 10');\n }\n\n const validPairs = [];\n for (let i = 0; i < x.length; i++) {\n if (typeof x[i] === 'number' && typeof y[i] === 'number' &&\n !isNaN(x[i]) && !isNaN(y[i]) && isFinite(x[i]) && isFinite(y[i])) {\n validPairs.push({ x: x[i], y: y[i] });\n }\n }\n\n const n = validPairs.length;\n if (n < degree + 2) {\n throw new Error(`Need at least ${degree + 2} valid observations for degree ${degree} polynomial`);\n }\n\n const xValues = validPairs.map(pair => pair.x);\n const yValues = validPairs.map(pair => pair.y);\n\n const X = xValues.map(x => {\n const row = [1];\n for (let i = 1; i <= degree; i++) {\n row.push(Math.pow(x, i));\n }\n return row;\n });\n\n const XTranspose = this.transpose(X);\n const XTX = this.matrixMultiply(XTranspose, X);\n const XTXInverse = this.matrixInverse(XTX);\n const XTY = this.matrixVectorMultiply(XTranspose, yValues);\n const coefficients = this.matrixVectorMultiply(XTXInverse, XTY);\n\n const predicted = X.map(row =>\n coefficients.reduce((sum, coef, i) => sum + coef * row[i], 0)\n );\n\n const residuals = yValues.map((actual, i) => actual - predicted[i]);\n const meanY = yValues.reduce((sum, val) => sum + val, 0) / n;\n\n const ssResidual = residuals.reduce((sum, r) => sum + r * r, 0);\n const ssTotal = yValues.reduce((sum, val) => sum + Math.pow(val - meanY, 2), 0);\n const ssRegression = ssTotal - ssResidual;\n\n const rSquared = ssTotal === 0 ? 1 : ssRegression / ssTotal;\n const adjustedRSquared = 1 - ((ssResidual / (n - degree - 1)) / (ssTotal / (n - 1)));\n\n const mse = ssResidual / (n - degree - 1);\n const rmse = Math.sqrt(mse);\n\n const standardErrors = coefficients.map((_, i) => Math.sqrt(mse * XTXInverse[i][i]));\n const tStats = coefficients.map((coef, i) => coef / standardErrors[i]);\n const pValues = tStats.map(t => 2 * (1 - this.tCDF(Math.abs(t), n - degree - 1)));\n\n return {\n coefficients: coefficients,\n degree: degree,\n rSquared: rSquared,\n adjustedRSquared: adjustedRSquared,\n mse: mse,\n rmse: rmse,\n residuals: residuals,\n predicted: predicted,\n sampleSize: n,\n equation: this.buildPolynomialEquation(coefficients),\n residualAnalysis: this.analyzeResiduals(residuals, predicted),\n standardErrors: standardErrors,\n tStatistics: tStats,\n pValues: pValues\n };\n }\n\n logistic(x, y, maxIterations = 100, tolerance = 1e-6) {\n if (!Array.isArray(x) || !Array.isArray(y)) {\n throw new Error('Both inputs must be arrays');\n }\n\n const validPairs = [];\n for (let i = 0; i < x.length; i++) {\n if (typeof x[i] === 'number' && typeof y[i] === 'number' &&\n !isNaN(x[i]) && !isNaN(y[i]) && isFinite(x[i]) && isFinite(y[i]) &&\n (y[i] === 0 || y[i] === 1)) {\n validPairs.push({ x: x[i], y: y[i] });\n }\n }\n\n if (validPairs.length < 10) {\n throw new Error('Need at least 10 valid observations for logistic regression');\n }\n\n const xValues = validPairs.map(pair => pair.x);\n const yValues = validPairs.map(pair => pair.y);\n const n = validPairs.length;\n\n let beta0 = 0;\n let beta1 = 0;\n\n for (let iter = 0; iter < maxIterations; iter++) {\n const probabilities = xValues.map(x => this.sigmoid(beta0 + beta1 * x));\n const weights = probabilities.map(p => p * (1 - p));\n\n let score0 = 0, score1 = 0;\n let info00 = 0, info01 = 0, info11 = 0;\n\n for (let i = 0; i < n; i++) {\n const residual = yValues[i] - probabilities[i];\n score0 += residual;\n score1 += residual * xValues[i];\n\n info00 += weights[i];\n info01 += weights[i] * xValues[i];\n info11 += weights[i] * xValues[i] * xValues[i];\n }\n\n const determinant = info00 * info11 - info01 * info01;\n if (Math.abs(determinant) < 1e-10) {\n throw new Error('Information matrix is singular');\n }\n\n const delta0 = (info11 * score0 - info01 * score1) / determinant;\n const delta1 = (info00 * score1 - info01 * score0) / determinant;\n\n beta0 += delta0;\n beta1 += delta1;\n\n if (Math.abs(delta0) < tolerance && Math.abs(delta1) < tolerance) {\n break;\n }\n }\n\n const finalProbabilities = xValues.map(x => this.sigmoid(beta0 + beta1 * x));\n const predicted = finalProbabilities.map(p => p >= 0.5 ? 1 : 0);\n\n const logLikelihood = yValues.reduce((sum, y, i) => {\n const p = finalProbabilities[i];\n return sum + y * Math.log(p + 1e-15) + (1 - y) * Math.log(1 - p + 1e-15);\n }, 0);\n\n const nullLogLikelihood = this.calculateNullLogLikelihood(yValues);\n const mcFaddenR2 = 1 - (logLikelihood / nullLogLikelihood);\n\n const accuracy = predicted.reduce((sum, pred, i) => sum + (pred === yValues[i] ? 1 : 0), 0) / n;\n\n return {\n intercept: beta0,\n slope: beta1,\n probabilities: finalProbabilities,\n predicted: predicted,\n logLikelihood: logLikelihood,\n mcFaddenR2: mcFaddenR2,\n accuracy: accuracy,\n sampleSize: n,\n equation: `p = 1 / (1 + exp(-(${beta0.toFixed(4)} + ${beta1.toFixed(4)}x)))`,\n confusionMatrix: this.calculateConfusionMatrix(yValues, predicted)\n };\n }\n\n predict(model, newX) {\n if (!model || typeof model !== 'object') {\n throw new Error('Invalid model object');\n }\n\n if (model.coefficients && Array.isArray(model.coefficients)) {\n if (Array.isArray(newX[0])) {\n return newX.map(row => {\n const extendedRow = [1, ...row];\n return model.coefficients.reduce((sum, coef, i) => sum + coef.coefficient * extendedRow[i], 0);\n });\n } else {\n const extendedRow = [1, ...newX];\n return model.coefficients.reduce((sum, coef, i) => sum + coef.coefficient * extendedRow[i], 0);\n }\n } else if (model.slope !== undefined && model.intercept !== undefined) {\n if (Array.isArray(newX)) {\n return newX.map(x => model.intercept + model.slope * x);\n } else {\n return model.intercept + model.slope * newX;\n }\n } else if (model.coefficients && model.degree !== undefined) {\n if (Array.isArray(newX)) {\n return newX.map(x => {\n let result = model.coefficients[0];\n for (let i = 1; i <= model.degree; i++) {\n result += model.coefficients[i] * Math.pow(x, i);\n }\n return result;\n });\n } else {\n let result = model.coefficients[0];\n for (let i = 1; i <= model.degree; i++) {\n result += model.coefficients[i] * Math.pow(newX, i);\n }\n return result;\n }\n } else {\n throw new Error('Unknown model type');\n }\n }\n\n analyzeResiduals(residuals, predicted) {\n const n = residuals.length;\n const meanResidual = residuals.reduce((sum, r) => sum + r, 0) / n;\n const stdResidual = Math.sqrt(residuals.reduce((sum, r) => sum + Math.pow(r - meanResidual, 2), 0) / (n - 1));\n\n const standardizedResiduals = residuals.map(r => r / stdResidual);\n const outliers = standardizedResiduals.map((sr, i) => ({ index: i, value: sr }))\n .filter(item => Math.abs(item.value) > 2);\n\n const durbinWatson = this.calculateDurbinWatson(residuals);\n\n return {\n mean: meanResidual,\n standardDeviation: stdResidual,\n standardizedResiduals: standardizedResiduals,\n outliers: outliers,\n durbinWatson: durbinWatson,\n normalityTest: this.testResidualNormality(residuals)\n };\n }\n\n calculateDurbinWatson(residuals) {\n let numerator = 0;\n let denominator = 0;\n\n for (let i = 1; i < residuals.length; i++) {\n numerator += Math.pow(residuals[i] - residuals[i - 1], 2);\n }\n\n for (let i = 0; i < residuals.length; i++) {\n denominator += Math.pow(residuals[i], 2);\n }\n\n return numerator / denominator;\n }\n\n testResidualNormality(residuals) {\n const n = residuals.length;\n const mean = residuals.reduce((sum, r) => sum + r, 0) / n;\n const variance = residuals.reduce((sum, r) => sum + Math.pow(r - mean, 2), 0) / (n - 1);\n const stdDev = Math.sqrt(variance);\n\n if (stdDev === 0) {\n return { isNormal: true, pValue: 1 };\n }\n\n const skewness = residuals.reduce((sum, r) => sum + Math.pow((r - mean) / stdDev, 3), 0) / n;\n const kurtosis = residuals.reduce((sum, r) => sum + Math.pow((r - mean) / stdDev, 4), 0) / n - 3;\n\n const jarqueBera = (n / 6) * (Math.pow(skewness, 2) + Math.pow(kurtosis, 2) / 4);\n const pValue = 1 - this.chiSquareCDF(jarqueBera, 2);\n\n return {\n jarqueBeraStatistic: jarqueBera,\n pValue: pValue,\n isNormal: pValue > 0.05,\n skewness: skewness,\n kurtosis: kurtosis\n };\n }\n\n buildEquation(coefficientData) {\n const terms = coefficientData.map(coef => {\n if (coef.variable === 'Intercept') {\n return coef.coefficient.toFixed(4);\n } else {\n const sign = coef.coefficient >= 0 ? '+' : '';\n return `${sign}${coef.coefficient.toFixed(4)}*${coef.variable}`;\n }\n });\n\n return `y = ${terms.join(' ')}`;\n }\n\n buildPolynomialEquation(coefficients) {\n const terms = coefficients.map((coef, i) => {\n if (i === 0) {\n return coef.toFixed(4);\n } else if (i === 1) {\n const sign = coef >= 0 ? '+' : '';\n return `${sign}${coef.toFixed(4)}*x`;\n } else {\n const sign = coef >= 0 ? '+' : '';\n return `${sign}${coef.toFixed(4)}*x^${i}`;\n }\n });\n\n return `y = ${terms.join(' ')}`;\n }\n\n sigmoid(z) {\n return 1 / (1 + Math.exp(-Math.max(-500, Math.min(500, z))));\n }\n\n calculateNullLogLikelihood(y) {\n const p = y.reduce((sum, val) => sum + val, 0) / y.length;\n return y.reduce((sum, val) => {\n return sum + val * Math.log(p + 1e-15) + (1 - val) * Math.log(1 - p + 1e-15);\n }, 0);\n }\n\n calculateConfusionMatrix(actual, predicted) {\n let tp = 0, fp = 0, tn = 0, fn = 0;\n\n for (let i = 0; i < actual.length; i++) {\n if (actual[i] === 1 && predicted[i] === 1) tp++;\n else if (actual[i] === 0 && predicted[i] === 1) fp++;\n else if (actual[i] === 0 && predicted[i] === 0) tn++;\n else if (actual[i] === 1 && predicted[i] === 0) fn++;\n }\n\n const precision = tp + fp > 0 ? tp / (tp + fp) : 0;\n const recall = tp + fn > 0 ? tp / (tp + fn) : 0;\n const specificity = tn + fp > 0 ? tn / (tn + fp) : 0;\n const f1Score = precision + recall > 0 ? 2 * (precision * recall) / (precision + recall) : 0;\n\n return {\n truePositive: tp,\n falsePositive: fp,\n trueNegative: tn,\n falseNegative: fn,\n precision: precision,\n recall: recall,\n specificity: specificity,\n f1Score: f1Score\n };\n }\n\n matrixMultiply(A, B) {\n const rowsA = A.length;\n const colsA = A[0].length;\n const colsB = B[0].length;\n\n const result = Array(rowsA).fill().map(() => Array(colsB).fill(0));\n\n for (let i = 0; i < rowsA; i++) {\n for (let j = 0; j < colsB; j++) {\n for (let k = 0; k < colsA; k++) {\n result[i][j] += A[i][k] * B[k][j];\n }\n }\n }\n\n return result;\n }\n\n matrixVectorMultiply(A, b) {\n return A.map(row => row.reduce((sum, val, i) => sum + val * b[i], 0));\n }\n\n transpose(matrix) {\n return matrix[0].map((_, colIndex) => matrix.map(row => row[colIndex]));\n }\n\n matrixInverse(matrix) {\n const n = matrix.length;\n const identity = Array(n).fill().map((_, i) => Array(n).fill().map((_, j) => i === j ? 1 : 0));\n const augmented = matrix.map((row, i) => [...row, ...identity[i]]);\n\n for (let i = 0; i < n; i++) {\n let maxRow = i;\n for (let k = i + 1; k < n; k++) {\n if (Math.abs(augmented[k][i]) > Math.abs(augmented[maxRow][i])) {\n maxRow = k;\n }\n }\n [augmented[i], augmented[maxRow]] = [augmented[maxRow], augmented[i]];\n\n const pivot = augmented[i][i];\n if (Math.abs(pivot) < 1e-10) {\n throw new Error('Matrix is singular and cannot be inverted');\n }\n\n for (let j = 0; j < 2 * n; j++) {\n augmented[i][j] /= pivot;\n }\n\n for (let k = 0; k < n; k++) {\n if (k !== i) {\n const factor = augmented[k][i];\n for (let j = 0; j < 2 * n; j++) {\n augmented[k][j] -= factor * augmented[i][j];\n }\n }\n }\n }\n\n return augmented.map(row => row.slice(n));\n }\n\n tCDF(t, df) {\n if (df <= 0) return 0.5;\n\n const x = df / (t * t + df);\n return 1 - 0.5 * this.incompleteBeta(df / 2, 0.5, x);\n }\n\n fCDF(f, df1, df2) {\n if (f <= 0) return 0;\n\n const x = df2 / (df2 + df1 * f);\n return 1 - this.incompleteBeta(df2 / 2, df1 / 2, x);\n }\n\n chiSquareCDF(x, df) {\n if (x <= 0) return 0;\n return this.incompleteGamma(df / 2, x / 2) / this.gamma(df / 2);\n }\n\n incompleteBeta(a, b, x) {\n if (x <= 0) return 0;\n if (x >= 1) return 1;\n\n let result = 0;\n let term = 1;\n\n for (let n = 0; n < 100; n++) {\n if (n > 0) {\n term *= x * (a + n - 1) / n;\n }\n result += term / (a + n);\n if (Math.abs(term) < 1e-10) break;\n }\n\n return result * Math.pow(x, a) * Math.pow(1 - x, b);\n }\n\n incompleteGamma(a, x) {\n if (x <= 0) return 0;\n\n let sum = 1;\n let term = 1;\n\n for (let n = 1; n < 100; n++) {\n term *= x / (a + n - 1);\n sum += term;\n if (Math.abs(term) < 1e-12) break;\n }\n\n return Math.pow(x, a) * Math.exp(-x) * sum;\n }\n\n gamma(x) {\n if (x < 0.5) {\n return Math.PI / (Math.sin(Math.PI * x) * this.gamma(1 - x));\n }\n\n x -= 1;\n let result = 0.99999999999980993;\n const coefficients = [\n 676.5203681218851, -1259.1392167224028, 771.32342877765313,\n -176.61502916214059, 12.507343278686905, -0.13857109526572012,\n 9.9843695780195716e-6, 1.5056327351493116e-7\n ];\n\n for (let i = 0; i < coefficients.length; i++) {\n result += coefficients[i] / (x + i + 1);\n }\n\n const t = x + coefficients.length - 0.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, x + 0.5) * Math.exp(-t) * result;\n }\n}\n\nexport default Regression;","class ReportGenerator {\n summary(dataset) {\n if (!dataset || !dataset.data || !dataset.headers) {\n throw new Error('Invalid dataset format');\n }\n\n const basicInfo = this.getBasicInfo(dataset);\n const columnAnalysis = this.analyzeColumns(dataset);\n const dataQuality = this.assessDataQuality(dataset);\n const distributions = this.analyzeDistributions(dataset);\n const relationships = this.analyzeRelationships(dataset);\n const insights = this.generateKeyInsights(dataset, columnAnalysis, relationships);\n\n return {\n title: 'Statistical Summary Report',\n generatedAt: new Date().toISOString(),\n basicInfo: basicInfo,\n columnAnalysis: columnAnalysis,\n dataQuality: dataQuality,\n distributions: distributions,\n relationships: relationships,\n keyInsights: insights,\n recommendations: this.generateRecommendations(dataQuality, columnAnalysis, relationships)\n };\n }\n\n getBasicInfo(dataset) {\n return {\n totalRows: dataset.length,\n totalColumns: dataset.columns,\n headers: dataset.headers,\n memoryFootprint: this.estimateMemoryFootprint(dataset),\n dataTypes: this.getDataTypes(dataset)\n };\n }\n\n analyzeColumns(dataset) {\n const analysis = {};\n\n dataset.headers.forEach(header => {\n const column = dataset.data.map(row => row[header]);\n const columnType = this.inferColumnType(column);\n\n analysis[header] = {\n type: columnType,\n totalCount: column.length,\n validCount: this.getValidCount(column),\n nullCount: this.getNullCount(column),\n uniqueCount: this.getUniqueCount(column),\n nullPercentage: this.getNullPercentage(column),\n ...this.getTypeSpecificAnalysis(column, columnType)\n };\n });\n\n return analysis;\n }\n\n getTypeSpecificAnalysis(column, type) {\n const validValues = column.filter(val => val !== null && val !== undefined);\n\n if (type === 'numeric') {\n const numericValues = validValues.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (numericValues.length === 0) return {};\n\n return {\n min: Math.min(...numericValues),\n max: Math.max(...numericValues),\n mean: this.calculateMean(numericValues),\n median: this.calculateMedian(numericValues),\n standardDeviation: this.calculateStandardDeviation(numericValues),\n variance: this.calculateVariance(numericValues),\n skewness: this.calculateSkewness(numericValues),\n kurtosis: this.calculateKurtosis(numericValues),\n quartiles: this.calculateQuartiles(numericValues),\n outliers: this.detectOutliers(numericValues),\n distribution: this.classifyDistribution(numericValues)\n };\n } else if (type === 'categorical') {\n const frequencyTable = this.calculateFrequencyTable(validValues);\n return {\n categories: frequencyTable,\n mostFrequent: this.getMostFrequent(frequencyTable),\n leastFrequent: this.getLeastFrequent(frequencyTable),\n entropy: this.calculateEntropy(frequencyTable),\n concentration: this.calculateConcentration(frequencyTable)\n };\n } else if (type === 'datetime') {\n const dates = validValues.filter(val => !isNaN(new Date(val).getTime()));\n if (dates.length === 0) return {};\n\n const timestamps = dates.map(date => new Date(date).getTime());\n return {\n earliest: new Date(Math.min(...timestamps)).toISOString(),\n latest: new Date(Math.max(...timestamps)).toISOString(),\n span: Math.max(...timestamps) - Math.min(...timestamps),\n frequency: this.analyzeDateFrequency(dates)\n };\n }\n\n return {};\n }\n\n assessDataQuality(dataset) {\n const issues = [];\n let overallScore = 100;\n\n const completenessScore = this.assessCompleteness(dataset);\n const consistencyScore = this.assessConsistency(dataset);\n const uniquenessScore = this.assessUniqueness(dataset);\n const validityScore = this.assessValidity(dataset);\n\n overallScore = (completenessScore + consistencyScore + uniquenessScore + validityScore) / 4;\n\n if (completenessScore < 80) {\n issues.push({\n type: 'completeness',\n severity: completenessScore < 50 ? 'high' : 'medium',\n description: `${(100 - completenessScore).toFixed(1)}% of data is missing`\n });\n }\n\n if (consistencyScore < 80) {\n issues.push({\n type: 'consistency',\n severity: consistencyScore < 50 ? 'high' : 'medium',\n description: 'Data consistency issues detected'\n });\n }\n\n return {\n overallScore: overallScore,\n completenessScore: completenessScore,\n consistencyScore: consistencyScore,\n uniquenessScore: uniquenessScore,\n validityScore: validityScore,\n issues: issues,\n recommendation: this.getQualityRecommendation(overallScore)\n };\n }\n\n analyzeDistributions(dataset) {\n const distributions = {};\n\n dataset.headers.forEach(header => {\n const column = dataset.data.map(row => row[header]);\n const validValues = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n );\n\n if (validValues.length > 5) {\n distributions[header] = {\n type: this.classifyDistribution(validValues),\n normalityTest: this.testNormality(validValues),\n histogram: this.createHistogram(validValues),\n descriptiveStats: this.getDescriptiveStats(validValues)\n };\n }\n });\n\n return distributions;\n }\n\n analyzeRelationships(dataset) {\n const numericColumns = dataset.headers.filter(header => {\n const column = dataset.data.map(row => row[header]);\n const numericCount = column.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n ).length;\n return numericCount > column.length * 0.5;\n });\n\n if (numericColumns.length < 2) {\n return { correlations: {}, strongRelationships: [] };\n }\n\n const correlations = {};\n const strongRelationships = [];\n\n for (let i = 0; i < numericColumns.length; i++) {\n correlations[numericColumns[i]] = {};\n for (let j = 0; j < numericColumns.length; j++) {\n if (i === j) {\n correlations[numericColumns[i]][numericColumns[j]] = 1;\n } else {\n const col1 = dataset.data.map(row => row[numericColumns[i]]);\n const col2 = dataset.data.map(row => row[numericColumns[j]]);\n const correlation = this.calculatePearsonCorrelation(col1, col2);\n correlations[numericColumns[i]][numericColumns[j]] = correlation;\n\n if (Math.abs(correlation) > 0.7 && i < j) {\n strongRelationships.push({\n variable1: numericColumns[i],\n variable2: numericColumns[j],\n correlation: correlation,\n strength: this.getCorrelationStrength(Math.abs(correlation)),\n direction: correlation > 0 ? 'positive' : 'negative'\n });\n }\n }\n }\n }\n\n return {\n correlations: correlations,\n strongRelationships: strongRelationships,\n averageCorrelation: this.calculateAverageCorrelation(correlations, numericColumns)\n };\n }\n\n generateKeyInsights(dataset, columnAnalysis, relationships) {\n const insights = [];\n\n insights.push(...this.generateDataVolumeInsights(dataset));\n insights.push(...this.generateColumnInsights(columnAnalysis));\n insights.push(...this.generateRelationshipInsights(relationships));\n insights.push(...this.generateDistributionInsights(columnAnalysis));\n insights.push(...this.generateQualityInsights(dataset, columnAnalysis));\n\n return insights.sort((a, b) => b.importance - a.importance).slice(0, 10);\n }\n\n generateDataVolumeInsights(dataset) {\n const insights = [];\n\n if (dataset.length > 10000) {\n insights.push({\n type: 'volume',\n title: 'Large Dataset Detected',\n description: `Dataset contains ${dataset.length.toLocaleString()} rows, which is suitable for robust statistical analysis.`,\n importance: 7,\n actionable: false\n });\n } else if (dataset.length < 30) {\n insights.push({\n type: 'volume',\n title: 'Small Sample Size Warning',\n description: `Dataset has only ${dataset.length} rows. Statistical tests may lack power.`,\n importance: 8,\n actionable: true,\n recommendation: 'Consider collecting more data for reliable statistical inference.'\n });\n }\n\n if (dataset.columns > 50) {\n insights.push({\n type: 'dimensionality',\n title: 'High-Dimensional Dataset',\n description: `Dataset has ${dataset.columns} columns, which may benefit from dimensionality reduction.`,\n importance: 6,\n actionable: true,\n recommendation: 'Consider feature selection or PCA to reduce dimensionality.'\n });\n }\n\n return insights;\n }\n\n generateColumnInsights(columnAnalysis) {\n const insights = [];\n const columns = Object.keys(columnAnalysis);\n\n const highNullColumns = columns.filter(col =>\n columnAnalysis[col].nullPercentage > 25\n );\n\n if (highNullColumns.length > 0) {\n insights.push({\n type: 'data_quality',\n title: 'High Missing Data Detected',\n description: `Columns ${highNullColumns.join(', ')} have >25% missing values.`,\n importance: 9,\n actionable: true,\n recommendation: 'Consider imputation strategies or removing these columns.'\n });\n }\n\n const skewedColumns = columns.filter(col => {\n const analysis = columnAnalysis[col];\n return analysis.skewness && Math.abs(analysis.skewness) > 2;\n });\n\n if (skewedColumns.length > 0) {\n insights.push({\n type: 'distribution',\n title: 'Highly Skewed Variables Found',\n description: `Columns ${skewedColumns.join(', ')} show extreme skewness.`,\n importance: 7,\n actionable: true,\n recommendation: 'Consider log transformation or other normalization techniques.'\n });\n }\n\n const constantColumns = columns.filter(col =>\n columnAnalysis[col].uniqueCount === 1\n );\n\n if (constantColumns.length > 0) {\n insights.push({\n type: 'data_quality',\n title: 'Constant Variables Detected',\n description: `Columns ${constantColumns.join(', ')} have no variation.`,\n importance: 8,\n actionable: true,\n recommendation: 'Remove these columns as they provide no information.'\n });\n }\n\n return insights;\n }\n\n generateRelationshipInsights(relationships) {\n const insights = [];\n\n if (relationships.strongRelationships.length > 0) {\n const strongest = relationships.strongRelationships[0];\n insights.push({\n type: 'correlation',\n title: 'Strong Correlation Found',\n description: `${strongest.variable1} and ${strongest.variable2} have a ${strongest.strength.toLowerCase()} ${strongest.direction} correlation (r = ${strongest.correlation.toFixed(3)}).`,\n importance: 8,\n actionable: true,\n recommendation: 'Investigate this relationship further with regression analysis.'\n });\n }\n\n const multicollinearPairs = relationships.strongRelationships.filter(rel =>\n Math.abs(rel.correlation) > 0.9\n );\n\n if (multicollinearPairs.length > 0) {\n insights.push({\n type: 'multicollinearity',\n title: 'Potential Multicollinearity Detected',\n description: `Very high correlations found between some variables.`,\n importance: 7,\n actionable: true,\n recommendation: 'Consider removing redundant variables before modeling.'\n });\n }\n\n if (relationships.averageCorrelation > 0.5) {\n insights.push({\n type: 'correlation',\n title: 'Generally High Inter-Variable Correlations',\n description: `Average correlation is ${relationships.averageCorrelation.toFixed(3)}, indicating related variables.`,\n importance: 6,\n actionable: false\n });\n }\n\n return insights;\n }\n\n generateDistributionInsights(columnAnalysis) {\n const insights = [];\n const numericColumns = Object.keys(columnAnalysis).filter(col =>\n columnAnalysis[col].type === 'numeric'\n );\n\n const normalColumns = numericColumns.filter(col => {\n const analysis = columnAnalysis[col];\n return analysis.distribution === 'normal' ||\n (Math.abs(analysis.skewness || 0) < 0.5 && Math.abs(analysis.kurtosis || 0) < 0.5);\n });\n\n if (normalColumns.length > numericColumns.length * 0.7) {\n insights.push({\n type: 'distribution',\n title: 'Most Variables Normally Distributed',\n description: `${normalColumns.length} out of ${numericColumns.length} numeric variables appear normally distributed.`,\n importance: 6,\n actionable: false\n });\n }\n\n const outliersColumns = numericColumns.filter(col => {\n const analysis = columnAnalysis[col];\n return analysis.outliers && analysis.outliers.count > 0;\n });\n\n if (outliersColumns.length > 0) {\n const totalOutliers = outliersColumns.reduce((sum, col) =>\n sum + columnAnalysis[col].outliers.count, 0\n );\n\n insights.push({\n type: 'outliers',\n title: 'Outliers Detected',\n description: `Found ${totalOutliers} outliers across ${outliersColumns.length} variables.`,\n importance: 7,\n actionable: true,\n recommendation: 'Investigate outliers to determine if they represent errors or genuine extreme values.'\n });\n }\n\n return insights;\n }\n\n generateQualityInsights(dataset, columnAnalysis) {\n const insights = [];\n const columns = Object.keys(columnAnalysis);\n\n const duplicateRows = this.countDuplicateRows(dataset);\n if (duplicateRows > 0) {\n insights.push({\n type: 'data_quality',\n title: 'Duplicate Rows Found',\n description: `Dataset contains ${duplicateRows} duplicate rows.`,\n importance: 8,\n actionable: true,\n recommendation: 'Remove duplicate rows to avoid bias in analysis.'\n });\n }\n\n const totalMissingCells = columns.reduce((sum, col) =>\n sum + columnAnalysis[col].nullCount, 0\n );\n const totalCells = dataset.length * dataset.columns;\n const missingPercentage = (totalMissingCells / totalCells) * 100;\n\n if (missingPercentage > 10) {\n insights.push({\n type: 'data_quality',\n title: 'Significant Missing Data',\n description: `${missingPercentage.toFixed(1)}% of all data points are missing.`,\n importance: 9,\n actionable: true,\n recommendation: 'Develop a comprehensive missing data strategy.'\n });\n }\n\n return insights;\n }\n\n generateRecommendations(dataQuality, columnAnalysis, relationships) {\n const recommendations = [];\n\n if (dataQuality.overallScore < 70) {\n recommendations.push({\n priority: 'high',\n category: 'data_cleaning',\n title: 'Improve Data Quality',\n description: 'Address missing values, outliers, and inconsistencies before analysis.',\n steps: [\n 'Handle missing values through imputation or removal',\n 'Investigate and address outliers',\n 'Standardize data formats and categories',\n 'Validate data integrity'\n ]\n });\n }\n\n if (relationships.strongRelationships.length > 0) {\n recommendations.push({\n priority: 'medium',\n category: 'analysis',\n title: 'Explore Strong Relationships',\n description: 'Investigate detected correlations with deeper analysis.',\n steps: [\n 'Perform regression analysis on highly correlated variables',\n 'Create visualizations to understand relationships',\n 'Test for causality where appropriate'\n ]\n });\n }\n\n const numericColumns = Object.keys(columnAnalysis).filter(col =>\n columnAnalysis[col].type === 'numeric'\n ).length;\n\n if (numericColumns > 2) {\n recommendations.push({\n priority: 'low',\n category: 'modeling',\n title: 'Consider Advanced Analytics',\n description: 'Dataset is suitable for machine learning approaches.',\n steps: [\n 'Perform feature selection',\n 'Try different modeling approaches',\n 'Validate models with cross-validation',\n 'Interpret model results'\n ]\n });\n }\n\n return recommendations;\n }\n\n inferColumnType(column) {\n const validValues = column.filter(val => val !== null && val !== undefined);\n if (validValues.length === 0) return 'unknown';\n\n const numericCount = validValues.filter(val =>\n typeof val === 'number' && !isNaN(val) && isFinite(val)\n ).length;\n\n const dateCount = validValues.filter(val => {\n if (typeof val === 'string') {\n const date = new Date(val);\n return !isNaN(date.getTime());\n }\n return false;\n }).length;\n\n if (numericCount / validValues.length > 0.8) return 'numeric';\n if (dateCount / validValues.length > 0.8) return 'datetime';\n\n return 'categorical';\n }\n\n getValidCount(column) {\n return column.filter(val => val !== null && val !== undefined).length;\n }\n\n getNullCount(column) {\n return column.filter(val => val === null || val === undefined).length;\n }\n\n getUniqueCount(column) {\n const validValues = column.filter(val => val !== null && val !== undefined);\n return new Set(validValues).size;\n }\n\n getNullPercentage(column) {\n return (this.getNullCount(column) / column.length) * 100;\n }\n\n calculateMean(values) {\n return values.reduce((sum, val) => sum + val, 0) / values.length;\n }\n\n calculateMedian(values) {\n const sorted = [...values].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n return sorted.length % 2 === 0 ?\n (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];\n }\n\n calculateStandardDeviation(values) {\n const mean = this.calculateMean(values);\n const variance = values.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (values.length - 1);\n return Math.sqrt(variance);\n }\n\n calculateVariance(values) {\n const mean = this.calculateMean(values);\n return values.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / (values.length - 1);\n }\n\n calculateSkewness(values) {\n const n = values.length;\n const mean = this.calculateMean(values);\n const stdDev = this.calculateStandardDeviation(values);\n\n if (stdDev === 0) return 0;\n\n const skewSum = values.reduce((sum, val) => {\n return sum + Math.pow((val - mean) / stdDev, 3);\n }, 0);\n\n return (n / ((n - 1) * (n - 2))) * skewSum;\n }\n\n calculateKurtosis(values) {\n const n = values.length;\n const mean = this.calculateMean(values);\n const stdDev = this.calculateStandardDeviation(values);\n\n if (stdDev === 0) return -3;\n\n const kurtSum = values.reduce((sum, val) => {\n return sum + Math.pow((val - mean) / stdDev, 4);\n }, 0);\n\n return ((n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) * kurtSum -\n (3 * Math.pow(n - 1, 2)) / ((n - 2) * (n - 3));\n }\n\n calculateQuartiles(values) {\n const sorted = [...values].sort((a, b) => a - b);\n const n = sorted.length;\n\n const q1Index = Math.floor(n * 0.25);\n const q2Index = Math.floor(n * 0.5);\n const q3Index = Math.floor(n * 0.75);\n\n return {\n q1: sorted[q1Index],\n q2: sorted[q2Index],\n q3: sorted[q3Index],\n iqr: sorted[q3Index] - sorted[q1Index]\n };\n }\n\n detectOutliers(values) {\n const quartiles = this.calculateQuartiles(values);\n const lowerBound = quartiles.q1 - 1.5 * quartiles.iqr;\n const upperBound = quartiles.q3 + 1.5 * quartiles.iqr;\n\n const outliers = values.filter(val => val < lowerBound || val > upperBound);\n\n return {\n count: outliers.length,\n percentage: (outliers.length / values.length) * 100,\n values: outliers,\n lowerBound: lowerBound,\n upperBound: upperBound\n };\n }\n\n classifyDistribution(values) {\n const skewness = this.calculateSkewness(values);\n const kurtosis = this.calculateKurtosis(values);\n\n if (Math.abs(skewness) < 0.5 && Math.abs(kurtosis) < 0.5) return 'normal';\n if (skewness > 1) return 'right_skewed';\n if (skewness < -1) return 'left_skewed';\n if (kurtosis > 1) return 'heavy_tailed';\n if (kurtosis < -1) return 'light_tailed';\n\n return 'unknown';\n }\n\n calculateFrequencyTable(values) {\n const frequencies = {};\n values.forEach(value => {\n const key = String(value);\n frequencies[key] = (frequencies[key] || 0) + 1;\n });\n\n const total = values.length;\n return Object.entries(frequencies).map(([value, count]) => ({\n value: value,\n count: count,\n percentage: (count / total) * 100\n })).sort((a, b) => b.count - a.count);\n }\n\n getMostFrequent(frequencyTable) {\n return frequencyTable[0] || null;\n }\n\n getLeastFrequent(frequencyTable) {\n return frequencyTable[frequencyTable.length - 1] || null;\n }\n\n calculateEntropy(frequencyTable) {\n const total = frequencyTable.reduce((sum, item) => sum + item.count, 0);\n return frequencyTable.reduce((entropy, item) => {\n const probability = item.count / total;\n return entropy - probability * Math.log2(probability);\n }, 0);\n }\n\n calculateConcentration(frequencyTable) {\n const total = frequencyTable.reduce((sum, item) => sum + item.count, 0);\n const topCategory = frequencyTable[0];\n return topCategory ? (topCategory.count / total) * 100 : 0;\n }\n\n analyzeDateFrequency(dates) {\n const timestamps = dates.map(date => new Date(date).getTime());\n const sorted = timestamps.sort((a, b) => a - b);\n\n if (sorted.length < 2) return 'insufficient_data';\n\n const intervals = [];\n for (let i = 1; i < sorted.length; i++) {\n intervals.push(sorted[i] - sorted[i - 1]);\n }\n\n const avgInterval = intervals.reduce((sum, interval) => sum + interval, 0) / intervals.length;\n const dayInMs = 24 * 60 * 60 * 1000;\n\n if (avgInterval < dayInMs) return 'sub_daily';\n if (avgInterval < 7 * dayInMs) return 'daily';\n if (avgInterval < 30 * dayInMs) return 'weekly';\n if (avgInterval < 365 * dayInMs) return 'monthly';\n\n return 'yearly';\n }\n\n assessCompleteness(dataset) {\n const totalCells = dataset.length * dataset.columns;\n let completeCells = 0;\n\n dataset.data.forEach(row => {\n dataset.headers.forEach(header => {\n if (row[header] !== null && row[header] !== undefined) {\n completeCells++;\n }\n });\n });\n\n return (completeCells / totalCells) * 100;\n }\n\n assessConsistency(dataset) {\n let score = 100;\n\n dataset.headers.forEach(header => {\n const column = dataset.data.map(row => row[header]);\n const types = new Set(column.filter(val => val !== null && val !== undefined)\n .map(val => typeof val));\n\n if (types.size > 1) {\n score -= 10;\n }\n });\n\n return Math.max(0, score);\n }\n\n assessUniqueness(dataset) {\n const duplicates = this.countDuplicateRows(dataset);\n return Math.max(0, 100 - (duplicates / dataset.length) * 100);\n }\n\n assessValidity(dataset) {\n let score = 100;\n let totalValues = 0;\n let invalidValues = 0;\n\n dataset.data.forEach(row => {\n dataset.headers.forEach(header => {\n const value = row[header];\n if (value !== null && value !== undefined) {\n totalValues++;\n if (typeof value === 'number' && !isFinite(value)) {\n invalidValues++;\n }\n }\n });\n });\n\n if (totalValues > 0) {\n score = Math.max(0, 100 - (invalidValues / totalValues) * 100);\n }\n\n return score;\n }\n\n getQualityRecommendation(score) {\n if (score >= 90) return 'Excellent data quality - ready for analysis';\n if (score >= 80) return 'Good data quality - minor cleaning recommended';\n if (score >= 70) return 'Fair data quality - significant cleaning needed';\n if (score >= 60) return 'Poor data quality - extensive preprocessing required';\n return 'Very poor data quality - major data work needed before analysis';\n }\n\n testNormality(values) {\n if (values.length < 8) return { test: 'insufficient_data' };\n\n const mean = this.calculateMean(values);\n const stdDev = this.calculateStandardDeviation(values);\n const skewness = this.calculateSkewness(values);\n const kurtosis = this.calculateKurtosis(values);\n\n const jarqueBera = (values.length / 6) * (Math.pow(skewness, 2) + Math.pow(kurtosis, 2) / 4);\n const pValue = 1 - this.chiSquareCDF(jarqueBera, 2);\n\n return {\n test: 'jarque_bera',\n statistic: jarqueBera,\n pValue: pValue,\n isNormal: pValue > 0.05,\n skewness: skewness,\n kurtosis: kurtosis\n };\n }\n\n createHistogram(values, bins = 10) {\n const min = Math.min(...values);\n const max = Math.max(...values);\n const binWidth = (max - min) / bins;\n\n const histogram = Array(bins).fill(0);\n\n values.forEach(value => {\n let binIndex = Math.floor((value - min) / binWidth);\n if (binIndex === bins) binIndex = bins - 1;\n histogram[binIndex]++;\n });\n\n return histogram.map((count, index) => ({\n binStart: min + index * binWidth,\n binEnd: min + (index + 1) * binWidth,\n count: count,\n percentage: (count / values.length) * 100\n }));\n }\n\n getDescriptiveStats(values) {\n return {\n count: values.length,\n mean: this.calculateMean(values),\n median: this.calculateMedian(values),\n min: Math.min(...values),\n max: Math.max(...values),\n std: this.calculateStandardDeviation(values),\n var: this.calculateVariance(values),\n skewness: this.calculateSkewness(values),\n kurtosis: this.calculateKurtosis(values)\n };\n }\n\n calculatePearsonCorrelation(x, y) {\n const validPairs = [];\n for (let i = 0; i < x.length; i++) {\n if (typeof x[i] === 'number' && typeof y[i] === 'number' &&\n !isNaN(x[i]) && !isNaN(y[i]) && isFinite(x[i]) && isFinite(y[i])) {\n validPairs.push({ x: x[i], y: y[i] });\n }\n }\n\n if (validPairs.length < 3) return 0;\n\n const n = validPairs.length;\n const xValues = validPairs.map(pair => pair.x);\n const yValues = validPairs.map(pair => pair.y);\n\n const meanX = xValues.reduce((sum, val) => sum + val, 0) / n;\n const meanY = yValues.reduce((sum, val) => sum + val, 0) / n;\n\n let numerator = 0;\n let sumXSquared = 0;\n let sumYSquared = 0;\n\n for (let i = 0; i < n; i++) {\n const xDiff = xValues[i] - meanX;\n const yDiff = yValues[i] - meanY;\n numerator += xDiff * yDiff;\n sumXSquared += xDiff * xDiff;\n sumYSquared += yDiff * yDiff;\n }\n\n const denominator = Math.sqrt(sumXSquared * sumYSquared);\n return denominator === 0 ? 0 : numerator / denominator;\n }\n\n getCorrelationStrength(absCorrelation) {\n if (absCorrelation >= 0.9) return 'Very Strong';\n if (absCorrelation >= 0.7) return 'Strong';\n if (absCorrelation >= 0.5) return 'Moderate';\n if (absCorrelation >= 0.3) return 'Weak';\n return 'Very Weak';\n }\n\n calculateAverageCorrelation(correlations, columns) {\n let sum = 0;\n let count = 0;\n\n for (let i = 0; i < columns.length; i++) {\n for (let j = i + 1; j < columns.length; j++) {\n const correlation = correlations[columns[i]][columns[j]];\n if (!isNaN(correlation)) {\n sum += Math.abs(correlation);\n count++;\n }\n }\n }\n\n return count > 0 ? sum / count : 0;\n }\n\n countDuplicateRows(dataset) {\n const seen = new Set();\n let duplicates = 0;\n\n dataset.data.forEach(row => {\n const rowString = JSON.stringify(row);\n if (seen.has(rowString)) {\n duplicates++;\n } else {\n seen.add(rowString);\n }\n });\n\n return duplicates;\n }\n\n getDataTypes(dataset) {\n const types = {};\n\n dataset.headers.forEach(header => {\n const column = dataset.data.map(row => row[header]);\n const validValues = column.filter(val => val !== null && val !== undefined);\n\n if (validValues.length === 0) {\n types[header] = 'empty';\n return;\n }\n\n const typeSet = new Set(validValues.map(val => typeof val));\n if (typeSet.size === 1) {\n types[header] = Array.from(typeSet)[0];\n } else {\n types[header] = 'mixed';\n }\n });\n\n return types;\n }\n\n estimateMemoryFootprint(dataset) {\n let totalBytes = 0;\n\n dataset.data.forEach(row => {\n dataset.headers.forEach(header => {\n const value = row[header];\n if (typeof value === 'string') {\n totalBytes += value.length * 2;\n } else if (typeof value === 'number') {\n totalBytes += 8;\n } else if (typeof value === 'boolean') {\n totalBytes += 1;\n } else {\n totalBytes += 8;\n }\n });\n });\n\n const sizeInKB = totalBytes / 1024;\n const sizeInMB = sizeInKB / 1024;\n\n if (sizeInMB >= 1) {\n return `${sizeInMB.toFixed(2)} MB`;\n } else if (sizeInKB >= 1) {\n return `${sizeInKB.toFixed(2)} KB`;\n } else {\n return `${totalBytes} bytes`;\n }\n }\n\n chiSquareCDF(x, df) {\n if (x <= 0) return 0;\n return this.incompleteGamma(df / 2, x / 2) / this.gamma(df / 2);\n }\n\n incompleteGamma(a, x) {\n if (x <= 0) return 0;\n\n let sum = 1;\n let term = 1;\n\n for (let n = 1; n < 100; n++) {\n term *= x / (a + n - 1);\n sum += term;\n if (Math.abs(term) < 1e-12) break;\n }\n\n return Math.pow(x, a) * Math.exp(-x) * sum;\n }\n\n gamma(x) {\n const coefficients = [\n 0.99999999999980993, 676.5203681218851, -1259.1392167224028,\n 771.32342877765313, -176.61502916214059, 12.507343278686905,\n -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7\n ];\n\n if (x < 0.5) {\n return Math.PI / (Math.sin(Math.PI * x) * this.gamma(1 - x));\n }\n\n x -= 1;\n let result = coefficients[0];\n for (let i = 1; i < coefficients.length; i++) {\n result += coefficients[i] / (x + i);\n }\n\n const t = x + coefficients.length - 1.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, x + 0.5) * Math.exp(-t) * result;\n }\n\n generateTextReport(summaryData) {\n let report = '';\n\n report += `STATISTICAL SUMMARY REPORT\\n`;\n report += `Generated: ${new Date(summaryData.generatedAt).toLocaleString()}\\n`;\n report += `${'='.repeat(50)}\\n\\n`;\n\n report += `BASIC INFORMATION\\n`;\n report += `-`.repeat(20) + '\\n';\n report += `Rows: ${summaryData.basicInfo.totalRows.toLocaleString()}\\n`;\n report += `Columns: ${summaryData.basicInfo.totalColumns}\\n`;\n report += `Memory: ${summaryData.basicInfo.memoryFootprint}\\n\\n`;\n\n report += `DATA QUALITY\\n`;\n report += `-`.repeat(20) + '\\n';\n report += `Overall Score: ${summaryData.dataQuality.overallScore.toFixed(1)}/100\\n`;\n report += `Completeness: ${summaryData.dataQuality.completenessScore.toFixed(1)}%\\n`;\n report += `Consistency: ${summaryData.dataQuality.consistencyScore.toFixed(1)}%\\n`;\n report += `${summaryData.dataQuality.recommendation}\\n\\n`;\n\n if (summaryData.keyInsights.length > 0) {\n report += `KEY INSIGHTS\\n`;\n report += `-`.repeat(20) + '\\n';\n summaryData.keyInsights.slice(0, 5).forEach((insight, index) => {\n report += `${index + 1}. ${insight.title}\\n`;\n report += ` ${insight.description}\\n`;\n if (insight.recommendation) {\n report += ` → ${insight.recommendation}\\n`;\n }\n report += '\\n';\n });\n }\n\n if (summaryData.relationships.strongRelationships.length > 0) {\n report += `STRONG RELATIONSHIPS\\n`;\n report += `-`.repeat(20) + '\\n';\n summaryData.relationships.strongRelationships.slice(0, 3).forEach(rel => {\n report += `${rel.variable1} ↔ ${rel.variable2}: ${rel.correlation.toFixed(3)} (${rel.strength})\\n`;\n });\n report += '\\n';\n }\n\n if (summaryData.recommendations.length > 0) {\n report += `RECOMMENDATIONS\\n`;\n report += `-`.repeat(20) + '\\n';\n summaryData.recommendations.forEach((rec, index) => {\n report += `${index + 1}. [${rec.priority.toUpperCase()}] ${rec.title}\\n`;\n report += ` ${rec.description}\\n`;\n rec.steps.forEach(step => {\n report += ` • ${step}\\n`;\n });\n report += '\\n';\n });\n }\n\n return report;\n }\n\n exportSummary(summaryData, format = 'json') {\n switch (format) {\n case 'json':\n return JSON.stringify(summaryData, null, 2);\n case 'text':\n return this.generateTextReport(summaryData);\n case 'csv':\n return this.generateCSVReport(summaryData);\n default:\n throw new Error(`Unsupported export format: ${format}`);\n }\n }\n\n generateCSVReport(summaryData) {\n let csv = 'Metric,Value\\n';\n\n csv += `Total Rows,${summaryData.basicInfo.totalRows}\\n`;\n csv += `Total Columns,${summaryData.basicInfo.totalColumns}\\n`;\n csv += `Overall Quality Score,${summaryData.dataQuality.overallScore.toFixed(1)}\\n`;\n csv += `Completeness Score,${summaryData.dataQuality.completenessScore.toFixed(1)}\\n`;\n csv += `Consistency Score,${summaryData.dataQuality.consistencyScore.toFixed(1)}\\n`;\n csv += `Strong Relationships,${summaryData.relationships.strongRelationships.length}\\n`;\n csv += `Key Insights,${summaryData.keyInsights.length}\\n`;\n\n if (summaryData.relationships.strongRelationships.length > 0) {\n csv += '\\nVariable 1,Variable 2,Correlation,Strength\\n';\n summaryData.relationships.strongRelationships.forEach(rel => {\n csv += `${rel.variable1},${rel.variable2},${rel.correlation.toFixed(4)},${rel.strength}\\n`;\n });\n }\n\n return csv;\n }\n}\n\nexport default ReportGenerator;","class PatternDetector {\n analyze(dataset) {\n if (!dataset || !dataset.data || !dataset.headers) {\n throw new Error(\"Invalid dataset format\");\n }\n\n const patterns = {\n trends: this.detectTrends(dataset),\n seasonality: this.detectSeasonality(dataset),\n outliers: this.detectOutliers(dataset),\n correlations: this.detectCorrelationPatterns(dataset),\n distributions: this.detectDistributionPatterns(dataset),\n clustering: this.detectSimpleClusters(dataset),\n temporal: this.detectTemporalPatterns(dataset),\n };\n\n return {\n timestamp: new Date().toISOString(),\n datasetSize: dataset.length,\n patterns: patterns,\n summary: this.generateSummary(patterns),\n insights: this.generateInsights(patterns),\n };\n }\n\n detectTrends(dataset) {\n const numericColumns = this.getNumericColumns(dataset);\n const trends = [];\n\n numericColumns.forEach((column) => {\n const values = this.getColumnValues(dataset, column);\n if (values.length < 5) return;\n\n const trendData = values.map((value, index) => ({ x: index, y: value }));\n const trendResult = this.calculateTrend(trendData);\n\n if (Math.abs(trendResult.slope) > 0.01 && trendResult.rSquared > 0.3) {\n trends.push({\n column: column,\n direction: trendResult.slope > 0 ? \"increasing\" : \"decreasing\",\n slope: trendResult.slope,\n rSquared: trendResult.rSquared,\n strength: this.classifyTrendStrength(trendResult.rSquared),\n significance: trendResult.pValue < 0.05,\n });\n }\n });\n\n return trends;\n }\n\n detectSeasonality(dataset) {\n const dateColumns = this.getDateColumns(dataset);\n const numericColumns = this.getNumericColumns(dataset);\n const seasonality = [];\n\n if (dateColumns.length === 0) return seasonality;\n\n dateColumns.forEach((dateCol) => {\n numericColumns.forEach((numCol) => {\n const timeSeries = this.createTimeSeries(dataset, dateCol, numCol);\n if (timeSeries.length < 12) return;\n\n const seasonalPattern = this.analyzeSeasonalPattern(timeSeries);\n if (seasonalPattern.strength > 0.3) {\n seasonality.push({\n dateColumn: dateCol,\n valueColumn: numCol,\n strength: seasonalPattern.strength,\n period: seasonalPattern.period,\n peaks: seasonalPattern.peaks,\n pattern: seasonalPattern.type,\n });\n }\n });\n });\n\n return seasonality;\n }\n\n detectOutliers(dataset) {\n const numericColumns = this.getNumericColumns(dataset);\n const outliers = [];\n\n numericColumns.forEach((column) => {\n const values = this.getColumnValues(dataset, column);\n if (values.length < 10) return;\n\n const outlierResults = this.findOutliers(values);\n if (outlierResults.count > 0) {\n outliers.push({\n column: column,\n count: outlierResults.count,\n percentage: outlierResults.percentage,\n method: \"IQR\",\n outlierValues: outlierResults.values.slice(0, 5),\n severity: this.classifyOutlierSeverity(outlierResults.percentage),\n });\n }\n });\n\n return outliers;\n }\n\n detectCorrelationPatterns(dataset) {\n const numericColumns = this.getNumericColumns(dataset);\n if (numericColumns.length < 2)\n return { strongCorrelations: [], clusters: [] };\n\n const correlationMatrix = this.buildCorrelationMatrix(\n dataset,\n numericColumns\n );\n const strongCorrelations = this.findStrongCorrelations(correlationMatrix);\n const clusters = this.findCorrelationClusters(correlationMatrix);\n\n return {\n strongCorrelations: strongCorrelations,\n clusters: clusters,\n avgCorrelation: this.calculateAverageCorrelation(correlationMatrix),\n };\n }\n\n detectDistributionPatterns(dataset) {\n const numericColumns = this.getNumericColumns(dataset);\n const distributions = [];\n\n numericColumns.forEach((column) => {\n const values = this.getColumnValues(dataset, column);\n if (values.length < 20) return;\n\n const distInfo = this.analyzeDistribution(values);\n distributions.push({\n column: column,\n type: distInfo.type,\n skewness: distInfo.skewness,\n kurtosis: distInfo.kurtosis,\n isNormal:\n Math.abs(distInfo.skewness) < 1 && Math.abs(distInfo.kurtosis) < 1,\n transformation: this.suggestTransformation(distInfo),\n });\n });\n\n return distributions;\n }\n\n detectSimpleClusters(dataset) {\n const numericColumns = this.getNumericColumns(dataset);\n if (numericColumns.length < 2) return [];\n\n const clusters = [];\n\n for (let i = 0; i < numericColumns.length; i++) {\n for (let j = i + 1; j < numericColumns.length; j++) {\n const col1 = numericColumns[i];\n const col2 = numericColumns[j];\n const data = this.getTwoColumnData(dataset, col1, col2);\n\n if (data.length < 10) continue;\n\n const clusterResult = this.performSimpleKMeans(data, 3);\n if (clusterResult.quality > 0.5) {\n clusters.push({\n variables: [col1, col2],\n clusters: clusterResult.centers,\n quality: clusterResult.quality,\n interpretation: this.interpretClusterQuality(clusterResult.quality),\n });\n }\n }\n }\n\n return clusters;\n }\n\n detectTemporalPatterns(dataset) {\n const dateColumns = this.getDateColumns(dataset);\n const patterns = [];\n\n dateColumns.forEach((dateCol) => {\n const dates = this.getColumnValues(dataset, dateCol)\n .map((val) => new Date(val))\n .filter((date) => !isNaN(date.getTime()))\n .sort((a, b) => a - b);\n\n if (dates.length < 5) return;\n\n const intervals = this.calculateIntervals(dates);\n const frequency = this.determineFrequency(intervals);\n const gaps = this.findGaps(dates, frequency);\n\n patterns.push({\n column: dateCol,\n frequency: frequency,\n totalSpan: dates[dates.length - 1] - dates[0],\n avgInterval:\n intervals.reduce((sum, int) => sum + int, 0) / intervals.length,\n gaps: gaps.length,\n pattern: gaps.length > dates.length * 0.1 ? \"irregular\" : \"regular\",\n });\n });\n\n return patterns;\n }\n\n getNumericColumns(dataset) {\n return dataset.headers.filter((header) => {\n const values = dataset.data.map((row) => row[header]);\n const numericCount = values.filter(\n (val) => typeof val === \"number\" && !isNaN(val) && isFinite(val)\n ).length;\n return numericCount > values.length * 0.7;\n });\n }\n\n getDateColumns(dataset) {\n return dataset.headers.filter((header) => {\n const values = dataset.data.map((row) => row[header]);\n const dateCount = values.filter((val) => {\n if (typeof val === \"string\") {\n const date = new Date(val);\n return !isNaN(date.getTime());\n }\n return false;\n }).length;\n return dateCount > values.length * 0.7;\n });\n }\n\n getColumnValues(dataset, column) {\n return dataset.data\n .map((row) => row[column])\n .filter((val) => typeof val === \"number\" && !isNaN(val) && isFinite(val));\n }\n\n getTwoColumnData(dataset, col1, col2) {\n return dataset.data\n .map((row) => ({ x: row[col1], y: row[col2] }))\n .filter(\n (point) =>\n typeof point.x === \"number\" &&\n !isNaN(point.x) &&\n isFinite(point.x) &&\n typeof point.y === \"number\" &&\n !isNaN(point.y) &&\n isFinite(point.y)\n );\n }\n\n createTimeSeries(dataset, dateCol, valueCol) {\n return dataset.data\n .map((row) => ({\n date: new Date(row[dateCol]),\n value: row[valueCol],\n }))\n .filter(\n (point) =>\n !isNaN(point.date.getTime()) &&\n typeof point.value === \"number\" &&\n !isNaN(point.value) &&\n isFinite(point.value)\n )\n .sort((a, b) => a.date - b.date);\n }\n\n calculateTrend(data) {\n const n = data.length;\n const sumX = data.reduce((sum, point) => sum + point.x, 0);\n const sumY = data.reduce((sum, point) => sum + point.y, 0);\n const sumXY = data.reduce((sum, point) => sum + point.x * point.y, 0);\n const sumXX = data.reduce((sum, point) => sum + point.x * point.x, 0);\n\n const slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);\n const intercept = (sumY - slope * sumX) / n;\n\n const predicted = data.map((point) => intercept + slope * point.x);\n const ssRes = data.reduce(\n (sum, point, i) => sum + Math.pow(point.y - predicted[i], 2),\n 0\n );\n const ssTot = data.reduce(\n (sum, point) => sum + Math.pow(point.y - sumY / n, 2),\n 0\n );\n const rSquared = 1 - ssRes / ssTot;\n\n const stderr = Math.sqrt(ssRes / (n - 2));\n const tStat = slope / stderr;\n const pValue = 2 * (1 - this.tCDF(Math.abs(tStat), n - 2));\n\n return { slope, intercept, rSquared, pValue };\n }\n\n analyzeSeasonalPattern(timeSeries) {\n const values = timeSeries.map((point) => point.value);\n const n = values.length;\n\n if (n < 12) return { strength: 0 };\n\n let bestPeriod = 12;\n let maxCorrelation = 0;\n\n for (let period = 4; period <= Math.min(n / 3, 24); period++) {\n const correlation = this.calculateAutoCorrelation(values, period);\n if (correlation > maxCorrelation) {\n maxCorrelation = correlation;\n bestPeriod = period;\n }\n }\n\n const peaks = this.findPeaks(values);\n const valleys = this.findValleys(values);\n\n return {\n strength: maxCorrelation,\n period: bestPeriod,\n peaks: peaks.length,\n valleys: valleys.length,\n type: this.classifySeasonalType(\n maxCorrelation,\n peaks.length,\n valleys.length\n ),\n };\n }\n\n findOutliers(values) {\n const sorted = [...values].sort((a, b) => a - b);\n const q1 = this.calculateQuantile(sorted, 0.25);\n const q3 = this.calculateQuantile(sorted, 0.75);\n const iqr = q3 - q1;\n\n const lowerBound = q1 - 1.5 * iqr;\n const upperBound = q3 + 1.5 * iqr;\n\n const outlierValues = values.filter(\n (val) => val < lowerBound || val > upperBound\n );\n\n return {\n count: outlierValues.length,\n percentage: (outlierValues.length / values.length) * 100,\n values: outlierValues,\n bounds: { lower: lowerBound, upper: upperBound },\n };\n }\n\n buildCorrelationMatrix(dataset, columns) {\n const matrix = {};\n\n columns.forEach((col1) => {\n matrix[col1] = {};\n columns.forEach((col2) => {\n if (col1 === col2) {\n matrix[col1][col2] = 1;\n } else {\n const values1 = this.getColumnValues(dataset, col1);\n const values2 = this.getColumnValues(dataset, col2);\n matrix[col1][col2] = this.calculateCorrelation(values1, values2);\n }\n });\n });\n\n return matrix;\n }\n\n findStrongCorrelations(matrix) {\n const correlations = [];\n const columns = Object.keys(matrix);\n\n for (let i = 0; i < columns.length; i++) {\n for (let j = i + 1; j < columns.length; j++) {\n const col1 = columns[i];\n const col2 = columns[j];\n const correlation = matrix[col1][col2];\n\n if (Math.abs(correlation) > 0.7) {\n correlations.push({\n variable1: col1,\n variable2: col2,\n correlation: correlation,\n strength: this.getCorrelationStrength(Math.abs(correlation)),\n direction: correlation > 0 ? \"positive\" : \"negative\",\n });\n }\n }\n }\n\n return correlations.sort(\n (a, b) => Math.abs(b.correlation) - Math.abs(a.correlation)\n );\n }\n\n findCorrelationClusters(matrix) {\n const columns = Object.keys(matrix);\n const clusters = [];\n const visited = new Set();\n\n columns.forEach((col) => {\n if (visited.has(col)) return;\n\n const cluster = [col];\n visited.add(col);\n\n columns.forEach((other) => {\n if (!visited.has(other) && Math.abs(matrix[col][other]) > 0.7) {\n cluster.push(other);\n visited.add(other);\n }\n });\n\n if (cluster.length > 1) {\n clusters.push(cluster);\n }\n });\n\n return clusters;\n }\n\n analyzeDistribution(values) {\n const mean = values.reduce((sum, val) => sum + val, 0) / values.length;\n const variance =\n values.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) /\n (values.length - 1);\n const stdDev = Math.sqrt(variance);\n\n const skewness = this.calculateSkewness(values, mean, stdDev);\n const kurtosis = this.calculateKurtosis(values, mean, stdDev);\n\n return {\n mean,\n stdDev,\n skewness,\n kurtosis,\n type: this.classifyDistribution(skewness, kurtosis),\n };\n }\n\n performSimpleKMeans(data, k) {\n let centers = this.initializeCenters(data, k);\n let assignments = new Array(data.length);\n let changed = true;\n let iterations = 0;\n\n while (changed && iterations < 50) {\n changed = false;\n\n for (let i = 0; i < data.length; i++) {\n const distances = centers.map((center) =>\n Math.sqrt(\n Math.pow(data[i].x - center.x, 2) +\n Math.pow(data[i].y - center.y, 2)\n )\n );\n const newAssignment = distances.indexOf(Math.min(...distances));\n\n if (assignments[i] !== newAssignment) {\n changed = true;\n assignments[i] = newAssignment;\n }\n }\n\n for (let j = 0; j < k; j++) {\n const clusterPoints = data.filter((_, i) => assignments[i] === j);\n if (clusterPoints.length > 0) {\n centers[j] = {\n x:\n clusterPoints.reduce((sum, p) => sum + p.x, 0) /\n clusterPoints.length,\n y:\n clusterPoints.reduce((sum, p) => sum + p.y, 0) /\n clusterPoints.length,\n };\n }\n }\n\n iterations++;\n }\n\n const quality = this.calculateClusterQuality(data, assignments, centers);\n\n return { centers, assignments, quality };\n }\n\n calculateIntervals(dates) {\n const intervals = [];\n for (let i = 1; i < dates.length; i++) {\n intervals.push(dates[i] - dates[i - 1]);\n }\n return intervals;\n }\n\n determineFrequency(intervals) {\n if (intervals.length === 0) return \"unknown\";\n\n const avgInterval =\n intervals.reduce((sum, int) => sum + int, 0) / intervals.length;\n const dayInMs = 24 * 60 * 60 * 1000;\n\n if (avgInterval < dayInMs) return \"sub_daily\";\n if (avgInterval < dayInMs * 2) return \"daily\";\n if (avgInterval < dayInMs * 8) return \"weekly\";\n if (avgInterval < dayInMs * 35) return \"monthly\";\n return \"yearly\";\n }\n\n findGaps(dates, expectedFrequency) {\n const expectedInterval = this.getExpectedInterval(expectedFrequency);\n const gaps = [];\n\n for (let i = 1; i < dates.length; i++) {\n const actualInterval = dates[i] - dates[i - 1];\n if (actualInterval > expectedInterval * 2) {\n gaps.push({\n start: dates[i - 1],\n end: dates[i],\n duration: actualInterval,\n });\n }\n }\n\n return gaps;\n }\n\n classifyTrendStrength(rSquared) {\n if (rSquared > 0.8) return \"very_strong\";\n if (rSquared > 0.6) return \"strong\";\n if (rSquared > 0.4) return \"moderate\";\n if (rSquared > 0.2) return \"weak\";\n return \"very_weak\";\n }\n\n classifyOutlierSeverity(percentage) {\n if (percentage > 10) return \"severe\";\n if (percentage > 5) return \"moderate\";\n if (percentage > 1) return \"mild\";\n return \"minimal\";\n }\n\n classifySeasonalType(strength, peaks, valleys) {\n if (strength > 0.7) return \"strong_seasonal\";\n if (strength > 0.5) return \"moderate_seasonal\";\n if (strength > 0.3) return \"weak_seasonal\";\n return \"no_seasonality\";\n }\n\n classifyDistribution(skewness, kurtosis) {\n if (Math.abs(skewness) < 0.5 && Math.abs(kurtosis) < 0.5) return \"normal\";\n if (skewness > 1) return \"right_skewed\";\n if (skewness < -1) return \"left_skewed\";\n if (kurtosis > 1) return \"heavy_tailed\";\n return \"irregular\";\n }\n\n suggestTransformation(distInfo) {\n if (distInfo.type === \"normal\") return \"none\";\n if (distInfo.skewness > 1) return \"log_transform\";\n if (distInfo.skewness < -1) return \"square_transform\";\n return \"standardization\";\n }\n\n getCorrelationStrength(r) {\n if (r >= 0.9) return \"very_strong\";\n if (r >= 0.7) return \"strong\";\n if (r >= 0.5) return \"moderate\";\n if (r >= 0.3) return \"weak\";\n return \"very_weak\";\n }\n\n interpretClusterQuality(quality) {\n if (quality > 0.7) return \"excellent\";\n if (quality > 0.5) return \"good\";\n if (quality > 0.3) return \"fair\";\n return \"poor\";\n }\n\n generateSummary(patterns) {\n const summary = {};\n\n Object.keys(patterns).forEach((key) => {\n if (Array.isArray(patterns[key])) {\n summary[key] = patterns[key].length;\n } else if (typeof patterns[key] === \"object\" && patterns[key] !== null) {\n summary[key] = Object.keys(patterns[key]).length;\n } else {\n summary[key] = 0;\n }\n });\n\n summary.totalPatterns = Object.values(summary).reduce(\n (sum, count) => sum + count,\n 0\n );\n\n return summary;\n }\n\n generateInsights(patterns) {\n const insights = [];\n\n if (patterns.trends.length > 0) {\n const strongTrends = patterns.trends.filter(\n (t) => t.strength === \"strong\" || t.strength === \"very_strong\"\n );\n if (strongTrends.length > 0) {\n insights.push({\n type: \"trend\",\n importance: \"high\",\n message: `Found ${strongTrends.length} strong trend(s) in your data`,\n details: strongTrends.map((t) => `${t.column}: ${t.direction} trend`),\n });\n }\n }\n\n if (patterns.correlations.strongCorrelations.length > 0) {\n insights.push({\n type: \"correlation\",\n importance: \"medium\",\n message: `Discovered ${patterns.correlations.strongCorrelations.length} strong correlation(s)`,\n details: patterns.correlations.strongCorrelations\n .slice(0, 3)\n .map(\n (c) =>\n `${c.variable1} ↔ ${c.variable2}: ${c.strength} ${c.direction}`\n ),\n });\n }\n\n if (patterns.outliers.length > 0) {\n const severeOutliers = patterns.outliers.filter(\n (o) => o.severity === \"severe\"\n );\n if (severeOutliers.length > 0) {\n insights.push({\n type: \"outliers\",\n importance: \"high\",\n message: `Detected severe outliers in ${severeOutliers.length} column(s)`,\n details: severeOutliers.map(\n (o) =>\n `${o.column}: ${o.count} outliers (${o.percentage.toFixed(1)}%)`\n ),\n });\n }\n }\n\n if (patterns.seasonality.length > 0) {\n insights.push({\n type: \"seasonality\",\n importance: \"medium\",\n message: `Found seasonal patterns in ${patterns.seasonality.length} time series`,\n details: patterns.seasonality.map(\n (s) => `${s.valueColumn}: ${s.pattern} (period: ${s.period})`\n ),\n });\n }\n\n if (patterns.clustering.length > 0) {\n const goodClusters = patterns.clustering.filter((c) => c.quality > 0.5);\n if (goodClusters.length > 0) {\n insights.push({\n type: \"clustering\",\n importance: \"medium\",\n message: `Identified ${goodClusters.length} natural cluster(s) in the data`,\n details: goodClusters.map(\n (c) => `${c.variables.join(\" vs \")}: ${c.interpretation} clusters`\n ),\n });\n }\n }\n\n return insights.sort((a, b) => {\n const importance = { high: 3, medium: 2, low: 1 };\n return importance[b.importance] - importance[a.importance];\n });\n }\n\n calculateAutoCorrelation(values, lag) {\n if (lag >= values.length) return 0;\n\n const n = values.length - lag;\n const mean1 = values.slice(0, n).reduce((sum, val) => sum + val, 0) / n;\n const mean2 = values.slice(lag).reduce((sum, val) => sum + val, 0) / n;\n\n let numerator = 0;\n let sum1 = 0;\n let sum2 = 0;\n\n for (let i = 0; i < n; i++) {\n const diff1 = values[i] - mean1;\n const diff2 = values[i + lag] - mean2;\n numerator += diff1 * diff2;\n sum1 += diff1 * diff1;\n sum2 += diff2 * diff2;\n }\n\n const denominator = Math.sqrt(sum1 * sum2);\n return denominator === 0 ? 0 : numerator / denominator;\n }\n\n findPeaks(values) {\n const peaks = [];\n for (let i = 1; i < values.length - 1; i++) {\n if (values[i] > values[i - 1] && values[i] > values[i + 1]) {\n peaks.push(i);\n }\n }\n return peaks;\n }\n\n findValleys(values) {\n const valleys = [];\n for (let i = 1; i < values.length - 1; i++) {\n if (values[i] < values[i - 1] && values[i] < values[i + 1]) {\n valleys.push(i);\n }\n }\n return valleys;\n }\n\n calculateQuantile(sortedArray, q) {\n const index = (sortedArray.length - 1) * q;\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n const weight = index % 1;\n\n if (lower === upper) {\n return sortedArray[lower];\n }\n\n return sortedArray[lower] * (1 - weight) + sortedArray[upper] * weight;\n }\n\n calculateCorrelation(x, y) {\n if (x.length !== y.length || x.length < 3) return 0;\n\n const n = x.length;\n const meanX = x.reduce((sum, val) => sum + val, 0) / n;\n const meanY = y.reduce((sum, val) => sum + val, 0) / n;\n\n let numerator = 0;\n let sumXSquared = 0;\n let sumYSquared = 0;\n\n for (let i = 0; i < n; i++) {\n const xDiff = x[i] - meanX;\n const yDiff = y[i] - meanY;\n numerator += xDiff * yDiff;\n sumXSquared += xDiff * xDiff;\n sumYSquared += yDiff * yDiff;\n }\n\n const denominator = Math.sqrt(sumXSquared * sumYSquared);\n return denominator === 0 ? 0 : numerator / denominator;\n }\n\n calculateSkewness(values, mean, stdDev) {\n if (stdDev === 0) return 0;\n\n const n = values.length;\n const skewSum = values.reduce((sum, val) => {\n return sum + Math.pow((val - mean) / stdDev, 3);\n }, 0);\n\n return (n / ((n - 1) * (n - 2))) * skewSum;\n }\n\n calculateKurtosis(values, mean, stdDev) {\n if (stdDev === 0) return 0;\n\n const n = values.length;\n const kurtSum = values.reduce((sum, val) => {\n return sum + Math.pow((val - mean) / stdDev, 4);\n }, 0);\n\n return (\n ((n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) * kurtSum -\n (3 * Math.pow(n - 1, 2)) / ((n - 2) * (n - 3))\n );\n }\n\n initializeCenters(data, k) {\n const centers = [];\n const minX = Math.min(...data.map((p) => p.x));\n const maxX = Math.max(...data.map((p) => p.x));\n const minY = Math.min(...data.map((p) => p.y));\n const maxY = Math.max(...data.map((p) => p.y));\n\n for (let i = 0; i < k; i++) {\n centers.push({\n x: minX + Math.random() * (maxX - minX),\n y: minY + Math.random() * (maxY - minY),\n });\n }\n\n return centers;\n }\n\n calculateClusterQuality(data, assignments, centers) {\n let totalWithinSS = 0;\n let totalBetweenSS = 0;\n\n const overallCentroid = {\n x: data.reduce((sum, p) => sum + p.x, 0) / data.length,\n y: data.reduce((sum, p) => sum + p.y, 0) / data.length,\n };\n\n centers.forEach((center, clusterIndex) => {\n const clusterPoints = data.filter(\n (_, i) => assignments[i] === clusterIndex\n );\n\n clusterPoints.forEach((point) => {\n totalWithinSS +=\n Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2);\n });\n\n totalBetweenSS +=\n clusterPoints.length *\n (Math.pow(center.x - overallCentroid.x, 2) +\n Math.pow(center.y - overallCentroid.y, 2));\n });\n\n const totalSS = totalWithinSS + totalBetweenSS;\n return totalSS > 0 ? totalBetweenSS / totalSS : 0;\n }\n\n calculateAverageCorrelation(matrix) {\n const columns = Object.keys(matrix);\n let sum = 0;\n let count = 0;\n\n for (let i = 0; i < columns.length; i++) {\n for (let j = i + 1; j < columns.length; j++) {\n sum += Math.abs(matrix[columns[i]][columns[j]]);\n count++;\n }\n }\n }\n calculateAverageCorrelation(matrix) {\n const columns = Object.keys(matrix);\n let sum = 0;\n let count = 0;\n\n for (let i = 0; i < columns.length; i++) {\n for (let j = i + 1; j < columns.length; j++) {\n sum += Math.abs(matrix[columns[i]][columns[j]]);\n count++;\n }\n }\n\n return count > 0 ? sum / count : 0;\n }\n\n getExpectedInterval(frequency) {\n const dayInMs = 24 * 60 * 60 * 1000;\n\n switch (frequency) {\n case \"daily\":\n return dayInMs;\n case \"weekly\":\n return dayInMs * 7;\n case \"monthly\":\n return dayInMs * 30;\n case \"yearly\":\n return dayInMs * 365;\n default:\n return dayInMs;\n }\n }\n\n tCDF(t, df) {\n if (df <= 0) return 0.5;\n\n const x = df / (t * t + df);\n return 1 - 0.5 * this.incompleteBeta(df / 2, 0.5, x);\n }\n\n incompleteBeta(a, b, x) {\n if (x <= 0) return 0;\n if (x >= 1) return 1;\n\n let result = 0;\n let term = 1;\n\n for (let n = 0; n < 100; n++) {\n if (n > 0) {\n term *= (x * (a + n - 1)) / n;\n }\n result += term / (a + n);\n if (Math.abs(term) < 1e-10) break;\n }\n\n return result * Math.pow(x, a) * Math.pow(1 - x, b);\n }\n}\n\nexport default PatternDetector;\n","class Interpreter {\n interpret(testResult) {\n if (!testResult || typeof testResult !== 'object') {\n throw new Error('Invalid test result object');\n }\n\n const testType = this.identifyTestType(testResult);\n\n return {\n testType: testType,\n summary: this.generateSummary(testResult, testType),\n conclusion: this.generateConclusion(testResult, testType),\n significance: this.interpretSignificance(testResult),\n effectSize: this.interpretEffectSize(testResult, testType),\n confidence: this.assessConfidence(testResult),\n assumptions: this.checkAssumptions(testType),\n recommendations: this.generateRecommendations(testResult, testType),\n plainLanguage: this.generatePlainLanguageSummary(testResult, testType)\n };\n }\n\n identifyTestType(testResult) {\n if (testResult.type) return testResult.type;\n\n if (testResult.correlation !== undefined) return 'correlation';\n if (testResult.rSquared !== undefined) return 'regression';\n if (testResult.fStatistic !== undefined) return 'anova';\n if (testResult.tStatistic !== undefined || testResult.statistic !== undefined) {\n if (testResult.degreesOfFreedom !== undefined) return 't-test';\n return 'z-test';\n }\n if (testResult.isNormal !== undefined) return 'normality-test';\n if (testResult.clusters !== undefined) return 'clustering';\n\n return 'general-test';\n }\n\n generateSummary(testResult, testType) {\n switch (testType) {\n case 'correlation':\n return this.summarizeCorrelation(testResult);\n case 'regression':\n return this.summarizeRegression(testResult);\n case 't-test':\n return this.summarizeTTest(testResult);\n case 'z-test':\n return this.summarizeZTest(testResult);\n case 'anova':\n return this.summarizeANOVA(testResult);\n case 'normality-test':\n return this.summarizeNormalityTest(testResult);\n default:\n return this.summarizeGeneral(testResult);\n }\n }\n\n summarizeCorrelation(testResult) {\n const r = testResult.correlation;\n const strength = this.getCorrelationStrength(Math.abs(r));\n const direction = r > 0 ? 'positive' : 'negative';\n const significance = testResult.pValue < 0.05 ? 'significant' : 'not significant';\n\n return `${strength} ${direction} correlation (r = ${r.toFixed(3)}) that is ${significance}`;\n }\n\n summarizeRegression(testResult) {\n const r2 = testResult.rSquared;\n const variance = (r2 * 100).toFixed(1);\n const significance = testResult.pValueModel < 0.05 ? 'significant' : 'not significant';\n\n return `${significance} regression model explaining ${variance}% of variance (R² = ${r2.toFixed(3)})`;\n }\n\n summarizeTTest(testResult) {\n const significance = testResult.pValue < 0.05 ? 'significant' : 'not significant';\n const t = testResult.statistic || testResult.tStatistic;\n\n return `${significance} difference between groups (t = ${t.toFixed(3)}, p = ${testResult.pValue.toFixed(4)})`;\n }\n\n summarizeZTest(testResult) {\n const significance = testResult.pValue < 0.05 ? 'significant' : 'not significant';\n const z = testResult.statistic || testResult.zStatistic;\n\n return `${significance} result compared to population (z = ${z.toFixed(3)}, p = ${testResult.pValue.toFixed(4)})`;\n }\n\n summarizeANOVA(testResult) {\n const significance = testResult.pValueModel < 0.05 ? 'significant' : 'not significant';\n const f = testResult.fStatistic;\n\n return `${significance} differences between groups (F = ${f.toFixed(3)}, p = ${testResult.pValueModel.toFixed(4)})`;\n }\n\n summarizeNormalityTest(testResult) {\n const conclusion = testResult.isNormal ? 'normally distributed' : 'not normally distributed';\n const testName = testResult.test || 'normality test';\n\n return `Data appears ${conclusion} (${testName}, p = ${testResult.pValue?.toFixed(4) || 'N/A'})`;\n }\n\n summarizeGeneral(testResult) {\n if (testResult.pValue !== undefined) {\n const significance = testResult.pValue < 0.05 ? 'significant' : 'not significant';\n return `${significance} statistical result (p = ${testResult.pValue.toFixed(4)})`;\n }\n\n return 'Statistical analysis completed';\n }\n\n generateConclusion(testResult, testType) {\n const alpha = testResult.alpha || 0.05;\n const pValue = testResult.pValue || testResult.pValueModel;\n\n if (pValue === undefined) {\n return {\n decision: 'inconclusive',\n statement: 'Cannot determine statistical significance - p-value unavailable'\n };\n }\n\n const rejectNull = pValue < alpha;\n const confidenceLevel = ((1 - alpha) * 100).toFixed(0);\n\n let statement = '';\n if (rejectNull) {\n statement = `At the ${confidenceLevel}% confidence level, we reject the null hypothesis (p = ${pValue.toFixed(4)} < ${alpha}).`;\n } else {\n statement = `At the ${confidenceLevel}% confidence level, we fail to reject the null hypothesis (p = ${pValue.toFixed(4)} ≥ ${alpha}).`;\n }\n\n return {\n decision: rejectNull ? 'reject_null' : 'fail_to_reject_null',\n statement: statement,\n alpha: alpha,\n pValue: pValue,\n confidenceLevel: parseInt(confidenceLevel)\n };\n }\n\n interpretSignificance(testResult) {\n const pValue = testResult.pValue || testResult.pValueModel;\n\n if (pValue === undefined) {\n return {\n level: 'unknown',\n interpretation: 'P-value not available'\n };\n }\n\n let level, interpretation;\n\n if (pValue < 0.001) {\n level = 'very_strong';\n interpretation = 'Very strong evidence against null hypothesis';\n } else if (pValue < 0.01) {\n level = 'strong';\n interpretation = 'Strong evidence against null hypothesis';\n } else if (pValue < 0.05) {\n level = 'moderate';\n interpretation = 'Moderate evidence against null hypothesis';\n } else if (pValue < 0.1) {\n level = 'weak';\n interpretation = 'Weak evidence against null hypothesis';\n } else {\n level = 'none';\n interpretation = 'No evidence against null hypothesis';\n }\n\n return {\n level: level,\n pValue: pValue,\n interpretation: interpretation,\n isSignificant: pValue < 0.05\n };\n }\n\n interpretEffectSize(testResult, testType) {\n switch (testType) {\n case 'correlation':\n return this.interpretCorrelationEffect(testResult);\n case 'regression':\n return this.interpretRegressionEffect(testResult);\n case 't-test':\n return this.interpretTTestEffect(testResult);\n case 'anova':\n return this.interpretANOVAEffect(testResult);\n default:\n return { interpretation: 'Effect size not available for this test type' };\n }\n }\n\n interpretCorrelationEffect(testResult) {\n const r = Math.abs(testResult.correlation);\n const rSquared = r * r;\n\n return {\n value: r,\n magnitude: this.getCorrelationStrength(r),\n varianceExplained: (rSquared * 100).toFixed(1) + '%',\n interpretation: `${this.getCorrelationStrength(r).toLowerCase()} relationship`,\n cohen: this.getCohenCorrelation(r)\n };\n }\n\n interpretRegressionEffect(testResult) {\n const r2 = testResult.rSquared;\n\n return {\n value: r2,\n magnitude: this.getRSquaredMagnitude(r2),\n varianceExplained: (r2 * 100).toFixed(1) + '%',\n interpretation: `${this.getRSquaredMagnitude(r2).toLowerCase()} explanatory power`\n };\n }\n\n interpretTTestEffect(testResult) {\n if (testResult.sample1Mean !== undefined && testResult.sample2Mean !== undefined) {\n const diff = Math.abs(testResult.sample1Mean - testResult.sample2Mean);\n const pooledStd = testResult.standardError * Math.sqrt(2);\n const cohensD = diff / pooledStd;\n\n return {\n value: cohensD,\n magnitude: this.getCohenD(cohensD),\n interpretation: `${this.getCohenD(cohensD).toLowerCase()} effect size`,\n meanDifference: diff\n };\n }\n\n return { interpretation: 'Effect size cannot be calculated - insufficient data' };\n }\n\n interpretANOVAEffect(testResult) {\n if (testResult.sumOfSquaresBetween && testResult.sumOfSquaresWithin) {\n const etaSquared = testResult.sumOfSquaresBetween /\n (testResult.sumOfSquaresBetween + testResult.sumOfSquaresWithin);\n\n return {\n value: etaSquared,\n magnitude: this.getEtaSquared(etaSquared),\n varianceExplained: (etaSquared * 100).toFixed(1) + '%',\n interpretation: `${this.getEtaSquared(etaSquared).toLowerCase()} effect size`\n };\n }\n\n return { interpretation: 'Effect size cannot be calculated - insufficient data' };\n }\n\n assessConfidence(testResult) {\n const factors = [];\n let confidence = 'medium';\n\n if (testResult.sampleSize) {\n if (testResult.sampleSize > 100) {\n factors.push('Large sample size increases reliability');\n confidence = 'high';\n } else if (testResult.sampleSize < 30) {\n factors.push('Small sample size may limit reliability');\n confidence = 'low';\n }\n }\n\n const pValue = testResult.pValue || testResult.pValueModel;\n if (pValue !== undefined) {\n if (pValue < 0.001) {\n factors.push('Very low p-value strengthens confidence');\n confidence = confidence === 'low' ? 'medium' : 'high';\n } else if (pValue > 0.1) {\n factors.push('High p-value suggests weak evidence');\n confidence = 'low';\n }\n }\n\n if (testResult.confidenceInterval) {\n const ci = testResult.confidenceInterval;\n const width = Math.abs(ci.upper - ci.lower);\n const estimate = Math.abs((ci.upper + ci.lower) / 2);\n\n if (estimate > 0 && width / estimate < 0.2) {\n factors.push('Narrow confidence interval indicates precision');\n } else {\n factors.push('Wide confidence interval indicates uncertainty');\n confidence = confidence === 'high' ? 'medium' : 'low';\n }\n }\n\n return {\n level: confidence,\n factors: factors,\n recommendation: this.getConfidenceRecommendation(confidence)\n };\n }\n\n checkAssumptions(testType) {\n const assumptions = [];\n\n switch (testType) {\n case 't-test':\n assumptions.push(\n 'Normality: Data should be approximately normally distributed',\n 'Independence: Observations should be independent',\n 'Equal variances: Groups should have similar variances (for independent samples)'\n );\n break;\n case 'anova':\n assumptions.push(\n 'Normality: Residuals should be normally distributed',\n 'Homogeneity: Groups should have equal variances',\n 'Independence: Observations should be independent'\n );\n break;\n case 'correlation':\n assumptions.push(\n 'Linearity: Relationship should be linear',\n 'Normality: Variables should be approximately normal',\n 'Homoscedasticity: Constant variance across range'\n );\n break;\n case 'regression':\n assumptions.push(\n 'Linearity: Linear relationship between variables',\n 'Independence: Residuals should be independent',\n 'Homoscedasticity: Constant variance of residuals',\n 'Normality: Residuals should be normally distributed'\n );\n break;\n default:\n assumptions.push('Check test-specific assumptions in documentation');\n }\n\n return {\n testType: testType,\n assumptions: assumptions,\n importance: 'Violating assumptions may invalidate results'\n };\n }\n\n generateRecommendations(testResult, testType) {\n const recommendations = [];\n const pValue = testResult.pValue || testResult.pValueModel;\n\n if (pValue !== undefined) {\n if (pValue < 0.001) {\n recommendations.push('Very strong result - investigate practical significance and effect size');\n } else if (pValue >= 0.05 && pValue < 0.1) {\n recommendations.push('Marginally significant - consider collecting more data or using different approach');\n } else if (pValue >= 0.1) {\n recommendations.push('No significant effect found - examine data quality and consider alternative hypotheses');\n }\n }\n\n if (testType === 'correlation' && testResult.sampleSize && testResult.sampleSize < 30) {\n recommendations.push('Small sample size - correlation may not be reliable');\n }\n\n if (testType === 'regression' && testResult.rSquared < 0.3) {\n recommendations.push('Low R² - consider additional predictors or different model');\n }\n\n if (testResult.assumptions && testResult.assumptions.violated) {\n recommendations.push('Assumptions may be violated - consider alternative tests or data transformations');\n }\n\n recommendations.push('Replicate findings with independent data when possible');\n\n return recommendations;\n }\n\n generatePlainLanguageSummary(testResult, testType) {\n const pValue = testResult.pValue || testResult.pValueModel;\n const isSignificant = pValue && pValue < 0.05;\n\n let summary = '';\n\n if (isSignificant) {\n summary += '✓ SIGNIFICANT RESULT: ';\n } else {\n summary += '✗ NOT SIGNIFICANT: ';\n }\n\n switch (testType) {\n case 'correlation':\n const r = testResult.correlation;\n const strength = this.getCorrelationStrength(Math.abs(r));\n if (isSignificant) {\n summary += `Found a ${strength.toLowerCase()} ${r > 0 ? 'positive' : 'negative'} relationship between the variables.`;\n } else {\n summary += 'No meaningful relationship found between the variables.';\n }\n break;\n\n case 'regression':\n const variance = (testResult.rSquared * 100).toFixed(0);\n if (isSignificant) {\n summary += `The model successfully predicts the outcome, explaining ${variance}% of the variation.`;\n } else {\n summary += 'The model does not provide meaningful predictions.';\n }\n break;\n\n case 't-test':\n if (isSignificant) {\n summary += 'Found a meaningful difference between the groups.';\n } else {\n summary += 'No meaningful difference found between the groups.';\n }\n break;\n\n case 'anova':\n if (isSignificant) {\n summary += 'Found meaningful differences between at least some groups.';\n } else {\n summary += 'No meaningful differences found between groups.';\n }\n break;\n\n case 'normality-test':\n if (testResult.isNormal) {\n summary += 'Data follows a normal distribution - suitable for standard statistical tests.';\n } else {\n summary += 'Data does not follow a normal distribution - consider alternative tests.';\n }\n break;\n\n default:\n if (isSignificant) {\n summary += 'The statistical test shows a significant result.';\n } else {\n summary += 'The statistical test shows no significant result.';\n }\n }\n\n if (pValue !== undefined) {\n summary += ` (p-value: ${pValue.toFixed(4)})`;\n }\n\n return summary;\n }\n\n getCorrelationStrength(r) {\n if (r >= 0.9) return 'Very Strong';\n if (r >= 0.7) return 'Strong';\n if (r >= 0.5) return 'Moderate';\n if (r >= 0.3) return 'Weak';\n return 'Very Weak';\n }\n\n getCohenCorrelation(r) {\n if (r >= 0.5) return 'Large effect';\n if (r >= 0.3) return 'Medium effect';\n if (r >= 0.1) return 'Small effect';\n return 'Negligible effect';\n }\n\n getRSquaredMagnitude(r2) {\n if (r2 >= 0.7) return 'Strong';\n if (r2 >= 0.5) return 'Moderate';\n if (r2 >= 0.3) return 'Weak';\n return 'Very Weak';\n }\n\n getCohenD(d) {\n if (d >= 0.8) return 'Large';\n if (d >= 0.5) return 'Medium';\n if (d >= 0.2) return 'Small';\n return 'Negligible';\n }\n\n getEtaSquared(eta2) {\n if (eta2 >= 0.14) return 'Large';\n if (eta2 >= 0.06) return 'Medium';\n if (eta2 >= 0.01) return 'Small';\n return 'Negligible';\n }\n\n getConfidenceRecommendation(confidence) {\n switch (confidence) {\n case 'high':\n return 'Results appear robust and reliable';\n case 'medium':\n return 'Results are reasonably reliable but verify when possible';\n case 'low':\n return 'Interpret results with caution - consider additional validation';\n default:\n return 'Assess result reliability based on context';\n }\n }\n\n formatForReport(interpretation) {\n return {\n title: `${interpretation.testType.toUpperCase()} Results`,\n summary: interpretation.summary,\n conclusion: interpretation.conclusion.statement,\n significance: interpretation.significance.interpretation,\n effect: interpretation.effectSize.interpretation,\n confidence: interpretation.confidence.level,\n recommendations: interpretation.recommendations,\n plainLanguage: interpretation.plainLanguage\n };\n }\n\n explainStatistic(testResult, testType) {\n const explanations = {\n 'correlation': 'Correlation measures the linear relationship between two variables, ranging from -1 to +1.',\n 'regression': 'R² shows how much variance in the outcome is explained by the predictors.',\n 't-test': 'T-test compares means between groups or against a known value.',\n 'anova': 'ANOVA tests whether there are differences between multiple group means.',\n 'z-test': 'Z-test compares a sample mean to a population mean when population variance is known.',\n 'normality-test': 'Tests whether data follows a normal (bell-curve) distribution.'\n };\n\n return explanations[testType] || 'Statistical test to evaluate hypotheses about data.';\n }\n\n generateActionItems(interpretation) {\n const actions = [];\n const testType = interpretation.testType;\n const isSignificant = interpretation.significance.isSignificant;\n\n if (isSignificant) {\n actions.push('Examine practical significance of the finding');\n actions.push('Consider replicating with independent data');\n\n if (testType === 'correlation') {\n actions.push('Explore potential causal relationships');\n }\n if (testType === 'regression') {\n actions.push('Validate model with new data');\n }\n } else {\n actions.push('Review data collection methods');\n actions.push('Consider if sample size was adequate');\n actions.push('Explore alternative analytical approaches');\n }\n\n actions.push('Document methodology and assumptions');\n\n return actions;\n }\n}\n\nexport default Interpreter;","/**\n * AutoAnalyzer - Módulo de análise automática para StatLibrary\n * Identifica tipos de variáveis e gera insights automaticamente\n */\n\nclass AutoAnalyzer {\n constructor(statsInstance) {\n this.stats = statsInstance;\n this.insights = [];\n this.visualizations = [];\n }\n\n /**\n * Análise completa automática de um dataset\n * @param {Object} dataset - { headers: string[], data: Array<Record<string, any>> }\n * @param {Object} options\n * @returns {Object} Relatório completo\n */\n autoAnalyze(dataset, options = {}) {\n const config = {\n minCorrelationThreshold: 0.3,\n significanceLevel: 0.05,\n generateVisualizations: true,\n includeAdvancedAnalysis: true,\n ...options\n };\n\n console.log('🔍 Iniciando análise automática...');\n\n // 1) Validar\n const validation = this.stats.validateData(dataset);\n if (!validation.valid) {\n throw new Error(`Dados inválidos: ${validation.errors.join(', ')}`);\n }\n\n // 2) Classificar variáveis\n const variableTypes = this.classifyVariables(dataset);\n console.log(`📊 Identificadas ${variableTypes.quantitative.length} variáveis quantitativas e ${variableTypes.qualitative.length} qualitativas`);\n\n // 3) Análises\n const descriptiveAnalysis = this.performDescriptiveAnalysis(dataset, variableTypes);\n const correlationAnalysis = this.performCorrelationAnalysis(dataset, variableTypes.quantitative, config);\n const regressionAnalysis = this.performRegressionAnalysis(dataset, variableTypes.quantitative, correlationAnalysis, config);\n const distributionAnalysis = this.performDistributionAnalysis(dataset, variableTypes);\n const outlierAnalysis = this.performOutlierAnalysis(dataset, variableTypes.quantitative);\n const temporalAnalysis = this.performTemporalAnalysis(dataset, variableTypes);\n\n // 4) Insights + Visualizações\n const insights = this.generateAutoInsights(\n dataset,\n {\n variableTypes,\n descriptiveAnalysis,\n correlationAnalysis,\n regressionAnalysis,\n distributionAnalysis,\n outlierAnalysis,\n temporalAnalysis\n },\n config\n );\n\n const visualizationSuggestions = this.suggestVisualizations(\n variableTypes,\n correlationAnalysis,\n distributionAnalysis\n );\n\n console.log('✅ Análise concluída!');\n\n return {\n metadata: {\n analysisDate: new Date().toISOString(),\n datasetSize: dataset.length,\n columnsAnalyzed: dataset.headers.length,\n configuration: config\n },\n variableClassification: variableTypes,\n descriptiveStatistics: descriptiveAnalysis,\n correlationAnalysis,\n regressionAnalysis,\n distributionAnalysis,\n outlierAnalysis,\n temporalAnalysis,\n insights,\n visualizationSuggestions,\n summary: this.generateExecutiveSummary(insights)\n };\n }\n\n // =======================\n // Classificação de variáveis\n // =======================\n classifyVariables(dataset) {\n const quantitative = [];\n const qualitative = [];\n const datetime = [];\n const binary = [];\n const ordinal = [];\n\n dataset.headers.forEach(header => {\n const column = dataset.data.map(row => row[header]);\n const nonNullValues = column.filter(val => val != null);\n\n if (nonNullValues.length === 0) {\n qualitative.push({\n name: header,\n type: 'empty',\n description: 'Coluna vazia'\n });\n return;\n }\n\n const classification = this.classifyVariable(nonNullValues, header);\n\n switch (classification.type) {\n case 'quantitative':\n quantitative.push(classification);\n break;\n case 'datetime':\n datetime.push(classification);\n break;\n case 'binary':\n binary.push(classification);\n break;\n case 'ordinal':\n ordinal.push(classification);\n break;\n default:\n qualitative.push(classification);\n }\n });\n\n return { quantitative, qualitative, datetime, binary, ordinal };\n }\n\n classifyVariable(values, name) {\n const uniqueValues = [...new Set(values)];\n const numericValues = values.filter(v => typeof v === 'number' && !isNaN(v));\n const numericRatio = numericValues.length / values.length;\n\n // datetime?\n if (this.isDateTimeColumn(values)) {\n return {\n name,\n type: 'datetime',\n uniqueCount: uniqueValues.length,\n description: 'Variável temporal'\n };\n }\n\n // quantitativa\n if (numericRatio > 0.8) {\n const subtype = this.determineQuantitativeSubtype(numericValues);\n return {\n name,\n type: 'quantitative',\n subtype,\n uniqueCount: uniqueValues.length,\n description: `Variável quantitativa ${subtype}`,\n range: {\n min: Math.min(...numericValues),\n max: Math.max(...numericValues)\n }\n };\n }\n\n // binária\n if (uniqueValues.length === 2) {\n return {\n name,\n type: 'binary',\n categories: uniqueValues,\n description: 'Variável binária/dicotômica'\n };\n }\n\n // ordinal\n if (this.isOrdinalVariable(uniqueValues)) {\n return {\n name,\n type: 'ordinal',\n categories: uniqueValues,\n uniqueCount: uniqueValues.length,\n description: 'Variável ordinal'\n };\n }\n\n // qualitativa\n return {\n name,\n type: 'qualitative',\n subtype: uniqueValues.length > 10 ? 'nominal_many' : 'nominal',\n categories: uniqueValues.slice(0, 20),\n uniqueCount: uniqueValues.length,\n description: `Variável qualitativa nominal (${uniqueValues.length} categorias)`\n };\n }\n\n // =======================\n // Descritiva\n // =======================\nperformDescriptiveAnalysis(dataset, variableTypes) {\n const results = {};\n\n // Análise quantitativa\n variableTypes.quantitative.forEach(variable => {\n const values = dataset.data\n .map(row => row[variable.name])\n .filter(v => typeof v === 'number' && !isNaN(v));\n\n if (values.length > 0) {\n const n = values.length;\n const canSkew = n >= 3;\n const canKurt = n >= 4;\n\n results[variable.name] = {\n type: 'quantitative',\n count: n,\n mean: this.stats.mean(values),\n median: this.stats.median(values),\n standardDeviation: this.stats.standardDeviation(values),\n min: Math.min(...values),\n max: Math.max(...values),\n quartiles: this.stats.quartiles(values),\n skewness: canSkew ? this.stats.skewness(values) : null,\n kurtosis: canKurt ? this.stats.kurtosis(values) : null\n };\n }\n });\n\n // Análise qualitativa (inclui variáveis binárias)\n [...variableTypes.qualitative, ...variableTypes.binary].forEach(variable => {\n const values = dataset.data\n .map(row => row[variable.name])\n .filter(v => v != null);\n\n if (values.length > 0) {\n const frequencyTable = this.stats.frequencyTable(values);\n\n results[variable.name] = {\n type: 'qualitative',\n count: values.length,\n uniqueValues: variable.uniqueCount,\n frequencyTable: frequencyTable.slice(0, 10), // top 10 categorias\n mostFrequent: frequencyTable[0],\n concentration: this.calculateConcentration(frequencyTable)\n };\n }\n });\n\n return results;\n}\n\n\n // =======================\n // Correlação\n // =======================\n performCorrelationAnalysis(dataset, quantitativeVars, config) {\n if (quantitativeVars.length < 2) {\n return { message: 'Insuficientes variáveis quantitativas para análise de correlação' };\n }\n\n // Usa a StatLibrary -> correlationMatrix(dataset)\n const correlationMatrix = this.stats.correlationMatrix(dataset);\n const strongCorrelations = (correlationMatrix.strongCorrelations || [])\n .filter(corr => Math.abs(corr.correlation) >= config.minCorrelationThreshold);\n\n const insights = strongCorrelations.map(corr => {\n const strength = this.getCorrelationStrength(Math.abs(corr.correlation));\n const direction = corr.correlation > 0 ? 'positiva' : 'negativa';\n\n return {\n type: 'correlation',\n priority: Math.abs(corr.correlation) > 0.7 ? 'high' : 'medium',\n title: `Correlação ${strength} entre ${corr.variable1} e ${corr.variable2}`,\n description: `Correlação ${direction} de ${corr.correlation.toFixed(3)}`,\n variables: [corr.variable1, corr.variable2],\n correlation: corr.correlation,\n significance: corr.pValue != null ? (corr.pValue < config.significanceLevel) : undefined\n };\n });\n\n return {\n matrix: correlationMatrix.correlations || correlationMatrix,\n strongCorrelations,\n insights,\n summary: `Encontradas ${strongCorrelations.length} correlações ≥ ${config.minCorrelationThreshold}`\n };\n }\n\n // =======================\n // Regressão\n // =======================\n performRegressionAnalysis(dataset, quantitativeVars, correlationAnalysis, config) {\n const regressionResults = [];\n\n if (correlationAnalysis.strongCorrelations) {\n correlationAnalysis.strongCorrelations\n .filter(corr => Math.abs(corr.correlation) > 0.5)\n .slice(0, 5)\n .forEach(corr => {\n try {\n const xValues = dataset.data.map(row => row[corr.variable1])\n .filter(v => typeof v === 'number' && !isNaN(v));\n const yValues = dataset.data.map(row => row[corr.variable2])\n .filter(v => typeof v === 'number' && !isNaN(v));\n\n if (xValues.length === yValues.length && xValues.length > 10) {\n const regression = this.stats.linearRegression(xValues, yValues);\n\n regressionResults.push({\n independent: corr.variable1,\n dependent: corr.variable2,\n equation: regression.equation,\n rSquared: regression.rSquared,\n significant: regression.pValueModel < config.significanceLevel,\n interpretation: this.interpretRegressionResult(regression),\n details: regression\n });\n }\n } catch (error) {\n console.warn(`Erro na regressão ${corr.variable1} -> ${corr.variable2}:`, error.message);\n }\n });\n }\n\n return {\n models: regressionResults,\n summary: `${regressionResults.length} modelos de regressão analisados`\n };\n }\n\n // =======================\n // Distribuições / Normalidade\n // =======================\n performDistributionAnalysis(dataset, variableTypes) {\n const results = {};\n\n variableTypes.quantitative.forEach(variable => {\n const values = dataset.data\n .map(row => row[variable.name])\n .filter(v => typeof v === 'number' && !isNaN(v));\n\n if (values.length > 10) {\n try {\n const normalityTest = this.stats.shapiroWilkTest(values);\n const skewness = this.stats.skewness(values);\n const kurtosis = this.stats.kurtosis(values);\n\n results[variable.name] = {\n isNormal: normalityTest.isNormal,\n normalityPValue: normalityTest.pValue,\n skewness,\n kurtosis,\n distributionType: this.classifyDistributionType(skewness, kurtosis, normalityTest.isNormal),\n recommendation: this.getDistributionRecommendation(skewness, kurtosis, normalityTest.isNormal)\n };\n } catch (error) {\n results[variable.name] = {\n error: 'Não foi possível analisar a distribuição',\n reason: error.message\n };\n }\n }\n });\n\n return results;\n }\n\n // =======================\n // Outliers\n // =======================\n performOutlierAnalysis(dataset, quantitativeVars) {\n const results = {};\n\n quantitativeVars.forEach(variable => {\n const values = dataset.data\n .map(row => row[variable.name])\n .filter(v => typeof v === 'number' && !isNaN(v));\n\n if (values.length > 5) {\n const outliers = this.stats.detectOutliers(values, 'iqr');\n results[variable.name] = {\n count: outliers.count,\n percentage: outliers.percentage,\n severity: this.classifyOutlierSeverity(outliers.percentage),\n values: outliers.outliers.slice(0, 10),\n recommendation: this.getOutlierRecommendation(outliers.percentage)\n };\n }\n });\n\n return results;\n }\n\n // =======================\n // Temporal\n // =======================\n performTemporalAnalysis(dataset, variableTypes) {\n if (variableTypes.datetime.length === 0) {\n return { message: 'Nenhuma variável temporal detectada' };\n }\n\n const results = {};\n\n variableTypes.datetime.forEach(dateVar => {\n const dates = dataset.data\n .map(row => new Date(row[dateVar.name]))\n .filter(date => !isNaN(date.getTime()))\n .sort((a, b) => a - b);\n\n if (dates.length > 2) {\n const timeSpan = dates[dates.length - 1] - dates[0];\n const avgInterval = timeSpan / (dates.length - 1);\n\n results[dateVar.name] = {\n span: `${Math.floor(timeSpan / (1000 * 60 * 60 * 24))} dias`,\n frequency: this.determineFrequency(avgInterval),\n earliest: dates[0].toISOString().split('T')[0],\n latest: dates[dates.length - 1].toISOString().split('T')[0],\n dataPoints: dates.length\n };\n }\n });\n\n return results;\n }\n\n // =======================\n // Insights / Visualizações / Sumário\n // =======================\n generateAutoInsights(dataset, analyses, config) {\n const insights = [];\n\n const { quantitative, qualitative } = analyses.variableTypes;\n insights.push({\n category: 'overview',\n priority: 'high',\n title: 'Composição do Dataset',\n description: `Dataset com ${dataset.length} registros, ${quantitative.length} variáveis numéricas e ${qualitative.length} categóricas`,\n icon: '📊'\n });\n\n if (analyses.correlationAnalysis.insights) {\n insights.push(...analyses.correlationAnalysis.insights);\n }\n\n Object.entries(analyses.distributionAnalysis).forEach(([variable, analysis]) => {\n if (analysis.distributionType && analysis.distributionType !== 'normal') {\n insights.push({\n category: 'distribution',\n priority: 'medium',\n title: `Distribuição não-normal: ${variable}`,\n description: analysis.recommendation,\n variable,\n icon: '📈'\n });\n }\n });\n\n Object.entries(analyses.outlierAnalysis).forEach(([variable, analysis]) => {\n if (analysis.severity === 'high') {\n insights.push({\n category: 'quality',\n priority: 'high',\n title: `Outliers significativos em ${variable}`,\n description: `${analysis.count} outliers (${analysis.percentage.toFixed(1)}%) detectados`,\n recommendation: analysis.recommendation,\n variable,\n icon: '⚠️'\n });\n }\n });\n\n analyses.regressionAnalysis.models?.forEach(model => {\n if (model.significant && model.rSquared > 0.5) {\n insights.push({\n category: 'modeling',\n priority: 'high',\n title: `Modelo preditivo viável: ${model.dependent}`,\n description: `${model.independent} explica ${(model.rSquared * 100).toFixed(1)}% da variação em ${model.dependent}`,\n variables: [model.independent, model.dependent],\n rSquared: model.rSquared,\n icon: '🎯'\n });\n }\n });\n\n const priorityOrder = { high: 3, medium: 2, low: 1 };\n return insights.sort((a, b) => priorityOrder[b.priority] - priorityOrder[a.priority]);\n }\n\n suggestVisualizations(variableTypes, correlationAnalysis, distributionAnalysis) {\n const suggestions = [];\n\n variableTypes.quantitative.forEach(variable => {\n suggestions.push({\n type: 'histogram',\n variable: variable.name,\n title: `Distribuição de ${variable.name}`,\n description: 'Histogram mostrando a distribuição dos valores',\n priority: 'medium'\n });\n });\n\n if (correlationAnalysis.strongCorrelations) {\n correlationAnalysis.strongCorrelations\n .filter(corr => Math.abs(corr.correlation) > 0.5)\n .slice(0, 3)\n .forEach(corr => {\n suggestions.push({\n type: 'scatter',\n variables: [corr.variable1, corr.variable2],\n title: `${corr.variable1} vs ${corr.variable2}`,\n description: `Scatter plot mostrando correlação ${corr.correlation > 0 ? 'positiva' : 'negativa'}`,\n priority: 'high'\n });\n });\n }\n\n [...variableTypes.qualitative, ...variableTypes.binary].forEach(variable => {\n if (variable.uniqueCount <= 20) {\n suggestions.push({\n type: 'bar',\n variable: variable.name,\n title: `Frequência de ${variable.name}`,\n description: 'Gráfico de barras mostrando a distribuição das categorias',\n priority: 'medium'\n });\n }\n });\n\n variableTypes.quantitative.forEach(variable => {\n suggestions.push({\n type: 'boxplot',\n variable: variable.name,\n title: `Box Plot de ${variable.name}`,\n description: 'Box plot para identificar outliers e quartis',\n priority: 'low'\n });\n });\n\n const priorityOrder = { high: 3, medium: 2, low: 1 };\n return suggestions.sort((a, b) => priorityOrder[b.priority] - priorityOrder[a.priority]);\n }\n\n generateExecutiveSummary(insights) {\n const highPriority = insights.filter(i => i.priority === 'high');\n const categories = [...new Set(insights.map(i => i.category))];\n\n return {\n totalInsights: insights.length,\n highPriorityInsights: highPriority.length,\n categoriesCovered: categories,\n keyFindings: highPriority.slice(0, 3).map(i => ({\n title: i.title,\n description: i.description\n })),\n recommendations: this.generateTopRecommendations(insights)\n };\n }\n\n // =======================\n // Helpers\n // =======================\n isDateTimeColumn(values) {\n const sampleSize = Math.min(values.length, 20);\n const sample = values.slice(0, sampleSize);\n const dateCount = sample.filter(val => {\n if (typeof val === 'string') {\n const date = new Date(val);\n return !isNaN(date.getTime());\n }\n return false;\n }).length;\n\n return dateCount / sampleSize > 0.7;\n }\n\n determineQuantitativeSubtype(values) {\n const integers = values.filter(v => Number.isInteger(v));\n const integerRatio = integers.length / values.length;\n return integerRatio > 0.9 ? 'discrete' : 'continuous';\n }\n\n isOrdinalVariable(uniqueValues) {\n const ordinalPatterns = [\n /^(baixo|médio|alto)$/i,\n /^(pequeno|grande)$/i,\n /^(ruim|regular|bom|ótimo)$/i,\n /^[1-5]$/,\n /^(primeiro|segundo|terceiro)$/i\n ];\n return ordinalPatterns.some(pattern =>\n uniqueValues.every(val => pattern.test(String(val)))\n );\n }\n\n calculateConcentration(frequencyTable) {\n if (frequencyTable.length === 0) return 0;\n return frequencyTable[0].percentage;\n }\n\n getCorrelationStrength(correlation) {\n if (correlation >= 0.8) return 'muito forte';\n if (correlation >= 0.6) return 'forte';\n if (correlation >= 0.4) return 'moderada';\n if (correlation >= 0.2) return 'fraca';\n return 'muito fraca';\n }\n\n interpretRegressionResult(regression) {\n const r2Percent = (regression.rSquared * 100).toFixed(1);\n const significant = regression.pValueModel < 0.05;\n return {\n quality: regression.rSquared > 0.7 ? 'excelente'\n : regression.rSquared > 0.5 ? 'boa'\n : regression.rSquared > 0.3 ? 'moderada' : 'fraca',\n explanation: `O modelo explica ${r2Percent}% da variação`,\n isSignificant: significant\n };\n }\n\n classifyDistributionType(skewness, kurtosis, isNormal) {\n if (isNormal) return 'normal';\n if (Math.abs(skewness) > 1) {\n return skewness > 0 ? 'assimétrica_direita' : 'assimétrica_esquerda';\n }\n if (Math.abs(kurtosis) > 1) {\n return kurtosis > 0 ? 'leptocúrtica' : 'platicúrtica';\n }\n return 'aproximadamente_normal';\n }\n\n getDistributionRecommendation(skewness, kurtosis, isNormal) {\n if (isNormal) return 'Distribuição normal - ideal para testes paramétricos';\n if (Math.abs(skewness) > 1) return 'Considere transformação logarítmica para normalizar';\n if (Math.abs(kurtosis) > 1) return 'Distribuição com caudas atípicas - use testes robustos';\n return 'Distribuição aproximadamente normal';\n }\n\n classifyOutlierSeverity(percentage) {\n if (percentage > 10) return 'high';\n if (percentage > 5) return 'medium';\n return 'low';\n }\n\n getOutlierRecommendation(percentage) {\n if (percentage > 10) return 'Investigar e possivelmente remover outliers';\n if (percentage > 5) return 'Verificar se outliers são valores legítimos';\n return 'Poucos outliers - monitorar';\n }\n\n determineFrequency(avgInterval) {\n const day = 24 * 60 * 60 * 1000;\n if (avgInterval < day) return 'diária';\n if (avgInterval < day * 7) return 'semanal';\n if (avgInterval < day * 30) return 'mensal';\n return 'anual';\n }\n\n generateTopRecommendations(insights) {\n const recommendations = [];\n\n const correlationInsights = insights.filter(i => i.category === 'correlation');\n if (correlationInsights.length > 0) {\n recommendations.push('Explore as correlações identificadas para possível modelagem preditiva');\n }\n\n const qualityInsights = insights.filter(i => i.category === 'quality' && i.priority === 'high');\n if (qualityInsights.length > 0) {\n recommendations.push('Trate os outliers identificados antes de prosseguir com análises');\n }\n\n const distributionInsights = insights.filter(i => i.category === 'distribution');\n if (distributionInsights.length > 0) {\n recommendations.push('Considere transformações para normalizar distribuições assimétricas');\n }\n\n return recommendations;\n }\n}\n\nexport default AutoAnalyzer;\n","class BaseModel {\n constructor() {\n this.trained = false;\n this.model = null;\n this.features = null;\n this.target = null;\n this.trainingMetrics = {};\n }\n\n validateTrainingData(X, y) {\n if (!Array.isArray(X) || X.length === 0) {\n throw new Error('X must be a non-empty array');\n }\n if (!Array.isArray(y) || y.length === 0) {\n throw new Error('y must be a non-empty array');\n }\n if (X.length !== y.length) {\n throw new Error('X and y must have the same length');\n }\n }\n\n validatePredictionData(X) {\n if (!this.trained) {\n throw new Error('Model must be trained before making predictions');\n }\n if (!Array.isArray(X) || X.length === 0) {\n throw new Error('X must be a non-empty array');\n }\n }\n\n normalizeFeatures(X) {\n const n = X.length;\n const m = X[0].length;\n const normalized = [];\n const means = [];\n const stds = [];\n\n for (let j = 0; j < m; j++) {\n const column = X.map(row => row[j]);\n const mean = column.reduce((sum, val) => sum + val, 0) / n;\n const variance = column.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / n;\n const std = Math.sqrt(variance);\n\n means.push(mean);\n stds.push(std === 0 ? 1 : std);\n }\n\n for (let i = 0; i < n; i++) {\n const row = [];\n for (let j = 0; j < m; j++) {\n row.push((X[i][j] - means[j]) / stds[j]);\n }\n normalized.push(row);\n }\n\n return { normalized, means, stds };\n }\n\n splitTrainTest(X, y, testSize = 0.2, shuffle = true) {\n const n = X.length;\n const indices = Array.from({ length: n }, (_, i) => i);\n\n if (shuffle) {\n for (let i = n - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [indices[i], indices[j]] = [indices[j], indices[i]];\n }\n }\n\n const testCount = Math.floor(n * testSize);\n const trainCount = n - testCount;\n\n const trainIndices = indices.slice(0, trainCount);\n const testIndices = indices.slice(trainCount);\n\n return {\n X_train: trainIndices.map(i => X[i]),\n X_test: testIndices.map(i => X[i]),\n y_train: trainIndices.map(i => y[i]),\n y_test: testIndices.map(i => y[i])\n };\n }\n\n save() {\n if (!this.trained) {\n throw new Error('Cannot save untrained model');\n }\n return {\n model: this.model,\n features: this.features,\n target: this.target,\n trainingMetrics: this.trainingMetrics,\n timestamp: new Date().toISOString()\n };\n }\n\n load(modelData) {\n this.model = modelData.model;\n this.features = modelData.features;\n this.target = modelData.target;\n this.trainingMetrics = modelData.trainingMetrics;\n this.trained = true;\n }\n}\n\nexport default BaseModel;","import BaseModel from './baseModel.js';\n\nclass LinearRegression extends BaseModel {\n constructor(learningRate = 0.01, iterations = 1000, regularization = null, lambda = 0.01) {\n super();\n this.learningRate = learningRate;\n this.iterations = iterations;\n this.regularization = regularization; // 'l1', 'l2', or null\n this.lambda = lambda;\n this.weights = null;\n this.bias = null;\n this.normParams = null;\n }\n\n fit(X, y, normalize = true) {\n this.validateTrainingData(X, y);\n\n let X_train = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (normalize) {\n const { normalized, means, stds } = this.normalizeFeatures(X_train);\n X_train = normalized;\n this.normParams = { means, stds };\n }\n\n const n = X_train.length;\n const m = X_train[0].length;\n\n this.weights = Array(m).fill(0);\n this.bias = 0;\n\n const losses = [];\n\n for (let iter = 0; iter < this.iterations; iter++) {\n const predictions = X_train.map(x => this.predictSingle(x));\n const errors = predictions.map((pred, i) => pred - y[i]);\n\n // Gradient descent\n const weightGradients = Array(m).fill(0);\n let biasGradient = 0;\n\n for (let i = 0; i < n; i++) {\n biasGradient += errors[i];\n for (let j = 0; j < m; j++) {\n weightGradients[j] += errors[i] * X_train[i][j];\n }\n }\n\n // Apply regularization\n for (let j = 0; j < m; j++) {\n if (this.regularization === 'l2') {\n weightGradients[j] += this.lambda * this.weights[j];\n } else if (this.regularization === 'l1') {\n weightGradients[j] += this.lambda * Math.sign(this.weights[j]);\n }\n this.weights[j] -= (this.learningRate / n) * weightGradients[j];\n }\n\n this.bias -= (this.learningRate / n) * biasGradient;\n\n // Calculate loss\n const loss = this.calculateLoss(predictions, y);\n losses.push(loss);\n }\n\n this.trained = true;\n this.trainingMetrics = {\n finalLoss: losses[losses.length - 1],\n losses: losses,\n weights: [...this.weights],\n bias: this.bias\n };\n\n return this;\n }\n\n predictSingle(x) {\n let sum = this.bias;\n for (let j = 0; j < this.weights.length; j++) {\n sum += this.weights[j] * x[j];\n }\n return sum;\n }\n\n predict(X) {\n this.validatePredictionData(X);\n\n let X_test = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (this.normParams) {\n const { means, stds } = this.normParams;\n X_test = X_test.map(row =>\n row.map((val, j) => (val - means[j]) / stds[j])\n );\n }\n\n return X_test.map(x => this.predictSingle(x));\n }\n\n calculateLoss(predictions, y) {\n const mse = predictions.reduce((sum, pred, i) =>\n sum + Math.pow(pred - y[i], 2), 0) / predictions.length;\n\n if (this.regularization === 'l2') {\n const l2 = this.weights.reduce((sum, w) => sum + w * w, 0);\n return mse + this.lambda * l2;\n } else if (this.regularization === 'l1') {\n const l1 = this.weights.reduce((sum, w) => sum + Math.abs(w), 0);\n return mse + this.lambda * l1;\n }\n\n return mse;\n }\n\n score(X, y) {\n const predictions = this.predict(X);\n const yMean = y.reduce((sum, val) => sum + val, 0) / y.length;\n\n const ssRes = predictions.reduce((sum, pred, i) =>\n sum + Math.pow(y[i] - pred, 2), 0);\n const ssTot = y.reduce((sum, val) =>\n sum + Math.pow(val - yMean, 2), 0);\n\n const r2 = 1 - (ssRes / ssTot);\n const mse = ssRes / y.length;\n const rmse = Math.sqrt(mse);\n const mae = predictions.reduce((sum, pred, i) =>\n sum + Math.abs(y[i] - pred), 0) / y.length;\n\n return {\n r2Score: r2,\n mse: mse,\n rmse: rmse,\n mae: mae,\n predictions: predictions,\n residuals: predictions.map((pred, i) => y[i] - pred)\n };\n }\n\n getCoefficients() {\n if (!this.trained) {\n throw new Error('Model must be trained first');\n }\n return {\n weights: [...this.weights],\n bias: this.bias,\n equation: this.getEquation()\n };\n }\n\n getEquation() {\n let eq = `y = ${this.bias.toFixed(4)}`;\n this.weights.forEach((w, i) => {\n const sign = w >= 0 ? '+' : '';\n eq += ` ${sign} ${w.toFixed(4)}*x${i + 1}`;\n });\n return eq;\n }\n\n summary() {\n if (!this.trained) {\n throw new Error('Model must be trained first');\n }\n\n return {\n modelType: 'Linear Regression',\n coefficients: this.getCoefficients(),\n trainingMetrics: this.trainingMetrics,\n hyperparameters: {\n learningRate: this.learningRate,\n iterations: this.iterations,\n regularization: this.regularization,\n lambda: this.lambda\n }\n };\n }\n}\n\nexport default LinearRegression;","import BaseModel from './baseModel.js';\n\nclass LogisticRegression extends BaseModel {\n constructor(learningRate = 0.01, iterations = 1000, regularization = null, lambda = 0.01) {\n super();\n this.learningRate = learningRate;\n this.iterations = iterations;\n this.regularization = regularization;\n this.lambda = lambda;\n this.weights = null;\n this.bias = null;\n this.normParams = null;\n this.classes = null;\n this.multiclass = false;\n }\n\n sigmoid(z) {\n return 1 / (1 + Math.exp(-z));\n }\n\n softmax(z) {\n const maxZ = Math.max(...z);\n const expZ = z.map(val => Math.exp(val - maxZ));\n const sumExpZ = expZ.reduce((a, b) => a + b, 0);\n return expZ.map(val => val / sumExpZ);\n }\n\n fit(X, y, normalize = true) {\n this.validateTrainingData(X, y);\n\n this.classes = [...new Set(y)].sort();\n this.multiclass = this.classes.length > 2;\n\n let X_train = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (normalize) {\n const { normalized, means, stds } = this.normalizeFeatures(X_train);\n X_train = normalized;\n this.normParams = { means, stds };\n }\n\n if (this.multiclass) {\n this.fitMulticlass(X_train, y);\n } else {\n this.fitBinary(X_train, y);\n }\n\n this.trained = true;\n return this;\n }\n\n fitBinary(X_train, y) {\n const n = X_train.length;\n const m = X_train[0].length;\n\n // Convert labels to 0 and 1\n const yBinary = y.map(label => label === this.classes[1] ? 1 : 0);\n\n this.weights = Array(m).fill(0);\n this.bias = 0;\n\n const losses = [];\n\n for (let iter = 0; iter < this.iterations; iter++) {\n const predictions = X_train.map(x => {\n const z = this.bias + x.reduce((sum, val, j) => sum + val * this.weights[j], 0);\n return this.sigmoid(z);\n });\n\n const weightGradients = Array(m).fill(0);\n let biasGradient = 0;\n\n for (let i = 0; i < n; i++) {\n const error = predictions[i] - yBinary[i];\n biasGradient += error;\n for (let j = 0; j < m; j++) {\n weightGradients[j] += error * X_train[i][j];\n }\n }\n\n for (let j = 0; j < m; j++) {\n if (this.regularization === 'l2') {\n weightGradients[j] += this.lambda * this.weights[j];\n } else if (this.regularization === 'l1') {\n weightGradients[j] += this.lambda * Math.sign(this.weights[j]);\n }\n this.weights[j] -= (this.learningRate / n) * weightGradients[j];\n }\n\n this.bias -= (this.learningRate / n) * biasGradient;\n\n const loss = this.calculateBinaryLoss(predictions, yBinary);\n losses.push(loss);\n }\n\n this.trainingMetrics = {\n finalLoss: losses[losses.length - 1],\n losses: losses,\n weights: [...this.weights],\n bias: this.bias\n };\n }\n\n fitMulticlass(X_train, y) {\n const n = X_train.length;\n const m = X_train[0].length;\n const k = this.classes.length;\n\n // One-hot encode labels\n const yOneHot = y.map(label => {\n const encoded = Array(k).fill(0);\n encoded[this.classes.indexOf(label)] = 1;\n return encoded;\n });\n\n this.weights = Array(k).fill(0).map(() => Array(m).fill(0));\n this.bias = Array(k).fill(0);\n\n const losses = [];\n\n for (let iter = 0; iter < this.iterations; iter++) {\n const predictions = X_train.map(x => {\n const z = this.bias.map((b, c) =>\n b + x.reduce((sum, val, j) => sum + val * this.weights[c][j], 0)\n );\n return this.softmax(z);\n });\n\n for (let c = 0; c < k; c++) {\n let biasGradient = 0;\n const weightGradients = Array(m).fill(0);\n\n for (let i = 0; i < n; i++) {\n const error = predictions[i][c] - yOneHot[i][c];\n biasGradient += error;\n for (let j = 0; j < m; j++) {\n weightGradients[j] += error * X_train[i][j];\n }\n }\n\n for (let j = 0; j < m; j++) {\n if (this.regularization === 'l2') {\n weightGradients[j] += this.lambda * this.weights[c][j];\n }\n this.weights[c][j] -= (this.learningRate / n) * weightGradients[j];\n }\n\n this.bias[c] -= (this.learningRate / n) * biasGradient;\n }\n\n const loss = this.calculateMulticlassLoss(predictions, yOneHot);\n losses.push(loss);\n }\n\n this.trainingMetrics = {\n finalLoss: losses[losses.length - 1],\n losses: losses\n };\n }\n\n predict(X, returnProba = false) {\n this.validatePredictionData(X);\n\n let X_test = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (this.normParams) {\n const { means, stds } = this.normParams;\n X_test = X_test.map(row =>\n row.map((val, j) => (val - means[j]) / stds[j])\n );\n }\n\n if (this.multiclass) {\n const probas = X_test.map(x => {\n const z = this.bias.map((b, c) =>\n b + x.reduce((sum, val, j) => sum + val * this.weights[c][j], 0)\n );\n return this.softmax(z);\n });\n\n if (returnProba) {\n return probas.map(proba => {\n const obj = {};\n this.classes.forEach((cls, i) => {\n obj[cls] = proba[i];\n });\n return obj;\n });\n }\n\n return probas.map(proba => {\n const maxIdx = proba.indexOf(Math.max(...proba));\n return this.classes[maxIdx];\n });\n } else {\n const probas = X_test.map(x => {\n const z = this.bias + x.reduce((sum, val, j) => sum + val * this.weights[j], 0);\n return this.sigmoid(z);\n });\n\n if (returnProba) {\n return probas.map(p => ({\n [this.classes[0]]: 1 - p,\n [this.classes[1]]: p\n }));\n }\n\n return probas.map(p => p >= 0.5 ? this.classes[1] : this.classes[0]);\n }\n }\n\n predictProba(X) {\n return this.predict(X, true);\n }\n\n calculateBinaryLoss(predictions, y) {\n const eps = 1e-15;\n const loss = predictions.reduce((sum, pred, i) => {\n const p = Math.max(eps, Math.min(1 - eps, pred));\n return sum - (y[i] * Math.log(p) + (1 - y[i]) * Math.log(1 - p));\n }, 0) / predictions.length;\n\n if (this.regularization === 'l2') {\n const l2 = this.weights.reduce((sum, w) => sum + w * w, 0);\n return loss + this.lambda * l2 / 2;\n }\n return loss;\n }\n\n calculateMulticlassLoss(predictions, yOneHot) {\n const eps = 1e-15;\n let loss = 0;\n for (let i = 0; i < predictions.length; i++) {\n for (let c = 0; c < yOneHot[i].length; c++) {\n const p = Math.max(eps, Math.min(1 - eps, predictions[i][c]));\n loss -= yOneHot[i][c] * Math.log(p);\n }\n }\n return loss / predictions.length;\n }\n\n score(X, y) {\n const predictions = this.predict(X);\n const probas = this.predictProba(X);\n\n let correct = 0;\n for (let i = 0; i < y.length; i++) {\n if (predictions[i] === y[i]) correct++;\n }\n const accuracy = correct / y.length;\n\n // Confusion Matrix\n const cm = this.confusionMatrix(y, predictions);\n\n // Per-class metrics\n const metrics = this.calculateClassMetrics(cm);\n\n return {\n accuracy: accuracy,\n confusionMatrix: cm,\n classMetrics: metrics,\n predictions: predictions,\n probabilities: probas\n };\n }\n\n confusionMatrix(yTrue, yPred) {\n const n = this.classes.length;\n const matrix = Array(n).fill(0).map(() => Array(n).fill(0));\n\n for (let i = 0; i < yTrue.length; i++) {\n const trueIdx = this.classes.indexOf(yTrue[i]);\n const predIdx = this.classes.indexOf(yPred[i]);\n matrix[trueIdx][predIdx]++;\n }\n\n return {\n matrix: matrix,\n classes: this.classes,\n display: this.formatConfusionMatrix(matrix)\n };\n }\n\n formatConfusionMatrix(matrix) {\n const maxLen = Math.max(...matrix.flat().map(v => v.toString().length), 8);\n const pad = (str) => str.toString().padStart(maxLen);\n\n let output = '\\n' + ' '.repeat(maxLen + 2) + 'Predicted\\n';\n output += ' '.repeat(maxLen + 2) + this.classes.map(c => pad(c)).join(' ') + '\\n';\n\n for (let i = 0; i < matrix.length; i++) {\n if (i === 0) output += 'Actual ';\n else output += ' ';\n output += pad(this.classes[i]) + ' ';\n output += matrix[i].map(v => pad(v)).join(' ') + '\\n';\n }\n\n return output;\n }\n\n calculateClassMetrics(cm) {\n const matrix = cm.matrix;\n const metrics = {};\n\n this.classes.forEach((cls, i) => {\n const tp = matrix[i][i];\n const fn = matrix[i].reduce((sum, val) => sum + val, 0) - tp;\n const fp = matrix.map(row => row[i]).reduce((sum, val) => sum + val, 0) - tp;\n const tn = matrix.reduce((sum, row, r) =>\n sum + row.reduce((s, val, c) => s + (r !== i && c !== i ? val : 0), 0), 0);\n\n const precision = tp + fp > 0 ? tp / (tp + fp) : 0;\n const recall = tp + fn > 0 ? tp / (tp + fn) : 0;\n const f1 = precision + recall > 0 ? 2 * (precision * recall) / (precision + recall) : 0;\n\n metrics[cls] = {\n precision: precision,\n recall: recall,\n f1Score: f1,\n support: tp + fn\n };\n });\n\n return metrics;\n }\n\n summary() {\n if (!this.trained) {\n throw new Error('Model must be trained first');\n }\n\n return {\n modelType: 'Logistic Regression',\n classes: this.classes,\n multiclass: this.multiclass,\n trainingMetrics: this.trainingMetrics,\n hyperparameters: {\n learningRate: this.learningRate,\n iterations: this.iterations,\n regularization: this.regularization,\n lambda: this.lambda\n }\n };\n }\n}\n\nexport default LogisticRegression;","import BaseModel from './baseModel.js';\n\nclass KNearestNeighbors extends BaseModel {\n constructor(k = 5, metric = 'euclidean', weights = 'uniform') {\n super();\n this.k = k;\n this.metric = metric; // 'euclidean', 'manhattan', 'minkowski'\n this.weights = weights; // 'uniform' or 'distance'\n this.X_train = null;\n this.y_train = null;\n this.normParams = null;\n this.taskType = null; // 'classification' or 'regression'\n }\n\n euclideanDistance(x1, x2) {\n return Math.sqrt(\n x1.reduce((sum, val, i) => sum + Math.pow(val - x2[i], 2), 0)\n );\n }\n\n manhattanDistance(x1, x2) {\n return x1.reduce((sum, val, i) => sum + Math.abs(val - x2[i]), 0);\n }\n\n minkowskiDistance(x1, x2, p = 3) {\n return Math.pow(\n x1.reduce((sum, val, i) => sum + Math.pow(Math.abs(val - x2[i]), p), 0),\n 1 / p\n );\n }\n\n calculateDistance(x1, x2) {\n switch (this.metric) {\n case 'manhattan':\n return this.manhattanDistance(x1, x2);\n case 'minkowski':\n return this.minkowskiDistance(x1, x2);\n case 'euclidean':\n default:\n return this.euclideanDistance(x1, x2);\n }\n }\n\n fit(X, y, normalize = true, taskType = 'classification') {\n this.validateTrainingData(X, y);\n\n this.taskType = taskType;\n let X_train = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (normalize) {\n const { normalized, means, stds } = this.normalizeFeatures(X_train);\n this.X_train = normalized;\n this.normParams = { means, stds };\n } else {\n this.X_train = X_train;\n }\n\n this.y_train = [...y];\n this.trained = true;\n\n this.trainingMetrics = {\n samples: this.X_train.length,\n features: this.X_train[0].length,\n taskType: this.taskType\n };\n\n return this;\n }\n\n findKNearest(x) {\n const distances = this.X_train.map((trainPoint, idx) => ({\n distance: this.calculateDistance(x, trainPoint),\n index: idx,\n label: this.y_train[idx]\n }));\n\n distances.sort((a, b) => a.distance - b.distance);\n return distances.slice(0, this.k);\n }\n\n predictSingleClassification(x) {\n const neighbors = this.findKNearest(x);\n\n if (this.weights === 'uniform') {\n const votes = {};\n neighbors.forEach(neighbor => {\n votes[neighbor.label] = (votes[neighbor.label] || 0) + 1;\n });\n\n return Object.keys(votes).reduce((a, b) =>\n votes[a] > votes[b] ? a : b\n );\n } else {\n // Distance-weighted voting\n const votes = {};\n neighbors.forEach(neighbor => {\n const weight = neighbor.distance === 0 ? 1e10 : 1 / neighbor.distance;\n votes[neighbor.label] = (votes[neighbor.label] || 0) + weight;\n });\n\n return Object.keys(votes).reduce((a, b) =>\n votes[a] > votes[b] ? a : b\n );\n }\n }\n\n predictSingleRegression(x) {\n const neighbors = this.findKNearest(x);\n\n if (this.weights === 'uniform') {\n return neighbors.reduce((sum, n) => sum + n.label, 0) / neighbors.length;\n } else {\n // Distance-weighted average\n let weightedSum = 0;\n let totalWeight = 0;\n\n neighbors.forEach(neighbor => {\n const weight = neighbor.distance === 0 ? 1e10 : 1 / neighbor.distance;\n weightedSum += neighbor.label * weight;\n totalWeight += weight;\n });\n\n return weightedSum / totalWeight;\n }\n }\n\n predict(X) {\n this.validatePredictionData(X);\n\n let X_test = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (this.normParams) {\n const { means, stds } = this.normParams;\n X_test = X_test.map(row =>\n row.map((val, j) => (val - means[j]) / stds[j])\n );\n }\n\n if (this.taskType === 'classification') {\n return X_test.map(x => this.predictSingleClassification(x));\n } else {\n return X_test.map(x => this.predictSingleRegression(x));\n }\n }\n\n predictProba(X) {\n if (this.taskType !== 'classification') {\n throw new Error('predictProba is only available for classification tasks');\n }\n\n this.validatePredictionData(X);\n\n let X_test = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (this.normParams) {\n const { means, stds } = this.normParams;\n X_test = X_test.map(row =>\n row.map((val, j) => (val - means[j]) / stds[j])\n );\n }\n\n const classes = [...new Set(this.y_train)].sort();\n\n return X_test.map(x => {\n const neighbors = this.findKNearest(x);\n const probas = {};\n\n classes.forEach(cls => {\n probas[cls] = 0;\n });\n\n if (this.weights === 'uniform') {\n neighbors.forEach(neighbor => {\n probas[neighbor.label] += 1 / this.k;\n });\n } else {\n let totalWeight = 0;\n const weights = {};\n\n neighbors.forEach(neighbor => {\n const weight = neighbor.distance === 0 ? 1e10 : 1 / neighbor.distance;\n weights[neighbor.label] = (weights[neighbor.label] || 0) + weight;\n totalWeight += weight;\n });\n\n Object.keys(weights).forEach(label => {\n probas[label] = weights[label] / totalWeight;\n });\n }\n\n return probas;\n });\n }\n\n score(X, y) {\n const predictions = this.predict(X);\n\n if (this.taskType === 'classification') {\n let correct = 0;\n for (let i = 0; i < y.length; i++) {\n if (predictions[i] === y[i]) correct++;\n }\n const accuracy = correct / y.length;\n\n const classes = [...new Set([...y, ...predictions])].sort();\n const cm = this.confusionMatrix(y, predictions, classes);\n const metrics = this.calculateClassMetrics(cm, classes);\n\n return {\n accuracy: accuracy,\n confusionMatrix: cm,\n classMetrics: metrics,\n predictions: predictions\n };\n } else {\n // Regression metrics\n const yMean = y.reduce((sum, val) => sum + val, 0) / y.length;\n\n const ssRes = predictions.reduce((sum, pred, i) =>\n sum + Math.pow(y[i] - pred, 2), 0);\n const ssTot = y.reduce((sum, val) =>\n sum + Math.pow(val - yMean, 2), 0);\n\n const r2 = 1 - (ssRes / ssTot);\n const mse = ssRes / y.length;\n const rmse = Math.sqrt(mse);\n const mae = predictions.reduce((sum, pred, i) =>\n sum + Math.abs(y[i] - pred), 0) / y.length;\n\n return {\n r2Score: r2,\n mse: mse,\n rmse: rmse,\n mae: mae,\n predictions: predictions,\n residuals: predictions.map((pred, i) => y[i] - pred)\n };\n }\n }\n\n confusionMatrix(yTrue, yPred, classes) {\n const n = classes.length;\n const matrix = Array(n).fill(0).map(() => Array(n).fill(0));\n\n for (let i = 0; i < yTrue.length; i++) {\n const trueIdx = classes.indexOf(yTrue[i]);\n const predIdx = classes.indexOf(yPred[i]);\n matrix[trueIdx][predIdx]++;\n }\n\n return {\n matrix: matrix,\n classes: classes,\n display: this.formatConfusionMatrix(matrix, classes)\n };\n }\n\n formatConfusionMatrix(matrix, classes) {\n const maxLen = Math.max(...matrix.flat().map(v => v.toString().length), 8);\n const pad = (str) => str.toString().padStart(maxLen);\n\n let output = '\\n' + ' '.repeat(maxLen + 2) + 'Predicted\\n';\n output += ' '.repeat(maxLen + 2) + classes.map(c => pad(c)).join(' ') + '\\n';\n\n for (let i = 0; i < matrix.length; i++) {\n if (i === 0) output += 'Actual ';\n else output += ' ';\n output += pad(classes[i]) + ' ';\n output += matrix[i].map(v => pad(v)).join(' ') + '\\n';\n }\n\n return output;\n }\n\n calculateClassMetrics(cm, classes) {\n const matrix = cm.matrix;\n const metrics = {};\n\n classes.forEach((cls, i) => {\n const tp = matrix[i][i];\n const fn = matrix[i].reduce((sum, val) => sum + val, 0) - tp;\n const fp = matrix.map(row => row[i]).reduce((sum, val) => sum + val, 0) - tp;\n\n const precision = tp + fp > 0 ? tp / (tp + fp) : 0;\n const recall = tp + fn > 0 ? tp / (tp + fn) : 0;\n const f1 = precision + recall > 0 ? 2 * (precision * recall) / (precision + recall) : 0;\n\n metrics[cls] = {\n precision: precision,\n recall: recall,\n f1Score: f1,\n support: tp + fn\n };\n });\n\n return metrics;\n }\n\n summary() {\n if (!this.trained) {\n throw new Error('Model must be trained first');\n }\n\n return {\n modelType: 'K-Nearest Neighbors',\n taskType: this.taskType,\n trainingMetrics: this.trainingMetrics,\n hyperparameters: {\n k: this.k,\n metric: this.metric,\n weights: this.weights\n }\n };\n }\n}\n\nexport default KNearestNeighbors;","import BaseModel from './baseModel.js';\n\nclass DecisionTree extends BaseModel {\n constructor(maxDepth = 10, minSamplesSplit = 2, minSamplesLeaf = 1, criterion = 'gini') {\n super();\n this.maxDepth = maxDepth;\n this.minSamplesSplit = minSamplesSplit;\n this.minSamplesLeaf = minSamplesLeaf;\n this.criterion = criterion; // 'gini', 'entropy' for classification; 'mse' for regression\n this.tree = null;\n this.taskType = null;\n this.classes = null;\n }\n\n fit(X, y, taskType = 'classification') {\n this.validateTrainingData(X, y);\n\n this.taskType = taskType;\n const X_train = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (taskType === 'classification') {\n this.classes = [...new Set(y)].sort();\n }\n\n this.tree = this.buildTree(X_train, y, 0);\n this.trained = true;\n\n this.trainingMetrics = {\n treeDepth: this.getTreeDepth(this.tree),\n leafCount: this.getLeafCount(this.tree),\n nodeCount: this.getNodeCount(this.tree),\n taskType: this.taskType\n };\n\n return this;\n }\n\n buildTree(X, y, depth) {\n const nSamples = X.length;\n const nFeatures = X[0].length;\n\n // Stopping criteria\n if (depth >= this.maxDepth ||\n nSamples < this.minSamplesSplit ||\n this.isPure(y)) {\n return this.createLeaf(y);\n }\n\n // Find best split\n let bestSplit = null;\n let bestScore = -Infinity;\n\n for (let featureIdx = 0; featureIdx < nFeatures; featureIdx++) {\n const thresholds = this.getThresholds(X, featureIdx);\n\n for (const threshold of thresholds) {\n const { left, right } = this.splitData(X, y, featureIdx, threshold);\n\n if (left.y.length < this.minSamplesLeaf ||\n right.y.length < this.minSamplesLeaf) {\n continue;\n }\n\n const score = this.calculateSplitScore(y, left.y, right.y);\n\n if (score > bestScore) {\n bestScore = score;\n bestSplit = {\n featureIdx,\n threshold,\n left,\n right\n };\n }\n }\n }\n\n if (!bestSplit) {\n return this.createLeaf(y);\n }\n\n // Recursively build subtrees\n return {\n featureIdx: bestSplit.featureIdx,\n threshold: bestSplit.threshold,\n left: this.buildTree(bestSplit.left.X, bestSplit.left.y, depth + 1),\n right: this.buildTree(bestSplit.right.X, bestSplit.right.y, depth + 1),\n isLeaf: false\n };\n }\n\n getThresholds(X, featureIdx) {\n const values = [...new Set(X.map(row => row[featureIdx]))].sort((a, b) => a - b);\n const thresholds = [];\n\n for (let i = 0; i < values.length - 1; i++) {\n thresholds.push((values[i] + values[i + 1]) / 2);\n }\n\n return thresholds;\n }\n\n splitData(X, y, featureIdx, threshold) {\n const leftX = [], leftY = [];\n const rightX = [], rightY = [];\n\n for (let i = 0; i < X.length; i++) {\n if (X[i][featureIdx] <= threshold) {\n leftX.push(X[i]);\n leftY.push(y[i]);\n } else {\n rightX.push(X[i]);\n rightY.push(y[i]);\n }\n }\n\n return {\n left: { X: leftX, y: leftY },\n right: { X: rightX, y: rightY }\n };\n }\n\n isPure(y) {\n return new Set(y).size === 1;\n }\n\n createLeaf(y) {\n if (this.taskType === 'classification') {\n const counts = {};\n y.forEach(label => {\n counts[label] = (counts[label] || 0) + 1;\n });\n const prediction = Object.keys(counts).reduce((a, b) =>\n counts[a] > counts[b] ? a : b\n );\n return {\n isLeaf: true,\n prediction: prediction,\n samples: y.length,\n distribution: counts\n };\n } else {\n const mean = y.reduce((sum, val) => sum + val, 0) / y.length;\n return {\n isLeaf: true,\n prediction: mean,\n samples: y.length\n };\n }\n }\n\n calculateSplitScore(parentY, leftY, rightY) {\n if (this.taskType === 'classification') {\n const parentImpurity = this.calculateImpurity(parentY);\n const n = parentY.length;\n const nLeft = leftY.length;\n const nRight = rightY.length;\n\n const leftImpurity = this.calculateImpurity(leftY);\n const rightImpurity = this.calculateImpurity(rightY);\n\n const weightedImpurity = (nLeft / n) * leftImpurity + (nRight / n) * rightImpurity;\n return parentImpurity - weightedImpurity; // Information gain\n } else {\n const parentVariance = this.calculateVariance(parentY);\n const n = parentY.length;\n const nLeft = leftY.length;\n const nRight = rightY.length;\n\n const leftVariance = this.calculateVariance(leftY);\n const rightVariance = this.calculateVariance(rightY);\n\n const weightedVariance = (nLeft / n) * leftVariance + (nRight / n) * rightVariance;\n return parentVariance - weightedVariance; // Variance reduction\n }\n }\n\n calculateImpurity(y) {\n const counts = {};\n y.forEach(label => {\n counts[label] = (counts[label] || 0) + 1;\n });\n\n const n = y.length;\n const probabilities = Object.values(counts).map(count => count / n);\n\n if (this.criterion === 'gini') {\n return 1 - probabilities.reduce((sum, p) => sum + p * p, 0);\n } else if (this.criterion === 'entropy') {\n return -probabilities.reduce((sum, p) => sum + p * Math.log2(p), 0);\n }\n }\n\n calculateVariance(y) {\n if (y.length === 0) return 0;\n const mean = y.reduce((sum, val) => sum + val, 0) / y.length;\n return y.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / y.length;\n }\n\n predictSingle(x, node = this.tree) {\n if (node.isLeaf) {\n return node.prediction;\n }\n\n if (x[node.featureIdx] <= node.threshold) {\n return this.predictSingle(x, node.left);\n } else {\n return this.predictSingle(x, node.right);\n }\n }\n\n predict(X) {\n this.validatePredictionData(X);\n\n const X_test = X.map(row => Array.isArray(row) ? row : [row]);\n return X_test.map(x => this.predictSingle(x));\n }\n\n predictProba(X) {\n if (this.taskType !== 'classification') {\n throw new Error('predictProba is only available for classification tasks');\n }\n\n this.validatePredictionData(X);\n\n const X_test = X.map(row => Array.isArray(row) ? row : [row]);\n\n return X_test.map(x => {\n const leaf = this.findLeaf(x);\n const total = leaf.samples;\n const probas = {};\n\n this.classes.forEach(cls => {\n probas[cls] = (leaf.distribution[cls] || 0) / total;\n });\n\n return probas;\n });\n }\n\n findLeaf(x, node = this.tree) {\n if (node.isLeaf) {\n return node;\n }\n\n if (x[node.featureIdx] <= node.threshold) {\n return this.findLeaf(x, node.left);\n } else {\n return this.findLeaf(x, node.right);\n }\n }\n\n score(X, y) {\n const predictions = this.predict(X);\n\n if (this.taskType === 'classification') {\n let correct = 0;\n for (let i = 0; i < y.length; i++) {\n if (predictions[i] === y[i]) correct++;\n }\n const accuracy = correct / y.length;\n\n const cm = this.confusionMatrix(y, predictions);\n const metrics = this.calculateClassMetrics(cm);\n\n return {\n accuracy: accuracy,\n confusionMatrix: cm,\n classMetrics: metrics,\n predictions: predictions\n };\n } else {\n const yMean = y.reduce((sum, val) => sum + val, 0) / y.length;\n\n const ssRes = predictions.reduce((sum, pred, i) =>\n sum + Math.pow(y[i] - pred, 2), 0);\n const ssTot = y.reduce((sum, val) =>\n sum + Math.pow(val - yMean, 2), 0);\n\n const r2 = 1 - (ssRes / ssTot);\n const mse = ssRes / y.length;\n const rmse = Math.sqrt(mse);\n const mae = predictions.reduce((sum, pred, i) =>\n sum + Math.abs(y[i] - pred), 0) / y.length;\n\n return {\n r2Score: r2,\n mse: mse,\n rmse: rmse,\n mae: mae,\n predictions: predictions,\n residuals: predictions.map((pred, i) => y[i] - pred)\n };\n }\n }\n\n confusionMatrix(yTrue, yPred) {\n const n = this.classes.length;\n const matrix = Array(n).fill(0).map(() => Array(n).fill(0));\n\n for (let i = 0; i < yTrue.length; i++) {\n const trueIdx = this.classes.indexOf(yTrue[i]);\n const predIdx = this.classes.indexOf(yPred[i]);\n matrix[trueIdx][predIdx]++;\n }\n\n return {\n matrix: matrix,\n classes: this.classes,\n display: this.formatConfusionMatrix(matrix)\n };\n }\n\n formatConfusionMatrix(matrix) {\n const maxLen = Math.max(...matrix.flat().map(v => v.toString().length), 8);\n const pad = (str) => str.toString().padStart(maxLen);\n\n let output = '\\n' + ' '.repeat(maxLen + 2) + 'Predicted\\n';\n output += ' '.repeat(maxLen + 2) + this.classes.map(c => pad(c)).join(' ') + '\\n';\n\n for (let i = 0; i < matrix.length; i++) {\n if (i === 0) output += 'Actual ';\n else output += ' ';\n output += pad(this.classes[i]) + ' ';\n output += matrix[i].map(v => pad(v)).join(' ') + '\\n';\n }\n\n return output;\n }\n\n calculateClassMetrics(cm) {\n const matrix = cm.matrix;\n const metrics = {};\n\n this.classes.forEach((cls, i) => {\n const tp = matrix[i][i];\n const fn = matrix[i].reduce((sum, val) => sum + val, 0) - tp;\n const fp = matrix.map(row => row[i]).reduce((sum, val) => sum + val, 0) - tp;\n\n const precision = tp + fp > 0 ? tp / (tp + fp) : 0;\n const recall = tp + fn > 0 ? tp / (tp + fn) : 0;\n const f1 = precision + recall > 0 ? 2 * (precision * recall) / (precision + recall) : 0;\n\n metrics[cls] = {\n precision: precision,\n recall: recall,\n f1Score: f1,\n support: tp + fn\n };\n });\n\n return metrics;\n }\n\n getTreeDepth(node) {\n if (node.isLeaf) return 0;\n return 1 + Math.max(this.getTreeDepth(node.left), this.getTreeDepth(node.right));\n }\n\n getLeafCount(node) {\n if (node.isLeaf) return 1;\n return this.getLeafCount(node.left) + this.getLeafCount(node.right);\n }\n\n getNodeCount(node) {\n if (node.isLeaf) return 1;\n return 1 + this.getNodeCount(node.left) + this.getNodeCount(node.right);\n }\n\n getFeatureImportance() {\n const importance = {};\n this.calculateImportance(this.tree, importance);\n\n const total = Object.values(importance).reduce((sum, val) => sum + val, 0);\n Object.keys(importance).forEach(key => {\n importance[key] /= total;\n });\n\n return importance;\n }\n\n calculateImportance(node, importance) {\n if (node.isLeaf) return;\n\n const featureName = `feature_${node.featureIdx}`;\n importance[featureName] = (importance[featureName] || 0) + 1;\n\n this.calculateImportance(node.left, importance);\n this.calculateImportance(node.right, importance);\n }\n\n summary() {\n if (!this.trained) {\n throw new Error('Model must be trained first');\n }\n\n return {\n modelType: 'Decision Tree',\n taskType: this.taskType,\n trainingMetrics: this.trainingMetrics,\n featureImportance: this.getFeatureImportance(),\n hyperparameters: {\n maxDepth: this.maxDepth,\n minSamplesSplit: this.minSamplesSplit,\n minSamplesLeaf: this.minSamplesLeaf,\n criterion: this.criterion\n }\n };\n }\n}\n\nexport default DecisionTree;","import BaseModel from './baseModel.js';\nimport DecisionTree from './DecisionTree.js';\n\nclass RandomForest extends BaseModel {\n constructor(nEstimators = 100, maxDepth = 10, minSamplesSplit = 2, minSamplesLeaf = 1,\n maxFeatures = 'sqrt', criterion = 'gini', bootstrap = true) {\n super();\n this.nEstimators = nEstimators;\n this.maxDepth = maxDepth;\n this.minSamplesSplit = minSamplesSplit;\n this.minSamplesLeaf = minSamplesLeaf;\n this.maxFeatures = maxFeatures; // 'sqrt', 'log2', number, or null (all features)\n this.criterion = criterion;\n this.bootstrap = bootstrap;\n this.trees = [];\n this.taskType = null;\n this.classes = null;\n this.featureIndices = [];\n }\n\n fit(X, y, taskType = 'classification') {\n this.validateTrainingData(X, y);\n\n this.taskType = taskType;\n const X_train = X.map(row => Array.isArray(row) ? row : [row]);\n const nFeatures = X_train[0].length;\n\n if (taskType === 'classification') {\n this.classes = [...new Set(y)].sort();\n }\n\n const maxFeaturesCount = this.getMaxFeaturesCount(nFeatures);\n\n // Train multiple trees\n for (let i = 0; i < this.nEstimators; i++) {\n // Bootstrap sampling\n const { X_sample, y_sample } = this.bootstrap ?\n this.bootstrapSample(X_train, y) :\n { X_sample: X_train, y_sample: y };\n\n // Random feature selection\n const featureIndices = this.selectRandomFeatures(nFeatures, maxFeaturesCount);\n this.featureIndices.push(featureIndices);\n\n // Extract selected features\n const X_subset = X_sample.map(row =>\n featureIndices.map(idx => row[idx])\n );\n\n // Train tree\n const tree = new DecisionTree(\n this.maxDepth,\n this.minSamplesSplit,\n this.minSamplesLeaf,\n this.criterion\n );\n tree.fit(X_subset, y_sample, taskType);\n this.trees.push(tree);\n }\n\n this.trained = true;\n\n this.trainingMetrics = {\n nEstimators: this.nEstimators,\n avgTreeDepth: this.trees.reduce((sum, tree) =>\n sum + tree.trainingMetrics.treeDepth, 0) / this.nEstimators,\n avgLeafCount: this.trees.reduce((sum, tree) =>\n sum + tree.trainingMetrics.leafCount, 0) / this.nEstimators,\n taskType: this.taskType\n };\n\n return this;\n }\n\n getMaxFeaturesCount(nFeatures) {\n if (typeof this.maxFeatures === 'number') {\n return Math.min(this.maxFeatures, nFeatures);\n } else if (this.maxFeatures === 'sqrt') {\n return Math.floor(Math.sqrt(nFeatures));\n } else if (this.maxFeatures === 'log2') {\n return Math.floor(Math.log2(nFeatures));\n } else {\n return nFeatures; // null = all features\n }\n }\n\n selectRandomFeatures(nFeatures, count) {\n const indices = Array.from({ length: nFeatures }, (_, i) => i);\n const selected = [];\n\n for (let i = 0; i < count; i++) {\n const randomIdx = Math.floor(Math.random() * indices.length);\n selected.push(indices[randomIdx]);\n indices.splice(randomIdx, 1);\n }\n\n return selected.sort((a, b) => a - b);\n }\n\n bootstrapSample(X, y) {\n const n = X.length;\n const X_sample = [];\n const y_sample = [];\n\n for (let i = 0; i < n; i++) {\n const randomIdx = Math.floor(Math.random() * n);\n X_sample.push(X[randomIdx]);\n y_sample.push(y[randomIdx]);\n }\n\n return { X_sample, y_sample };\n }\n\n predict(X) {\n this.validatePredictionData(X);\n\n const X_test = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (this.taskType === 'classification') {\n return X_test.map(x => {\n const votes = {};\n\n this.trees.forEach((tree, idx) => {\n const X_subset = this.featureIndices[idx].map(i => x[i]);\n const prediction = tree.predict([X_subset])[0];\n votes[prediction] = (votes[prediction] || 0) + 1;\n });\n\n return Object.keys(votes).reduce((a, b) =>\n votes[a] > votes[b] ? a : b\n );\n });\n } else {\n return X_test.map(x => {\n const predictions = this.trees.map((tree, idx) => {\n const X_subset = this.featureIndices[idx].map(i => x[i]);\n return tree.predict([X_subset])[0];\n });\n\n return predictions.reduce((sum, pred) => sum + pred, 0) / predictions.length;\n });\n }\n }\n\n predictProba(X) {\n if (this.taskType !== 'classification') {\n throw new Error('predictProba is only available for classification tasks');\n }\n\n this.validatePredictionData(X);\n\n const X_test = X.map(row => Array.isArray(row) ? row : [row]);\n\n return X_test.map(x => {\n const classCounts = {};\n\n this.classes.forEach(cls => {\n classCounts[cls] = 0;\n });\n\n this.trees.forEach((tree, idx) => {\n const X_subset = this.featureIndices[idx].map(i => x[i]);\n const proba = tree.predictProba([X_subset])[0];\n\n Object.keys(proba).forEach(cls => {\n classCounts[cls] += proba[cls];\n });\n });\n\n const probas = {};\n Object.keys(classCounts).forEach(cls => {\n probas[cls] = classCounts[cls] / this.nEstimators;\n });\n\n return probas;\n });\n }\n\n score(X, y) {\n const predictions = this.predict(X);\n\n if (this.taskType === 'classification') {\n let correct = 0;\n for (let i = 0; i < y.length; i++) {\n if (predictions[i] === y[i]) correct++;\n }\n const accuracy = correct / y.length;\n\n const cm = this.confusionMatrix(y, predictions);\n const metrics = this.calculateClassMetrics(cm);\n\n return {\n accuracy: accuracy,\n confusionMatrix: cm,\n classMetrics: metrics,\n predictions: predictions\n };\n } else {\n const yMean = y.reduce((sum, val) => sum + val, 0) / y.length;\n\n const ssRes = predictions.reduce((sum, pred, i) =>\n sum + Math.pow(y[i] - pred, 2), 0);\n const ssTot = y.reduce((sum, val) =>\n sum + Math.pow(val - yMean, 2), 0);\n\n const r2 = 1 - (ssRes / ssTot);\n const mse = ssRes / y.length;\n const rmse = Math.sqrt(mse);\n const mae = predictions.reduce((sum, pred, i) =>\n sum + Math.abs(y[i] - pred), 0) / y.length;\n\n return {\n r2Score: r2,\n mse: mse,\n rmse: rmse,\n mae: mae,\n predictions: predictions,\n residuals: predictions.map((pred, i) => y[i] - pred)\n };\n }\n }\n\n confusionMatrix(yTrue, yPred) {\n const n = this.classes.length;\n const matrix = Array(n).fill(0).map(() => Array(n).fill(0));\n\n for (let i = 0; i < yTrue.length; i++) {\n const trueIdx = this.classes.indexOf(yTrue[i]);\n const predIdx = this.classes.indexOf(yPred[i]);\n matrix[trueIdx][predIdx]++;\n }\n\n return {\n matrix: matrix,\n classes: this.classes,\n display: this.formatConfusionMatrix(matrix)\n };\n }\n\n formatConfusionMatrix(matrix) {\n const maxLen = Math.max(...matrix.flat().map(v => v.toString().length), 8);\n const pad = (str) => str.toString().padStart(maxLen);\n\n let output = '\\n' + ' '.repeat(maxLen + 2) + 'Predicted\\n';\n output += ' '.repeat(maxLen + 2) + this.classes.map(c => pad(c)).join(' ') + '\\n';\n\n for (let i = 0; i < matrix.length; i++) {\n if (i === 0) output += 'Actual ';\n else output += ' ';\n output += pad(this.classes[i]) + ' ';\n output += matrix[i].map(v => pad(v)).join(' ') + '\\n';\n }\n\n return output;\n }\n\n calculateClassMetrics(cm) {\n const matrix = cm.matrix;\n const metrics = {};\n\n this.classes.forEach((cls, i) => {\n const tp = matrix[i][i];\n const fn = matrix[i].reduce((sum, val) => sum + val, 0) - tp;\n const fp = matrix.map(row => row[i]).reduce((sum, val) => sum + val, 0) - tp;\n\n const precision = tp + fp > 0 ? tp / (tp + fp) : 0;\n const recall = tp + fn > 0 ? tp / (tp + fn) : 0;\n const f1 = precision + recall > 0 ? 2 * (precision * recall) / (precision + recall) : 0;\n\n metrics[cls] = {\n precision: precision,\n recall: recall,\n f1Score: f1,\n support: tp + fn\n };\n });\n\n return metrics;\n }\n\n getFeatureImportance() {\n const nFeatures = this.featureIndices[0].length;\n const importance = Array(nFeatures).fill(0);\n\n this.trees.forEach((tree, idx) => {\n const treeImportance = tree.getFeatureImportance();\n const featureMap = this.featureIndices[idx];\n\n Object.keys(treeImportance).forEach(key => {\n const localIdx = parseInt(key.split('_')[1]);\n const globalIdx = featureMap[localIdx];\n importance[globalIdx] += treeImportance[key];\n });\n });\n\n const total = importance.reduce((sum, val) => sum + val, 0);\n return importance.map(val => val / total);\n }\n\n summary() {\n if (!this.trained) {\n throw new Error('Model must be trained first');\n }\n\n return {\n modelType: 'Random Forest',\n taskType: this.taskType,\n trainingMetrics: this.trainingMetrics,\n featureImportance: this.getFeatureImportance(),\n hyperparameters: {\n nEstimators: this.nEstimators,\n maxDepth: this.maxDepth,\n minSamplesSplit: this.minSamplesSplit,\n minSamplesLeaf: this.minSamplesLeaf,\n maxFeatures: this.maxFeatures,\n criterion: this.criterion,\n bootstrap: this.bootstrap\n }\n };\n }\n}\n\nexport default RandomForest;","import BaseModel from './baseModel.js';\n\nclass NaiveBayes extends BaseModel {\n constructor(type = 'gaussian') {\n super();\n this.type = type; // 'gaussian', 'multinomial', 'bernoulli'\n this.classes = null;\n this.classPriors = {};\n this.parameters = {};\n }\n\n fit(X, y) {\n this.validateTrainingData(X, y);\n\n const X_train = X.map(row => Array.isArray(row) ? row : [row]);\n this.classes = [...new Set(y)].sort();\n const nSamples = X_train.length;\n const nFeatures = X_train[0].length;\n\n // Calculate class priors\n this.classes.forEach(cls => {\n const count = y.filter(label => label === cls).length;\n this.classPriors[cls] = count / nSamples;\n });\n\n // Calculate parameters for each class\n if (this.type === 'gaussian') {\n this.fitGaussian(X_train, y, nFeatures);\n } else if (this.type === 'multinomial') {\n this.fitMultinomial(X_train, y, nFeatures);\n } else if (this.type === 'bernoulli') {\n this.fitBernoulli(X_train, y, nFeatures);\n }\n\n this.trained = true;\n\n this.trainingMetrics = {\n nClasses: this.classes.length,\n nFeatures: nFeatures,\n nSamples: nSamples,\n type: this.type\n };\n\n return this;\n }\n\n fitGaussian(X, y, nFeatures) {\n this.classes.forEach(cls => {\n const classData = X.filter((_, idx) => y[idx] === cls);\n this.parameters[cls] = {\n means: [],\n variances: []\n };\n\n for (let j = 0; j < nFeatures; j++) {\n const feature = classData.map(row => row[j]);\n const mean = feature.reduce((sum, val) => sum + val, 0) / feature.length;\n const variance = feature.reduce((sum, val) =>\n sum + Math.pow(val - mean, 2), 0) / feature.length;\n\n this.parameters[cls].means.push(mean);\n this.parameters[cls].variances.push(variance + 1e-9); // Add small value to avoid division by zero\n }\n });\n }\n\n fitMultinomial(X, y, nFeatures) {\n const alpha = 1.0; // Laplace smoothing\n\n this.classes.forEach(cls => {\n const classData = X.filter((_, idx) => y[idx] === cls);\n this.parameters[cls] = {\n featureProbs: []\n };\n\n for (let j = 0; j < nFeatures; j++) {\n const featureSum = classData.reduce((sum, row) => sum + row[j], 0);\n const totalCount = classData.reduce((sum, row) =>\n sum + row.reduce((s, val) => s + val, 0), 0);\n\n const prob = (featureSum + alpha) / (totalCount + alpha * nFeatures);\n this.parameters[cls].featureProbs.push(prob);\n }\n });\n }\n\n fitBernoulli(X, y, nFeatures) {\n const alpha = 1.0; // Laplace smoothing\n\n this.classes.forEach(cls => {\n const classData = X.filter((_, idx) => y[idx] === cls);\n const nClassSamples = classData.length;\n\n this.parameters[cls] = {\n featureProbs: []\n };\n\n for (let j = 0; j < nFeatures; j++) {\n const featureCount = classData.filter(row => row[j] === 1).length;\n const prob = (featureCount + alpha) / (nClassSamples + 2 * alpha);\n this.parameters[cls].featureProbs.push(prob);\n }\n });\n }\n\n gaussianProbability(x, mean, variance) {\n const exponent = Math.exp(-Math.pow(x - mean, 2) / (2 * variance));\n return exponent / Math.sqrt(2 * Math.PI * variance);\n }\n\n predictSingle(x) {\n const posteriors = {};\n\n this.classes.forEach(cls => {\n let logProb = Math.log(this.classPriors[cls]);\n\n if (this.type === 'gaussian') {\n const params = this.parameters[cls];\n for (let j = 0; j < x.length; j++) {\n const prob = this.gaussianProbability(x[j], params.means[j], params.variances[j]);\n logProb += Math.log(prob + 1e-9);\n }\n } else if (this.type === 'multinomial') {\n const params = this.parameters[cls];\n for (let j = 0; j < x.length; j++) {\n logProb += x[j] * Math.log(params.featureProbs[j] + 1e-9);\n }\n } else if (this.type === 'bernoulli') {\n const params = this.parameters[cls];\n for (let j = 0; j < x.length; j++) {\n const prob = x[j] === 1 ? params.featureProbs[j] : 1 - params.featureProbs[j];\n logProb += Math.log(prob + 1e-9);\n }\n }\n\n posteriors[cls] = logProb;\n });\n\n return Object.keys(posteriors).reduce((a, b) =>\n posteriors[a] > posteriors[b] ? a : b\n );\n }\n\n predict(X) {\n this.validatePredictionData(X);\n\n const X_test = X.map(row => Array.isArray(row) ? row : [row]);\n return X_test.map(x => this.predictSingle(x));\n }\n\n predictProba(X) {\n this.validatePredictionData(X);\n\n const X_test = X.map(row => Array.isArray(row) ? row : [row]);\n\n return X_test.map(x => {\n const logPosteriors = {};\n\n this.classes.forEach(cls => {\n let logProb = Math.log(this.classPriors[cls]);\n\n if (this.type === 'gaussian') {\n const params = this.parameters[cls];\n for (let j = 0; j < x.length; j++) {\n const prob = this.gaussianProbability(x[j], params.means[j], params.variances[j]);\n logProb += Math.log(prob + 1e-9);\n }\n } else if (this.type === 'multinomial') {\n const params = this.parameters[cls];\n for (let j = 0; j < x.length; j++) {\n logProb += x[j] * Math.log(params.featureProbs[j] + 1e-9);\n }\n } else if (this.type === 'bernoulli') {\n const params = this.parameters[cls];\n for (let j = 0; j < x.length; j++) {\n const prob = x[j] === 1 ? params.featureProbs[j] : 1 - params.featureProbs[j];\n logProb += Math.log(prob + 1e-9);\n }\n }\n\n logPosteriors[cls] = logProb;\n });\n\n // Convert log probabilities to probabilities\n const maxLogProb = Math.max(...Object.values(logPosteriors));\n const expProbs = {};\n let sumExpProbs = 0;\n\n this.classes.forEach(cls => {\n expProbs[cls] = Math.exp(logPosteriors[cls] - maxLogProb);\n sumExpProbs += expProbs[cls];\n });\n\n const probas = {};\n this.classes.forEach(cls => {\n probas[cls] = expProbs[cls] / sumExpProbs;\n });\n\n return probas;\n });\n }\n\n score(X, y) {\n const predictions = this.predict(X);\n\n let correct = 0;\n for (let i = 0; i < y.length; i++) {\n if (predictions[i] === y[i]) correct++;\n }\n const accuracy = correct / y.length;\n\n const cm = this.confusionMatrix(y, predictions);\n const metrics = this.calculateClassMetrics(cm);\n\n return {\n accuracy: accuracy,\n confusionMatrix: cm,\n classMetrics: metrics,\n predictions: predictions\n };\n }\n\n confusionMatrix(yTrue, yPred) {\n const n = this.classes.length;\n const matrix = Array(n).fill(0).map(() => Array(n).fill(0));\n\n for (let i = 0; i < yTrue.length; i++) {\n const trueIdx = this.classes.indexOf(yTrue[i]);\n const predIdx = this.classes.indexOf(yPred[i]);\n matrix[trueIdx][predIdx]++;\n }\n\n return {\n matrix: matrix,\n classes: this.classes,\n display: this.formatConfusionMatrix(matrix)\n };\n }\n\n formatConfusionMatrix(matrix) {\n const maxLen = Math.max(...matrix.flat().map(v => v.toString().length), 8);\n const pad = (str) => str.toString().padStart(maxLen);\n\n let output = '\\n' + ' '.repeat(maxLen + 2) + 'Predicted\\n';\n output += ' '.repeat(maxLen + 2) + this.classes.map(c => pad(c)).join(' ') + '\\n';\n\n for (let i = 0; i < matrix.length; i++) {\n if (i === 0) output += 'Actual ';\n else output += ' ';\n output += pad(this.classes[i]) + ' ';\n output += matrix[i].map(v => pad(v)).join(' ') + '\\n';\n }\n\n return output;\n }\n\n calculateClassMetrics(cm) {\n const matrix = cm.matrix;\n const metrics = {};\n\n this.classes.forEach((cls, i) => {\n const tp = matrix[i][i];\n const fn = matrix[i].reduce((sum, val) => sum + val, 0) - tp;\n const fp = matrix.map(row => row[i]).reduce((sum, val) => sum + val, 0) - tp;\n\n const precision = tp + fp > 0 ? tp / (tp + fp) : 0;\n const recall = tp + fn > 0 ? tp / (tp + fn) : 0;\n const f1 = precision + recall > 0 ? 2 * (precision * recall) / (precision + recall) : 0;\n\n metrics[cls] = {\n precision: precision,\n recall: recall,\n f1Score: f1,\n support: tp + fn\n };\n });\n\n return metrics;\n }\n\n summary() {\n if (!this.trained) {\n throw new Error('Model must be trained first');\n }\n\n return {\n modelType: 'Naive Bayes',\n naiveBayesType: this.type,\n classes: this.classes,\n classPriors: this.classPriors,\n trainingMetrics: this.trainingMetrics\n };\n }\n}\n\nexport default NaiveBayes;","import BaseModel from './baseModel.js';\n\nclass SupportVectorMachine extends BaseModel {\n constructor(C = 1.0, kernel = 'linear', gamma = 'scale', degree = 3, learningRate = 0.001, iterations = 1000) {\n super();\n this.C = C; // Regularization parameter\n this.kernel = kernel; // 'linear', 'rbf', 'poly'\n this.gamma = gamma; // Kernel coefficient ('scale', 'auto', or number)\n this.degree = degree; // Degree for polynomial kernel\n this.learningRate = learningRate;\n this.iterations = iterations;\n this.weights = null;\n this.bias = null;\n this.supportVectors = null;\n this.classes = null;\n this.normParams = null;\n }\n\n fit(X, y, normalize = true) {\n this.validateTrainingData(X, y);\n\n let X_train = X.map(row => Array.isArray(row) ? row : [row]);\n this.classes = [...new Set(y)].sort();\n\n if (this.classes.length !== 2) {\n throw new Error('SVM currently only supports binary classification');\n }\n\n // Convert labels to -1 and 1\n const yBinary = y.map(label => label === this.classes[1] ? 1 : -1);\n\n if (normalize) {\n const { normalized, means, stds } = this.normalizeFeatures(X_train);\n X_train = normalized;\n this.normParams = { means, stds };\n }\n\n const nSamples = X_train.length;\n const nFeatures = X_train[0].length;\n\n // Calculate gamma if set to 'scale' or 'auto'\n if (this.gamma === 'scale') {\n const variance = this.calculateVariance(X_train);\n this.gamma = 1 / (nFeatures * variance);\n } else if (this.gamma === 'auto') {\n this.gamma = 1 / nFeatures;\n }\n\n // Initialize weights and bias\n this.weights = Array(nFeatures).fill(0);\n this.bias = 0;\n\n const losses = [];\n\n // Simplified SMO-like algorithm (gradient descent)\n for (let iter = 0; iter < this.iterations; iter++) {\n let loss = 0;\n\n for (let i = 0; i < nSamples; i++) {\n const xi = X_train[i];\n const yi = yBinary[i];\n\n const prediction = this.decisionFunction([xi])[0];\n const margin = yi * prediction;\n\n if (margin < 1) {\n // Update weights for misclassified or margin violations\n for (let j = 0; j < nFeatures; j++) {\n this.weights[j] += this.learningRate * (yi * xi[j] - 2 * (1 / this.C) * this.weights[j]);\n }\n this.bias += this.learningRate * yi;\n loss += 1 - margin;\n } else {\n // Update weights for correct classifications\n for (let j = 0; j < nFeatures; j++) {\n this.weights[j] += this.learningRate * (-2 * (1 / this.C) * this.weights[j]);\n }\n }\n }\n\n // Add regularization term to loss\n const regTerm = (1 / this.C) * this.weights.reduce((sum, w) => sum + w * w, 0);\n losses.push(loss / nSamples + regTerm);\n }\n\n // Identify support vectors (samples near the margin)\n this.identifySupportVectors(X_train, yBinary);\n\n this.trained = true;\n\n this.trainingMetrics = {\n finalLoss: losses[losses.length - 1],\n losses: losses,\n nSupportVectors: this.supportVectors.length,\n supportVectorRatio: this.supportVectors.length / nSamples\n };\n\n return this;\n }\n\n calculateVariance(X) {\n const n = X.length;\n const m = X[0].length;\n let totalVariance = 0;\n\n for (let j = 0; j < m; j++) {\n const column = X.map(row => row[j]);\n const mean = column.reduce((sum, val) => sum + val, 0) / n;\n const variance = column.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / n;\n totalVariance += variance;\n }\n\n return totalVariance / m;\n }\n\n identifySupportVectors(X, y) {\n this.supportVectors = [];\n\n for (let i = 0; i < X.length; i++) {\n const prediction = this.decisionFunction([X[i]])[0];\n const margin = Math.abs(prediction);\n\n // Support vectors are points close to the decision boundary\n if (margin < 1.5) {\n this.supportVectors.push({\n index: i,\n vector: X[i],\n label: y[i],\n margin: margin\n });\n }\n }\n }\n\n kernelFunction(x1, x2) {\n if (this.kernel === 'linear') {\n return x1.reduce((sum, val, i) => sum + val * x2[i], 0);\n } else if (this.kernel === 'rbf') {\n const squaredDistance = x1.reduce((sum, val, i) =>\n sum + Math.pow(val - x2[i], 2), 0);\n return Math.exp(-this.gamma * squaredDistance);\n } else if (this.kernel === 'poly') {\n const dotProduct = x1.reduce((sum, val, i) => sum + val * x2[i], 0);\n return Math.pow(dotProduct + 1, this.degree);\n }\n\n return 0;\n }\n\n decisionFunction(X) {\n return X.map(x => {\n let score = this.bias;\n for (let j = 0; j < this.weights.length; j++) {\n score += this.weights[j] * x[j];\n }\n return score;\n });\n }\n\n predict(X) {\n this.validatePredictionData(X);\n\n let X_test = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (this.normParams) {\n const { means, stds } = this.normParams;\n X_test = X_test.map(row =>\n row.map((val, j) => (val - means[j]) / stds[j])\n );\n }\n\n const decisions = this.decisionFunction(X_test);\n return decisions.map(score => score >= 0 ? this.classes[1] : this.classes[0]);\n }\n\n predictProba(X) {\n this.validatePredictionData(X);\n\n let X_test = X.map(row => Array.isArray(row) ? row : [row]);\n\n if (this.normParams) {\n const { means, stds } = this.normParams;\n X_test = X_test.map(row =>\n row.map((val, j) => (val - means[j]) / stds[j])\n );\n }\n\n const decisions = this.decisionFunction(X_test);\n\n // Use sigmoid function to convert decision scores to probabilities\n return decisions.map(score => {\n const prob1 = 1 / (1 + Math.exp(-score));\n return {\n [this.classes[0]]: 1 - prob1,\n [this.classes[1]]: prob1\n };\n });\n }\n\n score(X, y) {\n const predictions = this.predict(X);\n\n let correct = 0;\n for (let i = 0; i < y.length; i++) {\n if (predictions[i] === y[i]) correct++;\n }\n const accuracy = correct / y.length;\n\n const cm = this.confusionMatrix(y, predictions);\n const metrics = this.calculateClassMetrics(cm);\n\n return {\n accuracy: accuracy,\n confusionMatrix: cm,\n classMetrics: metrics,\n predictions: predictions\n };\n }\n\n confusionMatrix(yTrue, yPred) {\n const n = this.classes.length;\n const matrix = Array(n).fill(0).map(() => Array(n).fill(0));\n\n for (let i = 0; i < yTrue.length; i++) {\n const trueIdx = this.classes.indexOf(yTrue[i]);\n const predIdx = this.classes.indexOf(yPred[i]);\n matrix[trueIdx][predIdx]++;\n }\n\n return {\n matrix: matrix,\n classes: this.classes,\n display: this.formatConfusionMatrix(matrix)\n };\n }\n\n formatConfusionMatrix(matrix) {\n const maxLen = Math.max(...matrix.flat().map(v => v.toString().length), 8);\n const pad = (str) => str.toString().padStart(maxLen);\n\n let output = '\\n' + ' '.repeat(maxLen + 2) + 'Predicted\\n';\n output += ' '.repeat(maxLen + 2) + this.classes.map(c => pad(c)).join(' ') + '\\n';\n\n for (let i = 0; i < matrix.length; i++) {\n if (i === 0) output += 'Actual ';\n else output += ' ';\n output += pad(this.classes[i]) + ' ';\n output += matrix[i].map(v => pad(v)).join(' ') + '\\n';\n }\n\n return output;\n }\n\n calculateClassMetrics(cm) {\n const matrix = cm.matrix;\n const metrics = {};\n\n this.classes.forEach((cls, i) => {\n const tp = matrix[i][i];\n const fn = matrix[i].reduce((sum, val) => sum + val, 0) - tp;\n const fp = matrix.map(row => row[i]).reduce((sum, val) => sum + val, 0) - tp;\n\n const precision = tp + fp > 0 ? tp / (tp + fp) : 0;\n const recall = tp + fn > 0 ? tp / (tp + fn) : 0;\n const f1 = precision + recall > 0 ? 2 * (precision * recall) / (precision + recall) : 0;\n\n metrics[cls] = {\n precision: precision,\n recall: recall,\n f1Score: f1,\n support: tp + fn\n };\n });\n\n return metrics;\n }\n\n summary() {\n if (!this.trained) {\n throw new Error('Model must be trained first');\n }\n\n return {\n modelType: 'Support Vector Machine',\n classes: this.classes,\n trainingMetrics: this.trainingMetrics,\n hyperparameters: {\n C: this.C,\n kernel: this.kernel,\n gamma: this.gamma,\n degree: this.degree,\n learningRate: this.learningRate,\n iterations: this.iterations\n }\n };\n }\n}\n\nexport default SupportVectorMachine;","import LinearRegression from './LinearRegression.js';\nimport LogisticRegression from './LogisticRegression.js';\nimport KNearestNeighbors from './KNearestNeighbors.js';\nimport DecisionTree from './DecisionTree.js';\nimport RandomForest from './RandomForest.js';\nimport NaiveBayes from './NaiveBayes.js';\nimport SupportVectorMachine from './SupportVectorMachine.js';\n\nclass MachineLearning {\n constructor() {\n // Models are instantiated on demand\n }\n\n // ====== Regression Models ======\n createLinearRegression(options = {}) {\n const {\n learningRate = 0.01,\n iterations = 1000,\n regularization = null,\n lambda = 0.01\n } = options;\n\n return new LinearRegression(learningRate, iterations, regularization, lambda);\n }\n\n // ====== Classification Models ======\n createLogisticRegression(options = {}) {\n const {\n learningRate = 0.01,\n iterations = 1000,\n regularization = null,\n lambda = 0.01\n } = options;\n\n return new LogisticRegression(learningRate, iterations, regularization, lambda);\n }\n\n createKNN(options = {}) {\n const {\n k = 5,\n metric = 'euclidean',\n weights = 'uniform'\n } = options;\n\n return new KNearestNeighbors(k, metric, weights);\n }\n\n createDecisionTree(options = {}) {\n const {\n maxDepth = 10,\n minSamplesSplit = 2,\n minSamplesLeaf = 1,\n criterion = 'gini'\n } = options;\n\n return new DecisionTree(maxDepth, minSamplesSplit, minSamplesLeaf, criterion);\n }\n\n createRandomForest(options = {}) {\n const {\n nEstimators = 100,\n maxDepth = 10,\n minSamplesSplit = 2,\n minSamplesLeaf = 1,\n maxFeatures = 'sqrt',\n criterion = 'gini',\n bootstrap = true\n } = options;\n\n return new RandomForest(\n nEstimators,\n maxDepth,\n minSamplesSplit,\n minSamplesLeaf,\n maxFeatures,\n criterion,\n bootstrap\n );\n }\n\n createNaiveBayes(options = {}) {\n const { type = 'gaussian' } = options;\n return new NaiveBayes(type);\n }\n\n createSVM(options = {}) {\n const {\n C = 1.0,\n kernel = 'linear',\n gamma = 'scale',\n degree = 3,\n learningRate = 0.001,\n iterations = 1000\n } = options;\n\n return new SupportVectorMachine(C, kernel, gamma, degree, learningRate, iterations);\n }\n\n // ====== Model Evaluation Utilities ======\n crossValidate(model, X, y, folds = 5, taskType = 'classification') {\n const n = X.length;\n const foldSize = Math.floor(n / folds);\n const indices = Array.from({ length: n }, (_, i) => i);\n\n // Shuffle indices\n for (let i = n - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [indices[i], indices[j]] = [indices[j], indices[i]];\n }\n\n const scores = [];\n\n for (let fold = 0; fold < folds; fold++) {\n const testStart = fold * foldSize;\n const testEnd = fold === folds - 1 ? n : testStart + foldSize;\n\n const testIndices = indices.slice(testStart, testEnd);\n const trainIndices = [...indices.slice(0, testStart), ...indices.slice(testEnd)];\n\n const X_train = trainIndices.map(i => X[i]);\n const y_train = trainIndices.map(i => y[i]);\n const X_test = testIndices.map(i => X[i]);\n const y_test = testIndices.map(i => y[i]);\n\n // Create a new instance of the model\n const foldModel = Object.create(Object.getPrototypeOf(model));\n Object.assign(foldModel, model);\n\n // Train and evaluate\n foldModel.fit(X_train, y_train, taskType);\n const result = foldModel.score(X_test, y_test);\n\n if (taskType === 'classification') {\n scores.push(result.accuracy);\n } else {\n scores.push(result.r2Score);\n }\n }\n\n const meanScore = scores.reduce((sum, s) => sum + s, 0) / scores.length;\n const stdScore = Math.sqrt(\n scores.reduce((sum, s) => sum + Math.pow(s - meanScore, 2), 0) / scores.length\n );\n\n return {\n scores: scores,\n meanScore: meanScore,\n stdScore: stdScore,\n folds: folds\n };\n }\n\n trainTestSplit(X, y, testSize = 0.2, shuffle = true) {\n const n = X.length;\n const indices = Array.from({ length: n }, (_, i) => i);\n\n if (shuffle) {\n for (let i = n - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [indices[i], indices[j]] = [indices[j], indices[i]];\n }\n }\n\n const testCount = Math.floor(n * testSize);\n const trainCount = n - testCount;\n\n const trainIndices = indices.slice(0, trainCount);\n const testIndices = indices.slice(trainCount);\n\n return {\n X_train: trainIndices.map(i => X[i]),\n X_test: testIndices.map(i => X[i]),\n y_train: trainIndices.map(i => y[i]),\n y_test: testIndices.map(i => y[i])\n };\n }\n\n // ====== Model Comparison ======\n compareModels(models, X, y, taskType = 'classification') {\n const { X_train, X_test, y_train, y_test } = this.trainTestSplit(X, y, 0.2);\n const results = [];\n\n models.forEach(({ name, model }) => {\n const startTime = Date.now();\n\n model.fit(X_train, y_train, taskType);\n const trainTime = Date.now() - startTime;\n\n const evalStart = Date.now();\n const score = model.score(X_test, y_test);\n const evalTime = Date.now() - evalStart;\n\n results.push({\n name: name,\n score: taskType === 'classification' ? score.accuracy : score.r2Score,\n trainTime: trainTime,\n evalTime: evalTime,\n fullScore: score\n });\n });\n\n // Sort by score\n results.sort((a, b) => b.score - a.score);\n\n return {\n results: results,\n bestModel: results[0],\n comparison: this.generateComparisonReport(results, taskType)\n };\n }\n\n generateComparisonReport(results, taskType) {\n const metric = taskType === 'classification' ? 'Accuracy' : 'R² Score';\n\n let report = '\\n' + '='.repeat(70) + '\\n';\n report += '📊 MODEL COMPARISON REPORT\\n';\n report += '='.repeat(70) + '\\n\\n';\n\n report += `Metric: ${metric}\\n\\n`;\n report += 'Rank | Model | Score | Train Time | Eval Time\\n';\n report += '-----+-------------------------+----------+------------+-----------\\n';\n\n results.forEach((result, idx) => {\n const rank = (idx + 1).toString().padStart(4);\n const name = result.name.padEnd(24);\n const score = result.score.toFixed(4).padStart(8);\n const trainTime = (result.trainTime + 'ms').padStart(10);\n const evalTime = (result.evalTime + 'ms').padStart(9);\n\n report += `${rank} | ${name} | ${score} | ${trainTime} | ${evalTime}\\n`;\n });\n\n report += '\\n' + '='.repeat(70) + '\\n';\n report += `🏆 Best Model: ${results[0].name} (${metric}: ${results[0].score.toFixed(4)})\\n`;\n report += '='.repeat(70) + '\\n';\n\n return report;\n }\n\n // ====== Feature Engineering ======\n polynomialFeatures(X, degree = 2) {\n return X.map(row => {\n const features = [...row];\n\n // Add polynomial features\n for (let d = 2; d <= degree; d++) {\n for (let i = 0; i < row.length; i++) {\n features.push(Math.pow(row[i], d));\n }\n }\n\n // Add interaction features\n if (degree >= 2) {\n for (let i = 0; i < row.length; i++) {\n for (let j = i + 1; j < row.length; j++) {\n features.push(row[i] * row[j]);\n }\n }\n }\n\n return features;\n });\n }\n\n standardScaler(X) {\n const n = X.length;\n const m = X[0].length;\n const means = [];\n const stds = [];\n\n for (let j = 0; j < m; j++) {\n const column = X.map(row => row[j]);\n const mean = column.reduce((sum, val) => sum + val, 0) / n;\n const variance = column.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / n;\n const std = Math.sqrt(variance);\n\n means.push(mean);\n stds.push(std === 0 ? 1 : std);\n }\n\n const scaled = X.map(row =>\n row.map((val, j) => (val - means[j]) / stds[j])\n );\n\n return {\n scaled: scaled,\n means: means,\n stds: stds,\n transform: (newX) => newX.map(row =>\n row.map((val, j) => (val - means[j]) / stds[j])\n )\n };\n }\n\n minMaxScaler(X, featureRange = [0, 1]) {\n const n = X.length;\n const m = X[0].length;\n const mins = [];\n const maxs = [];\n const [min_range, max_range] = featureRange;\n\n for (let j = 0; j < m; j++) {\n const column = X.map(row => row[j]);\n mins.push(Math.min(...column));\n maxs.push(Math.max(...column));\n }\n\n const scaled = X.map(row =>\n row.map((val, j) => {\n const range = maxs[j] - mins[j];\n if (range === 0) return min_range;\n return min_range + ((val - mins[j]) / range) * (max_range - min_range);\n })\n );\n\n return {\n scaled: scaled,\n mins: mins,\n maxs: maxs,\n transform: (newX) => newX.map(row =>\n row.map((val, j) => {\n const range = maxs[j] - mins[j];\n if (range === 0) return min_range;\n return min_range + ((val - mins[j]) / range) * (max_range - min_range);\n })\n )\n };\n }\n\n // ====== Metrics ======\n rocCurve(yTrue, yProba) {\n const scores = yProba.map((proba, i) => ({\n probability: typeof proba === 'object' ? Object.values(proba)[1] : proba,\n label: yTrue[i]\n }));\n\n scores.sort((a, b) => b.probability - a.probability);\n\n const positives = yTrue.filter(y => y === 1 || y === true).length;\n const negatives = yTrue.length - positives;\n\n const tpr = [0];\n const fpr = [0];\n let tp = 0;\n let fp = 0;\n\n scores.forEach(score => {\n if (score.label === 1 || score.label === true) {\n tp++;\n } else {\n fp++;\n }\n tpr.push(tp / positives);\n fpr.push(fp / negatives);\n });\n\n // Calculate AUC using trapezoidal rule\n let auc = 0;\n for (let i = 1; i < fpr.length; i++) {\n auc += (fpr[i] - fpr[i - 1]) * (tpr[i] + tpr[i - 1]) / 2;\n }\n\n return {\n fpr: fpr,\n tpr: tpr,\n auc: auc,\n thresholds: scores.map(s => s.probability)\n };\n }\n\n precisionRecallCurve(yTrue, yProba) {\n const scores = yProba.map((proba, i) => ({\n probability: typeof proba === 'object' ? Object.values(proba)[1] : proba,\n label: yTrue[i]\n }));\n\n scores.sort((a, b) => b.probability - a.probability);\n\n const precision = [];\n const recall = [];\n let tp = 0;\n let fp = 0;\n const totalPositives = yTrue.filter(y => y === 1 || y === true).length;\n\n scores.forEach(score => {\n if (score.label === 1 || score.label === true) {\n tp++;\n } else {\n fp++;\n }\n\n const currentPrecision = tp / (tp + fp);\n const currentRecall = tp / totalPositives;\n\n precision.push(currentPrecision);\n recall.push(currentRecall);\n });\n\n return {\n precision: precision,\n recall: recall,\n thresholds: scores.map(s => s.probability)\n };\n }\n\n // ====== Quick Training Helper ======\n quickTrain(modelType, X, y, options = {}) {\n const { taskType = 'classification', testSize = 0.2, normalize = true } = options;\n\n let model;\n\n switch (modelType.toLowerCase()) {\n case 'linear':\n case 'linearregression':\n model = this.createLinearRegression(options);\n break;\n case 'logistic':\n case 'logisticregression':\n model = this.createLogisticRegression(options);\n break;\n case 'knn':\n model = this.createKNN(options);\n break;\n case 'tree':\n case 'decisiontree':\n model = this.createDecisionTree(options);\n break;\n case 'forest':\n case 'randomforest':\n model = this.createRandomForest(options);\n break;\n case 'naivebayes':\n case 'nb':\n model = this.createNaiveBayes(options);\n break;\n case 'svm':\n model = this.createSVM(options);\n break;\n default:\n throw new Error(`Unknown model type: ${modelType}`);\n }\n\n const { X_train, X_test, y_train, y_test } = this.trainTestSplit(X, y, testSize);\n\n console.log(`\\n🚀 Training ${modelType}...`);\n const startTime = Date.now();\n\n model.fit(X_train, y_train, normalize, taskType);\n\n const trainTime = Date.now() - startTime;\n console.log(`✅ Training completed in ${trainTime}ms`);\n\n console.log(`\\n📊 Evaluating model...`);\n const score = model.score(X_test, y_test);\n\n console.log(`\\n${'='.repeat(60)}`);\n console.log(`📈 RESULTS`);\n console.log(`${'='.repeat(60)}`);\n\n if (taskType === 'classification') {\n console.log(`Accuracy: ${(score.accuracy * 100).toFixed(2)}%`);\n console.log(`\\nConfusion Matrix:${score.confusionMatrix.display}`);\n\n console.log(`\\nPer-Class Metrics:`);\n Object.keys(score.classMetrics).forEach(cls => {\n const m = score.classMetrics[cls];\n console.log(` ${cls}:`);\n console.log(` Precision: ${(m.precision * 100).toFixed(2)}%`);\n console.log(` Recall: ${(m.recall * 100).toFixed(2)}%`);\n console.log(` F1-Score: ${(m.f1Score * 100).toFixed(2)}%`);\n });\n } else {\n console.log(`R² Score: ${score.r2Score.toFixed(4)}`);\n console.log(`MSE: ${score.mse.toFixed(4)}`);\n console.log(`RMSE: ${score.rmse.toFixed(4)}`);\n console.log(`MAE: ${score.mae.toFixed(4)}`);\n }\n\n console.log(`\\n${'='.repeat(60)}\\n`);\n\n return {\n model: model,\n score: score,\n trainTime: trainTime,\n summary: model.summary()\n };\n }\n}\n\nexport default MachineLearning;","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","export default function extent(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","export default function identity(x) {\n return x;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function constant(x) {\n return () => x;\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n","export default function count(values, valueof) {\n let count = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count;\n }\n }\n }\n return count;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","export default function(x) {\n return x;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","// d3-selection\nimport { select, selectAll } from \"d3-selection\";\nimport {\n scaleLinear,\n scaleBand,\n scalePoint,\n scaleOrdinal,\n scaleSequential,\n} from \"d3-scale\";\nimport {\n extent,\n max,\n min,\n sum,\n range,\n mean,\n deviation,\n histogram,\n quantile,\n} from \"d3-array\";\nimport { axisBottom, axisLeft } from \"d3-axis\";\nimport {\n schemeCategory10,\n interpolateRdYlBu,\n interpolateViridis,\n} from \"d3-scale-chromatic\";\nimport { line, area, curveBasis, pie, arc } from \"d3-shape\";\n\nconst d3 = {\n select,\n selectAll,\n scaleLinear,\n scaleBand,\n scalePoint,\n scaleOrdinal,\n scaleSequential,\n extent,\n max,\n min,\n sum,\n deviation,\n mean,\n quantile,\n histogram,\n range,\n axisBottom,\n axisLeft,\n line,\n area,\n curveBasis,\n pie,\n arc,\n schemeCategory10,\n interpolateViridis,\n interpolateRdYlBu,\n};\n\nclass DataViz {\n constructor(containerId = \"dataviz-container\") {\n this.containerId = containerId;\n this.defaultWidth = 800;\n this.defaultHeight = 600;\n this.defaultMargin = { top: 40, right: 40, bottom: 60, left: 60 };\n this.colors = d3.schemeCategory10;\n }\n\n /**\n * Cria ou atualiza um container para visualização\n * @param {string} containerId - ID do elemento container\n * @param {number} width - Largura do SVG\n * @param {number} height - Altura do SVG\n */\n createContainer(\n containerId,\n width = this.defaultWidth,\n height = this.defaultHeight\n ) {\n const targetId = containerId || this.containerId;\n let container = d3.select(`#${targetId}`);\n\n if (container.empty()) {\n container = d3\n .select(\"body\")\n .append(\"div\")\n .attr(\"id\", targetId)\n .style(\"margin\", \"20px\");\n }\n\n container.selectAll(\"*\").remove();\n\n const svg = container\n .append(\"svg\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .style(\"background\", \"#fff\")\n .style(\"border\", \"1px solid #ddd\")\n .style(\"border-radius\", \"8px\");\n\n return { container, svg };\n }\n\n // ============================================\n // HISTOGRAMA\n // ============================================\n histogram(data, options = {}) {\n const {\n title = \"Histogram\",\n xlabel = \"Value\",\n ylabel = \"Frequency\",\n bins = 30,\n color = \"#4299e1\",\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = this.defaultMargin;\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const x = d3.scaleLinear().domain(d3.extent(data)).range([0, innerWidth]);\n\n const histogram = d3\n .histogram()\n .domain(x.domain())\n .thresholds(x.ticks(bins));\n\n const histData = histogram(data);\n\n const y = d3\n .scaleLinear()\n .domain([0, d3.max(histData, (d) => d.length)])\n .range([innerHeight, 0]);\n\n g.selectAll(\"rect\")\n .data(histData)\n .join(\"rect\")\n .attr(\"x\", (d) => x(d.x0) + 1)\n .attr(\"width\", (d) => Math.max(0, x(d.x1) - x(d.x0) - 2))\n .attr(\"y\", (d) => y(d.length))\n .attr(\"height\", (d) => innerHeight - y(d.length))\n .attr(\"fill\", color)\n .attr(\"opacity\", 0.8)\n .on(\"mouseover\", function () {\n d3.select(this).attr(\"opacity\", 1);\n })\n .on(\"mouseout\", function () {\n d3.select(this).attr(\"opacity\", 0.8);\n });\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .append(\"text\")\n .attr(\"x\", innerWidth / 2)\n .attr(\"y\", 40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(xlabel);\n\n g.append(\"g\")\n .call(d3.axisLeft(y))\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -innerHeight / 2)\n .attr(\"y\", -40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(ylabel);\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // BOX PLOT\n // ============================================\n boxplot(data, options = {}) {\n const {\n title = \"Box Plot\",\n xlabel = \"Category\",\n ylabel = \"Value\",\n labels = null,\n color = \"#4299e1\",\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = this.defaultMargin;\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const datasets = Array.isArray(data[0]) ? data : [data];\n const categoryLabels = labels || datasets.map((_, i) => `Group ${i + 1}`);\n\n const boxData = datasets.map((dataset, i) => {\n const sorted = [...dataset].sort((a, b) => a - b);\n const q1 = d3.quantile(sorted, 0.25);\n const median = d3.quantile(sorted, 0.5);\n const q3 = d3.quantile(sorted, 0.75);\n const iqr = q3 - q1;\n const min = Math.max(d3.min(sorted), q1 - 1.5 * iqr);\n const max = Math.min(d3.max(sorted), q3 + 1.5 * iqr);\n const outliers = sorted.filter((d) => d < min || d > max);\n\n return { label: categoryLabels[i], q1, median, q3, min, max, outliers };\n });\n\n const x = d3\n .scaleBand()\n .domain(categoryLabels)\n .range([0, innerWidth])\n .padding(0.3);\n\n const y = d3\n .scaleLinear()\n .domain([d3.min(boxData, (d) => d.min), d3.max(boxData, (d) => d.max)])\n .nice()\n .range([innerHeight, 0]);\n\n boxData.forEach((d, i) => {\n const center = x(d.label) + x.bandwidth() / 2;\n const boxWidth = x.bandwidth();\n\n g.append(\"line\")\n .attr(\"x1\", center)\n .attr(\"x2\", center)\n .attr(\"y1\", y(d.min))\n .attr(\"y2\", y(d.max))\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", 1);\n\n g.append(\"rect\")\n .attr(\"x\", x(d.label))\n .attr(\"y\", y(d.q3))\n .attr(\"width\", boxWidth)\n .attr(\"height\", y(d.q1) - y(d.q3))\n .attr(\"fill\", color)\n .attr(\"stroke\", \"#000\")\n .attr(\"opacity\", 0.7);\n\n g.append(\"line\")\n .attr(\"x1\", x(d.label))\n .attr(\"x2\", x(d.label) + boxWidth)\n .attr(\"y1\", y(d.median))\n .attr(\"y2\", y(d.median))\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", 2);\n\n [d.min, d.max].forEach((val) => {\n g.append(\"line\")\n .attr(\"x1\", center - boxWidth / 4)\n .attr(\"x2\", center + boxWidth / 4)\n .attr(\"y1\", y(val))\n .attr(\"y2\", y(val))\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", 1);\n });\n\n d.outliers.forEach((outlier) => {\n g.append(\"circle\")\n .attr(\"cx\", center)\n .attr(\"cy\", y(outlier))\n .attr(\"r\", 3)\n .attr(\"fill\", \"red\")\n .attr(\"opacity\", 0.6);\n });\n });\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .append(\"text\")\n .attr(\"x\", innerWidth / 2)\n .attr(\"y\", 40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(xlabel);\n\n g.append(\"g\")\n .call(d3.axisLeft(y))\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -innerHeight / 2)\n .attr(\"y\", -40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(ylabel);\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // SCATTER PLOT\n // ============================================\n scatter(xData, yData, options = {}) {\n const {\n title = \"Scatter Plot\",\n xlabel = \"X\",\n ylabel = \"Y\",\n color = \"#4299e1\",\n size = 5,\n labels = null,\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = this.defaultMargin;\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const data = xData.map((x, i) => ({\n x,\n y: yData[i],\n label: labels ? labels[i] : null,\n }));\n\n const x = d3\n .scaleLinear()\n .domain(d3.extent(xData))\n .nice()\n .range([0, innerWidth]);\n\n const y = d3\n .scaleLinear()\n .domain(d3.extent(yData))\n .nice()\n .range([innerHeight, 0]);\n\n const tooltip = d3\n .select(\"body\")\n .append(\"div\")\n .style(\"position\", \"absolute\")\n .style(\"background\", \"rgba(0,0,0,0.8)\")\n .style(\"color\", \"#fff\")\n .style(\"padding\", \"8px\")\n .style(\"border-radius\", \"4px\")\n .style(\"font-size\", \"12px\")\n .style(\"pointer-events\", \"none\")\n .style(\"opacity\", 0);\n\n g.selectAll(\"circle\")\n .data(data)\n .join(\"circle\")\n .attr(\"cx\", (d) => x(d.x))\n .attr(\"cy\", (d) => y(d.y))\n .attr(\"r\", size)\n .attr(\"fill\", color)\n .attr(\"opacity\", 0.7)\n .on(\"mouseover\", function (event, d) {\n d3.select(this)\n .attr(\"r\", size * 1.5)\n .attr(\"opacity\", 1);\n tooltip\n .style(\"opacity\", 1)\n .html(\n `X: ${d.x.toFixed(2)}<br>Y: ${d.y.toFixed(2)}${\n d.label ? \"<br>\" + d.label : \"\"\n }`\n )\n .style(\"left\", event.pageX + 10 + \"px\")\n .style(\"top\", event.pageY - 10 + \"px\");\n })\n .on(\"mouseout\", function () {\n d3.select(this).attr(\"r\", size).attr(\"opacity\", 0.7);\n tooltip.style(\"opacity\", 0);\n });\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .append(\"text\")\n .attr(\"x\", innerWidth / 2)\n .attr(\"y\", 40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(xlabel);\n\n g.append(\"g\")\n .call(d3.axisLeft(y))\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -innerHeight / 2)\n .attr(\"y\", -40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(ylabel);\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // LINE CHART\n // ============================================\n line(xData, yData, options = {}) {\n const {\n title = \"Line Chart\",\n xlabel = \"X\",\n ylabel = \"Y\",\n color = \"#4299e1\",\n lineWidth = 2,\n showPoints = true,\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = this.defaultMargin;\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const data = xData.map((x, i) => ({ x, y: yData[i] }));\n\n const x = d3.scaleLinear().domain(d3.extent(xData)).range([0, innerWidth]);\n\n const y = d3\n .scaleLinear()\n .domain(d3.extent(yData))\n .nice()\n .range([innerHeight, 0]);\n\n const line = d3\n .line()\n .x((d) => x(d.x))\n .y((d) => y(d.y));\n\n g.append(\"path\")\n .datum(data)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", color)\n .attr(\"stroke-width\", lineWidth)\n .attr(\"d\", line);\n\n if (showPoints) {\n g.selectAll(\"circle\")\n .data(data)\n .join(\"circle\")\n .attr(\"cx\", (d) => x(d.x))\n .attr(\"cy\", (d) => y(d.y))\n .attr(\"r\", 4)\n .attr(\"fill\", color);\n }\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .append(\"text\")\n .attr(\"x\", innerWidth / 2)\n .attr(\"y\", 40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(xlabel);\n\n g.append(\"g\")\n .call(d3.axisLeft(y))\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -innerHeight / 2)\n .attr(\"y\", -40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(ylabel);\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // BAR CHART\n // ============================================\n bar(categories, values, options = {}) {\n const {\n title = \"Bar Chart\",\n xlabel = \"Category\",\n ylabel = \"Value\",\n color = \"#4299e1\",\n horizontal = false,\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = this.defaultMargin;\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const data = categories.map((cat, i) => ({\n category: cat,\n value: values[i],\n }));\n\n if (!horizontal) {\n const x = d3\n .scaleBand()\n .domain(categories)\n .range([0, innerWidth])\n .padding(0.2);\n\n const y = d3\n .scaleLinear()\n .domain([0, d3.max(values)])\n .nice()\n .range([innerHeight, 0]);\n\n g.selectAll(\"rect\")\n .data(data)\n .join(\"rect\")\n .attr(\"x\", (d) => x(d.category))\n .attr(\"y\", (d) => y(d.value))\n .attr(\"width\", x.bandwidth())\n .attr(\"height\", (d) => innerHeight - y(d.value))\n .attr(\"fill\", color)\n .attr(\"opacity\", 0.8)\n .on(\"mouseover\", function () {\n d3.select(this).attr(\"opacity\", 1);\n })\n .on(\"mouseout\", function () {\n d3.select(this).attr(\"opacity\", 0.8);\n });\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .selectAll(\"text\")\n .attr(\"transform\", \"rotate(-45)\")\n .style(\"text-anchor\", \"end\");\n\n g.append(\"g\").call(d3.axisLeft(y));\n } else {\n const x = d3\n .scaleLinear()\n .domain([0, d3.max(values)])\n .nice()\n .range([0, innerWidth]);\n\n const y = d3\n .scaleBand()\n .domain(categories)\n .range([0, innerHeight])\n .padding(0.2);\n\n g.selectAll(\"rect\")\n .data(data)\n .join(\"rect\")\n .attr(\"x\", 0)\n .attr(\"y\", (d) => y(d.category))\n .attr(\"width\", (d) => x(d.value))\n .attr(\"height\", y.bandwidth())\n .attr(\"fill\", color)\n .attr(\"opacity\", 0.8)\n .on(\"mouseover\", function () {\n d3.select(this).attr(\"opacity\", 1);\n })\n .on(\"mouseout\", function () {\n d3.select(this).attr(\"opacity\", 0.8);\n });\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x));\n\n g.append(\"g\").call(d3.axisLeft(y));\n }\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", height - 10)\n .attr(\"text-anchor\", \"middle\")\n .text(xlabel);\n\n svg\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -height / 2)\n .attr(\"y\", 15)\n .attr(\"text-anchor\", \"middle\")\n .text(ylabel);\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // PIE CHART\n // ============================================\n pie(labels, values, options = {}) {\n const {\n title = \"Pie Chart\",\n width = this.defaultWidth,\n height = this.defaultHeight,\n showLabels = true,\n showPercentage = true,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const radius = Math.min(width, height) / 2 - 40;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${width / 2},${height / 2})`);\n\n const data = labels.map((label, i) => ({ label, value: values[i] }));\n const total = d3.sum(values);\n\n const color = d3.scaleOrdinal().domain(labels).range(this.colors);\n\n const pie = d3.pie().value((d) => d.value);\n\n const arc = d3.arc().innerRadius(0).outerRadius(radius);\n\n const labelArc = d3\n .arc()\n .innerRadius(radius * 0.7)\n .outerRadius(radius * 0.7);\n\n const arcs = g\n .selectAll(\"arc\")\n .data(pie(data))\n .join(\"g\")\n .attr(\"class\", \"arc\");\n\n arcs\n .append(\"path\")\n .attr(\"d\", arc)\n .attr(\"fill\", (d) => color(d.data.label))\n .attr(\"stroke\", \"#fff\")\n .attr(\"stroke-width\", 2)\n .attr(\"opacity\", 0.8)\n .on(\"mouseover\", function () {\n d3.select(this).attr(\"opacity\", 1);\n })\n .on(\"mouseout\", function () {\n d3.select(this).attr(\"opacity\", 0.8);\n });\n\n if (showLabels) {\n arcs\n .append(\"text\")\n .attr(\"transform\", (d) => `translate(${labelArc.centroid(d)})`)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"12px\")\n .style(\"font-weight\", \"bold\")\n .style(\"fill\", \"#fff\")\n .text((d) => {\n if (showPercentage) {\n const percentage = ((d.data.value / total) * 100).toFixed(1);\n return `${d.data.label}\\n${percentage}%`;\n }\n return d.data.label;\n });\n }\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // HEATMAP\n // ============================================\n heatmap(matrix, options = {}) {\n const {\n title = \"Heatmap\",\n labels = null,\n colorScheme = \"RdYlBu\",\n showValues = true,\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = { top: 80, right: 40, bottom: 80, left: 80 };\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const n = matrix.length;\n const rowLabels =\n labels || Array.from({ length: n }, (_, i) => `Var${i + 1}`);\n const colLabels =\n labels || Array.from({ length: n }, (_, i) => `Var${i + 1}`);\n\n const data = [];\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n data.push({\n row: i,\n col: j,\n value: matrix[i][j],\n rowLabel: rowLabels[i],\n colLabel: colLabels[j],\n });\n }\n }\n\n const x = d3\n .scaleBand()\n .domain(colLabels)\n .range([0, innerWidth])\n .padding(0.05);\n\n const y = d3\n .scaleBand()\n .domain(rowLabels)\n .range([0, innerHeight])\n .padding(0.05);\n\n const colorScale = d3\n .scaleSequential()\n .domain([-1, 1])\n .interpolator(d3[`interpolate${colorScheme}`]);\n\n g.selectAll(\"rect\")\n .data(data)\n .join(\"rect\")\n .attr(\"x\", (d) => x(d.colLabel))\n .attr(\"y\", (d) => y(d.rowLabel))\n .attr(\"width\", x.bandwidth())\n .attr(\"height\", y.bandwidth())\n .attr(\"fill\", (d) => colorScale(d.value))\n .attr(\"stroke\", \"#fff\")\n .attr(\"stroke-width\", 1);\n\n if (showValues) {\n g.selectAll(\"text.value\")\n .data(data)\n .join(\"text\")\n .attr(\"class\", \"value\")\n .attr(\"x\", (d) => x(d.colLabel) + x.bandwidth() / 2)\n .attr(\"y\", (d) => y(d.rowLabel) + y.bandwidth() / 2)\n .attr(\"text-anchor\", \"middle\")\n .attr(\"dominant-baseline\", \"middle\")\n .style(\"font-size\", \"10px\")\n .style(\"fill\", (d) => (Math.abs(d.value) > 0.5 ? \"#fff\" : \"#000\"))\n .text((d) => d.value.toFixed(2));\n }\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .selectAll(\"text\")\n .attr(\"transform\", \"rotate(-45)\")\n .style(\"text-anchor\", \"end\");\n\n g.append(\"g\").call(d3.axisLeft(y));\n\n const legendWidth = 200;\n const legendHeight = 20;\n const legendG = svg\n .append(\"g\")\n .attr(\n \"transform\",\n `translate(${width - margin.right - legendWidth},${margin.top - 40})`\n );\n\n const legendScale = d3\n .scaleLinear()\n .domain([-1, 1])\n .range([0, legendWidth]);\n\n const legendAxis = d3.axisBottom(legendScale).ticks(5);\n\n legendG\n .selectAll(\"rect\")\n .data(d3.range(-1, 1, 0.01))\n .join(\"rect\")\n .attr(\"x\", (d) => legendScale(d))\n .attr(\"y\", 0)\n .attr(\"width\", legendWidth / 200)\n .attr(\"height\", legendHeight)\n .attr(\"fill\", (d) => colorScale(d));\n\n legendG\n .append(\"g\")\n .attr(\"transform\", `translate(0,${legendHeight})`)\n .call(legendAxis);\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // VIOLIN PLOT\n // ============================================\n violin(data, options = {}) {\n const {\n title = \"Violin Plot\",\n xlabel = \"Category\",\n ylabel = \"Value\",\n labels = null,\n color = \"#4299e1\",\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = this.defaultMargin;\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const datasets = Array.isArray(data[0]) ? data : [data];\n const categoryLabels = labels || datasets.map((_, i) => `Group ${i + 1}`);\n\n const x = d3\n .scaleBand()\n .domain(categoryLabels)\n .range([0, innerWidth])\n .padding(0.3);\n\n const allValues = datasets.flat();\n const y = d3\n .scaleLinear()\n .domain(d3.extent(allValues))\n .nice()\n .range([innerHeight, 0]);\n\n const kde = (data, bandwidth = 0.5) => {\n const thresholds = y.ticks(50);\n return thresholds.map((t) => {\n const density = d3.mean(data, (d) => {\n return (\n Math.exp(-0.5 * Math.pow((d - t) / bandwidth, 2)) /\n (bandwidth * Math.sqrt(2 * Math.PI))\n );\n });\n return [t, density];\n });\n };\n\n datasets.forEach((dataset, i) => {\n const density = kde(dataset);\n const maxDensity = d3.max(density, (d) => d[1]);\n\n const xScale = d3\n .scaleLinear()\n .domain([0, maxDensity])\n .range([0, x.bandwidth() / 2]);\n\n const area = d3\n .area()\n .x0((d) => x(categoryLabels[i]) + x.bandwidth() / 2 - xScale(d[1]))\n .x1((d) => x(categoryLabels[i]) + x.bandwidth() / 2 + xScale(d[1]))\n .y((d) => y(d[0]))\n .curve(d3.curveBasis);\n\n g.append(\"path\")\n .datum(density)\n .attr(\"fill\", color)\n .attr(\"opacity\", 0.6)\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", 1)\n .attr(\"d\", area);\n });\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .append(\"text\")\n .attr(\"x\", innerWidth / 2)\n .attr(\"y\", 40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(xlabel);\n\n g.append(\"g\")\n .call(d3.axisLeft(y))\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -innerHeight / 2)\n .attr(\"y\", -40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(ylabel);\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // QQ PLOT\n // ============================================\n qqplot(data, options = {}) {\n const {\n title = \"Q-Q Plot\",\n xlabel = \"Theoretical Quantiles\",\n ylabel = \"Sample Quantiles\",\n color = \"#4299e1\",\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = this.defaultMargin;\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const sorted = [...data].sort((a, b) => a - b);\n const n = sorted.length;\n\n const theoretical = sorted.map((_, i) => {\n const p = (i + 0.5) / n;\n return this.invNormalCDF(p);\n });\n\n const qqData = theoretical.map((t, i) => ({ x: t, y: sorted[i] }));\n\n const x = d3\n .scaleLinear()\n .domain(d3.extent(theoretical))\n .nice()\n .range([0, innerWidth]);\n\n const y = d3\n .scaleLinear()\n .domain(d3.extent(sorted))\n .nice()\n .range([innerHeight, 0]);\n\n const minVal = Math.max(x.domain()[0], y.domain()[0]);\n const maxVal = Math.min(x.domain()[1], y.domain()[1]);\n\n g.append(\"line\")\n .attr(\"x1\", x(minVal))\n .attr(\"y1\", y(minVal))\n .attr(\"x2\", x(maxVal))\n .attr(\"y2\", y(maxVal))\n .attr(\"stroke\", \"red\")\n .attr(\"stroke-width\", 2)\n .attr(\"stroke-dasharray\", \"5,5\");\n\n g.selectAll(\"circle\")\n .data(qqData)\n .join(\"circle\")\n .attr(\"cx\", (d) => x(d.x))\n .attr(\"cy\", (d) => y(d.y))\n .attr(\"r\", 4)\n .attr(\"fill\", color)\n .attr(\"opacity\", 0.7);\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .append(\"text\")\n .attr(\"x\", innerWidth / 2)\n .attr(\"y\", 40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(xlabel);\n\n g.append(\"g\")\n .call(d3.axisLeft(y))\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -innerHeight / 2)\n .attr(\"y\", -40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(ylabel);\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n invNormalCDF(p) {\n const a1 = -39.6968302866538;\n const a2 = 220.946098424521;\n const a3 = -275.928510446969;\n const a4 = 138.357751867269;\n const a5 = -30.6647980661472;\n const a6 = 2.50662827745924;\n\n const b1 = -54.4760987982241;\n const b2 = 161.585836858041;\n const b3 = -155.698979859887;\n const b4 = 66.8013118877197;\n const b5 = -13.2806815528857;\n\n const c1 = -0.00778489400243029;\n const c2 = -0.322396458041136;\n const c3 = -2.40075827716184;\n const c4 = -2.54973253934373;\n const c5 = 4.37466414146497;\n const c6 = 2.93816398269878;\n\n const d1 = 0.00778469570904146;\n const d2 = 0.32246712907004;\n const d3 = 2.445134137143;\n const d4 = 3.75440866190742;\n\n const pLow = 0.02425;\n const pHigh = 1 - pLow;\n\n let q, r, x;\n\n if (p < pLow) {\n q = Math.sqrt(-2 * Math.log(p));\n x =\n (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) /\n ((((d1 * q + d2) * q + d3) * q + d4) * q + 1);\n } else if (p <= pHigh) {\n q = p - 0.5;\n r = q * q;\n x =\n ((((((a1 * r + a2) * r + a3) * r + a4) * r + a5) * r + a6) * q) /\n (((((b1 * r + b2) * r + b3) * r + b4) * r + b5) * r + 1);\n } else {\n q = Math.sqrt(-2 * Math.log(1 - p));\n x =\n -(((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) /\n ((((d1 * q + d2) * q + d3) * q + d4) * q + 1);\n }\n\n return x;\n }\n\n // ============================================\n // DENSITY PLOT\n // ============================================\n density(data, options = {}) {\n const {\n title = \"Density Plot\",\n xlabel = \"Value\",\n ylabel = \"Density\",\n color = \"#4299e1\",\n bandwidth = null,\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = this.defaultMargin;\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const bw =\n bandwidth || 1.06 * d3.deviation(data) * Math.pow(data.length, -1 / 5);\n\n const extent = d3.extent(data);\n const range = extent[1] - extent[0];\n const xPoints = d3.range(\n extent[0] - range * 0.1,\n extent[1] + range * 0.1,\n range / 200\n );\n\n const densityData = xPoints.map((xi) => {\n const density = d3.mean(data, (d) => {\n return (\n Math.exp(-0.5 * Math.pow((d - xi) / bw, 2)) /\n (bw * Math.sqrt(2 * Math.PI))\n );\n });\n return { x: xi, y: density };\n });\n\n const x = d3\n .scaleLinear()\n .domain([xPoints[0], xPoints[xPoints.length - 1]])\n .range([0, innerWidth]);\n\n const y = d3\n .scaleLinear()\n .domain([0, d3.max(densityData, (d) => d.y)])\n .nice()\n .range([innerHeight, 0]);\n\n const area = d3\n .area()\n .x((d) => x(d.x))\n .y0(innerHeight)\n .y1((d) => y(d.y))\n .curve(d3.curveBasis);\n\n const line = d3\n .line()\n .x((d) => x(d.x))\n .y((d) => y(d.y))\n .curve(d3.curveBasis);\n\n g.append(\"path\")\n .datum(densityData)\n .attr(\"fill\", color)\n .attr(\"opacity\", 0.3)\n .attr(\"d\", area);\n\n g.append(\"path\")\n .datum(densityData)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", color)\n .attr(\"stroke-width\", 2)\n .attr(\"d\", line);\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .append(\"text\")\n .attr(\"x\", innerWidth / 2)\n .attr(\"y\", 40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(xlabel);\n\n g.append(\"g\")\n .call(d3.axisLeft(y))\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -innerHeight / 2)\n .attr(\"y\", -40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(ylabel);\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // PARALLEL COORDINATES\n // ============================================\n parallel(data, dimensions, options = {}) {\n const {\n title = \"Parallel Coordinates\",\n colors = null,\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = { top: 60, right: 40, bottom: 40, left: 40 };\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const y = {};\n dimensions.forEach((dim) => {\n y[dim] = d3\n .scaleLinear()\n .domain(d3.extent(data, (d) => d[dim]))\n .range([innerHeight, 0]);\n });\n\n const x = d3.scalePoint().domain(dimensions).range([0, innerWidth]);\n\n const line = d3.line();\n\n const path = (d) => {\n return line(dimensions.map((dim) => [x(dim), y[dim](d[dim])]));\n };\n\n const colorScale = colors\n ? d3.scaleOrdinal().domain(d3.range(data.length)).range(colors)\n : d3.scaleSequential(d3.interpolateViridis).domain([0, data.length]);\n\n g.selectAll(\"path.line\")\n .data(data)\n .join(\"path\")\n .attr(\"class\", \"line\")\n .attr(\"d\", path)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", (d, i) => colorScale(i))\n .attr(\"opacity\", 0.3)\n .attr(\"stroke-width\", 2)\n .on(\"mouseover\", function () {\n d3.select(this).attr(\"opacity\", 1).attr(\"stroke-width\", 3);\n })\n .on(\"mouseout\", function () {\n d3.select(this).attr(\"opacity\", 0.3).attr(\"stroke-width\", 2);\n });\n\n dimensions.forEach((dim) => {\n const axis = g\n .append(\"g\")\n .attr(\"transform\", `translate(${x(dim)},0)`)\n .call(d3.axisLeft(y[dim]));\n\n axis\n .append(\"text\")\n .attr(\"y\", -10)\n .attr(\"text-anchor\", \"middle\")\n .style(\"fill\", \"#000\")\n .style(\"font-weight\", \"bold\")\n .text(dim);\n });\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // PAIR PLOT\n // ============================================\n pairplot(data, variables, options = {}) {\n const {\n title = \"Pair Plot\",\n color = \"#4299e1\",\n size = 3,\n width = 900,\n height = 900,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const n = variables.length;\n const padding = 60;\n const cellSize = (Math.min(width, height) - padding * 2) / n;\n\n const scales = {};\n variables.forEach((variable) => {\n scales[variable] = d3\n .scaleLinear()\n .domain(d3.extent(data, (d) => d[variable]))\n .range([0, cellSize - 20]);\n });\n\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n const xVar = variables[j];\n const yVar = variables[i];\n\n const cellG = svg\n .append(\"g\")\n .attr(\n \"transform\",\n `translate(${padding + j * cellSize},${padding + i * cellSize})`\n );\n\n if (i === j) {\n const values = data.map((d) => d[xVar]);\n const histogram = d3\n .histogram()\n .domain(scales[xVar].domain())\n .thresholds(20);\n\n const bins = histogram(values);\n const yScale = d3\n .scaleLinear()\n .domain([0, d3.max(bins, (d) => d.length)])\n .range([cellSize - 20, 0]);\n\n cellG\n .selectAll(\"rect\")\n .data(bins)\n .join(\"rect\")\n .attr(\"x\", (d) => scales[xVar](d.x0))\n .attr(\"y\", (d) => yScale(d.length))\n .attr(\"width\", (d) => scales[xVar](d.x1) - scales[xVar](d.x0) - 1)\n .attr(\"height\", (d) => cellSize - 20 - yScale(d.length))\n .attr(\"fill\", color)\n .attr(\"opacity\", 0.7);\n } else {\n cellG\n .selectAll(\"circle\")\n .data(data)\n .join(\"circle\")\n .attr(\"cx\", (d) => scales[xVar](d[xVar]))\n .attr(\"cy\", (d) => scales[yVar](d[yVar]))\n .attr(\"r\", size)\n .attr(\"fill\", color)\n .attr(\"opacity\", 0.5);\n }\n\n if (i === n - 1) {\n cellG\n .append(\"g\")\n .attr(\"transform\", `translate(0,${cellSize - 20})`)\n .call(d3.axisBottom(scales[xVar]).ticks(3));\n }\n\n if (j === 0) {\n cellG.append(\"g\").call(d3.axisLeft(scales[yVar]).ticks(3));\n }\n\n if (i === n - 1) {\n cellG\n .append(\"text\")\n .attr(\"x\", (cellSize - 20) / 2)\n .attr(\"y\", cellSize - 5)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"10px\")\n .text(xVar);\n }\n\n if (j === 0) {\n cellG\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -(cellSize - 20) / 2)\n .attr(\"y\", -25)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"10px\")\n .text(yVar);\n }\n }\n }\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 30)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n\n // ============================================\n // MULTI-LINE CHART\n // ============================================\n multiline(series, options = {}) {\n const {\n title = \"Multi-Line Chart\",\n xlabel = \"X\",\n ylabel = \"Y\",\n legend = true,\n width = this.defaultWidth,\n height = this.defaultHeight,\n containerId = null,\n } = options;\n\n const { svg } = this.createContainer(containerId, width, height);\n const margin = this.defaultMargin;\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const allX = series.flatMap((s) => s.data.map((d) => d.x));\n const allY = series.flatMap((s) => s.data.map((d) => d.y));\n\n const x = d3.scaleLinear().domain(d3.extent(allX)).range([0, innerWidth]);\n\n const y = d3\n .scaleLinear()\n .domain(d3.extent(allY))\n .nice()\n .range([innerHeight, 0]);\n\n const color = d3\n .scaleOrdinal()\n .domain(series.map((s) => s.name))\n .range(this.colors);\n\n const line = d3\n .line()\n .x((d) => x(d.x))\n .y((d) => y(d.y));\n\n series.forEach((s) => {\n g.append(\"path\")\n .datum(s.data)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", color(s.name))\n .attr(\"stroke-width\", 2)\n .attr(\"d\", line);\n });\n\n g.append(\"g\")\n .attr(\"transform\", `translate(0,${innerHeight})`)\n .call(d3.axisBottom(x))\n .append(\"text\")\n .attr(\"x\", innerWidth / 2)\n .attr(\"y\", 40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(xlabel);\n\n g.append(\"g\")\n .call(d3.axisLeft(y))\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -innerHeight / 2)\n .attr(\"y\", -40)\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .text(ylabel);\n\n if (legend) {\n const legendG = svg\n .append(\"g\")\n .attr(\n \"transform\",\n `translate(${width - margin.right - 100},${margin.top})`\n );\n\n series.forEach((s, i) => {\n const legendItem = legendG\n .append(\"g\")\n .attr(\"transform\", `translate(0,${i * 25})`);\n\n legendItem\n .append(\"line\")\n .attr(\"x1\", 0)\n .attr(\"x2\", 30)\n .attr(\"y1\", 10)\n .attr(\"y2\", 10)\n .attr(\"stroke\", color(s.name))\n .attr(\"stroke-width\", 2);\n\n legendItem\n .append(\"text\")\n .attr(\"x\", 35)\n .attr(\"y\", 15)\n .style(\"font-size\", \"12px\")\n .text(s.name);\n });\n }\n\n svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 20)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"font-weight\", \"bold\")\n .text(title);\n\n return this;\n }\n}\n\nexport default DataViz;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([array(selector)], root);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n","import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks, {tickIncrement} from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function bin() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n if (!Array.isArray(data)) data = Array.from(data);\n\n var i,\n n = data.length,\n x,\n step,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds, and nice the\n // default domain accordingly.\n if (!Array.isArray(tz)) {\n const max = x1, tn = +tz;\n if (domain === extent) [x0, x1] = nice(x0, x1, tn);\n tz = ticks(x0, x1, tn);\n\n // If the domain is aligned with the first tick (which it will by\n // default), then we can use quantization rather than bisection to bin\n // values, which is substantially faster.\n if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\n\n // If the last threshold is coincident with the domain’s upper bound, the\n // last bin will be zero-width. If the default domain is used, and this\n // last threshold is coincident with the maximum input value, we can\n // extend the niced upper bound by one tick to ensure uniform bin widths;\n // otherwise, we simply remove the last threshold. Note that we don’t\n // coerce values or the domain to numbers, and thus must be careful to\n // compare order (>=) rather than strict equality (===)!\n if (tz[tz.length - 1] >= x1) {\n if (max >= x1 && domain === extent) {\n const step = tickIncrement(x0, x1, tn);\n if (isFinite(step)) {\n if (step > 0) {\n x1 = (Math.floor(x1 / step) + 1) * step;\n } else if (step < 0) {\n x1 = (Math.ceil(x1 * -step) + 1) / -step;\n }\n }\n } else {\n tz.pop();\n }\n }\n }\n\n // Remove any thresholds outside the domain.\n // Be careful not to mutate an array owned by the user!\n var m = tz.length, a = 0, b = m;\n while (tz[a] <= x0) ++a;\n while (tz[b - 1] > x1) --b;\n if (a || b < m) tz = tz.slice(a, b), m = b - a;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n if (isFinite(step)) {\n if (step > 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n }\n }\n } else if (step < 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n const j = Math.floor((x0 - x) * step);\n bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n }\n }\n }\n } else {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;\n };\n\n return histogram;\n}\n","import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n let prestep;\n while (true) {\n const step = tickIncrement(start, stop, count);\n if (step === prestep || step === 0 || !isFinite(step)) {\n return [start, stop];\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n }\n prestep = step;\n }\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","import DataLoader from \"./core/dataLoader.js\";\nimport Validator from \"./core/validator.js\";\nimport Utils from \"./core/utils.js\";\nimport CentralTendency from \"./descriptive/centralTendency.js\";\nimport Dispersion from \"./descriptive/dispersion.js\";\nimport Position from \"./descriptive/position.js\";\nimport Shape from \"./descriptive/shape.js\";\nimport HypothesisTesting from \"./inferential/hypothesisTesting.js\";\nimport ConfidenceIntervals from \"./inferential/confidenceIntervals.js\";\nimport NormalityTests from \"./inferential/normalityTests.js\";\nimport Correlation from \"./multivariate/correlation.js\";\nimport Regression from \"./multivariate/regression.js\";\nimport ReportGenerator from \"./insights/reportGenerator.js\";\nimport PatternDetector from \"./insights/patternDetector.js\";\nimport Interpreter from \"./insights/interpreter.js\";\nimport AutoAnalyzer from \"./insights/autoAnalyser.js\";\nimport MachineLearning from \"./ml/machineLearning.js\";\nimport DataViz from \"./dataviz/index.js\";\n\nclass Datly {\n constructor() {\n this.dataLoader = new DataLoader();\n this.validator = new Validator();\n this.utils = new Utils();\n this.centralTendency = new CentralTendency();\n this.dispersion = new Dispersion();\n this.position = new Position();\n this.shape = new Shape();\n this.hypothesisTesting = new HypothesisTesting();\n this.confidenceIntervals = new ConfidenceIntervals();\n this.normalityTests = new NormalityTests();\n this.correlation = new Correlation();\n this.regression = new Regression();\n this.reportGenerator = new ReportGenerator();\n this.patternDetector = new PatternDetector();\n this.interpreter = new Interpreter();\n this.autoAnalyzer = new AutoAnalyzer(this);\n this.ml = new MachineLearning();\n this.viz = new DataViz();\n }\n\n // ====== Loaders / Utils ======\n async loadCSV(filePath, options = {}) {\n return this.dataLoader.loadCSV(filePath, options);\n }\n\n async loadJSON(jsonInput, options = {}) {\n return this.dataLoader.loadJSON(jsonInput, options);\n }\n\n cleanData(dataset) {\n return this.dataLoader.cleanData(dataset);\n }\n\n getColumn(dataset, columnName) {\n return this.dataLoader.getColumn(dataset, columnName);\n }\n\n getColumns(dataset, columnNames) {\n return this.dataLoader.getColumns(dataset, columnNames);\n }\n\n validateData(dataset) {\n return this.validator.validateData(dataset);\n }\n\n getDataInfo(dataset) {\n return this.dataLoader.getDataInfo(dataset);\n }\n\n // ====== Descriptive: Central Tendency ======\n mean(column) {\n return this.centralTendency.mean(column);\n }\n\n median(column) {\n return this.centralTendency.median(column);\n }\n\n mode(column) {\n return this.centralTendency.mode(column);\n }\n\n geometricMean(column) {\n return this.centralTendency.geometricMean(column);\n }\n\n harmonicMean(column) {\n return this.centralTendency.harmonicMean(column);\n }\n\n trimmedMean(column, percentage) {\n return this.centralTendency.trimmedMean(column, percentage);\n }\n\n // ====== Descriptive: Dispersion ======\n variance(column) {\n return this.dispersion.variance(column);\n }\n\n standardDeviation(column) {\n return this.dispersion.standardDeviation(column);\n }\n\n range(column) {\n return this.dispersion.range(column);\n }\n\n interquartileRange(column) {\n return this.dispersion.interquartileRange(column);\n }\n\n coefficientOfVariation(column) {\n return this.dispersion.coefficientOfVariation(column);\n }\n\n meanAbsoluteDeviation(column) {\n return this.dispersion.meanAbsoluteDeviation(column);\n }\n\n // ====== Descriptive: Position & Shape ======\n quantile(column, q) {\n return this.position.quantile(column, q);\n }\n\n percentile(column, p) {\n return this.position.percentile(column, p);\n }\n\n quartiles(column) {\n return this.position.quartiles(column);\n }\n\n quintiles(column) {\n return this.position.quintiles(column);\n }\n\n deciles(column) {\n return this.position.deciles(column);\n }\n\n percentileRank(column, value) {\n return this.position.percentileRank(column, value);\n }\n\n zScore(column, value) {\n return this.position.zScore(column, value);\n }\n\n boxplotStats(column) {\n return this.position.boxplotStats(column);\n }\n\n fiveNumberSummary(column) {\n return this.position.fiveNumberSummary(column);\n }\n\n rank(column, method = \"average\") {\n return this.position.rank(column, method);\n }\n\n normalizedRank(column) {\n return this.position.normalizedRank(column);\n }\n\n standardizedValues(column) {\n return this.position.standardizedValues(column);\n }\n\n skewness(column) {\n return this.shape.skewness(column);\n }\n\n kurtosis(column) {\n return this.shape.kurtosis(column);\n }\n\n isNormalDistribution(column) {\n return this.shape.isNormalDistribution(column);\n }\n\n // ====== Multivariate ======\n correlationPearson(col1, col2) {\n return this.correlation.pearson(col1, col2);\n }\n\n correlationSpearman(col1, col2) {\n return this.correlation.spearman(col1, col2);\n }\n\n correlationMatrix(dataset) {\n return this.correlation.matrix(dataset);\n }\n\n covariance(col1, col2) {\n return this.correlation.covariance(col1, col2);\n }\n\n // ====== Inferential ======\n tTest(sample1, sample2, type = \"two-sample\") {\n return this.hypothesisTesting.tTest(sample1, sample2, type);\n }\n\n zTest(sample, populationMean, populationStd) {\n return this.hypothesisTesting.zTest(sample, populationMean, populationStd);\n }\n\n anovaTest(groups) {\n return this.hypothesisTesting.anovaTest(groups);\n }\n\n chiSquareTest(col1, col2) {\n return this.hypothesisTesting.chiSquareTest(col1, col2);\n }\n\n confidenceInterval(sample, confidence = 0.95) {\n return this.confidenceIntervals.mean(sample, confidence);\n }\n\n shapiroWilkTest(sample) {\n return this.normalityTests.shapiroWilk(sample);\n }\n\n // ====== Regression ======\n linearRegression(x, y) {\n return this.regression.linear(x, y);\n }\n\n // ====== Utils ======\n detectOutliers(column, method = \"iqr\") {\n return this.utils.detectOutliers(column, method);\n }\n\n frequencyTable(column) {\n return this.utils.frequencyTable(column);\n }\n\n groupBy(dataset, column, aggregation) {\n return this.utils.groupBy(dataset, column, aggregation);\n }\n\n sample(dataset, size, method = \"random\") {\n return this.utils.sample(dataset, size, method);\n }\n\n // ====== Insights/Reports ======\n generateSummaryReport(dataset) {\n return this.reportGenerator.summary(dataset);\n }\n\n identifyPatterns(dataset) {\n return this.patternDetector.analyze(dataset);\n }\n\n interpretResults(testResult) {\n return this.interpreter.interpret(testResult);\n }\n\n // ====== AutoAnalyzer ======\n autoAnalyze(dataset, options = {}) {\n return this.autoAnalyzer.autoAnalyze(dataset, options);\n }\n\n async autoAnalyzeFromFile(filePath, loadOptions = {}, analysisOptions = {}) {\n let dataset;\n const lower = filePath.toLowerCase();\n if (lower.endsWith(\".csv\")) {\n dataset = await this.loadCSV(filePath, loadOptions);\n } else if (lower.endsWith(\".json\")) {\n dataset = await this.loadJSON(filePath, loadOptions);\n } else {\n throw new Error(\"Formato de arquivo não suportado. Use CSV ou JSON.\");\n }\n return this.autoAnalyze(dataset, analysisOptions);\n }\n\n async quickAnalysis(filePath, options = {}) {\n const result = await this.autoAnalyzeFromFile(filePath, {}, options);\n\n console.log(\"\\n\" + \"=\".repeat(60));\n console.log(\"📊 AUTO REPORT\");\n console.log(\"=\".repeat(60));\n\n console.log(`\\n📈 EXECUTIVE RESUME:`);\n console.log(`• Total insights: ${result.summary.totalInsights}`);\n console.log(`• Priority Insights: ${result.summary.highPriorityInsights}`);\n\n console.log(`\\n🔍 MAIN INSIGHTS:`);\n result.summary.keyFindings.forEach((f, i) => {\n console.log(`${i + 1}. ${f.title}`);\n console.log(` ${f.description}`);\n });\n\n console.log(`\\n💡 RECOMMENDATIONS:`);\n result.summary.recommendations.forEach((rec, i) => {\n console.log(`${i + 1}. ${rec}`);\n });\n\n console.log(\"\\n\" + \"=\".repeat(60));\n return result;\n }\n\n createLinearRegression(options) {\n return this.ml.createLinearRegression(options);\n }\n\n createLogisticRegression(options) {\n return this.ml.createLogisticRegression(options);\n }\n\n createKNN(options) {\n return this.ml.createKNN(options);\n }\n\n createDecisionTree(options) {\n return this.ml.createDecisionTree(options);\n }\n\n createRandomForest(options) {\n return this.ml.createRandomForest(options);\n }\n\n createNaiveBayes(options) {\n return this.ml.createNaiveBayes(options);\n }\n\n createSVM(options) {\n return this.ml.createSVM(options);\n }\n\n // ====== Machine Learning: Utilities ======\n trainTestSplit(X, y, testSize = 0.2, shuffle = true) {\n return this.ml.trainTestSplit(X, y, testSize, shuffle);\n }\n\n crossValidate(model, X, y, folds = 5, taskType = \"classification\") {\n return this.ml.crossValidate(model, X, y, folds, taskType);\n }\n\n compareModels(models, X, y, taskType = \"classification\") {\n return this.ml.compareModels(models, X, y, taskType);\n }\n\n quickTrain(modelType, X, y, options = {}) {\n return this.ml.quickTrain(modelType, X, y, options);\n }\n\n // ====== Machine Learning: Feature Engineering ======\n polynomialFeatures(X, degree = 2) {\n return this.ml.polynomialFeatures(X, degree);\n }\n\n standardScaler(X) {\n return this.ml.standardScaler(X);\n }\n\n minMaxScaler(X, featureRange = [0, 1]) {\n return this.ml.minMaxScaler(X, featureRange);\n }\n\n // ====== Machine Learning: Metrics ======\n rocCurve(yTrue, yProba) {\n return this.ml.rocCurve(yTrue, yProba);\n }\n\n precisionRecallCurve(yTrue, yProba) {\n return this.ml.precisionRecallCurve(yTrue, yProba);\n }\n\n // ====== Data Visualization: Basic Plots ======\n plotHistogram(data, options) {\n return this.viz.histogram(data, options);\n }\n\n plotBoxplot(data, options) {\n return this.viz.boxplot(data, options);\n }\n\n plotScatter(xData, yData, options) {\n return this.viz.scatter(xData, yData, options);\n }\n\n plotLine(xData, yData, options) {\n return this.viz.line(xData, yData, options);\n }\n\n plotBar(categories, values, options) {\n return this.viz.bar(categories, values, options);\n }\n\n plotPie(labels, values, options) {\n return this.viz.pie(labels, values, options);\n }\n\n // ====== Data Visualization: Advanced Plots ======\n plotHeatmap(matrix, options) {\n return this.viz.heatmap(matrix, options);\n }\n\n plotViolin(data, options) {\n return this.viz.violin(data, options);\n }\n\n plotDensity(data, options) {\n return this.viz.density(data, options);\n }\n\n plotQQ(data, options) {\n return this.viz.qqplot(data, options);\n }\n\n plotParallel(data, dimensions, options) {\n return this.viz.parallel(data, dimensions, options);\n }\n\n plotPairplot(data, variables, options) {\n return this.viz.pairplot(data, variables, options);\n }\n\n plotMultiline(series, options) {\n return this.viz.multiline(series, options);\n }\n\n // ====== Data Visualization: Helpers ======\n plotCorrelationMatrix(dataset, options = {}) {\n const columns = Object.keys(dataset[0]).filter(\n (key) => typeof dataset[0][key] === \"number\"\n );\n\n const n = columns.length;\n const matrix = Array(n)\n .fill(0)\n .map(() => Array(n).fill(0));\n\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n const col1 = dataset.map((row) => row[columns[i]]);\n const col2 = dataset.map((row) => row[columns[j]]);\n matrix[i][j] = this.correlationPearson(col1, col2);\n }\n }\n\n return this.viz.heatmap(matrix, {\n title: \"Correlation Matrix\",\n labels: columns,\n ...options,\n });\n }\n\n plotDistribution(dataset, columnName, options = {}) {\n const data = dataset.map((row) => row[columnName]).filter((v) => !isNaN(v));\n\n return this.viz.histogram(data, {\n title: `Distribution of ${columnName}`,\n xlabel: columnName,\n ylabel: \"Frequency\",\n ...options,\n });\n }\n\n plotMultipleDistributions(dataset, columnNames, options = {}) {\n const data = columnNames.map((col) =>\n dataset.map((row) => row[col]).filter((v) => !isNaN(v))\n );\n\n return this.viz.boxplot(data, {\n title: \"Distribution Comparison\",\n labels: columnNames,\n ...options,\n });\n }\n}\n\nexport default Datly;\n\n// TODO:\n// Adicionar apenas os métodos usados no D3 [X]\n// Adicionar o id do elemento onde quero adicionar as views\n// Garantir que todos os métodos da documentação consigam ser chamados pelo datly\n// como exibir os plots no observable hq?\n"],"names":["DataLoader","_proto","prototype","loadCSV","filePath","options","config","_extends","defaultOptions","delimiter","header","skipEmptyLines","encoding","window","fs","content","readFileSync","readFile","this","parseCSV","Error","error","message","loadJSON","jsonInput","validateTypes","autoInferHeaders","jsonData","endsWith","JSON","parse","parseJSON","Array","isArray","parseJSONArray","headers","data","parseStructuredJSON","parseJSONObject","jsonArray","_this","length","firstRow","allKeys","Set","forEach","row","Object","keys","key","add","from","map","index","console","warn","processedRow","value","inferType","filter","columns","source","_this2","processedData","i","jsonObject","_this3","entries","_ref","_this4","lines","split","line","trim","h","replace","_","_loop","values","push","test","parseInt","parseFloat","cleanData","dataset","cleaned","some","getDataInfo","info","rows","types","nullCounts","uniqueCounts","column","nonNullValues","val","concat","size","getColumn","columnName","includes","isNaN","getColumns","columnNames","_this5","result","name","filterRows","condition","sortBy","order","sort","a","b","aVal","bVal","localeCompare","Validator","validateData","errors","warnings","rowKeys","missingHeaders","extraKeys","k","join","valid","validateNumericColumn","numericValues","isFinite","validCount","invalidCount","validateSampleSize","sample","minSize","validateConfidenceLevel","confidence","validateCorrelationInputs","col1","col2","validateRegressionInputs","x","y","calculateVariance","arr","mean","reduce","sum","Math","pow","validateGroupsForANOVA","groups","group","validateContingencyTable","isInteger","Number","isPositive","isInRange","min","max","hasMinimumObservations","minimum","checkForConstantValues","validateHypothesisTestInputs","sample1","sample2","testType","Utils","detectOutliers","method","sortedData","outliers","indices","q1","quantile","q3","iqr","lowerBound","upperBound","std","standardDeviation","abs","median","deviations","mad","count","percentage","frequencyTable","frequencies","total","String","frequency","relativeFrequency","groupBy","aggregation","_ref2","_ref3","targetCol","func","v","applyAggregation","apply","variance","sampledData","randomSample","interval","floor","slice","populationSize","sampleSize","randomIndex","random","splice","bootstrap","statistic","iterations","bootstrapStats","bootstrapSample","j","stat","applyStatistic","standardError","confidenceInterval","lower","upper","contingencyTable","uniqueCol1","uniqueCol2","table","totals","col","grand","val1","val2","sorted","mid","q","ceil","weight","sqrt","round","decimals","formatNumber","CentralTendency","validValues","middle","mode","maxFreq","modes","parseValue","isMultimodal","isUniform","str","geometricMean","logSum","log","exp","harmonicMean","reciprocalSum","trimmedMean","trimCount","trimmed","quadraticMean","sumOfSquares","weightedMean","weights","validPairs","totalWeight","pair","midrange","Dispersion","range","interquartileRange","sortedArray","coefficientOfVariation","cv","cvPercent","meanAbsoluteDeviation","medianAbsoluteDeviation","sortedDeviations","quartileCoefficient","iqrResult","percentileRange","lowerPercentile","upperPercentile","lowerValue","upperValue","giniCoefficient","n","numerator","robustScale","scaledValues","Position","percentile","p","quartiles","q2","quintiles","q4","deciles","percentileRank","zScore","stdDev","boxplotStats","lowerFence","upperFence","inliers","outlierCount","fiveNumberSummary","maximum","rank","originalIndex","ranks","fill","currentRank","_i","assignedRank","currentValue","tiedIndices","idx","pos","normalizedRank","validRanks","maxRank","standardizedValues","Shape","skewness","bias","skewSum","kurtosis","fisher","kurtSum","isNormalDistribution","alpha","shapiroResult","shapiroWilkTest","jarqueBeraResult","jarqueBeraTest","shapiroWilk","pValue","isNormal","jarqueBera","isNormalByTests","ss","shapiroWilkCoefficient","w","shapiroWilkPValue","normalInverse","z","ln_w","standardNormalCDF","skew","kurt","jb","chiSquareCDF","erf","sign","t","df","incompleteGamma","gamma","term","PI","sin","coefficients","momentCoefficient","moment","pearsonSkewness","HypothesisTesting","tTest","type","validSample1","oneSampleTTest","validSample2","twoSampleTTest","pairedTTest","mu0","stdError","tStat","tCDF","degreesOfFreedom","sampleMean","hypothesizedMean","criticalValue","tInverse","significant","equalVariances","n1","n2","mean1","mean2","var1","var2","sample1Mean","sample2Mean","meanDifference","differences","zTest","populationMean","populationStd","validSample","zStat","normalCDF","anovaTest","validGroups","groupMeans","groupSizes","totalN","grandMean","flat","ssb","ssw","groupMean","groupSum","dfBetween","dfWithin","msb","msw","fStat","fCDF","sumOfSquaresBetween","sumOfSquaresWithin","meanSquareBetween","meanSquareWithin","chiSquareTest","contingencyResult","createContingencyTable","chiSquareStat","expected","expectedFreq","toFixed","observed","cramersV","chiSquare","minDimension","mannWhitneyTest","combined","tiedValues","avgRank","item","u1","u2","uStat","zStatistic","sample1Size","sample2Size","incompleteBeta","NaN","num","den","f","df1","df2","bt","logGamma","continuedFractionBeta","qab","qap","qam","c","d","m","m2","aa","del","cof","ser","xx","tmp","ConfidenceIntervals","marginOfError","meanKnownVariance","proportion","successes","zCritical","normalInterval","wilsonInterval","wilsonScoreInterval","normal","wilson","recommended","z2","denominator","center","halfWidth","sampleVariance","chiSquareLower","chiSquareInverse","varianceCI","sampleStandardDeviation","meanDiff","pairedMeanDifference","correlation","r","xVals","yVals","pearsonCorrelation","fisherZ","lowerZ","upperZ","meanX","meanY","sumXSquared","sumYSquared","xDiff","yDiff","lowerIndex","upperIndex","bootstrapCI","calculateStatistic","originalStat","bootstrapMean","originalStatistic","calculateStandardDeviation","fx","fpx","chiSquarePDF","NormalityTests","interpretation","interpretNormalityResult","kolmogorovSmirnov","maxD","empiricalCDF","theoreticalCDF","d1","d2","lambda","kolmogorovSmirnovPValue","andersonDarling","standardized","phi","phiComplement","a2","a2Star","andersonDarlingPValue","adjustedStatistic","calculateSkewness","calculateKurtosis","excessKurtosis","dagoTest","skewnessZ","skewnessZScore","kurtosisZ","kurtosisZScore","k2","w2","delta","sqrtb1","lillieforsTest","lillieforsPValue","criticalValues","pop","batchNormalityTest","results","dagostino","validTests","undefined","normalCount","totalTests","individualTests","summary","testsRun","testsPassingNormality","consensusNormal","strongNormalEvidence","strongNonNormalEvidence","recommendation","getNormalityRecommendation","ratio","testName","Correlation","pearson","xValues","yValues","tStatistic","pearsonConfidenceInterval","interpretCorrelation","spearman","xRanks","calculateRanks","yRanks","rho","pearsonFromArrays","kendall","concordant","discordant","tiesX","tiesY","tiesXY","totalPairs","tau","concordantPairs","discordantPairs","matrix","numericColumns","correlationMatrix","pValueMatrix","sampleSizeMatrix","correlations","pValues","sampleSizes","strongCorrelations","findStrongCorrelations","summarizeCorrelationMatrix","covariance","xVal","covarianceMatrix","covMatrix","partialCorrelation","rxy","rxz","ryz","partialR","controllingFor","indexed","_i3","averageRank","threshold","variable1","variable2","strength","getCorrelationStrength","totalCorrelations","significantCorrelations","strongPositive","strongNegative","maxCorrelation","minCorrelation","significantPairs","strongPositiveCorrelations","strongNegativeCorrelations","averageAbsoluteCorrelation","calculateAverageAbsoluteCorrelation","absCorrelation","significance","Regression","linear","slope","intercept","predicted","residuals","ssResidual","ssTotal","ssRegression","rSquared","adjustedRSquared","mse","rmse","standardErrorSlope","standardErrorIntercept","tStatSlope","tStatIntercept","pValueSlope","pValueIntercept","fStatistic","pValueModel","equation","residualAnalysis","analyzeResiduals","multiple","dependentVariable","independentVariables","missingVars","var_","validRows","every","variable","X","XTranspose","transpose","XTX","matrixMultiply","XTXInverse","matrixInverse","XTY","matrixVectorMultiply","coef","actual","standardErrors","tStats","coefficientData","coefficient","buildEquation","polynomial","degree","buildPolynomialEquation","tStatistics","logistic","maxIterations","tolerance","beta0","beta1","iter","probabilities","sigmoid","score0","score1","info00","info01","info11","residual","determinant","delta0","delta1","finalProbabilities","logLikelihood","mcFaddenR2","calculateNullLogLikelihood","accuracy","pred","confusionMatrix","calculateConfusionMatrix","predict","model","newX","extendedRow","meanResidual","stdResidual","standardizedResiduals","sr","durbinWatson","calculateDurbinWatson","normalityTest","testResidualNormality","jarqueBeraStatistic","tp","fp","tn","fn","precision","recall","truePositive","falsePositive","trueNegative","falseNegative","specificity","f1Score","A","B","rowsA","colsA","colsB","colIndex","identity","augmented","maxRow","pivot","factor","ReportGenerator","basicInfo","getBasicInfo","columnAnalysis","analyzeColumns","dataQuality","assessDataQuality","distributions","analyzeDistributions","relationships","analyzeRelationships","insights","generateKeyInsights","title","generatedAt","Date","toISOString","keyInsights","recommendations","generateRecommendations","totalRows","totalColumns","memoryFootprint","estimateMemoryFootprint","dataTypes","getDataTypes","analysis","columnType","inferColumnType","totalCount","getValidCount","nullCount","getNullCount","uniqueCount","getUniqueCount","nullPercentage","getNullPercentage","getTypeSpecificAnalysis","calculateMean","calculateMedian","calculateQuartiles","distribution","classifyDistribution","calculateFrequencyTable","categories","mostFrequent","getMostFrequent","leastFrequent","getLeastFrequent","entropy","calculateEntropy","concentration","calculateConcentration","dates","getTime","timestamps","date","earliest","latest","span","analyzeDateFrequency","overallScore","issues","completenessScore","assessCompleteness","consistencyScore","assessConsistency","uniquenessScore","assessUniqueness","validityScore","assessValidity","severity","description","getQualityRecommendation","testNormality","histogram","createHistogram","descriptiveStats","getDescriptiveStats","strongRelationships","_loop2","calculatePearsonCorrelation","direction","averageCorrelation","calculateAverageCorrelation","generateDataVolumeInsights","generateColumnInsights","generateRelationshipInsights","generateDistributionInsights","generateQualityInsights","importance","toLocaleString","actionable","highNullColumns","skewedColumns","constantColumns","strongest","toLowerCase","rel","normalColumns","outliersColumns","totalOutliers","duplicateRows","countDuplicateRows","missingPercentage","priority","category","steps","numericCount","dateCount","q1Index","q2Index","q3Index","probability","log2","topCategory","intervals","avgInterval","totalCells","completeCells","score","duplicates","totalValues","invalidValues","bins","binWidth","binIndex","binStart","binEnd","var","seen","rowString","stringify","has","typeSet","totalBytes","sizeInKB","sizeInMB","generateTextReport","summaryData","report","repeat","insight","rec","toUpperCase","step","exportSummary","format","generateCSVReport","csv","PatternDetector","analyze","patterns","trends","detectTrends","seasonality","detectSeasonality","detectCorrelationPatterns","detectDistributionPatterns","clustering","detectSimpleClusters","temporal","detectTemporalPatterns","timestamp","datasetSize","generateSummary","generateInsights","getNumericColumns","getColumnValues","trendData","trendResult","calculateTrend","classifyTrendStrength","dateColumns","getDateColumns","dateCol","numCol","timeSeries","createTimeSeries","seasonalPattern","analyzeSeasonalPattern","dateColumn","valueColumn","period","peaks","pattern","outlierResults","findOutliers","outlierValues","classifyOutlierSeverity","clusters","buildCorrelationMatrix","findCorrelationClusters","avgCorrelation","distInfo","analyzeDistribution","transformation","suggestTransformation","getTwoColumnData","clusterResult","performSimpleKMeans","quality","variables","centers","interpretClusterQuality","calculateIntervals","determineFrequency","gaps","findGaps","totalSpan","int","point","valueCol","sumX","sumY","sumXY","sumXX","ssRes","ssTot","stderr","bestPeriod","calculateAutoCorrelation","findPeaks","valleys","findValleys","classifySeasonalType","calculateQuantile","bounds","_this6","values1","values2","calculateCorrelation","visited","cluster","other","initializeCenters","assignments","changed","distances","newAssignment","indexOf","clusterPoints","calculateClusterQuality","dayInMs","expectedFrequency","expectedInterval","getExpectedInterval","actualInterval","start","end","duration","totalPatterns","strongTrends","details","severeOutliers","o","s","goodClusters","high","medium","low","lag","sum1","sum2","diff1","diff2","minX","maxX","minY","maxY","totalWithinSS","totalBetweenSS","overallCentroid","clusterIndex","totalSS","Interpreter","interpret","testResult","identifyTestType","conclusion","generateConclusion","interpretSignificance","effectSize","interpretEffectSize","assessConfidence","assumptions","checkAssumptions","plainLanguage","generatePlainLanguageSummary","summarizeCorrelation","summarizeRegression","summarizeTTest","summarizeZTest","summarizeANOVA","summarizeNormalityTest","summarizeGeneral","r2","_testResult$pValue","decision","statement","rejectNull","confidenceLevel","level","isSignificant","interpretCorrelationEffect","interpretRegressionEffect","interpretTTestEffect","interpretANOVAEffect","magnitude","varianceExplained","cohen","getCohenCorrelation","getRSquaredMagnitude","diff","cohensD","getCohenD","etaSquared","getEtaSquared","factors","ci","width","estimate","getConfidenceRecommendation","violated","eta2","formatForReport","effect","explainStatistic","regression","anova","generateActionItems","actions","AutoAnalyzer","statsInstance","stats","visualizations","autoAnalyze","minCorrelationThreshold","significanceLevel","generateVisualizations","includeAdvancedAnalysis","validation","variableTypes","classifyVariables","quantitative","qualitative","descriptiveAnalysis","performDescriptiveAnalysis","correlationAnalysis","performCorrelationAnalysis","regressionAnalysis","performRegressionAnalysis","distributionAnalysis","performDistributionAnalysis","outlierAnalysis","performOutlierAnalysis","temporalAnalysis","performTemporalAnalysis","generateAutoInsights","visualizationSuggestions","suggestVisualizations","metadata","analysisDate","columnsAnalyzed","configuration","variableClassification","descriptiveStatistics","generateExecutiveSummary","datetime","binary","ordinal","classification","classifyVariable","uniqueValues","numericRatio","isDateTimeColumn","subtype","determineQuantitativeSubtype","isOrdinalVariable","canSkew","canKurt","quantitativeVars","corr","regressionResults","linearRegression","independent","dependent","interpretRegressionResult","models","normalityPValue","distributionType","classifyDistributionType","getDistributionRecommendation","reason","getOutlierRecommendation","_this7","dateVar","timeSpan","dataPoints","analyses","_analyses$regressionA","_analyses$variableTyp","icon","priorityOrder","suggestions","highPriority","totalInsights","highPriorityInsights","categoriesCovered","keyFindings","generateTopRecommendations","r2Percent","explanation","day","BaseModel","trained","features","target","trainingMetrics","validateTrainingData","validatePredictionData","normalizeFeatures","normalized","means","stds","splitTrainTest","testSize","shuffle","trainCount","trainIndices","testIndices","X_train","X_test","y_train","y_test","save","load","modelData","LinearRegression","_BaseModel","learningRate","regularization","call","normParams","_inheritsLoose","fit","normalize","_this$normalizeFeatur","losses","predictions","predictSingle","weightGradients","biasGradient","loss","calculateLoss","finalLoss","_this$normParams","l2","l1","yMean","r2Score","mae","getCoefficients","getEquation","eq","modelType","hyperparameters","LogisticRegression","classes","multiclass","softmax","maxZ","expZ","sumExpZ","fitMulticlass","fitBinary","yBinary","label","calculateBinaryLoss","yOneHot","encoded","calculateMulticlassLoss","returnProba","probas","proba","obj","cls","maxIdx","predictProba","correct","cm","classMetrics","calculateClassMetrics","yTrue","yPred","trueIdx","predIdx","display","formatConfusionMatrix","maxLen","toString","pad","padStart","output","metrics","support","KNearestNeighbors","metric","taskType","euclideanDistance","x1","x2","manhattanDistance","minkowskiDistance","calculateDistance","samples","findKNearest","trainPoint","distance","predictSingleClassification","neighbors","votes","neighbor","predictSingleRegression","weightedSum","_this$normParams2","DecisionTree","maxDepth","minSamplesSplit","minSamplesLeaf","criterion","tree","buildTree","treeDepth","getTreeDepth","leafCount","getLeafCount","nodeCount","getNodeCount","depth","nFeatures","isPure","createLeaf","bestSplit","bestScore","Infinity","featureIdx","_step","_iterator","_createForOfIteratorHelperLoose","getThresholds","done","_this$splitData","splitData","left","right","calculateSplitScore","isLeaf","thresholds","leftX","leftY","rightX","rightY","counts","prediction","parentY","parentImpurity","calculateImpurity","nRight","parentVariance","node","leaf","findLeaf","getFeatureImportance","calculateImportance","featureName","featureImportance","RandomForest","nEstimators","maxFeatures","trees","featureIndices","maxFeaturesCount","getMaxFeaturesCount","X_sample","y_sample","selectRandomFeatures","X_subset","avgTreeDepth","avgLeafCount","selected","randomIdx","classCounts","treeImportance","featureMap","localIdx","NaiveBayes","classPriors","parameters","nSamples","fitGaussian","fitMultinomial","fitBernoulli","nClasses","classData","variances","feature","featureProbs","featureSum","nClassSamples","_loop3","featureCount","gaussianProbability","posteriors","logProb","params","prob","_this8","logPosteriors","maxLogProb","expProbs","sumExpProbs","naiveBayesType","SupportVectorMachine","C","kernel","supportVectors","xi","yi","margin","decisionFunction","regTerm","identifySupportVectors","nSupportVectors","supportVectorRatio","totalVariance","vector","kernelFunction","squaredDistance","dotProduct","prob1","MachineLearning","createLinearRegression","_options$learningRate","_options$iterations","_options$regularizati","_options$lambda","createLogisticRegression","_options2$learningRat","_options2$iterations","_options2$regularizat","_options2$lambda","createKNN","_options3$k","_options3$metric","_options3$weights","createDecisionTree","_options4$maxDepth","_options4$minSamplesS","_options4$minSamplesL","_options4$criterion","createRandomForest","_options5$nEstimators","_options5$maxDepth","_options5$minSamplesS","_options5$minSamplesL","_options5$maxFeatures","_options5$criterion","_options5$bootstrap","createNaiveBayes","_options6$type","createSVM","_options7$C","_options7$kernel","_options7$gamma","_options7$degree","_options7$learningRat","_options7$iterations","crossValidate","folds","foldSize","scores","fold","testStart","testEnd","foldModel","create","getPrototypeOf","assign","meanScore","stdScore","trainTestSplit","compareModels","_this$trainTestSplit","startTime","now","trainTime","evalStart","evalTime","fullScore","bestModel","comparison","generateComparisonReport","padEnd","polynomialFeatures","standardScaler","scaled","transform","minMaxScaler","featureRange","mins","maxs","min_range","max_range","rocCurve","yProba","positives","negatives","tpr","fpr","auc","precisionRecallCurve","totalPositives","currentRecall","quickTrain","_options8$taskType","_options8$testSize","_options8$normalize","_this$trainTestSplit2","xhtml","namespaces","svg","xlink","xml","xmlns","namespace","prefix","hasOwnProperty","space","local","creatorInherit","document","ownerDocument","uri","namespaceURI","documentElement","createElement","createElementNS","creatorFixed","fullname","creator","none","selector","querySelector","array","empty","childMatcher","matches","find","childFirst","firstElementChild","children","sparse","update","EnterNode","parent","datum","_next","_parent","__data__","bindIndex","enter","exit","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","Map","keyValues","set","get","delete","arraylike","ascending","attrRemove","removeAttribute","attrRemoveNS","removeAttributeNS","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","arguments","attrFunctionNS","defaultView","styleRemove","style","removeProperty","styleConstant","setProperty","styleFunction","propertyRemove","propertyConstant","propertyFunction","classArray","string","classList","ClassList","_node","_names","getAttribute","classedAdd","names","list","classedRemove","remove","classedTrue","classedFalse","classedFunction","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","parentNode","appendChild","previousSibling","insertBefore","firstChild","constantNull","removeChild","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","onRemove","typename","on","__on","removeEventListener","listener","onAdd","event","contextListener","addEventListener","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","constructor","child","next","querySelectorAll","contains","root","Selection","parents","_groups","_parents","descending","bisector","compare1","compare2","lo","hi","zero","select","subgroups","subnode","subgroup","selectAll","arrayAll","selectorAll","selectChild","match","childFind","selectChildren","childrenFilter","matcher","bind","constant","enterGroup","updateGroup","previous","i0","i1","_enter","_exit","onenter","onupdate","onexit","selection","append","merge","context","groups0","groups1","m0","merges","group0","group1","compareDocumentPosition","compare","compareNode","sortgroups","sortgroup","callback","nodes","each","attr","getAttributeNS","getPropertyValue","getComputedStyle","styleValue","property","classed","text","html","insert","before","deep","typenames","parseTypenames","dispatch","Symbol","iterator","bisectRight","bisect","extent","valueof","InternMap","keyof","super","defineProperties","_intern","_key","intern_get","intern_set","intern_delete","valueOf","ascendingDefined","e10","e5","e2","tickSpec","stop","power","log10","i2","inc","ticks","reverse","tickIncrement","thresholdSturges","LN2","quickselect","TypeError","compareDefined","sd","swap","initRange","domain","initInterpolator","interpolator","implicit","unknown","scale","copy","band","bandwidth","ordinalRange","r0","r1","paddingInner","paddingOuter","align","rescale","sequence","rangeRound","padding","pointish","define","factory","extend","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","l","exec","rgbn","Rgb","rgba","hsla","g","opacity","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","clamph","clampt","hsl2rgb","m1","channels","displayable","formatHex8","formatHsl","clamp","constant$1","nogamma","spline","rgbGamma","exponential","colorRgb","rgbBasis","v1","v2","t1","v0","v3","t2","t3","basis","colors","numberArray","genericArray","nb","na","setTime","interpolateNumber","object","reA","reB","am","bm","bs","bi","lastIndex","number","one","interpolate","ArrayBuffer","isView","DataView","isNumberArray","interpolateRound","unit","bimap","d0","polymap","formatDecimalParts","toExponential","exponent","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","symbol","comma","formatRounded","formatTypes","e","toPrecision","identity$2","locale","formatPrefix","prefixes","linearish","tickFormat","tickStep","precisionPrefix","precisionRound","precisionFixed","nice","prestep","maxIter","identity$1","grouping","thousands","substring","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","charCodeAt","formatLocale","epsilon","translateX","translateY","offset","entering","__axis","axis","orient","tickArguments","tickValues","tickSizeInner","tickSizeOuter","tickPadding","devicePixelRatio","spacing","range0","range1","position","path","tick","tickExit","tickEnter","transition","tickSize","scheme","schemeCategory10","ramp","interpolateRgbBasis","interpolateViridis","atan2","cos","pi","halfPi","asin","tauEpsilon","strings","Path","digits","_x0","_y0","_x1","_y1","_append","appendRound","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","withPath","shape","RangeError","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","_context","curveLinear","defined","curve","buffer","defined0","lineStart","lineEnd","pointX","pointY","that","Basis","areaStart","_line","areaEnd","_point","d3","scaleLinear","untransform","piecewise","input","interpolateValue","invert","u","transformer","scaleBand","scalePoint","scaleOrdinal","scaleSequential","sequential","t0","k10","deviation","Float64Array","numbers","value0","subarray","sturges","xz","tz","bin","axisBottom","axisLeft","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","curveBasis","pie","sortValues","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","x3","y3","x32","y32","intersect","ax","ay","bx","by","kc","lc","centroid","interpolateRdYlBu","DataViz","containerId","defaultWidth","defaultHeight","defaultMargin","top","bottom","createContainer","height","targetId","container","_options$title","_options$xlabel","xlabel","_options$ylabel","ylabel","_options$bins","_options$color","_options$width","_options$height","_options$containerId","innerWidth","innerHeight","histData","boxplot","_options2$title","_options2$xlabel","_options2$ylabel","_options2$labels","labels","_options2$color","_options2$width","_options2$height","_options2$containerId","datasets","categoryLabels","boxData","boxWidth","outlier","scatter","xData","yData","_options3$title","_options3$xlabel","_options3$ylabel","_options3$color","_options3$size","_options3$labels","_options3$width","_options3$height","_options3$containerId","tooltip","pageX","pageY","_options4$title","_options4$xlabel","_options4$ylabel","_options4$color","_options4$lineWidth","lineWidth","_options4$showPoints","showPoints","_options4$width","_options4$height","_options4$containerId","bar","_options5$title","_options5$xlabel","_options5$ylabel","_options5$color","_options5$horizontal","horizontal","_options5$width","_options5$height","_options5$containerId","cat","_options6$title","_options6$width","_options6$height","_options6$showLabels","showLabels","_options6$showPercent","showPercentage","_options6$containerId","radius","labelArc","heatmap","_options7$title","_options7$labels","_options7$colorScheme","colorScheme","_options7$showValues","showValues","_options7$width","_options7$height","_options7$containerId","rowLabels","colLabels","rowLabel","colLabel","colorScale","legendG","legendScale","legendAxis","legendWidth","violin","_options8$title","_options8$xlabel","_options8$ylabel","_options8$labels","_options8$color","_options8$width","_options8$height","_options8$containerId","allValues","density","kde","maxDensity","xScale","qqplot","_options9$title","_options9$xlabel","_options9$ylabel","_options9$color","_options9$width","_options9$height","_options9$containerId","theoretical","invNormalCDF","qqData","minVal","maxVal","c1","c2","c3","c4","c5","c6","d4","_options0$title","_options0$xlabel","_options0$ylabel","_options0$color","_options0$bandwidth","_options0$width","_options0$height","_options0$containerId","bw","xPoints","densityData","parallel","dimensions","_options1$title","_options1$colors","_options1$width","_options1$height","_options1$containerId","dim","pairplot","_options10$title","_options10$color","_options10$size","_options10$width","_options10$height","_options10$containerI","cellSize","scales","xVar","yVar","cellG","yScale","multiline","series","_options11$title","_options11$xlabel","_options11$ylabel","_options11$legend","legend","_options11$width","_options11$height","_options11$containerI","allX","flatMap","allY","legendItem","Datly","dataLoader","validator","utils","centralTendency","dispersion","hypothesisTesting","confidenceIntervals","normalityTests","reportGenerator","patternDetector","interpreter","autoAnalyzer","ml","viz","Promise","resolve","reject","correlationPearson","correlationSpearman","generateSummaryReport","identifyPatterns","interpretResults","autoAnalyzeFromFile","loadOptions","analysisOptions","_temp2","_result","_temp","then","_this3$loadCSV","_this3$loadJSON","quickAnalysis","plotHistogram","plotBoxplot","plotScatter","plotLine","plotBar","plotPie","plotHeatmap","plotViolin","plotDensity","plotQQ","plotParallel","plotPairplot","plotMultiline","plotCorrelationMatrix","plotDistribution","plotMultipleDistributions"],"mappings":"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"}
1
+ {"version":3,"file":"datly.umd.js","sources":["../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/number.js","../node_modules/d3-array/src/extent.js","../node_modules/internmap/src/index.js","../node_modules/d3-array/src/identity.js","../node_modules/d3-array/src/sort.js","../node_modules/d3-array/src/array.js","../node_modules/d3-array/src/constant.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/threshold/sturges.js","../node_modules/d3-array/src/count.js","../node_modules/d3-array/src/bin.js","../node_modules/d3-array/src/nice.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/min.js","../node_modules/d3-array/src/quickselect.js","../node_modules/d3-array/src/quantile.js","../node_modules/d3-array/src/mean.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-scale/src/band.js","../node_modules/d3-array/src/range.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/basis.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-scale/src/linear.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-scale/src/sequential.js","../node_modules/d3-axis/src/identity.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-axis/src/axis.js","../node_modules/d3-scale-chromatic/src/colors.js","../node_modules/d3-scale-chromatic/src/categorical/category10.js","../node_modules/d3-scale-chromatic/src/ramp.js","../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-path/src/path.js","../node_modules/d3-shape/src/path.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/curve/linear.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/curve/basis.js","../src/plot.js","../src/code.js","../src/index.js","../node_modules/d3-shape/src/pie.js"],"sourcesContent":["export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","export default function extent(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","export default function identity(x) {\n return x;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function constant(x) {\n return () => x;\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n","export default function count(values, valueof) {\n let count = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count;\n }\n }\n }\n return count;\n}\n","import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks, {tickIncrement} from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function bin() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n if (!Array.isArray(data)) data = Array.from(data);\n\n var i,\n n = data.length,\n x,\n step,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds, and nice the\n // default domain accordingly.\n if (!Array.isArray(tz)) {\n const max = x1, tn = +tz;\n if (domain === extent) [x0, x1] = nice(x0, x1, tn);\n tz = ticks(x0, x1, tn);\n\n // If the domain is aligned with the first tick (which it will by\n // default), then we can use quantization rather than bisection to bin\n // values, which is substantially faster.\n if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\n\n // If the last threshold is coincident with the domain’s upper bound, the\n // last bin will be zero-width. If the default domain is used, and this\n // last threshold is coincident with the maximum input value, we can\n // extend the niced upper bound by one tick to ensure uniform bin widths;\n // otherwise, we simply remove the last threshold. Note that we don’t\n // coerce values or the domain to numbers, and thus must be careful to\n // compare order (>=) rather than strict equality (===)!\n if (tz[tz.length - 1] >= x1) {\n if (max >= x1 && domain === extent) {\n const step = tickIncrement(x0, x1, tn);\n if (isFinite(step)) {\n if (step > 0) {\n x1 = (Math.floor(x1 / step) + 1) * step;\n } else if (step < 0) {\n x1 = (Math.ceil(x1 * -step) + 1) / -step;\n }\n }\n } else {\n tz.pop();\n }\n }\n }\n\n // Remove any thresholds outside the domain.\n // Be careful not to mutate an array owned by the user!\n var m = tz.length, a = 0, b = m;\n while (tz[a] <= x0) ++a;\n while (tz[b - 1] > x1) --b;\n if (a || b < m) tz = tz.slice(a, b), m = b - a;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n if (isFinite(step)) {\n if (step > 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n }\n }\n } else if (step < 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n const j = Math.floor((x0 - x) * step);\n bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n }\n }\n }\n } else {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;\n };\n\n return histogram;\n}\n","import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n let prestep;\n while (true) {\n const step = tickIncrement(start, stop, count);\n if (step === prestep || step === 0 || !isFinite(step)) {\n return [start, stop];\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n }\n prestep = step;\n }\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","export default function(x) {\n return x;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","// ========================\n// 📊 D3 Core Imports\n// ========================\n// d3-selection\nimport { select, selectAll } from \"d3-selection\";\n// d3-scale\nimport {\n scaleLinear,\n scaleBand,\n scalePoint,\n scaleOrdinal,\n scaleSequential,\n} from \"d3-scale\";\n// d3-array\nimport {\n extent,\n max,\n min,\n sum,\n range,\n mean,\n deviation,\n histogram as d3Histogram,\n quantile,\n} from \"d3-array\";\n// d3-axis\nimport { axisBottom, axisLeft } from \"d3-axis\";\n// d3-colors\nimport {\n schemeCategory10,\n interpolateRdYlBu,\n interpolateViridis,\n} from \"d3-scale-chromatic\";\n// d3-shape\nimport { line as d3Line, curveBasis, pie as d3Pie, arc as d3Arc } from \"d3-shape\";\n\nlet plotCounter = 0;\n\nconst defaultConfig = {\n width: 400,\n height: 400,\n color: \"#000\",\n background: \"#fff\",\n title: \"\",\n xlabel: \"\",\n ylabel: \"\",\n axisColor: \"#000000\",\n titleColor: \"#000000\",\n xAxisColor: null,\n yAxisColor: null\n};\n\nfunction createSvg(userSelector, opts) {\n const config = { ...defaultConfig, ...opts };\n let selector = userSelector;\n let container;\n\n if (!selector) {\n selector = `#datly-plot-${plotCounter++}`;\n const div = document.createElement(\"div\");\n div.id = selector.replace(\"#\", \"\");\n document.body.appendChild(div);\n }\n\n container = select(selector);\n container.html(\"\");\n container.style(\"background\", config.background).style(\"display\", \"inline-block\");\n\n if (config.title) {\n container\n .append(\"h3\")\n .style(\"text-align\", \"center\")\n .style(\"font-family\", \"sans-serif\")\n .style(\"margin-bottom\", \"5px\")\n .style(\"color\", config.titleColor || defaultConfig.titleColor)\n .text(config.title);\n }\n\n const svg = container\n .append(\"svg\")\n .attr(\"width\", config.width)\n .attr(\"height\", config.height)\n .style(\"background\", config.background);\n\n // Adicionar xlabel\n if (config.xlabel) {\n svg.append(\"text\")\n .attr(\"x\", config.width / 2)\n .attr(\"y\", config.height - 10) // 10px da borda inferior\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-family\", \"sans-serif\")\n .style(\"font-size\", \"14px\")\n .style(\"fill\", config.xAxisColor || config.axisColor || defaultConfig.axisColor)\n .text(config.xlabel);\n }\n\n // Adicionar ylabel\n if (config.ylabel) {\n svg.append(\"text\")\n .attr(\"transform\", `translate(15, ${config.height / 2}) rotate(-90)`)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-family\", \"sans-serif\")\n .style(\"font-size\", \"14px\")\n .style(\"fill\", config.yAxisColor || config.axisColor || defaultConfig.axisColor)\n .text(config.ylabel);\n }\n\n return { svg, config };\n}\n\n// ✅ Função para aplicar cor nos eixos\nfunction styleAxis(axisSelection, color) {\n axisSelection.selectAll(\"path\").attr(\"stroke\", color);\n axisSelection.selectAll(\"line\").attr(\"stroke\", color);\n axisSelection.selectAll(\"text\").attr(\"fill\", color);\n}\n\n// =======================================================\n// HISTOGRAM\n// =======================================================\nexport function plotHistogram(data, options = {}, selector) {\n const { svg, config } = createSvg(selector, options);\n const margin = { top: 20, right: 20, bottom: 40, left: 40 };\n const width = config.width - margin.left - margin.right;\n const height = config.height - margin.top - margin.bottom;\n\n const x = scaleLinear().domain(extent(data)).nice().range([0, width]);\n const bins = d3Histogram().domain(x.domain()).thresholds(options.bins || 10)(data);\n const y = scaleLinear().domain([0, max(bins, (d) => d.length)]).nice().range([height, 0]);\n\n const g = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n g.selectAll(\"rect\")\n .data(bins)\n .enter()\n .append(\"rect\")\n .attr(\"x\", (d) => x(d.x0))\n .attr(\"y\", (d) => y(d.length))\n .attr(\"width\", (d) => x(d.x1) - x(d.x0) - 1)\n .attr(\"height\", (d) => height - y(d.length))\n .attr(\"fill\", config.color);\n\n const xAxis = g.append(\"g\").attr(\"transform\", `translate(0,${height})`).call(axisBottom(x));\n const yAxis = g.append(\"g\").call(axisLeft(y));\n styleAxis(xAxis, config.xAxisColor || config.axisColor);\n styleAxis(yAxis, config.yAxisColor || config.axisColor);\n}\n\n// =======================================================\n// BOXPLOT\n// =======================================================\nexport function plotBoxplot(data, options = {}, selector) {\n const groups = Array.isArray(data[0]) ? data : [data];\n const { svg, config } = createSvg(selector, options);\n const margin = { top: 20, right: 20, bottom: 40, left: 40 };\n const width = config.width - margin.left - margin.right;\n const height = config.height - margin.top - margin.bottom;\n\n const x = scaleBand()\n .domain(groups.map((_, i) => options.labels ? options.labels[i] : `Group ${i+1}`))\n .range([0, width])\n .padding(0.5);\n\n const allValues = groups.flat();\n const y = scaleLinear().domain(extent(allValues)).nice().range([height, 0]);\n const g = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n groups.forEach((group, i) => {\n const sorted = [...group].sort((a, b) => a - b);\n const q1 = quantile(sorted, 0.25);\n const median = quantile(sorted, 0.5);\n const q3 = quantile(sorted, 0.75);\n const minVal = min(sorted);\n const maxVal = max(sorted);\n const xPos = x(options.labels ? options.labels[i] : `Group ${i+1}`) + x.bandwidth()/2;\n const boxWidth = x.bandwidth()/2;\n\n g.append(\"line\")\n .attr(\"x1\", xPos)\n .attr(\"x2\", xPos)\n .attr(\"y1\", y(minVal))\n .attr(\"y2\", y(maxVal))\n .attr(\"stroke\", config.color);\n\n g.append(\"rect\")\n .attr(\"x\", xPos - boxWidth / 2)\n .attr(\"y\", y(q3))\n .attr(\"width\", boxWidth)\n .attr(\"height\", y(q1) - y(q3))\n .attr(\"stroke\", config.color)\n .attr(\"fill\", \"none\");\n\n g.append(\"line\")\n .attr(\"x1\", xPos - boxWidth / 2)\n .attr(\"x2\", xPos + boxWidth / 2)\n .attr(\"y1\", y(median))\n .attr(\"y2\", y(median))\n .attr(\"stroke\", config.color);\n });\n\n const xAxis = g.append(\"g\").attr(\"transform\", `translate(0,${height})`).call(axisBottom(x));\n const yAxis = g.append(\"g\").call(axisLeft(y));\n styleAxis(xAxis, config.xAxisColor || config.axisColor);\n styleAxis(yAxis, config.yAxisColor || config.axisColor);\n}\n\n// =======================================================\n// SCATTER\n// =======================================================\nexport function plotScatter(xData, yData, options = {}, selector) {\n const { svg, config } = createSvg(selector, options);\n const margin = { top: 20, right: 20, bottom: 40, left: 40 };\n const width = config.width - margin.left - margin.right;\n const height = config.height - margin.top - margin.bottom;\n\n const x = scaleLinear().domain(extent(xData)).nice().range([0, width]);\n const y = scaleLinear().domain(extent(yData)).nice().range([height, 0]);\n const g = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n g.selectAll(\"circle\")\n .data(xData)\n .enter()\n .append(\"circle\")\n .attr(\"cx\", (_, i) => x(xData[i]))\n .attr(\"cy\", (_, i) => y(yData[i]))\n .attr(\"r\", options.size || 4)\n .attr(\"fill\", config.color);\n\n const xAxis = g.append(\"g\").attr(\"transform\", `translate(0,${height})`).call(axisBottom(x));\n const yAxis = g.append(\"g\").call(axisLeft(y));\n styleAxis(xAxis, config.xAxisColor || config.axisColor);\n styleAxis(yAxis, config.yAxisColor || config.axisColor);\n}\n\n// =======================================================\n// LINE\n// =======================================================\nexport function plotLine(xData, yData, options = {}, selector) {\n const { svg, config } = createSvg(selector, options);\n const margin = { top: 20, right: 20, bottom: 40, left: 40 };\n const width = config.width - margin.left - margin.right;\n const height = config.height - margin.top - margin.bottom;\n\n const x = scaleLinear().domain(extent(xData)).range([0, width]);\n const y = scaleLinear().domain(extent(yData)).range([height, 0]);\n const g = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const path = d3Line()\n .x((_, i) => x(xData[i]))\n .y((_, i) => y(yData[i]))\n .curve(curveBasis);\n\n g.append(\"path\")\n .datum(xData)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", config.color)\n .attr(\"stroke-width\", options.lineWidth || 2)\n .attr(\"d\", path);\n\n if (options.showPoints) {\n g.selectAll(\"circle\")\n .data(xData)\n .enter()\n .append(\"circle\")\n .attr(\"cx\", (_, i) => x(xData[i]))\n .attr(\"cy\", (_, i) => y(yData[i]))\n .attr(\"r\", 3)\n .attr(\"fill\", config.color);\n }\n\n const xAxis = g.append(\"g\").attr(\"transform\", `translate(0,${height})`).call(axisBottom(x));\n const yAxis = g.append(\"g\").call(axisLeft(y));\n styleAxis(xAxis, config.xAxisColor || config.axisColor);\n styleAxis(yAxis, config.yAxisColor || config.axisColor);\n}\n\n// =======================================================\n// BAR\n// =======================================================\nexport function plotBar(categories, values, options = {}, selector) {\n const { svg, config } = createSvg(selector, options);\n const margin = { top: 20, right: 20, bottom: 40, left: 40 };\n const width = config.width - margin.left - margin.right;\n const height = config.height - margin.top - margin.bottom;\n\n const x = scaleBand().domain(categories).range([0, width]).padding(0.2);\n const y = scaleLinear().domain([0, max(values)]).nice().range([height, 0]);\n const g = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n g.selectAll(\"rect\")\n .data(values)\n .enter()\n .append(\"rect\")\n .attr(\"x\", (_, i) => x(categories[i]))\n .attr(\"y\", (d) => y(d))\n .attr(\"width\", x.bandwidth())\n .attr(\"height\", (d) => height - y(d))\n .attr(\"fill\", config.color);\n\n const xAxis = g.append(\"g\").attr(\"transform\", `translate(0,${height})`).call(axisBottom(x));\n const yAxis = g.append(\"g\").call(axisLeft(y));\n styleAxis(xAxis, config.xAxisColor || config.axisColor);\n styleAxis(yAxis, config.yAxisColor || config.axisColor);\n}\n\n// =======================================================\n// PIE\n// =======================================================\nexport function plotPie(labels, values, options = {}, selector) {\n const { svg, config } = createSvg(selector, options);\n const radius = Math.min(config.width, config.height) / 2;\n const g = svg.append(\"g\").attr(\"transform\", `translate(${config.width/2},${config.height/2})`);\n const color = scaleOrdinal(schemeCategory10);\n const pieGen = d3Pie();\n const arcs = pieGen(values);\n const arcGen = d3Arc().innerRadius(0).outerRadius(radius);\n\n g.selectAll(\"path\")\n .data(arcs)\n .enter()\n .append(\"path\")\n .attr(\"d\", arcGen)\n .attr(\"fill\", (d, i) => color(i));\n\n if (options.showLabels) {\n g.selectAll(\"text\")\n .data(arcs)\n .enter()\n .append(\"text\")\n .attr(\"transform\", (d) => `translate(${arcGen.centroid(d)})`)\n .attr(\"text-anchor\", \"middle\")\n .text((d, i) => labels[i]);\n }\n}\n\n// =======================================================\n// HEATMAP\n// =======================================================\nexport function plotHeatmap(matrix, options = {}, selector) {\n const { svg, config } = createSvg(selector, options);\n const labels = options.labels || matrix.map((_, i) => `Var${i+1}`);\n const margin = { top: 40, right: 20, bottom: 40, left: 60 };\n const width = config.width - margin.left - margin.right;\n const height = config.height - margin.top - margin.bottom;\n\n const x = scaleBand().domain(labels).range([0, width]).padding(0.05);\n const y = scaleBand().domain(labels).range([0, height]).padding(0.05);\n const color = scaleSequential(interpolateRdYlBu).domain([1, -1]);\n\n const g = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const cells = [];\n matrix.forEach((row, i) => {\n row.forEach((value, j) => cells.push({ x: labels[j], y: labels[i], value }));\n });\n\n g.selectAll(\"rect\")\n .data(cells)\n .enter()\n .append(\"rect\")\n .attr(\"x\", d => x(d.x))\n .attr(\"y\", d => y(d.y))\n .attr(\"width\", x.bandwidth())\n .attr(\"height\", y.bandwidth())\n .attr(\"fill\", d => color(d.value));\n\n if (options.showValues) {\n g.selectAll(\"text\")\n .data(cells)\n .enter()\n .append(\"text\")\n .attr(\"x\", d => x(d.x) + x.bandwidth()/2)\n .attr(\"y\", d => y(d.y) + y.bandwidth()/2)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"10px\")\n .text(d => d.value.toFixed(2));\n }\n\n const xAxis = g.append(\"g\").attr(\"transform\", `translate(0,${height})`).call(axisBottom(x));\n const yAxis = g.append(\"g\").call(axisLeft(y));\n styleAxis(xAxis, config.xAxisColor || config.axisColor);\n styleAxis(yAxis, config.yAxisColor || config.axisColor);\n}\n\n// =======================================================\n// VIOLIN\n// =======================================================\nexport function plotViolin(groups, options = {}, selector) {\n const { svg, config } = createSvg(selector, options);\n const dataGroups = Array.isArray(groups[0]) ? groups : [groups];\n const margin = { top: 20, right: 20, bottom: 40, left: 40 };\n const width = config.width - margin.left - margin.right;\n const height = config.height - margin.top - margin.bottom;\n\n const x = scaleBand()\n .domain(dataGroups.map((_, i) => options.labels ? options.labels[i] : `Group ${i+1}`))\n .range([0, width])\n .padding(0.5);\n const allValues = dataGroups.flat();\n const y = scaleLinear().domain(extent(allValues)).nice().range([height, 0]);\n const g = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n dataGroups.forEach((group, i) => {\n const bins = d3Histogram().domain(y.domain()).thresholds(20)(group);\n const maxLen = max(bins, d => d.length);\n const xPos = x(options.labels ? options.labels[i] : `Group ${i+1}`);\n const scaleW = scaleLinear().domain([0, maxLen]).range([0, x.bandwidth()/2]);\n\n const areaGen = d3Line()\n .x(d => scaleW(d.length))\n .y(d => y((d.x0 + d.x1)/2));\n\n const mirrored = d3Line()\n .x(d => -scaleW(d.length))\n .y(d => y((d.x0 + d.x1)/2));\n\n const g2 = g.append(\"g\").attr(\"transform\", `translate(${xPos + x.bandwidth()/2},0)`);\n\n g2.append(\"path\")\n .datum(bins)\n .attr(\"fill\", options.color || config.color)\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", config.color)\n .attr(\"d\", areaGen);\n\n g2.append(\"path\")\n .datum(bins)\n .attr(\"fill\", options.color || config.color)\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", config.color)\n .attr(\"d\", mirrored);\n });\n\n const xAxis = g.append(\"g\").attr(\"transform\", `translate(0,${height})`).call(axisBottom(x));\n const yAxis = g.append(\"g\").call(axisLeft(y));\n styleAxis(xAxis, config.xAxisColor || config.axisColor);\n styleAxis(yAxis, config.yAxisColor || config.axisColor);\n}\n\n// =======================================================\n// DENSITY\n// =======================================================\nexport function plotDensity(data, options = {}, selector) {\n const { svg, config } = createSvg(selector, options);\n const margin = { top: 20, right: 20, bottom: 40, left: 40 };\n const width = config.width - margin.left - margin.right;\n const height = config.height - margin.top - margin.bottom;\n\n const x = scaleLinear().domain(extent(data)).nice().range([0, width]);\n const kde = kernelDensityEstimator(epanechnikovKernel(options.bandwidth || 5), x.ticks(50));\n const density = kde(data);\n const y = scaleLinear().domain([0, max(density, d => d[1])]).range([height, 0]);\n\n const g = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n const path = d3Line().curve(curveBasis).x(d => x(d[0])).y(d => y(d[1]));\n\n g.append(\"path\")\n .datum(density)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", config.color)\n .attr(\"stroke-width\", 2)\n .attr(\"d\", path);\n\n const xAxis = g.append(\"g\").attr(\"transform\", `translate(0,${height})`).call(axisBottom(x));\n const yAxis = g.append(\"g\").call(axisLeft(y));\n styleAxis(xAxis, config.xAxisColor || config.axisColor);\n styleAxis(yAxis, config.yAxisColor || config.axisColor);\n}\n\nfunction kernelDensityEstimator(kernel, X) {\n return function (V) {\n return X.map(function (x) {\n return [x, mean(V, v => kernel(x - v))];\n });\n };\n}\nfunction epanechnikovKernel(bandwidth) {\n return function (u) {\n u /= bandwidth;\n return Math.abs(u) <= 1 ? 0.75 * (1 - u * u) / bandwidth : 0;\n };\n}\n\n// =======================================================\n// QQ PLOT\n// =======================================================\nexport function plotQQ(data, options = {}, selector) {\n const sorted = [...data].sort((a,b)=>a-b);\n const n = sorted.length;\n const quantiles = sorted.map((_,i)=>(i+0.5)/n);\n const theoretical = quantiles.map(q => normalQuantile(q));\n plotScatter(theoretical, sorted, options, selector);\n}\n\nfunction normalQuantile(p) {\n const a1 = -39.6968302866538, a2 = 220.946098424521, a3 = -275.928510446969;\n const a4 = 138.357751867269, a5 = -30.6647980661472, a6 = 2.50662827745924;\n const b1 = -54.4760987982241, b2 = 161.585836858041, b3 = -155.698979859887;\n const b4 = 66.8013118877197, b5 = -13.2806815528857;\n const c1 = -0.00778489400243029, c2 = -0.322396458041136;\n const c3 = -2.40075827716184, c4 = -2.54973253934373;\n const c5 = 4.37466414146497, c6 = 2.93816398269878;\n const d1 = 0.00778469570904146, d2 = 0.32246712907004;\n const d3 = 2.445134137143, d4 = 3.75440866190742;\n const plow = 0.02425;\n const phigh = 1 - plow;\n let q, r;\n if (p < plow) {\n q = Math.sqrt(-2 * Math.log(p));\n return (((((c1*q+c2)*q+c3)*q+c4)*q+c5)*q+c6)/((((d1*q+d2)*q+d3)*q+d4)*q+1);\n } else if (phigh < p) {\n q = Math.sqrt(-2 * Math.log(1 - p));\n return -(((((c1*q+c2)*q+c3)*q+c4)*q+c5)*q+c6)/((((d1*q+d2)*q+d3)*q+d4)*q+1);\n } else {\n q = p - 0.5;\n r = q * q;\n return (((((a1*r+a2)*r+a3)*r+a4)*r+a5)*r+a6)*q/((((b1*r+b2)*r+b3)*r+b4)*r+b5)+1;\n }\n}\n\n// =======================================================\n// PARALLEL COORDINATES\n// =======================================================\nexport function plotParallel(data, dimensions, options = {}, selector) {\n const { svg, config } = createSvg(selector, options);\n const margin = { top: 30, right: 30, bottom: 10, left: 30 };\n const width = config.width - margin.left - margin.right;\n const height = config.height - margin.top - margin.bottom;\n\n const x = scalePoint().range([0, width]).padding(1).domain(dimensions);\n const y = {};\n dimensions.forEach(dim => {\n y[dim] = scaleLinear()\n .domain(extent(data, d => d[dim]))\n .range([height, 0]);\n });\n\n const lineGen = d3Line();\n const path = d => lineGen(dimensions.map(p => [x(p), y[p](d[p])]));\n\n const g = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n g.selectAll(\"path\")\n .data(data)\n .enter().append(\"path\")\n .attr(\"d\", path)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", (d, i) => options.colors ? options.colors[i % options.colors.length] : config.color)\n .attr(\"stroke-width\", 1)\n .attr(\"opacity\", 0.6);\n\n dimensions.forEach(dim => {\n const axis = g.append(\"g\")\n .attr(\"transform\", `translate(${x(dim)},0)`)\n .call(axisLeft(y[dim]));\n styleAxis(axis, config.yAxisColor || config.axisColor);\n axis.append(\"text\")\n .style(\"text-anchor\", \"middle\")\n .attr(\"y\", -9)\n .text(dim);\n });\n}\n\n// =======================================================\n// PAIRPLOT\n// =======================================================\nexport function plotPairplot(data, columns, options = {}, selector) {\n const n = columns.length;\n const size = options.size || 120;\n const gap = 10;\n const totalSize = n * (size + gap);\n const container = selector || `#datly-plot-${plotCounter++}`;\n const div = document.createElement(\"div\");\n div.id = container.replace(\"#\", \"\");\n document.body.appendChild(div);\n\n const containerSel = select(container);\n containerSel.html(\"\");\n containerSel.style(\"display\", \"inline-block\");\n\n const svg = containerSel\n .append(\"svg\")\n .attr(\"width\", totalSize)\n .attr(\"height\", totalSize)\n .style(\"background\", \"#fff\");\n\n const x = {};\n const y = {};\n columns.forEach(col => {\n x[col] = scaleLinear().domain(extent(data, d => d[col])).range([gap, size - gap]);\n y[col] = scaleLinear().domain(extent(data, d => d[col])).range([size - gap, gap]);\n });\n\n columns.forEach((colX, i) => {\n columns.forEach((colY, j) => {\n const g = svg.append(\"g\")\n .attr(\"transform\", `translate(${i * (size + gap)},${j * (size + gap)})`);\n g.selectAll(\"circle\")\n .data(data)\n .enter()\n .append(\"circle\")\n .attr(\"cx\", d => x[colX](d[colX]))\n .attr(\"cy\", d => y[colY](d[colY]))\n .attr(\"r\", 2)\n .attr(\"fill\", options.color || \"#000\");\n });\n });\n}\n\n// =======================================================\n// MULTILINE\n// =======================================================\nexport function plotMultiline(series, options = {}, selector) {\n const { svg, config } = createSvg(selector, options);\n const margin = { top: 20, right: 20, bottom: 40, left: 40 };\n const width = config.width - margin.left - margin.right;\n const height = config.height - margin.top - margin.bottom;\n\n const allX = series.flatMap(s => s.data.map(d => d.x));\n const allY = series.flatMap(s => s.data.map(d => d.y));\n const x = scaleLinear().domain(extent(allX)).range([0, width]);\n const y = scaleLinear().domain(extent(allY)).range([height, 0]);\n const color = scaleOrdinal(schemeCategory10);\n\n const g = svg.append(\"g\").attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n series.forEach((s, i) => {\n const path = d3Line()\n .x(d => x(d.x))\n .y(d => y(d.y));\n\n g.append(\"path\")\n .datum(s.data)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", color(i))\n .attr(\"stroke-width\", 2)\n .attr(\"d\", path);\n });\n\n if (options.legend) {\n const legend = svg.append(\"g\").attr(\"transform\", `translate(${width - 100},20)`);\n series.forEach((s, i) => {\n legend.append(\"rect\")\n .attr(\"x\", 0)\n .attr(\"y\", i * 20)\n .attr(\"width\", 12)\n .attr(\"height\", 12)\n .attr(\"fill\", color(i));\n legend.append(\"text\")\n .attr(\"x\", 20)\n .attr(\"y\", i * 20 + 10)\n .text(s.name)\n .style(\"font-size\", \"12px\");\n });\n }\n\n const xAxis = g.append(\"g\").attr(\"transform\", `translate(0,${height})`).call(axisBottom(x));\n const yAxis = g.append(\"g\").call(axisLeft(y));\n styleAxis(xAxis, config.xAxisColor || config.axisColor);\n styleAxis(yAxis, config.yAxisColor || config.axisColor);\n}\n","// datly.js — functional, text-first data-science toolkit for JavaScript\n// =========================\n// Helpers internos\n// =========================\nconst _inferType = (value) => {\n if (value == null) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value === 'boolean') return value;\n\n const stringValue = String(value);\n if (stringValue === \"\" || stringValue === \"null\" || stringValue === \"NULL\" || stringValue === \"NaN\")\n return null;\n if (stringValue === \"true\" || stringValue === \"TRUE\") return true;\n if (stringValue === \"false\" || stringValue === \"FALSE\") return false;\n if (/^-?\\d+$/.test(stringValue)) return parseInt(stringValue, 10);\n if (/^-?\\d*\\.\\d+$/.test(stringValue)) return parseFloat(stringValue);\n return stringValue;\n};\n\nconst _build_df = (columns, data) => ({\n type: \"dataframe\",\n columns,\n data,\n n_rows: data.length,\n n_cols: columns.length,\n});\n\nconst _empty_df = () => _build_df([], []);\n\nconst _uniq = (arr) => [...new Set(arr)];\n\nconst _text = (obj) => obj;\n\nconst _flatten = (obj, prefix = \"\", maxDepth = 5, currentDepth = 0) => {\n const result = {};\n\n if (currentDepth >= maxDepth) {\n result[prefix || \"value\"] = obj;\n return result;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (Array.isArray(value)) {\n // Adiciona o array completo\n result[path] = value;\n\n // Se é array de objetos, expande as propriedades\n if (\n value.length > 0 &&\n typeof value[0] === \"object\" &&\n !Array.isArray(value[0])\n ) {\n const firstItem = value[0];\n Object.keys(firstItem).forEach((subKey) => {\n result[`${path}.${subKey}`] = value.map(\n (item) => item[subKey] ?? null\n );\n });\n }\n } else if (value && typeof value === \"object\" && value !== null) {\n // Recursivamente achata objetos aninhados\n const nested = _flatten(value, path, maxDepth, currentDepth + 1);\n Object.assign(result, nested);\n } else {\n // Valor primitivo\n result[path] = value;\n }\n }\n\n return result;\n};\n\nconst _toTable = (data, opts = {}) => {\n const maxWidth = opts.max_width ?? 80;\n const padding = opts.padding ?? 2;\n\n if (Array.isArray(data) && data.length > 0 && typeof data[0] === \"object\") {\n // array of objects -> table\n const keys = Object.keys(data[0]);\n const rows = data.map((obj) => keys.map((k) => String(obj[k] ?? \"\")));\n const headers = keys;\n\n // calculate column widths\n const widths = headers.map((h, i) => {\n const maxContentWidth = Math.max(\n h.length,\n ...rows.map((r) => r[i].length)\n );\n return Math.min(maxContentWidth + padding, maxWidth / keys.length);\n });\n\n // build table\n const separator = \"+\" + widths.map((w) => \"-\".repeat(w)).join(\"+\") + \"+\";\n const headerRow =\n \"|\" + headers.map((h, i) => h.padEnd(widths[i])).join(\"|\") + \"|\";\n const dataRows = rows.map(\n (row) =>\n \"|\" +\n row\n .map((cell, i) => cell.slice(0, widths[i]).padEnd(widths[i]))\n .join(\"|\") +\n \"|\"\n );\n\n return [separator, headerRow, separator, ...dataRows, separator].join(\"\\n\");\n }\n\n if (typeof data === \"object\" && !Array.isArray(data)) {\n // single object -> key-value table\n const entries = Object.entries(data).map(([k, v]) => ({\n key: String(k),\n value: typeof v === \"object\" ? JSON.stringify(v) : String(v),\n }));\n return _toTable(entries, opts);\n }\n\n return String(data);\n};\n\nconst _isNumber = (v) => typeof v === \"number\" && Number.isFinite(v);\nconst _toNum = (v) => (v == null || v === \"\" ? NaN : Number(v));\n\nconst _numeric = (arr) => arr.map(_toNum).filter((x) => Number.isFinite(x));\n\nconst _sum = (arr) => _numeric(arr).reduce((a, b) => a + b, 0);\nconst _mean = (arr) => {\n const x = _numeric(arr);\n const n = x.length;\n if (!n) return NaN;\n return _sum(x) / n;\n};\nconst _variance = (arr, sample = true) => {\n const x = _numeric(arr);\n const n = x.length;\n if (n < 2) return NaN;\n const m = _mean(x);\n const s = x.reduce((a, b) => a + (b - m) ** 2, 0);\n return s / (sample ? n - 1 : n);\n};\nconst _std = (arr, sample = true) => Math.sqrt(_variance(arr, sample));\nconst _min = (arr) => Math.min(..._numeric(arr));\nconst _max = (arr) => Math.max(..._numeric(arr));\nconst _median = (arr) => {\n const x = _numeric(arr).sort((a, b) => a - b);\n const n = x.length;\n if (!n) return NaN;\n const mid = Math.floor(n / 2);\n return n % 2 ? x[mid] : (x[mid - 1] + x[mid]) / 2;\n};\nconst _quantile = (arr, q) => {\n const x = _numeric(arr).sort((a, b) => a - b);\n const n = x.length;\n if (!n) return NaN;\n const pos = (n - 1) * q;\n const base = Math.floor(pos);\n const rest = pos - base;\n return x[base] + (x[Math.min(base + 1, n - 1)] - x[base]) * rest;\n};\nconst _skewness = (arr) => {\n const x = _numeric(arr);\n const n = x.length;\n if (n < 3) return NaN;\n const m = _mean(x);\n const s = _std(x, true);\n const m3 = x.reduce((a, b) => a + (b - m) ** 3, 0) / n;\n return ((m3 / s ** 3) * Math.sqrt(n * (n - 1))) / (n - 2);\n};\nconst _kurtosis = (arr) => {\n const x = _numeric(arr);\n const n = x.length;\n if (n < 4) return NaN;\n const m = _mean(x);\n const s2 = _variance(x, true);\n const m4 = x.reduce((a, b) => a + (b - m) ** 4, 0) / n;\n const g2 = m4 / s2 ** 2 - 3;\n return g2;\n};\n\nconst _corrPearson = (x, y) => {\n const a = _numeric(x),\n b = _numeric(y);\n const n = Math.min(a.length, b.length);\n if (n < 2) return NaN;\n const ax = a.slice(0, n),\n by = b.slice(0, n);\n const mx = _mean(ax),\n my = _mean(by);\n let num = 0,\n dx = 0,\n dy = 0;\n for (let i = 0; i < n; i++) {\n const vx = ax[i] - mx,\n vy = by[i] - my;\n num += vx * vy;\n dx += vx * vx;\n dy += vy * vy;\n }\n return num / Math.sqrt(dx * dy);\n};\n\nconst _rank = (arr) => {\n const indexed = _numeric(arr)\n .map((v, i) => ({ v, i }))\n .sort((a, b) => a.v - b.v);\n const ranks = Array(arr.length).fill(NaN);\n let i = 0;\n while (i < indexed.length) {\n let j = i;\n while (j + 1 < indexed.length && indexed[j + 1].v === indexed[i].v) j++;\n const r = (i + j) / 2 + 1;\n for (let k = i; k <= j; k++) ranks[indexed[k].i] = r;\n i = j + 1;\n }\n return ranks.filter(Number.isFinite);\n};\n\nconst _corrSpearman = (x, y) => _corrPearson(_rank(x), _rank(y));\n\nconst _invErf = (x) => {\n // numerical approx of inverse error function (for normal quantile)\n const a = 0.147;\n const ln = Math.log(1 - x * x);\n const t = 2 / (Math.PI * a) + ln / 2;\n const s = Math.sign(x) * Math.sqrt(Math.sqrt(t * t - ln / a) - t);\n return s;\n};\n\n// standard normal pdf/cdf/ppf\nconst _phi = (z) => Math.exp(-0.5 * z * z) / Math.sqrt(2 * Math.PI);\nconst _Phi = (z) => 0.5 * (1 + erf(z / Math.SQRT2));\nconst erf = (x) => {\n // numerical approx for erf\n const sign = Math.sign(x);\n x = Math.abs(x);\n const a1 = 0.254829592,\n a2 = -0.284496736,\n a3 = 1.421413741,\n a4 = -1.453152027,\n a5 = 1.061405429,\n p = 0.3275911;\n const t = 1 / (1 + p * x);\n const y =\n 1 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);\n return sign * y;\n};\nconst _normInv = (p) => {\n if (p <= 0 || p >= 1) return NaN;\n return Math.SQRT2 * _invErf(2 * p - 1);\n};\n\n// lowercased text output\n// const _text = (obj) => {\n// const lowerKeys = (o) =>\n// Array.isArray(o)\n// ? o.map(lowerKeys)\n// : o && typeof o === \"object\"\n// ? Object.fromEntries(\n// Object.entries(o).map(([k, v]) => [\n// String(k).toLowerCase(),\n// lowerKeys(v),\n// ])\n// )\n// : typeof o === \"number\" && Number.isFinite(o)\n// ? Number(Number(o).toPrecision(2))\n// : o;\n// const normalized = lowerKeys(obj);\n// const lines = [];\n// const walk = (o, indent = 0) => {\n// const pad = \" \".repeat(indent);\n// if (Array.isArray(o)) {\n// lines.push(pad + \"- array:\");\n// o.forEach((v) => walk(v, indent + 2));\n// } else if (o && typeof o === \"object\") {\n// Object.keys(o).forEach((k) => {\n// const v = o[k];\n// if (v && typeof v === \"object\") {\n// lines.push(pad + k + \":\");\n// walk(v, indent + 2);\n// } else {\n// lines.push(pad + k + \": \" + String(v).toLowerCase());\n// }\n// });\n// } else {\n// lines.push(pad + String(o).toLowerCase());\n// }\n// };\n// walk(normalized);\n// return lines.join(\"\\n\");\n// };\n\n// const _text = (obj) => {\n// const lowerKeys = (o) =>\n// Array.isArray(o)\n// ? o.map(lowerKeys)\n// : o && typeof o === \"object\"\n// ? Object.fromEntries(\n// Object.entries(o).map(([k, v]) => [\n// String(k).toLowerCase(),\n// lowerKeys(v),\n// ])\n// )\n// : typeof o === \"number\" && Number.isFinite(o)\n// ? Number(Number(o).toPrecision(12))\n// : o;\n// const normalized = lowerKeys(obj);\n// const lines = [];\n// const walk = (o, indent = 0) => {\n// const pad = \" \".repeat(indent);\n// if (Array.isArray(o)) {\n// lines.push(pad + `- array (${o.length} items):`);\n// const limited = o.slice(0, 5);\n// limited.forEach((v) => walk(v, indent + 2));\n// if (o.length > 5) {\n// lines.push(pad + ` ... ${o.length - 5} more items omitted`);\n// }\n// } else if (o && typeof o === \"object\") {\n// Object.keys(o).forEach((k) => {\n// const v = o[k];\n// if (v && typeof v === \"object\") {\n// lines.push(pad + k + \":\");\n// walk(v, indent + 2);\n// } else {\n// lines.push(pad + k + \": \" + String(v).toLowerCase());\n// }\n// });\n// } else {\n// lines.push(pad + String(o).toLowerCase());\n// }\n// };\n// walk(normalized);\n// return lines.join(\"\\n\");\n// };\n\nconst _ok = (type, payload) => _text({ type, ...payload });\nconst _err = (type, message) => _text({ type, error: message });\n\n// =========================\n// dataframe\n// =========================\n\n// utilities to operate directly on raw rows (array of objects)\n// const df_describe = (rows) => {\n// if (!Array.isArray(rows) || !rows.length)\n// return _err(\"describe\", \"empty data\");\n// const cols = _uniq(_flatten(rows.map((r) => Object.keys(r))));\n// const out = { type: \"describe\", columns: {} };\n// cols.forEach((c) => {\n// const col = rows.map((r) => r[c]);\n// const nums = col.map(_toNum).filter(Number.isFinite);\n// const miss = col.filter(\n// (v) =>\n// v == null || (typeof v === \"number\" && !Number.isFinite(v)) || v === \"\"\n// ).length;\n// const dtype =\n// nums.length === col.length\n// ? \"number\"\n// : col.every((v) => typeof v === \"boolean\")\n// ? \"boolean\"\n// : \"string\";\n// const info = { dtype, count: col.length, missing: miss };\n// if (dtype === \"number\") {\n// info.mean = _mean(nums);\n// info.std = _std(nums);\n// info.min = _min(nums);\n// info.q1 = _quantile(nums, 0.25);\n// info.median = _median(nums);\n// info.q3 = _quantile(nums, 0.75);\n// info.max = _max(nums);\n// info.skewness = _skewness(nums);\n// info.kurtosis = _kurtosis(nums);\n// } else if (dtype === \"string\" || dtype === \"boolean\") {\n// const vc = {};\n// col.forEach((v) => {\n// const key = String(v);\n// vc[key] = (vc[key] || 0) + 1;\n// });\n// const entries = Object.entries(vc)\n// .sort((a, b) => b[1] - a[1])\n// .slice(0, 10);\n// info.top = entries.map(([k, v]) => ({ value: k, freq: v }));\n// info.unique = Object.keys(vc).length;\n// }\n// out.columns[c] = info;\n// });\n// return _text(out);\n// };\n\nconst df_missing_report = (rows) => {\n if (!Array.isArray(rows) || !rows.length)\n return _err(\"missing_report\", \"empty data\");\n const cols = _uniq(_flatten(rows.map((r) => Object.keys(r))));\n const res = cols.map((c) => {\n const col = rows.map((r) => r[c]);\n const miss = col.filter((v) => v == null || v === \"\").length;\n return { column: c, missing: miss, missing_rate: miss / col.length };\n });\n return _text({ type: \"missing_report\", rows: res });\n};\n\nconst df_corr = (rows, method = \"pearson\") => {\n const cols = _uniq(_flatten(rows.map((r) => Object.keys(r))));\n const numericCols = cols.filter((c) =>\n rows.every((r) => Number.isFinite(_toNum(r[c])) || r[c] == null)\n );\n const mat = {};\n numericCols.forEach((a) => {\n mat[a] = {};\n const xa = rows.map((r) => _toNum(r[a]));\n numericCols.forEach((b) => {\n const xb = rows.map((r) => _toNum(r[b]));\n const c =\n method === \"spearman\" ? _corrSpearman(xa, xb) : _corrPearson(xa, xb);\n mat[a][b] = c;\n });\n });\n return _text({ type: \"correlation_matrix\", method, matrix: mat });\n};\n\n// =========================\n// core statistics (public)\n// =========================\n\nconst mean = (arr) =>\n _ok(\"statistic\", {\n name: \"mean\",\n n: _numeric(arr).length,\n value: _mean(arr),\n });\nconst stddeviation = (arr, sample = true) =>\n _ok(\"statistic\", {\n name: \"std_deviation\",\n sample,\n n: _numeric(arr).length,\n value: _std(arr, sample),\n });\nconst variance = (arr, sample = true) =>\n _ok(\"statistic\", {\n name: \"variance\",\n sample,\n n: _numeric(arr).length,\n value: _variance(arr, sample),\n });\nconst median = (arr) =>\n _ok(\"statistic\", {\n name: \"median\",\n n: _numeric(arr).length,\n value: _median(arr),\n });\nconst quantile = (arr, q) =>\n _ok(\"statistic\", {\n name: \"quantile\",\n q,\n n: _numeric(arr).length,\n value: _quantile(arr, q),\n });\nconst minv = (arr) => _ok(\"statistic\", { name: \"min\", value: _min(arr) });\nconst maxv = (arr) => _ok(\"statistic\", { name: \"max\", value: _max(arr) });\nconst skewness = (arr) =>\n _ok(\"statistic\", { name: \"skewness\", value: _skewness(arr) });\nconst kurtosis = (arr) =>\n _ok(\"statistic\", { name: \"kurtosis\", value: _kurtosis(arr) });\nconst corr_pearson = (x, y) =>\n _ok(\"statistic\", { name: \"pearson_correlation\", value: _corrPearson(x, y) });\nconst corr_spearman = (x, y) =>\n _ok(\"statistic\", {\n name: \"spearman_correlation\",\n value: _corrSpearman(x, y),\n });\n\n// =========================\n// probability distributions\n// =========================\n\nconst normal_pdf = (x, mu = 0, sigma = 1) =>\n _ok(\"distribution\", {\n name: \"normal_pdf\",\n params: { mu, sigma },\n value: Array.isArray(x)\n ? x.map((v) => _phi((v - mu) / sigma) / sigma)\n : _phi((x - mu) / sigma) / sigma,\n });\n\nconst normal_cdf = (x, mu = 0, sigma = 1) =>\n _ok(\"distribution\", {\n name: \"normal_cdf\",\n params: { mu, sigma },\n value: Array.isArray(x)\n ? x.map((v) => _Phi((v - mu) / sigma))\n : _Phi((x - mu) / sigma),\n });\n\nconst normal_ppf = (p, mu = 0, sigma = 1) =>\n _ok(\"distribution\", {\n name: \"normal_ppf\",\n params: { mu, sigma },\n value: Array.isArray(p)\n ? p.map((q) => mu + sigma * _normInv(q))\n : mu + sigma * _normInv(p),\n });\n\nconst binomial_pmf = (k, n, p) => {\n const C = (n, k) => {\n if (k < 0 || k > n) return 0;\n k = Math.min(k, n - k);\n let num = 1,\n den = 1;\n for (let i = 1; i <= k; i++) {\n num *= n - (k - i);\n den *= i;\n }\n return num / den;\n };\n const f = (x) => C(n, x) * p ** x * (1 - p) ** (n - x);\n const val = Array.isArray(k) ? k.map(f) : f(k);\n return _ok(\"distribution\", {\n name: \"binomial_pmf\",\n params: { n, p },\n value: val,\n });\n};\n\nconst binomial_cdf = (k, n, p) => {\n const pmf = (x) =>\n JSON.parse(binomial_pmf(x, n, p).toLowerCase ? '{\"ignore\":0}' : \"{}\"); // safeguard no-op\n const f = (t) => {\n let s = 0;\n for (let i = 0; i <= t; i++) {\n s +=\n (function C(n, k) {\n if (k < 0 || k > n) return 0;\n k = Math.min(k, n - k);\n let num = 1,\n den = 1;\n for (let j = 1; j <= k; j++) {\n num *= n - (k - j);\n den *= j;\n }\n return num / den;\n })(n, i) *\n p ** i *\n (1 - p) ** (n - i);\n }\n return s;\n };\n const val = Array.isArray(k) ? k.map(f) : f(k);\n return _ok(\"distribution\", {\n name: \"binomial_cdf\",\n params: { n, p },\n value: val,\n });\n};\n\nconst poisson_pmf = (k, lambda) => {\n const fact = (m) => {\n let r = 1;\n for (let i = 2; i <= m; i++) r *= i;\n return r;\n };\n const f = (x) => (Math.exp(-lambda) * lambda ** x) / fact(x);\n return _ok(\"distribution\", {\n name: \"poisson_pmf\",\n params: { lambda },\n value: Array.isArray(k) ? k.map(f) : f(k),\n });\n};\n\nconst poisson_cdf = (k, lambda) => {\n const f = (t) => {\n let s = 0;\n for (let i = 0; i <= t; i++)\n s +=\n (Math.exp(-lambda) * lambda ** i) /\n (function fact(m) {\n let r = 1;\n for (let j = 2; j <= m; j++) r *= j;\n return r;\n })(i);\n return s;\n };\n return _ok(\"distribution\", {\n name: \"poisson_cdf\",\n params: { lambda },\n value: Array.isArray(k) ? k.map(f) : f(k),\n });\n};\n\n// =========================\n// hypothesis tests\n// =========================\n\nconst _tCDF = (t, df) => {\n // symmetric; use relationship with regularized incomplete beta (approx via numerical integration)\n const a = df / 2,\n b = 0.5;\n const x = df / (df + t * t);\n const betacf = (a, b, x) => {\n const itmax = 200,\n eps = 3e-7;\n let am = 1,\n bm = 1,\n az = 1,\n qab = a + b,\n qap = a + 1,\n qam = a - 1,\n bz = 1 - (qab * x) / qap;\n let aold;\n for (let m = 1; m <= itmax; m++) {\n const em = m,\n tem = em + em;\n let d = (em * (b - m) * x) / ((qam + tem) * (a + tem));\n let ap = az + d * am;\n let bp = bz + d * bm;\n d = (-(a + em) * (qab + em) * x) / ((a + tem) * (qap + tem));\n let app = ap + d * az;\n let bpp = bp + d * bz;\n aold = az;\n am = ap / bpp;\n bm = bp / bpp;\n az = app / bpp;\n bz = 1;\n if (Math.abs(az - aold) < eps * Math.abs(az)) return az;\n }\n return az;\n };\n const ib = ((Math.pow(x, a) * Math.pow(1 - x, b)) / a) * betacf(a, b, x);\n const p = 0.5 * ib;\n return t >= 0 ? 1 - p : p;\n};\n\nconst t_test_independent = (a, b, equal_var = true) => {\n const xa = _numeric(a),\n xb = _numeric(b);\n const na = xa.length,\n nb = xb.length;\n if (na < 2 || nb < 2) return _err(\"t_test_independent\", \"insufficient data\");\n const ma = _mean(xa),\n mb = _mean(xb),\n va = _variance(xa, true),\n vb = _variance(xb, true);\n let df, se;\n if (equal_var) {\n const sp2 = ((na - 1) * va + (nb - 1) * vb) / (na + nb - 2);\n se = Math.sqrt(sp2 * (1 / na + 1 / nb));\n df = na + nb - 2;\n } else {\n se = Math.sqrt(va / na + vb / nb);\n const num = (va / na + vb / nb) ** 2;\n const den = va ** 2 / (na ** 2 * (na - 1)) + vb ** 2 / (nb ** 2 * (nb - 1));\n df = num / den;\n }\n const t = (ma - mb) / se;\n const p = 2 * (1 - _tCDF(Math.abs(t), df));\n return _text({\n type: \"hypothesis_test\",\n name: \"independent_t_test\",\n statistic: t,\n df,\n p_value: p,\n means: { group_a: ma, group_b: mb },\n });\n};\n\nconst z_test_one_sample = (data, mu0 = 0, sigma = null, alpha = 0.05) => {\n const x = _numeric(data);\n const n = x.length;\n if (n < 2) return _err(\"z_test_one_sample\", \"insufficient data\");\n\n const mean = _mean(x);\n const s = sigma ?? _std(x, true);\n const se = s / Math.sqrt(n);\n const z = (mean - mu0) / se;\n\n const p = 2 * (1 - normal_cdf(Math.abs(z)));\n const zcrit = normal_ppf(1 - alpha / 2);\n const moe = zcrit * se;\n\n return _text({\n type: \"hypothesis_test\",\n name: \"one_sample_z_test\",\n statistic: z,\n p_value: p,\n ci_lower: mean - moe,\n ci_upper: mean + moe,\n confidence: 1 - alpha,\n extra: {\n sample_mean: mean,\n hypothesized_mean: mu0,\n se,\n sigma_used: s,\n n,\n effect_size: (mean - mu0) / s,\n },\n });\n};\n\nconst chi_square_independence = (table, alpha = 0.05) => {\n const r = table.length;\n const c = table[0].length;\n const rowS = table.map((row) => row.reduce((a, b) => a + b, 0));\n const colS = Array(c).fill(0);\n table.forEach((row) => row.forEach((v, j) => (colS[j] += v)));\n const N = rowS.reduce((a, b) => a + b, 0);\n let chi = 0;\n const expected = Array.from({ length: r }, (_, i) =>\n Array.from({ length: c }, (_, j) => (rowS[i] * colS[j]) / N)\n );\n\n for (let i = 0; i < r; i++) {\n for (let j = 0; j < c; j++) {\n chi += (table[i][j] - expected[i][j]) ** 2 / expected[i][j];\n }\n }\n const df = (r - 1) * (c - 1);\n const p = 1 - chi_square_cdf(chi, df);\n\n return _text({\n type: \"hypothesis_test\",\n name: \"chi_square_independence\",\n statistic: chi,\n df,\n p_value: p,\n confidence: 1 - alpha,\n extra: {\n observed: table,\n expected,\n dof: df,\n },\n });\n};\n\nconst anova_oneway = (groups, alpha = 0.05) => {\n const k = groups.length;\n const ns = groups.map((g) => _numeric(g).length);\n const means = groups.map(_mean);\n const overall = _mean(groups.flat());\n const ssb = groups.reduce(\n (s, g, i) => s + ns[i] * (means[i] - overall) ** 2,\n 0\n );\n const ssw = groups.reduce(\n (s, g, i) => s + _numeric(g).reduce((a, x) => a + (x - means[i]) ** 2, 0),\n 0\n );\n const dfb = k - 1;\n const dfw = ns.reduce((a, b) => a + b, 0) - k;\n const msb = ssb / dfb;\n const msw = ssw / dfw;\n const F = msb / msw;\n const p = 1 - f_cdf(F, dfb, dfw);\n\n return _text({\n type: \"hypothesis_test\",\n name: \"anova_oneway\",\n statistic: F,\n df: { between: dfb, within: dfw },\n p_value: p,\n confidence: 1 - alpha,\n extra: {\n group_means: means,\n grand_mean: overall,\n ssb,\n ssw,\n },\n });\n};\n\n// =========================\n// machine learning (linear regression, logistic regression)\n// models are serialized as lowercase json text strings\n// =========================\n\nconst _addBias = (X) => X.map((row) => [1, ...row]);\nconst _transpose = (A) => A[0].map((_, j) => A.map((row) => row[j]));\nconst _dot = (A, B) => {\n const n = A.length,\n m = B[0].length,\n p = B.length;\n const out = Array(n)\n .fill(0)\n .map(() => Array(m).fill(0));\n for (let i = 0; i < n; i++)\n for (let j = 0; j < m; j++) {\n let s = 0;\n for (let k = 0; k < p; k++) s += A[i][k] * B[k][j];\n out[i][j] = s;\n }\n return out;\n};\nconst _pinv = (A, lambda = 1e-8) => {\n // ridge-stabilized (A^T A + λI)^-1 A^T\n const At = _transpose(A);\n const AtA = _dot(At, A);\n const n = AtA.length;\n for (let i = 0; i < n; i++) AtA[i][i] += lambda;\n const inv = _inv(AtA);\n return _dot(inv, At);\n};\nconst _inv = (M) => {\n const n = M.length;\n const A = M.map((row, i) =>\n row.concat(Array.from({ length: n }, (_, j) => (i === j ? 1 : 0)))\n );\n for (let i = 0; i < n; i++) {\n let pivot = A[i][i];\n let r = i;\n for (let k = i + 1; k < n; k++)\n if (Math.abs(A[k][i]) > Math.abs(pivot)) {\n pivot = A[k][i];\n r = k;\n }\n if (r !== i) {\n const tmp = A[i];\n A[i] = A[r];\n A[r] = tmp;\n }\n const pv = A[i][i];\n if (Math.abs(pv) < 1e-12) continue;\n for (let j = 0; j < 2 * n; j++) A[i][j] /= pv;\n for (let k = 0; k < n; k++)\n if (k !== i) {\n const f = A[k][i];\n for (let j = 0; j < 2 * n; j++) A[k][j] -= f * A[i][j];\n }\n }\n return A.map((row) => row.slice(n));\n};\n\nconst train_linear_regression = (X, y) => {\n const Xb = _addBias(X);\n const pinv = _pinv(Xb);\n const w = _dot(\n pinv,\n y.map((v) => [v])\n ).map((r) => r[0]);\n const predict = (row) => w[0] + row.reduce((s, v, i) => s + w[i + 1] * v, 0);\n const yhat = X.map(predict);\n const resid = y.map((v, i) => v - yhat[i]);\n const mse = _mean(resid.map((e) => e * e));\n const r2 =\n 1 - _sum(resid.map((e) => e * e)) / _sum(y.map((v) => (v - _mean(y)) ** 2));\n const model = {\n type: \"linear_regression\",\n weights: w,\n mse,\n r2,\n n: y.length,\n p: X[0]?.length ?? 0,\n };\n return _text(model);\n};\n\nconst _sigmoid = (z) => 1 / (1 + Math.exp(-z));\n\nconst train_logistic_regression = (X, y, opts = {}) => {\n const lr = opts.learning_rate ?? 0.1;\n const iters = opts.iterations ?? 1000;\n const lambda = opts.l2 ?? 0;\n const p = X[0]?.length ?? 0;\n let w = Array(p + 1).fill(0);\n const addBias = (row) => [1, ...row];\n const Xb = X.map(addBias);\n for (let t = 0; t < iters; t++) {\n const grad = Array(p + 1).fill(0);\n for (let i = 0; i < Xb.length; i++) {\n const z = w.reduce((s, wi, j) => s + wi * Xb[i][j], 0);\n const p1 = _sigmoid(z);\n const e = p1 - y[i];\n for (let j = 0; j < grad.length; j++) grad[j] += e * Xb[i][j];\n }\n for (let j = 0; j < w.length; j++) {\n grad[j] = grad[j] / Xb.length + lambda * w[j];\n w[j] -= lr * grad[j];\n }\n }\n const predict_proba_row = (row) =>\n _sigmoid(w[0] + row.reduce((s, v, i) => s + w[i + 1] * v, 0));\n const proba = X.map(predict_proba_row);\n const pred = proba.map((p) => (p >= 0.5 ? 1 : 0));\n const acc = pred.filter((v, i) => v === y[i]).length / y.length;\n const model = {\n type: \"logistic_regression\",\n weights: w,\n accuracy: acc,\n n: y.length,\n p,\n };\n return _text(model);\n};\n\nconst predict_linear = (model_text, X) => {\n try {\n const m = JSON.parse(JSON.stringify(_lowerJson(model_text)));\n const w = m.weights || m.model?.weights;\n if (!w) return _err(\"predict_linear\", \"invalid model\");\n const yhat = X.map(\n (row) => w[0] + row.reduce((s, v, i) => s + w[i + 1] * v, 0)\n );\n return _text({\n type: \"prediction\",\n name: \"linear_regression\",\n predictions: yhat,\n });\n } catch {\n return _err(\"predict_linear\", \"invalid model text\");\n }\n};\n\nconst predict_logistic = (model_text, X, threshold = 0.5) => {\n try {\n const m = JSON.parse(JSON.stringify(_lowerJson(model_text)));\n const w = m.weights || m.model?.weights;\n if (!w) return _err(\"predict_logistic\", \"invalid model\");\n const proba = X.map((row) =>\n _sigmoid(w[0] + row.reduce((s, v, i) => s + w[i + 1] * v, 0))\n );\n const pred = proba.map((p) => (p >= threshold ? 1 : 0));\n return _text({\n type: \"prediction\",\n name: \"logistic_regression\",\n threshold,\n probabilities: proba,\n classes: pred,\n });\n } catch {\n return _err(\"predict_logistic\", \"invalid model text\");\n }\n};\n\nconst _lowerJson = (textOrObj) => {\n const parse = (v) => {\n try {\n return typeof v === \"string\" ? JSON.parse(v) : v;\n } catch {\n return {};\n }\n };\n const lower = (o) =>\n Array.isArray(o)\n ? o.map(lower)\n : o && typeof o === \"object\"\n ? Object.fromEntries(\n Object.entries(o).map(([k, v]) => [String(k).toLowerCase(), lower(v)])\n )\n : o;\n return lower(parse(textOrObj));\n};\n\nconst train_test_split = (X, y, test_size = 0.2, seed = 42) => {\n const n = X.length;\n const idx = Array.from({ length: n }, (_, i) => i);\n let s = seed;\n const rand = () => (s = (s * 9301 + 49297) % 233280) / 233280;\n idx.sort(() => rand() - 0.5);\n const ntest = Math.max(1, Math.floor(n * test_size));\n const test_idx = idx.slice(0, ntest);\n const train_idx = idx.slice(ntest);\n const X_train = train_idx.map((i) => X[i]);\n const y_train = train_idx.map((i) => y[i]);\n const X_test = test_idx.map((i) => X[i]);\n const y_test = test_idx.map((i) => y[i]);\n return _text({\n type: \"split\",\n sizes: { train: y_train.length, test: y_test.length },\n indices: { train: train_idx, test: test_idx },\n preview: { x_train: X_train.slice(0, 2), y_train: y_train.slice(0, 5) },\n });\n};\n\nconst metrics_classification = (y_true, y_pred) => {\n const n = Math.min(y_true.length, y_pred.length);\n let tp = 0,\n tn = 0,\n fp = 0,\n fn = 0;\n for (let i = 0; i < n; i++) {\n if (y_pred[i] === 1 && y_true[i] === 1) tp++;\n else if (y_pred[i] === 0 && y_true[i] === 0) tn++;\n else if (y_pred[i] === 1 && y_true[i] === 0) fp++;\n else if (y_pred[i] === 0 && y_true[i] === 1) fn++;\n }\n const accuracy = (tp + tn) / n;\n const precision = tp + fp ? tp / (tp + fp) : 0;\n const recall = tp + fn ? tp / (tp + fn) : 0;\n const f1 =\n precision + recall ? (2 * precision * recall) / (precision + recall) : 0;\n return _text({\n type: \"metric\",\n name: \"classification_report\",\n confusion_matrix: { tp, fp, tn, fn },\n accuracy,\n precision,\n recall,\n f1,\n });\n};\n\nconst metrics_regression = (y_true, y_pred) => {\n const n = Math.min(y_true.length, y_pred.length);\n const e = Array.from({ length: n }, (_, i) => y_true[i] - y_pred[i]);\n const mse = _mean(e.map((v) => v * v));\n const mae = _mean(e.map((v) => Math.abs(v)));\n const r2 =\n 1 -\n _sum(e.map((v) => v * v)) /\n _sum(y_true.map((v) => (v - _mean(y_true)) ** 2));\n return _text({ type: \"metric\", name: \"regression_report\", mse, mae, r2 });\n};\n\n// =========================\n// eda convenience\n// =========================\n\nconst eda_overview = (rows) => {\n const desc = _lowerJson(df_describe(rows));\n const miss = _lowerJson(df_missing_report(rows));\n const corr = _lowerJson(df_corr(rows, \"pearson\"));\n return _text({\n type: \"eda\",\n summary: desc.columns ?? desc,\n missing: miss.rows ?? miss,\n correlation: corr.matrix ?? corr,\n });\n};\n\n// =========================\n// ADDITIONAL STATISTICAL TESTS\n// =========================\n\nconst t_test_paired = (a, b) => {\n const xa = _numeric(a),\n xb = _numeric(b);\n const n = Math.min(xa.length, xb.length);\n if (n < 2) return _err(\"t_test_paired\", \"insufficient data\");\n const diffs = Array.from({ length: n }, (_, i) => xa[i] - xb[i]);\n const md = _mean(diffs),\n sd = _std(diffs, true);\n const t = md / (sd / Math.sqrt(n));\n const df = n - 1;\n const p = 2 * (1 - _tCDF(Math.abs(t), df));\n return _text({\n type: \"hypothesis_test\",\n name: \"paired_t_test\",\n statistic: t,\n df,\n p_value: p,\n mean_difference: md,\n });\n};\n\nconst t_test_one_sample = (arr, mu0) => {\n const x = _numeric(arr);\n const n = x.length;\n if (n < 2) return _err(\"t_test_one_sample\", \"insufficient data\");\n const m = _mean(x),\n s = _std(x, true);\n const t = (m - mu0) / (s / Math.sqrt(n));\n const df = n - 1;\n const p = 2 * (1 - _tCDF(Math.abs(t), df));\n return _text({\n type: \"hypothesis_test\",\n name: \"one_sample_t_test\",\n statistic: t,\n df,\n p_value: p,\n mean: m,\n hypothesized_mean: mu0,\n });\n};\n\nconst shapiro_wilk = (arr) => {\n const x = _numeric(arr).sort((a, b) => a - b);\n const n = x.length;\n if (n < 3 || n > 5000)\n return _err(\"shapiro_wilk\", \"sample size must be between 3 and 5000\");\n const m = _mean(x);\n const ss = x.reduce((s, v) => s + (v - m) ** 2, 0);\n let b = 0;\n const k = Math.floor(n / 2);\n for (let i = 0; i < k; i++) {\n const ai =\n i === 0\n ? -2.706056 / Math.sqrt(n)\n : i === k - 1 && n % 2 === 0\n ? 2.706056 / Math.sqrt(n)\n : 0;\n b += ai * (x[n - 1 - i] - x[i]);\n }\n const w = (b * b) / ss;\n return _text({\n type: \"hypothesis_test\",\n name: \"shapiro_wilk\",\n statistic: w,\n n,\n note: \"approximation; w > 0.9 suggests normality\",\n });\n};\n\nconst jarque_bera = (arr) => {\n const x = _numeric(arr);\n const n = x.length;\n if (n < 4) return _err(\"jarque_bera\", \"insufficient data\");\n const s = _skewness(x);\n const k = _kurtosis(x);\n const jb = (n / 6) * (s * s + (k * k) / 4);\n return _text({\n type: \"hypothesis_test\",\n name: \"jarque_bera\",\n statistic: jb,\n n,\n df: 2,\n note: \"tests normality; low p-value rejects normality\",\n });\n};\n\nconst levene_test = (groups) => {\n const k = groups.length;\n const medians = groups.map(_median);\n const zs = groups.map((g, i) =>\n _numeric(g).map((v) => Math.abs(v - medians[i]))\n );\n const allz = _flatten(zs);\n const overall_median = _median(allz);\n const ns = zs.map((z) => z.length);\n const N = ns.reduce((a, b) => a + b, 0);\n const ssb = zs.reduce(\n (s, z, i) => s + ns[i] * (_mean(z) - overall_median) ** 2,\n 0\n );\n const ssw = zs.reduce(\n (s, z) => s + z.reduce((a, v) => a + (v - _mean(z)) ** 2, 0),\n 0\n );\n const dfb = k - 1;\n const dfw = N - k;\n const msb = ssb / dfb;\n const msw = ssw / dfw;\n const W = msb / msw;\n return _text({\n type: \"hypothesis_test\",\n name: \"levene_test\",\n statistic: W,\n df_between: dfb,\n df_within: dfw,\n note: \"tests homogeneity of variance\",\n });\n};\n\nconst kruskal_wallis = (groups) => {\n const all = _flatten(groups);\n const n = all.length;\n const ranks = _rank(all);\n let pos = 0;\n const rankSums = groups.map((g) => {\n const len = _numeric(g).length;\n const rsum = ranks.slice(pos, pos + len).reduce((a, b) => a + b, 0);\n pos += len;\n return { n: len, rsum };\n });\n const H =\n (12 / (n * (n + 1))) *\n rankSums.reduce((s, { n: ni, rsum }) => s + (rsum * rsum) / ni, 0) -\n 3 * (n + 1);\n const df = groups.length - 1;\n return _text({\n type: \"hypothesis_test\",\n name: \"kruskal_wallis\",\n statistic: H,\n df,\n note: \"non-parametric alternative to anova\",\n });\n};\n\nconst mann_whitney = (a, b) => {\n const xa = _numeric(a);\n const xb = _numeric(b);\n const na = xa.length;\n const nb = xb.length;\n if (na < 1 || nb < 1) return _err(\"mann_whitney\", \"insufficient data\");\n const combined = xa.concat(xb);\n const ranks = _rank(combined);\n const ra = ranks.slice(0, na).reduce((s, r) => s + r, 0);\n const U1 = ra - (na * (na + 1)) / 2;\n const U2 = na * nb - U1;\n const U = Math.min(U1, U2);\n const mu = (na * nb) / 2;\n const sigma = Math.sqrt((na * nb * (na + nb + 1)) / 12);\n const z = (U - mu) / sigma;\n const p = 2 * (1 - _Phi(Math.abs(z)));\n return _text({\n type: \"hypothesis_test\",\n name: \"mann_whitney_u\",\n statistic: U,\n z_score: z,\n p_value: p,\n note: \"non-parametric alternative to t-test\",\n });\n};\n\nconst wilcoxon_signed_rank = (a, b) => {\n const xa = _numeric(a);\n const xb = _numeric(b);\n const n = Math.min(xa.length, xb.length);\n if (n < 2) return _err(\"wilcoxon_signed_rank\", \"insufficient data\");\n const diffs = Array.from({ length: n }, (_, i) => xa[i] - xb[i]).filter(\n (d) => d !== 0\n );\n const absDiffs = diffs.map(Math.abs);\n const ranks = _rank(absDiffs);\n const Wplus = ranks.reduce((s, r, i) => s + (diffs[i] > 0 ? r : 0), 0);\n const m = diffs.length;\n const mu = (m * (m + 1)) / 4;\n const sigma = Math.sqrt((m * (m + 1) * (2 * m + 1)) / 24);\n const z = (Wplus - mu) / sigma;\n const p = 2 * (1 - _Phi(Math.abs(z)));\n return _text({\n type: \"hypothesis_test\",\n name: \"wilcoxon_signed_rank\",\n statistic: Wplus,\n z_score: z,\n p_value: p,\n n: m,\n });\n};\n\nconst chi_square_goodness = (observed, expected, alpha = 0.05) => {\n const obs = _numeric(observed);\n const exp = _numeric(expected);\n const n = Math.min(obs.length, exp.length);\n let chi = 0;\n for (let i = 0; i < n; i++) chi += (obs[i] - exp[i]) ** 2 / exp[i];\n const df = n - 1;\n const p = 1 - chi_square_cdf(chi, df);\n\n return _text({\n type: \"hypothesis_test\",\n name: \"chi_square_goodness_of_fit\",\n statistic: chi,\n df,\n p_value: p,\n confidence: 1 - alpha,\n extra: {\n observed: obs,\n expected: exp,\n dof: df,\n },\n });\n};\n\n// =========================\n// CONFIDENCE INTERVALS\n// =========================\n\nconst confidence_interval_mean = (arr, confidence = 0.95) => {\n const x = _numeric(arr);\n const n = x.length;\n if (n < 2) return _err(\"confidence_interval_mean\", \"insufficient data\");\n const m = _mean(x);\n const s = _std(x, true);\n const alpha = 1 - confidence;\n const t_crit = _normInv(1 - alpha / 2) * (n > 30 ? 1 : 1.15);\n const margin = (t_crit * s) / Math.sqrt(n);\n const lower = m - margin;\n const upper = m + margin;\n return _text({\n type: \"confidence_interval\",\n parameter: \"mean\",\n confidence,\n n,\n mean: m,\n lower,\n upper,\n margin,\n });\n};\n\nconst confidence_interval_proportion = (successes, n, confidence = 0.95) => {\n if (n < 1)\n return _err(\"confidence_interval_proportion\", \"invalid sample size\");\n const p = successes / n;\n const alpha = 1 - confidence;\n const z = _normInv(1 - alpha / 2);\n const se = Math.sqrt((p * (1 - p)) / n);\n const margin = z * se;\n const lower = Math.max(0, p - margin);\n const upper = Math.min(1, p + margin);\n return _text({\n type: \"confidence_interval\",\n parameter: \"proportion\",\n confidence,\n n,\n proportion: p,\n lower,\n upper,\n margin,\n });\n};\n\nconst confidence_interval_variance = (arr, confidence = 0.95) => {\n const x = _numeric(arr);\n const n = x.length;\n if (n < 2) return _err(\"confidence_interval_variance\", \"insufficient data\");\n const s2 = _variance(x, true);\n const df = n - 1;\n const alpha = 1 - confidence;\n const chi_lower = df / (1 + _normInv(1 - alpha / 2) * Math.sqrt(2 / df));\n const chi_upper = df / (1 - _normInv(1 - alpha / 2) * Math.sqrt(2 / df));\n const lower = (df * s2) / chi_upper;\n const upper = (df * s2) / chi_lower;\n return _text({\n type: \"confidence_interval\",\n parameter: \"variance\",\n confidence,\n n,\n variance: s2,\n lower,\n upper,\n });\n};\n\nconst confidence_interval_difference = (a, b, confidence = 0.95) => {\n const xa = _numeric(a);\n const xb = _numeric(b);\n const na = xa.length;\n const nb = xb.length;\n if (na < 2 || nb < 2)\n return _err(\"confidence_interval_difference\", \"insufficient data\");\n const ma = _mean(xa);\n const mb = _mean(xb);\n const va = _variance(xa, true);\n const vb = _variance(xb, true);\n const diff = ma - mb;\n const se = Math.sqrt(va / na + vb / nb);\n const alpha = 1 - confidence;\n const z = _normInv(1 - alpha / 2);\n const margin = z * se;\n const lower = diff - margin;\n const upper = diff + margin;\n return _text({\n type: \"confidence_interval\",\n parameter: \"difference_of_means\",\n confidence,\n difference: diff,\n lower,\n upper,\n margin,\n means: { group_a: ma, group_b: mb },\n });\n};\n\n// =========================\n// ADDITIONAL CORRELATIONS\n// =========================\n\nconst corr_kendall = (x, y) => {\n const ax = _numeric(x);\n const by = _numeric(y);\n const n = Math.min(ax.length, by.length);\n if (n < 2) return _err(\"corr_kendall\", \"insufficient data\");\n let concordant = 0;\n let discordant = 0;\n for (let i = 0; i < n - 1; i++) {\n for (let j = i + 1; j < n; j++) {\n const dx = ax[j] - ax[i];\n const dy = by[j] - by[i];\n if (dx * dy > 0) concordant++;\n else if (dx * dy < 0) discordant++;\n }\n }\n const tau = (concordant - discordant) / (0.5 * n * (n - 1));\n return _ok(\"statistic\", {\n name: \"kendall_tau\",\n value: tau,\n concordant,\n discordant,\n n,\n });\n};\n\nconst corr_partial = (x, y, z) => {\n const rxy = _corrPearson(x, y);\n const rxz = _corrPearson(x, z);\n const ryz = _corrPearson(y, z);\n const rxy_z =\n (rxy - rxz * ryz) / Math.sqrt((1 - rxz * rxz) * (1 - ryz * ryz));\n return _ok(\"statistic\", {\n name: \"partial_correlation\",\n value: rxy_z,\n controlling_for: \"third_variable\",\n });\n};\n\nconst corr_matrix_all = (rows, method = \"pearson\") => {\n const pearson = _lowerJson(df_corr(rows, \"pearson\")).matrix;\n const spearman = _lowerJson(df_corr(rows, \"spearman\")).matrix;\n const cols = Object.keys(pearson);\n const kendall = {};\n cols.forEach((a) => {\n kendall[a] = {};\n cols.forEach((b) => {\n const xa = rows.map((r) => _toNum(r[a]));\n const xb = rows.map((r) => _toNum(r[b]));\n const tau = _lowerJson(corr_kendall(xa, xb)).value ?? NaN;\n kendall[a][b] = tau;\n });\n });\n return _text({ type: \"correlation_analysis\", pearson, spearman, kendall });\n};\n\n// =========================\n// K-NEAREST NEIGHBORS\n// =========================\n\nconst _euclidean = (a, b) =>\n Math.sqrt(a.reduce((s, v, i) => s + (v - b[i]) ** 2, 0));\n\nconst train_knn_classifier = (X, y, k = 5) => {\n if (X.length !== y.length)\n return _err(\"train_knn_classifier\", \"X and y length mismatch\");\n const model = {\n type: \"knn_classifier\",\n k,\n X,\n y,\n n: y.length,\n p: X[0]?.length ?? 0,\n };\n return _text(model);\n};\n\nconst predict_knn_classifier = (model_text, X_test) => {\n try {\n const m = _lowerJson(model_text);\n if (m.type !== \"knn_classifier\")\n return _err(\"predict_knn_classifier\", \"invalid model type\");\n const { k, x: X_train, y: y_train } = m;\n const predictions = X_test.map((x) => {\n const distances = X_train.map((xt, i) => ({\n dist: _euclidean(x, xt),\n label: y_train[i],\n }));\n distances.sort((a, b) => a.dist - b.dist);\n const neighbors = distances.slice(0, k);\n const votes = {};\n neighbors.forEach(({ label }) => {\n votes[label] = (votes[label] || 0) + 1;\n });\n const pred = Object.entries(votes).sort((a, b) => b[1] - a[1])[0][0];\n return Number(pred);\n });\n return _text({\n type: \"prediction\",\n name: \"knn_classifier\",\n k,\n predictions,\n });\n } catch {\n return _err(\"predict_knn_classifier\", \"invalid model text\");\n }\n};\n\nconst train_knn_regressor = (X, y, k = 5) => {\n if (X.length !== y.length)\n return _err(\"train_knn_regressor\", \"X and y length mismatch\");\n const model = {\n type: \"knn_regressor\",\n k,\n X,\n y,\n n: y.length,\n p: X[0]?.length ?? 0,\n };\n return _text(model);\n};\n\nconst predict_knn_regressor = (model_text, X_test) => {\n try {\n const m = _lowerJson(model_text);\n if (m.type !== \"knn_regressor\")\n return _err(\"predict_knn_regressor\", \"invalid model type\");\n const { k, x: X_train, y: y_train } = m;\n const predictions = X_test.map((x) => {\n const distances = X_train.map((xt, i) => ({\n dist: _euclidean(x, xt),\n value: y_train[i],\n }));\n distances.sort((a, b) => a.dist - b.dist);\n const neighbors = distances.slice(0, k);\n return _mean(neighbors.map((n) => n.value));\n });\n return _text({ type: \"prediction\", name: \"knn_regressor\", k, predictions });\n } catch {\n return _err(\"predict_knn_regressor\", \"invalid model text\");\n }\n};\n\n// =========================\n// DECISION TREE (CART)\n// =========================\n\nconst _gini = (y) => {\n const counts = {};\n y.forEach((v) => {\n counts[v] = (counts[v] || 0) + 1;\n });\n const total = y.length;\n return 1 - Object.values(counts).reduce((s, c) => s + (c / total) ** 2, 0);\n};\n\nconst _mse_split = (y) => {\n const m = _mean(y);\n return _mean(y.map((v) => (v - m) ** 2));\n};\n\nconst _best_split = (X, y, task = \"classification\") => {\n let best = { feature: -1, threshold: 0, score: Infinity };\n const n_features = X[0].length;\n for (let f = 0; f < n_features; f++) {\n const values = _uniq(X.map((row) => row[f])).sort((a, b) => a - b);\n for (let i = 0; i < values.length - 1; i++) {\n const thresh = (values[i] + values[i + 1]) / 2;\n const left_idx = [];\n const right_idx = [];\n X.forEach((row, idx) => {\n if (row[f] <= thresh) left_idx.push(idx);\n else right_idx.push(idx);\n });\n if (left_idx.length === 0 || right_idx.length === 0) continue;\n const left_y = left_idx.map((i) => y[i]);\n const right_y = right_idx.map((i) => y[i]);\n let score;\n if (task === \"classification\") {\n score =\n (left_y.length / y.length) * _gini(left_y) +\n (right_y.length / y.length) * _gini(right_y);\n } else {\n score =\n (left_y.length / y.length) * _mse_split(left_y) +\n (right_y.length / y.length) * _mse_split(right_y);\n }\n if (score < best.score) best = { feature: f, threshold: thresh, score };\n }\n }\n return best;\n};\n\nconst _build_tree = (X, y, depth, max_depth, min_samples, task) => {\n if (depth >= max_depth || y.length < min_samples) {\n const pred =\n task === \"classification\"\n ? Object.entries(\n y.reduce((a, v) => {\n a[v] = (a[v] || 0) + 1;\n return a;\n }, {})\n ).sort((a, b) => b[1] - a[1])[0][0]\n : _mean(y);\n return { leaf: true, prediction: Number(pred), n: y.length };\n }\n const split = _best_split(X, y, task);\n if (split.feature === -1) {\n const pred =\n task === \"classification\"\n ? Object.entries(\n y.reduce((a, v) => {\n a[v] = (a[v] || 0) + 1;\n return a;\n }, {})\n ).sort((a, b) => b[1] - a[1])[0][0]\n : _mean(y);\n return { leaf: true, prediction: Number(pred), n: y.length };\n }\n const left_idx = [];\n const right_idx = [];\n X.forEach((row, i) => {\n if (row[split.feature] <= split.threshold) left_idx.push(i);\n else right_idx.push(i);\n });\n const left_X = left_idx.map((i) => X[i]);\n const left_y = left_idx.map((i) => y[i]);\n const right_X = right_idx.map((i) => X[i]);\n const right_y = right_idx.map((i) => y[i]);\n return {\n leaf: false,\n feature: split.feature,\n threshold: split.threshold,\n left: _build_tree(left_X, left_y, depth + 1, max_depth, min_samples, task),\n right: _build_tree(\n right_X,\n right_y,\n depth + 1,\n max_depth,\n min_samples,\n task\n ),\n };\n};\n\nconst train_decision_tree_classifier = (X, y, opts = {}) => {\n const max_depth = opts.max_depth ?? 5;\n const min_samples = opts.min_samples_split ?? 2;\n const tree = _build_tree(X, y, 0, max_depth, min_samples, \"classification\");\n const model = {\n type: \"decision_tree_classifier\",\n tree,\n max_depth,\n min_samples,\n n: y.length,\n p: X[0]?.length ?? 0,\n };\n return _text(model);\n};\n\nconst train_decision_tree_regressor = (X, y, opts = {}) => {\n const max_depth = opts.max_depth ?? 5;\n const min_samples = opts.min_samples_split ?? 2;\n const tree = _build_tree(X, y, 0, max_depth, min_samples, \"regression\");\n const model = {\n type: \"decision_tree_regressor\",\n tree,\n max_depth,\n min_samples,\n n: y.length,\n p: X[0]?.length ?? 0,\n };\n return _text(model);\n};\n\nconst _predict_tree = (tree, x) => {\n if (tree.leaf) return tree.prediction;\n return x[tree.feature] <= tree.threshold\n ? _predict_tree(tree.left, x)\n : _predict_tree(tree.right, x);\n};\n\nconst predict_decision_tree = (model_text, X_test) => {\n try {\n const m = _lowerJson(model_text);\n const predictions = X_test.map((x) => _predict_tree(m.tree, x));\n return _text({ type: \"prediction\", name: m.type, predictions });\n } catch {\n return _err(\"predict_decision_tree\", \"invalid model text\");\n }\n};\n\n// =========================\n// RANDOM FOREST\n// =========================\n\nconst _bootstrap_sample = (X, y, seed) => {\n const n = X.length;\n let s = seed;\n const rand = () => (s = (s * 9301 + 49297) % 233280) / 233280;\n const indices = Array.from({ length: n }, () => Math.floor(rand() * n));\n const X_boot = indices.map((i) => X[i]);\n const y_boot = indices.map((i) => y[i]);\n return { X_boot, y_boot };\n};\n\nconst train_random_forest_classifier = (X, y, opts = {}) => {\n const n_trees = opts.n_estimators ?? 10;\n const max_depth = opts.max_depth ?? 5;\n const min_samples = opts.min_samples_split ?? 2;\n const seed = opts.seed ?? 42;\n const trees = [];\n for (let i = 0; i < n_trees; i++) {\n const { X_boot, y_boot } = _bootstrap_sample(X, y, seed + i);\n const tree_model = _lowerJson(\n train_decision_tree_classifier(X_boot, y_boot, { max_depth, min_samples })\n );\n trees.push(tree_model.tree);\n }\n const model = {\n type: \"random_forest_classifier\",\n trees,\n n_trees,\n max_depth,\n min_samples,\n n: y.length,\n p: X[0]?.length ?? 0,\n };\n return _text(model);\n};\n\nconst train_random_forest_regressor = (X, y, opts = {}) => {\n const n_trees = opts.n_estimators ?? 10;\n const max_depth = opts.max_depth ?? 5;\n const min_samples = opts.min_samples_split ?? 2;\n const seed = opts.seed ?? 42;\n const trees = [];\n for (let i = 0; i < n_trees; i++) {\n const { X_boot, y_boot } = _bootstrap_sample(X, y, seed + i);\n const tree_model = _lowerJson(\n train_decision_tree_regressor(X_boot, y_boot, { max_depth, min_samples })\n );\n trees.push(tree_model.tree);\n }\n const model = {\n type: \"random_forest_regressor\",\n trees,\n n_trees,\n max_depth,\n min_samples,\n n: y.length,\n p: X[0]?.length ?? 0,\n };\n return _text(model);\n};\n\nconst predict_random_forest_classifier = (model_text, X_test) => {\n try {\n const m = _lowerJson(model_text);\n const predictions = X_test.map((x) => {\n const votes = m.trees.map((tree) => _predict_tree(tree, x));\n const counts = {};\n votes.forEach((v) => {\n counts[v] = (counts[v] || 0) + 1;\n });\n return Number(Object.entries(counts).sort((a, b) => b[1] - a[1])[0][0]);\n });\n return _text({\n type: \"prediction\",\n name: \"random_forest_classifier\",\n n_trees: m.n_trees,\n predictions,\n });\n } catch {\n return _err(\"predict_random_forest_classifier\", \"invalid model text\");\n }\n};\n\nconst predict_random_forest_regressor = (model_text, X_test) => {\n try {\n const m = _lowerJson(model_text);\n const predictions = X_test.map((x) => {\n const preds = m.trees.map((tree) => _predict_tree(tree, x));\n return _mean(preds);\n });\n return _text({\n type: \"prediction\",\n name: \"random_forest_regressor\",\n n_trees: m.n_trees,\n predictions,\n });\n } catch {\n return _err(\"predict_random_forest_regressor\", \"invalid model text\");\n }\n};\n\n// =========================\n// NAIVE BAYES\n// =========================\n\nconst train_naive_bayes = (X, y) => {\n const classes = _uniq(y);\n const n = y.length;\n const p = X[0]?.length ?? 0;\n const priors = {};\n const stats = {};\n classes.forEach((c) => {\n const indices = y.map((v, i) => (v === c ? i : -1)).filter((i) => i >= 0);\n priors[c] = indices.length / n;\n stats[c] = Array.from({ length: p }, (_, j) => {\n const col = indices.map((i) => X[i][j]);\n return { mean: _mean(col), std: _std(col, true) };\n });\n });\n const model = { type: \"naive_bayes\", classes, priors, stats, n, p };\n return _text(model);\n};\n\nconst predict_naive_bayes = (model_text, X_test) => {\n try {\n const m = _lowerJson(model_text);\n const predictions = X_test.map((x) => {\n const scores = {};\n m.classes.forEach((c) => {\n let log_prob = Math.log(m.priors[c]);\n m.stats[c].forEach((s, j) => {\n const val = (x[j] - s.mean) / s.std;\n log_prob +=\n -0.5 * val * val - Math.log(s.std) - 0.5 * Math.log(2 * Math.PI);\n });\n scores[c] = log_prob;\n });\n return Number(Object.entries(scores).sort((a, b) => b[1] - a[1])[0][0]);\n });\n return _text({ type: \"prediction\", name: \"naive_bayes\", predictions });\n } catch {\n return _err(\"predict_naive_bayes\", \"invalid model text\");\n }\n};\n\n// =========================\n// FEATURE SCALING\n// =========================\n\nconst standard_scaler_fit = (X) => {\n const p = X[0]?.length ?? 0;\n const params = Array.from({ length: p }, (_, j) => {\n const col = X.map((row) => row[j]);\n return { mean: _mean(col), std: _std(col, true) };\n });\n return _text({ type: \"standard_scaler\", params, n: X.length, p });\n};\n\nconst standard_scaler_transform = (scaler_text, X) => {\n try {\n const m = _lowerJson(scaler_text);\n const X_scaled = X.map((row) =>\n row.map((v, j) => (v - m.params[j].mean) / m.params[j].std)\n );\n return _text({\n type: \"scaled_data\",\n method: \"standard\",\n data: X_scaled,\n preview: X_scaled.slice(0, 5),\n });\n } catch {\n return _err(\"standard_scaler_transform\", \"invalid scaler text\");\n }\n};\n\nconst minmax_scaler_fit = (X) => {\n const p = X[0]?.length ?? 0;\n const params = Array.from({ length: p }, (_, j) => {\n const col = X.map((row) => row[j]);\n return { min: _min(col), max: _max(col) };\n });\n return _text({ type: \"minmax_scaler\", params, n: X.length, p });\n};\n\nconst minmax_scaler_transform = (scaler_text, X) => {\n try {\n const m = _lowerJson(scaler_text);\n const X_scaled = X.map((row) =>\n row.map((v, j) => {\n const range = m.params[j].max - m.params[j].min;\n return range === 0 ? 0 : (v - m.params[j].min) / range;\n })\n );\n return _text({\n type: \"scaled_data\",\n method: \"minmax\",\n preview: X_scaled.slice(0, 5),\n });\n } catch {\n return _err(\"minmax_scaler_transform\", \"invalid scaler text\");\n }\n};\n\n// =========================\n// DIMENSIONALITY REDUCTION (PCA)\n// =========================\n\nconst train_pca = (X, n_components = 2) => {\n const n = X.length;\n const p = X[0]?.length ?? 0;\n if (n_components > p)\n return _err(\"train_pca\", \"n_components cannot exceed number of features\");\n\n // center data\n const means = Array.from({ length: p }, (_, j) =>\n _mean(X.map((row) => row[j]))\n );\n const X_centered = X.map((row) => row.map((v, j) => v - means[j]));\n\n // covariance matrix\n const cov = Array.from({ length: p }, (_, i) =>\n Array.from({ length: p }, (_, j) => {\n let sum = 0;\n for (let k = 0; k < n; k++) sum += X_centered[k][i] * X_centered[k][j];\n return sum / (n - 1);\n })\n );\n\n // simple power iteration for first n_components eigenvectors\n const components = [];\n for (let c = 0; c < n_components; c++) {\n let v = Array.from({ length: p }, () => Math.random());\n for (let iter = 0; iter < 100; iter++) {\n const v_new = Array.from({ length: p }, (_, i) =>\n cov[i].reduce((s, val, j) => s + val * v[j], 0)\n );\n const norm = Math.sqrt(v_new.reduce((s, val) => s + val * val, 0));\n v = v_new.map((val) => val / norm);\n }\n components.push(v);\n\n // deflate covariance matrix\n for (let i = 0; i < p; i++) {\n for (let j = 0; j < p; j++) {\n cov[i][j] -=\n v[i] * v[j] * cov[i].reduce((s, val, k) => s + val * v[k], 0);\n }\n }\n }\n\n const model = { type: \"pca\", n_components, means, components, n, p };\n return _text(model);\n};\n\nconst transform_pca = (model_text, X) => {\n try {\n const m = _lowerJson(model_text);\n const X_centered = X.map((row) => row.map((v, j) => v - m.means[j]));\n const X_transformed = X_centered.map((row) =>\n m.components.map((comp) => row.reduce((s, v, i) => s + v * comp[i], 0))\n );\n return _text({\n type: \"pca_transform\",\n n_components: m.n_components,\n preview: X_transformed.slice(0, 5),\n });\n } catch {\n return _err(\"transform_pca\", \"invalid model text\");\n }\n};\n\n// =========================\n// CLUSTERING (K-MEANS)\n// =========================\n\nconst train_kmeans = (X, k = 3, opts = {}) => {\n const max_iter = opts.max_iterations ?? 100;\n const seed = opts.seed ?? 42;\n let s = seed;\n const rand = () => (s = (s * 9301 + 49297) % 233280) / 233280;\n\n const n = X.length;\n const p = X[0]?.length ?? 0;\n\n // initialize centroids randomly\n const indices = Array.from({ length: k }, () => Math.floor(rand() * n));\n let centroids = indices.map((i) => [...X[i]]);\n let labels = Array(n).fill(0);\n\n for (let iter = 0; iter < max_iter; iter++) {\n // assign points to nearest centroid\n const new_labels = X.map((x) => {\n const distances = centroids.map((c) => _euclidean(x, c));\n return distances.indexOf(Math.min(...distances));\n });\n\n // check convergence\n if (labels.every((l, i) => l === new_labels[i])) break;\n labels = new_labels;\n\n // update centroids\n centroids = Array.from({ length: k }, (_, c) => {\n const cluster_points = X.filter((_, i) => labels[i] === c);\n if (cluster_points.length === 0) return centroids[c];\n return Array.from({ length: p }, (_, j) =>\n _mean(cluster_points.map((pt) => pt[j]))\n );\n });\n }\n\n // calculate inertia\n const inertia = X.reduce(\n (s, x, i) => s + _euclidean(x, centroids[labels[i]]) ** 2,\n 0\n );\n\n const model = { type: \"kmeans\", k, centroids, inertia, n, p };\n return _text(model);\n};\n\nconst predict_kmeans = (model_text, X_test) => {\n try {\n const m = _lowerJson(model_text);\n const predictions = X_test.map((x) => {\n const distances = m.centroids.map((c) => _euclidean(x, c));\n return distances.indexOf(Math.min(...distances));\n });\n return _text({\n type: \"prediction\",\n name: \"kmeans\",\n k: m.k,\n cluster_labels: predictions,\n });\n } catch {\n return _err(\"predict_kmeans\", \"invalid model text\");\n }\n};\n\n// =========================\n// ENSEMBLE VOTING\n// =========================\n\nconst ensemble_voting_classifier = (models_text, X_test, voting = \"hard\") => {\n try {\n const models = models_text.map((mt) => _lowerJson(mt));\n\n if (voting === \"hard\") {\n const all_preds = models.map((m) => {\n if (m.type === \"logistic_regression\") {\n const pred_result = _lowerJson(predict_logistic(_text(m), X_test));\n return pred_result.classes;\n } else if (m.type === \"knn_classifier\") {\n const pred_result = _lowerJson(\n predict_knn_classifier(_text(m), X_test)\n );\n return pred_result.predictions;\n } else if (m.type === \"decision_tree_classifier\") {\n const pred_result = _lowerJson(\n predict_decision_tree(_text(m), X_test)\n );\n return pred_result.predictions;\n } else if (m.type === \"random_forest_classifier\") {\n const pred_result = _lowerJson(\n predict_random_forest_classifier(_text(m), X_test)\n );\n return pred_result.predictions;\n } else if (m.type === \"naive_bayes\") {\n const pred_result = _lowerJson(predict_naive_bayes(_text(m), X_test));\n return pred_result.predictions;\n }\n return [];\n });\n\n const ensemble_preds = X_test.map((_, i) => {\n const votes = {};\n all_preds.forEach((preds) => {\n const v = preds[i];\n votes[v] = (votes[v] || 0) + 1;\n });\n return Number(Object.entries(votes).sort((a, b) => b[1] - a[1])[0][0]);\n });\n\n return _text({\n type: \"ensemble_prediction\",\n method: \"voting_hard\",\n n_models: models.length,\n predictions: ensemble_preds,\n });\n } else {\n return _err(\n \"ensemble_voting_classifier\",\n \"soft voting not yet implemented\"\n );\n }\n } catch {\n return _err(\"ensemble_voting_classifier\", \"invalid models\");\n }\n};\n\nconst ensemble_voting_regressor = (models_text, X_test) => {\n try {\n const models = models_text.map((mt) => _lowerJson(mt));\n\n const all_preds = models.map((m) => {\n if (m.type === \"linear_regression\") {\n const pred_result = _lowerJson(predict_linear(_text(m), X_test));\n return pred_result.predictions;\n } else if (m.type === \"knn_regressor\") {\n const pred_result = _lowerJson(predict_knn_regressor(_text(m), X_test));\n return pred_result.predictions;\n } else if (m.type === \"decision_tree_regressor\") {\n const pred_result = _lowerJson(predict_decision_tree(_text(m), X_test));\n return pred_result.predictions;\n } else if (m.type === \"random_forest_regressor\") {\n const pred_result = _lowerJson(\n predict_random_forest_regressor(_text(m), X_test)\n );\n return pred_result.predictions;\n }\n return [];\n });\n\n const ensemble_preds = X_test.map((_, i) => {\n const values = all_preds.map((preds) => preds[i]);\n return _mean(values);\n });\n\n return _text({\n type: \"ensemble_prediction\",\n method: \"voting_average\",\n n_models: models.length,\n predictions: ensemble_preds,\n });\n } catch {\n return _err(\"ensemble_voting_regressor\", \"invalid models\");\n }\n};\n\n// =========================\n// CROSS-VALIDATION\n// =========================\n\nconst cross_validate = (X, y, model_type, opts = {}) => {\n const k_folds = opts.k_folds ?? 5;\n const normalize = opts.normalize ?? false;\n const shuffle = opts.shuffle ?? true; // ← Embaralhar antes de dividir\n const seed = opts.seed ?? 42;\n const n = X.length;\n\n // ✅ Embaralhar índices se solicitado\n let indices = Array.from({ length: n }, (_, i) => i);\n if (shuffle) {\n let s = seed;\n const rand = () => (s = (s * 9301 + 49297) % 233280) / 233280;\n indices.sort(() => rand() - 0.5);\n }\n\n const fold_size = Math.floor(n / k_folds);\n const scores = [];\n\n for (let fold = 0; fold < k_folds; fold++) {\n const test_start = fold * fold_size;\n const test_end = fold === k_folds - 1 ? n : (fold + 1) * fold_size;\n\n // Usar índices embaralhados\n const train_idx = [...indices.slice(0, test_start), ...indices.slice(test_end)];\n const test_idx = indices.slice(test_start, test_end);\n\n let X_train = train_idx.map(i => X[i]);\n let y_train = train_idx.map(i => y[i]);\n let X_test = test_idx.map(i => X[i]);\n const y_test = test_idx.map(i => y[i]);\n\n // Normalização dentro do fold\n if (normalize) {\n const scaler = standard_scaler_fit(X_train);\n const train_scaled = standard_scaler_transform(scaler, X_train);\n const test_scaled = standard_scaler_transform(scaler, X_test);\n\n X_train = _lowerJson(train_scaled).data || train_scaled.data;\n X_test = _lowerJson(test_scaled).data || test_scaled.data;\n }\n\n let model_text;\n let predictions;\n\n // Treinar e avaliar baseado no tipo de modelo\n if (model_type === \"linear_regression\") {\n model_text = train_linear_regression(X_train, y_train);\n const pred_result = _lowerJson(predict_linear(model_text, X_test));\n predictions = pred_result.predictions;\n const metrics = _lowerJson(metrics_regression(y_test, predictions));\n scores.push(metrics.r2);\n\n } else if (model_type === \"logistic_regression\") {\n model_text = train_logistic_regression(X_train, y_train, opts);\n const pred_result = _lowerJson(predict_logistic(model_text, X_test));\n predictions = pred_result.classes;\n const metrics = _lowerJson(metrics_classification(y_test, predictions));\n scores.push(metrics.accuracy);\n\n } else if (model_type === \"knn_classifier\") {\n model_text = train_knn_classifier(X_train, y_train, opts.k ?? 5);\n const pred_result = _lowerJson(predict_knn_classifier(model_text, X_test));\n predictions = pred_result.predictions;\n const metrics = _lowerJson(metrics_classification(y_test, predictions));\n scores.push(metrics.accuracy);\n\n } else if (model_type === \"decision_tree_classifier\") {\n model_text = train_decision_tree_classifier(X_train, y_train, opts);\n const pred_result = _lowerJson(predict_decision_tree(model_text, X_test));\n predictions = pred_result.predictions;\n const metrics = _lowerJson(metrics_classification(y_test, predictions));\n scores.push(metrics.accuracy);\n\n } else if (model_type === \"random_forest_classifier\") {\n model_text = train_random_forest_classifier(X_train, y_train, opts);\n const pred_result = _lowerJson(predict_random_forest_classifier(model_text, X_test));\n predictions = pred_result.predictions;\n const metrics = _lowerJson(metrics_classification(y_test, predictions));\n scores.push(metrics.accuracy);\n\n } else if (model_type === \"knn_regressor\") {\n model_text = train_knn_regressor(X_train, y_train, opts.k ?? 5);\n const pred_result = _lowerJson(predict_knn_regressor(model_text, X_test));\n predictions = pred_result.predictions;\n const metrics = _lowerJson(metrics_regression(y_test, predictions));\n scores.push(metrics.r2);\n\n } else if (model_type === \"decision_tree_regressor\") {\n model_text = train_decision_tree_regressor(X_train, y_train, opts);\n const pred_result = _lowerJson(predict_decision_tree(model_text, X_test));\n predictions = pred_result.predictions;\n const metrics = _lowerJson(metrics_regression(y_test, predictions));\n scores.push(metrics.r2);\n\n } else if (model_type === \"random_forest_regressor\") {\n model_text = train_random_forest_regressor(X_train, y_train, opts);\n const pred_result = _lowerJson(predict_random_forest_regressor(model_text, X_test));\n predictions = pred_result.predictions;\n const metrics = _lowerJson(metrics_regression(y_test, predictions));\n scores.push(metrics.r2);\n }\n }\n\n return _text({\n type: \"cross_validation\",\n model_type,\n k_folds,\n scores,\n mean_score: _mean(scores),\n std_score: _std(scores, true),\n min_score: _min(scores),\n max_score: _max(scores),\n normalized: normalize,\n shuffled: shuffle,\n });\n};\n\n// =========================\n// FEATURE IMPORTANCE (for tree-based models)\n// =========================\n\nconst _tree_feature_importance = (tree, n_features) => {\n const importance = Array(n_features).fill(0);\n\n const traverse = (node, n_samples) => {\n if (node.leaf) return;\n importance[node.feature] += n_samples;\n traverse(node.left, n_samples);\n traverse(node.right, n_samples);\n };\n\n traverse(tree, 1);\n const total = importance.reduce((a, b) => a + b, 0);\n return importance.map((v) => (total > 0 ? v / total : 0));\n};\n\nconst feature_importance_tree = (model_text) => {\n try {\n const m = _lowerJson(model_text);\n if (\n m.type === \"decision_tree_classifier\" ||\n m.type === \"decision_tree_regressor\"\n ) {\n const importance = _tree_feature_importance(m.tree, m.p);\n return _text({ type: \"feature_importance\", model: m.type, importance });\n } else if (\n m.type === \"random_forest_classifier\" ||\n m.type === \"random_forest_regressor\"\n ) {\n const all_importance = m.trees.map((tree) =>\n _tree_feature_importance(tree, m.p)\n );\n const avg_importance = Array.from({ length: m.p }, (_, i) =>\n _mean(all_importance.map((imp) => imp[i]))\n );\n return _text({\n type: \"feature_importance\",\n model: m.type,\n n_trees: m.n_trees,\n importance: avg_importance,\n });\n } else {\n return _err(\"feature_importance_tree\", \"model must be tree-based\");\n }\n } catch {\n return _err(\"feature_importance_tree\", \"invalid model text\");\n }\n};\n\n// =========================\n// OUTLIER DETECTION\n// =========================\n\nconst outliers_iqr = (arr) => {\n const x = _numeric(arr);\n const q1 = _quantile(x, 0.25);\n const q3 = _quantile(x, 0.75);\n const iqr = q3 - q1;\n const lower = q1 - 1.5 * iqr;\n const upper = q3 + 1.5 * iqr;\n const outliers = x.filter((v) => v < lower || v > upper);\n const indices = arr\n .map((v, i) => (_isNumber(v) && (v < lower || v > upper) ? i : -1))\n .filter((i) => i >= 0);\n return _text({\n type: \"outlier_detection\",\n method: \"iqr\",\n lower_bound: lower,\n upper_bound: upper,\n n_outliers: outliers.length,\n outlier_indices: indices,\n outlier_values: outliers,\n });\n};\n\nconst outliers_zscore = (arr, threshold = 3) => {\n const x = _numeric(arr);\n const m = _mean(x);\n const s = _std(x, true);\n const zscores = x.map((v) => Math.abs((v - m) / s));\n const outliers = x.filter((_, i) => zscores[i] > threshold);\n const indices = arr\n .map((v, i) => (_isNumber(v) && Math.abs((v - m) / s) > threshold ? i : -1))\n .filter((i) => i >= 0);\n return _text({\n type: \"outlier_detection\",\n method: \"zscore\",\n threshold,\n n_outliers: outliers.length,\n outlier_indices: indices,\n outlier_values: outliers,\n });\n};\n\n// =========================\n// TIME SERIES BASICS\n// =========================\n\nconst moving_average = (arr, window = 3) => {\n const x = _numeric(arr);\n const ma = [];\n for (let i = 0; i < x.length; i++) {\n const start = Math.max(0, i - window + 1);\n const slice = x.slice(start, i + 1);\n ma.push(_mean(slice));\n }\n return _text({\n type: \"time_series\",\n method: \"moving_average\",\n window,\n values: ma,\n });\n};\n\nconst exponential_smoothing = (arr, alpha = 0.3) => {\n const x = _numeric(arr);\n if (x.length === 0) return _err(\"exponential_smoothing\", \"empty data\");\n const smoothed = [x[0]];\n for (let i = 1; i < x.length; i++) {\n smoothed.push(alpha * x[i] + (1 - alpha) * smoothed[i - 1]);\n }\n return _text({\n type: \"time_series\",\n method: \"exponential_smoothing\",\n alpha,\n values: smoothed,\n });\n};\n\nconst autocorrelation = (arr, lag = 1) => {\n const x = _numeric(arr);\n const n = x.length;\n if (n < lag + 1) return _err(\"autocorrelation\", \"insufficient data for lag\");\n const m = _mean(x);\n let num = 0;\n let den = 0;\n for (let i = 0; i < n; i++) {\n den += (x[i] - m) ** 2;\n if (i >= lag) num += (x[i] - m) * (x[i - lag] - m);\n }\n const acf = num / den;\n return _ok(\"statistic\", { name: \"autocorrelation\", lag, value: acf });\n};\n\n// =========================\n// Loaders\n// =========================\nconst df_from_csv = (content, opts = {}) => {\n const config = {\n delimiter: \",\",\n header: true,\n skipEmptyLines: true,\n ...opts,\n };\n const lines = content\n .split(\"\\n\")\n .filter((l) => (config.skipEmptyLines ? l.trim() !== \"\" : true));\n if (lines.length === 0) return _empty_df();\n\n const headers = config.header\n ? lines[0].split(config.delimiter).map((h) => h.trim().replace(/['\"]/g, \"\"))\n : Array.from(\n { length: lines[0].split(config.delimiter).length },\n (_, i) => `col_${i}`\n );\n\n const startIndex = config.header ? 1 : 0;\n const data = [];\n\n for (let i = startIndex; i < lines.length; i++) {\n const values = lines[i].split(config.delimiter);\n if (values.length === headers.length) {\n const row = {};\n headers.forEach((header, idx) => {\n row[header] = _inferType(values[idx].trim().replace(/['\"]/g, \"\"));\n });\n data.push(row);\n }\n }\n\n return _build_df(headers, data);\n};\n\n/**\n * Converte array de objetos em estrutura dataframe\n * @param {Array<Object>} arrayOfObjects - Array de objetos JavaScript\n * @returns {Object} Estrutura dataframe { type, columns, data, n_rows, n_cols }\n */\nconst df_from_array = (arr) => {\n if (!Array.isArray(arr) || arr.length === 0) {\n return _empty_df();\n }\n\n if (!arr.every(item => item && typeof item === 'object' && !Array.isArray(item))) {\n return _empty_df();\n }\n\n // Extrair colunas únicas\n const columns = [];\n arr.forEach(obj => {\n Object.keys(obj).forEach(key => {\n if (!columns.includes(key)) {\n columns.push(key);\n }\n });\n });\n\n // Processar dados\n const data = arr.map(obj => {\n const row = {};\n columns.forEach(col => {\n row[col] = _inferType(obj[col]);\n });\n return row;\n });\n\n return _build_df(columns, data);\n};\n\n\n/**\n * CORRIGIDO: df_from_json\n * Processa JSON de diferentes formatos\n */\nconst df_from_json = (input) => {\n let jsonData;\n\n // Parse string JSON\n if (typeof input === \"string\") {\n try {\n jsonData = JSON.parse(input);\n } catch (e) {\n return _empty_df();\n }\n } else {\n jsonData = input;\n }\n\n // Roteamento inteligente\n if (Array.isArray(jsonData)) {\n return df_from_array(jsonData);\n }\n\n if (jsonData && typeof jsonData === 'object') {\n // JSON estruturado: {headers: [...], data: [...]}\n if (jsonData.headers && Array.isArray(jsonData.headers) &&\n jsonData.data && Array.isArray(jsonData.data)) {\n return df_from_structured_json(jsonData);\n }\n\n // Objeto simples\n return df_from_object(jsonData);\n }\n\n return _empty_df();\n};\n\n/**\n * CORRIGIDO: df_from_structured_json\n * Processa formato {headers: [...], data: [...]}\n */\nconst df_from_structured_json = (jsonData) => {\n if (!jsonData || typeof jsonData !== 'object' ||\n !jsonData.headers || !Array.isArray(jsonData.headers) ||\n !jsonData.data || !Array.isArray(jsonData.data)) {\n return _empty_df();\n }\n\n const headers = jsonData.headers;\n const data = jsonData.data.map(row => {\n const obj = {};\n\n if (Array.isArray(row)) {\n // data = [[\"val1\", \"val2\"], [\"val3\", \"val4\"]]\n headers.forEach((header, i) => {\n obj[header] = _inferType(row[i]);\n });\n } else if (row && typeof row === 'object') {\n // data = [{col1: \"val1\", col2: \"val2\"}]\n headers.forEach(header => {\n obj[header] = _inferType(row[header]);\n });\n } else {\n headers.forEach(header => {\n obj[header] = null;\n });\n }\n\n return obj;\n });\n\n return _build_df(headers, data);\n};\n\n/**\n * CORRIGIDO: df_from_object\n * Converte objeto simples em dataframe\n */\nconst df_from_object = (obj, opts = {}) => {\n if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {\n return _empty_df();\n }\n\n const config = {\n flatten: true,\n maxDepth: 10,\n keyValue: false,\n ...opts,\n };\n\n if (config.keyValue || !config.flatten) {\n // Formato key-value\n const headers = [\"key\", \"value\"];\n const data = Object.entries(obj).map(([key, val]) => ({\n key: key,\n value: _inferType(val),\n }));\n return _build_df(headers, data);\n } else {\n // Formato achatado (padrão)\n const flattened = _flatten(obj, \"\", config.maxDepth);\n const columns = Object.keys(flattened);\n const processedRow = {};\n columns.forEach(col => {\n processedRow[col] = _inferType(flattened[col]);\n });\n const data = [processedRow];\n return _build_df(columns, data);\n }\n};\n\n// =========================\n// Manipulação básica\n// =========================\nconst df_get_column = (df, col) => {\n if (!df.columns.includes(col)) {\n throw new Error(\n `Column '${col}' not found. Available: ${df.columns.join(\", \")}`\n );\n }\n return df.data.map((row) => row[col]);\n};\n\n// NOVA: Pegar valor único (útil para dataframes de objeto achatado)\nconst df_get_value = (df, col) => {\n const column = df_get_column(df, col);\n return column[0];\n};\n\nconst df_get_columns = (df, cols) => {\n const result = {};\n cols.forEach((c) => (result[c] = df_get_column(df, c)));\n return result;\n};\n\nconst df_filter = (df, predicate) => {\n const filtered = df.data.filter(predicate);\n return _build_df(df.columns, filtered);\n};\n\nconst df_sort = (df, col, order = \"asc\") => {\n if (!df.columns.includes(col)) throw new Error(`Column '${col}' not found`);\n const sorted = [...df.data].sort((a, b) => {\n const av = a[col],\n bv = b[col];\n if (av == null) return 1;\n if (bv == null) return -1;\n if (typeof av === \"string\" && typeof bv === \"string\")\n return order === \"asc\" ? av.localeCompare(bv) : bv.localeCompare(av);\n return order === \"asc\" ? av - bv : bv - av;\n });\n return _build_df(df.columns, sorted);\n};\n\nconst df_select = (df, cols) => {\n cols.forEach((c) => {\n if (!df.columns.includes(c)) throw new Error(`Column '${c}' not found`);\n });\n const data = df.data.map((row) => {\n const newRow = {};\n cols.forEach((c) => (newRow[c] = row[c]));\n return newRow;\n });\n return _build_df(cols, data);\n};\n\n// MODIFICADO: Retorna string formatada com _text\nconst df_info = (df) => {\n const types = {};\n const nulls = {};\n const uniques = {};\n\n df.columns.forEach((c) => {\n const colVals = df.data.map((r) => r[c]);\n const nonNull = colVals.filter((v) => v != null);\n\n // Coletar os tipos únicos\n const typeSet = new Set(nonNull.map((v) => typeof v));\n\n // Converter Set para array e pegar o tipo apropriado\n if (typeSet.size === 0) {\n types[c] = \"empty\";\n } else if (typeSet.size === 1) {\n types[c] = Array.from(typeSet)[0]; // ou [...typeSet][0]\n } else {\n types[c] = \"mixed\";\n }\n\n nulls[c] = colVals.length - nonNull.length;\n uniques[c] = new Set(nonNull).size;\n });\n\n const info = {\n n_rows: df.n_rows,\n n_cols: df.n_cols,\n columns: df.columns,\n types,\n null_counts: nulls,\n unique_counts: uniques,\n };\n\n return _text(info);\n};\n\nconst df_head = (df, n = 5) => _build_df(df.columns, df.data.slice(0, n));\nconst df_tail = (df, n = 5) => _build_df(df.columns, df.data.slice(-n));\n\n// =========================\n// Avançadas\n// =========================\nconst df_concat = (...dfs) => {\n if (!dfs.length) return _empty_df();\n const allColumns = _uniq(dfs.flatMap((df) => df.columns));\n const allRows = dfs.flatMap((df) => {\n return df.data.map((row) => {\n const newRow = {};\n allColumns.forEach((c) => (newRow[c] = row[c] ?? null));\n return newRow;\n });\n });\n return _build_df(allColumns, allRows);\n};\n\nconst df_merge = (df1, df2, { on, how = \"inner\" }) => {\n if (!Array.isArray(on)) on = [on];\n const colSet = _uniq([...df1.columns, ...df2.columns]);\n const merged = [];\n\n for (const row1 of df1.data) {\n const matches = df2.data.filter((row2) =>\n on.every((key) => row1[key] === row2[key])\n );\n\n if (matches.length > 0) {\n for (const row2 of matches) merged.push({ ...row1, ...row2 });\n } else if (how === \"left\" || how === \"outer\") {\n const newRow = { ...row1 };\n df2.columns.forEach((c) => {\n if (!on.includes(c)) newRow[c] = null;\n });\n merged.push(newRow);\n }\n }\n\n if (how === \"right\" || how === \"outer\") {\n for (const row2 of df2.data) {\n const match = df1.data.some((row1) =>\n on.every((key) => row1[key] === row2[key])\n );\n if (!match) {\n const newRow = { ...row2 };\n df1.columns.forEach((c) => {\n if (!on.includes(c)) newRow[c] = null;\n });\n merged.push(newRow);\n }\n }\n }\n\n return _build_df(colSet, merged);\n};\n\nconst df_dropna = (df, subset = null) => {\n const cols = subset || df.columns;\n const filtered = df.data.filter((row) =>\n cols.every((c) => row[c] !== null && row[c] !== undefined)\n );\n return _build_df(df.columns, filtered);\n};\n\nconst df_fillna = (df, value, subset = null) => {\n const cols = subset || df.columns;\n const filled = df.data.map((row) => {\n const newRow = { ...row };\n cols.forEach((c) => {\n if (newRow[c] === null || newRow[c] === undefined) newRow[c] = value;\n });\n return newRow;\n });\n return _build_df(df.columns, filled);\n};\n\nconst df_groupby = (df, keys) => {\n if (!Array.isArray(keys)) keys = [keys];\n const groups = new Map();\n\n df.data.forEach((row) => {\n const key = keys.map((k) => row[k]).join(\"|\");\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key).push(row);\n });\n\n return { keys, groups };\n};\n\nconst df_aggregate = (grouped, aggMap) => {\n const result = [];\n\n grouped.groups.forEach((rows, key) => {\n const keyParts = key.split(\"|\");\n const rowOut = {};\n grouped.keys.forEach((k, idx) => (rowOut[k] = keyParts[idx]));\n\n Object.entries(aggMap).forEach(([col, fn]) => {\n const vals = rows.map((r) => r[col]).filter((v) => v != null);\n rowOut[col] = fn(vals);\n });\n\n result.push(rowOut);\n });\n\n const allCols = _uniq([...grouped.keys, ...Object.keys(aggMap)]);\n return _build_df(allCols, result);\n};\n\n// =========================\n// UTILITÁRIAS\n// =========================\n\n// 📉 aplicar função em uma coluna\nconst df_apply = (df, col, fn) => {\n if (!df.columns.includes(col)) throw new Error(`Column '${col}' not found`);\n const newData = df.data.map((row) => ({ ...row, [col]: fn(row[col], row) }));\n return _build_df(df.columns, newData);\n};\n\n// 🧾 exportar dataframe para CSV\nconst df_to_csv = (df, delimiter = \",\") => {\n const header = df.columns.join(delimiter);\n const rows = df.data.map((row) =>\n df.columns\n .map((c) => {\n const val = row[c];\n // Serializa arrays e objetos como JSON\n if (Array.isArray(val) || (typeof val === \"object\" && val !== null)) {\n return JSON.stringify(val);\n }\n return val ?? \"\";\n })\n .join(delimiter)\n );\n return [header, ...rows].join(\"\\n\");\n};\n\n// 🧭 amostragem aleatória\nconst df_sample = (df, n = 5, seed = null) => {\n const data = [...df.data];\n if (seed !== null) {\n // seed opcional\n let m = seed;\n data.sort(() => (Math.sin(m++) > 0 ? 1 : -1));\n } else {\n data.sort(() => Math.random() - 0.5);\n }\n return _build_df(df.columns, data.slice(0, n));\n};\n\n// 🧪 valores únicos de uma coluna\nconst df_unique = (df, col) => {\n if (!df.columns.includes(col)) throw new Error(`Column '${col}' not found`);\n return _uniq(df.data.map((row) => row[col]));\n};\n\n// 🧼 renomear coluna(s)\nconst df_rename = (df, renameMap) => {\n const newColumns = df.columns.map((c) => renameMap[c] || c);\n const newData = df.data.map((row) => {\n const newRow = {};\n df.columns.forEach((c) => {\n const newName = renameMap[c] || c;\n newRow[newName] = row[c];\n });\n return newRow;\n });\n return _build_df(newColumns, newData);\n};\n\n// 🧱 adicionar coluna derivada\nconst df_add_column = (df, colName, fn) => {\n if (df.columns.includes(colName))\n throw new Error(`Column '${colName}' already exists`);\n const newData = df.data.map((row) => ({ ...row, [colName]: fn(row) }));\n return _build_df([...df.columns, colName], newData);\n};\n\n// 🧹 remover colunas\nconst df_drop = (df, cols) => {\n if (!Array.isArray(cols)) cols = [cols];\n const newColumns = df.columns.filter((c) => !cols.includes(c));\n const newData = df.data.map((row) => {\n const newRow = {};\n newColumns.forEach((c) => (newRow[c] = row[c]));\n return newRow;\n });\n return _build_df(newColumns, newData);\n};\n\n// =========================\n// NOVAS: Funções para análise de dados aninhados\n// =========================\n\n// 📊 Expandir array de objetos em múltiplas linhas (explode)\nconst df_explode = (df, col) => {\n if (!df.columns.includes(col)) throw new Error(`Column '${col}' not found`);\n\n const newData = [];\n df.data.forEach((row) => {\n const value = row[col];\n if (Array.isArray(value) && value.length > 0) {\n value.forEach((item) => {\n newData.push({ ...row, [col]: item });\n });\n } else {\n newData.push(row);\n }\n });\n\n return _build_df(df.columns, newData);\n};\n\n// 🔍 Buscar colunas por padrão - RETORNA STRING\nconst df_find_columns = (df, pattern) => {\n const regex = new RegExp(pattern, \"i\");\n const matched = df.columns.filter((col) => regex.test(col));\n\n return _text({\n pattern,\n matches_found: matched.length,\n columns: matched,\n });\n};\n\n// 📈 Estatísticas descritivas de colunas numéricas - RETORNA STRING\nconst df_describe = (df, cols = null) => {\n const targetCols =\n cols ||\n df.columns.filter((col) => {\n const sample = df.data[0]?.[col];\n return typeof sample === \"number\";\n });\n\n const stats = {};\n\n targetCols.forEach((col) => {\n const values = df.data\n .map((row) => row[col])\n .filter((v) => typeof v === \"number\" && !isNaN(v));\n\n if (values.length === 0) {\n stats[col] = { error: \"no numeric values\" };\n return;\n }\n\n const sorted = [...values].sort((a, b) => a - b);\n const sum = values.reduce((a, b) => a + b, 0);\n const mean = sum / values.length;\n const min = sorted[0];\n const max = sorted[sorted.length - 1];\n const median =\n sorted.length % 2 === 0\n ? (sorted[sorted.length / 2 - 1] + sorted[sorted.length / 2]) / 2\n : sorted[Math.floor(sorted.length / 2)];\n\n stats[col] = { count: values.length, mean, median, min, max, sum };\n });\n\n return _text({\n description: \"Descriptive Statistics\",\n analyzed_columns: targetCols.length,\n statistics: stats,\n });\n};\n\n// =========================\n// ADDITIONAL EXPORTS\n// =========================\n\nexport {\n // Loaders\n df_from_csv,\n df_from_json,\n df_from_array,\n df_from_structured_json,\n df_from_object,\n\n // Manipulação básica\n df_get_column,\n df_get_columns,\n df_filter,\n df_sort,\n df_select,\n df_info,\n df_head,\n df_tail,\n\n // Avançadas\n df_concat,\n df_merge,\n df_dropna,\n df_fillna,\n df_groupby,\n df_aggregate,\n\n // Utilitárias\n df_apply,\n df_to_csv,\n df_sample,\n df_unique,\n df_rename,\n df_add_column,\n df_drop,\n df_describe,\n df_missing_report,\n df_corr,\n df_explode,\n eda_overview,\n // stats\n mean,\n stddeviation,\n variance,\n median,\n quantile,\n minv,\n maxv,\n skewness,\n kurtosis,\n corr_pearson,\n corr_spearman,\n // distributions\n normal_pdf,\n normal_cdf,\n normal_ppf,\n binomial_pmf,\n binomial_cdf,\n poisson_pmf,\n poisson_cdf,\n // hypothesis tests\n t_test_independent,\n z_test_one_sample,\n chi_square_independence,\n anova_oneway,\n // ml\n train_test_split,\n train_linear_regression,\n train_logistic_regression,\n predict_linear,\n predict_logistic,\n metrics_classification,\n metrics_regression,\n // additional statistical tests\n t_test_paired,\n t_test_one_sample,\n shapiro_wilk,\n jarque_bera,\n levene_test,\n kruskal_wallis,\n mann_whitney,\n wilcoxon_signed_rank,\n chi_square_goodness,\n // confidence intervals\n confidence_interval_mean,\n confidence_interval_proportion,\n confidence_interval_variance,\n confidence_interval_difference,\n // additional correlations\n corr_kendall,\n corr_partial,\n corr_matrix_all,\n // knn\n train_knn_classifier,\n predict_knn_classifier,\n train_knn_regressor,\n predict_knn_regressor,\n // decision trees\n train_decision_tree_classifier,\n train_decision_tree_regressor,\n predict_decision_tree,\n // random forest\n train_random_forest_classifier,\n train_random_forest_regressor,\n predict_random_forest_classifier,\n predict_random_forest_regressor,\n // naive bayes\n train_naive_bayes,\n predict_naive_bayes,\n // feature scaling\n standard_scaler_fit,\n standard_scaler_transform,\n minmax_scaler_fit,\n minmax_scaler_transform,\n // dimensionality reduction\n train_pca,\n transform_pca,\n // clustering\n train_kmeans,\n predict_kmeans,\n // ensemble\n ensemble_voting_classifier,\n ensemble_voting_regressor,\n // cross-validation\n cross_validate,\n // feature importance\n feature_importance_tree,\n // outlier detection\n outliers_iqr,\n outliers_zscore,\n // time series\n moving_average,\n exponential_smoothing,\n autocorrelation,\n};","import {\n plotHistogram,\n plotBoxplot,\n plotScatter,\n plotLine,\n plotBar,\n plotPie,\n plotHeatmap,\n plotViolin,\n plotDensity,\n plotQQ,\n plotParallel,\n plotPairplot,\n plotMultiline,\n} from \"./plot.js\";\n\nimport {\n// Loaders\n df_from_csv,\n df_from_json,\n df_from_array,\n df_from_structured_json,\n df_from_object,\n\n // Manipulação básica\n df_get_column,\n df_get_columns,\n df_filter,\n df_sort,\n df_select,\n df_info,\n df_head,\n df_tail,\n\n // Avançadas\n df_concat,\n df_merge,\n df_dropna,\n df_fillna,\n df_groupby,\n df_aggregate,\n\n // Utilitárias\n df_apply,\n df_to_csv,\n df_sample,\n df_unique,\n df_rename,\n df_add_column,\n df_drop,\n df_describe,\n df_missing_report,\n df_corr,\n df_explode,\n\n eda_overview,\n // stats\n mean,\n stddeviation,\n variance,\n median,\n quantile,\n minv,\n maxv,\n skewness,\n kurtosis,\n corr_pearson,\n corr_spearman,\n // distributions\n normal_pdf,\n normal_cdf,\n normal_ppf,\n binomial_pmf,\n binomial_cdf,\n poisson_pmf,\n poisson_cdf,\n // hypothesis tests\n t_test_independent,\n z_test_one_sample,\n chi_square_independence,\n anova_oneway,\n // ml\n train_test_split,\n train_linear_regression,\n train_logistic_regression,\n predict_linear,\n predict_logistic,\n metrics_classification,\n metrics_regression,\n // additional statistical tests\n t_test_paired,\n t_test_one_sample,\n shapiro_wilk,\n jarque_bera,\n levene_test,\n kruskal_wallis,\n mann_whitney,\n wilcoxon_signed_rank,\n chi_square_goodness,\n // confidence intervals\n confidence_interval_mean,\n confidence_interval_proportion,\n confidence_interval_variance,\n confidence_interval_difference,\n // additional correlations\n corr_kendall,\n corr_partial,\n corr_matrix_all,\n // knn\n train_knn_classifier,\n predict_knn_classifier,\n train_knn_regressor,\n predict_knn_regressor,\n // decision trees\n train_decision_tree_classifier,\n train_decision_tree_regressor,\n predict_decision_tree,\n // random forest\n train_random_forest_classifier,\n train_random_forest_regressor,\n predict_random_forest_classifier,\n predict_random_forest_regressor,\n // naive bayes\n train_naive_bayes,\n predict_naive_bayes,\n // feature scaling\n standard_scaler_fit,\n standard_scaler_transform,\n minmax_scaler_fit,\n minmax_scaler_transform,\n // dimensionality reduction\n train_pca,\n transform_pca,\n // clustering\n train_kmeans,\n predict_kmeans,\n // ensemble\n ensemble_voting_classifier,\n ensemble_voting_regressor,\n // cross-validation\n cross_validate,\n // feature importance\n feature_importance_tree,\n // outlier detection\n outliers_iqr,\n outliers_zscore,\n // time series\n moving_average,\n exponential_smoothing,\n autocorrelation,\n} from \"./code.js\";\n\nconst datly = {\n // Loaders\n df_from_csv,\n df_from_json,\n df_from_array,\n df_from_structured_json,\n df_from_object,\n\n // Manipulação básica\n df_get_column,\n df_get_columns,\n df_filter,\n df_sort,\n df_select,\n df_info,\n df_head,\n df_tail,\n\n // Avançadas\n df_concat,\n df_merge,\n df_dropna,\n df_fillna,\n df_groupby,\n df_aggregate,\n\n // Utilitárias\n df_apply,\n df_to_csv,\n df_sample,\n df_unique,\n df_rename,\n df_add_column,\n df_drop,\n df_describe,\n df_missing_report,\n df_corr,\n df_explode,\n eda_overview,\n // stats\n mean,\n stddeviation,\n variance,\n median,\n quantile,\n minv,\n maxv,\n skewness,\n kurtosis,\n corr_pearson,\n corr_spearman,\n // distributions\n normal_pdf,\n normal_cdf,\n normal_ppf,\n binomial_pmf,\n binomial_cdf,\n poisson_pmf,\n poisson_cdf,\n // hypothesis tests\n t_test_independent,\n z_test_one_sample,\n chi_square_independence,\n anova_oneway,\n // ml\n train_test_split,\n train_linear_regression,\n train_logistic_regression,\n predict_linear,\n predict_logistic,\n metrics_classification,\n metrics_regression,\n // additional statistical tests\n t_test_paired,\n t_test_one_sample,\n shapiro_wilk,\n jarque_bera,\n levene_test,\n kruskal_wallis,\n mann_whitney,\n wilcoxon_signed_rank,\n chi_square_goodness,\n // confidence intervals\n confidence_interval_mean,\n confidence_interval_proportion,\n confidence_interval_variance,\n confidence_interval_difference,\n // additional correlations\n corr_kendall,\n corr_partial,\n corr_matrix_all,\n // knn\n train_knn_classifier,\n predict_knn_classifier,\n train_knn_regressor,\n predict_knn_regressor,\n // decision trees\n train_decision_tree_classifier,\n train_decision_tree_regressor,\n predict_decision_tree,\n // random forest\n train_random_forest_classifier,\n train_random_forest_regressor,\n predict_random_forest_classifier,\n predict_random_forest_regressor,\n // naive bayes\n train_naive_bayes,\n predict_naive_bayes,\n // feature scaling\n standard_scaler_fit,\n standard_scaler_transform,\n minmax_scaler_fit,\n minmax_scaler_transform,\n // dimensionality reduction\n train_pca,\n transform_pca,\n // clustering\n train_kmeans,\n predict_kmeans,\n // ensemble\n ensemble_voting_classifier,\n ensemble_voting_regressor,\n // cross-validation\n cross_validate,\n // feature importance\n feature_importance_tree,\n // outlier detection\n outliers_iqr,\n outliers_zscore,\n // time series\n moving_average,\n exponential_smoothing,\n autocorrelation,\n // plots\n plotHistogram,\n plotBoxplot,\n plotScatter,\n plotLine,\n plotBar,\n plotPie,\n plotHeatmap,\n plotViolin,\n plotDensity,\n plotQQ,\n plotParallel,\n plotPairplot,\n plotMultiline,\n};\n\nexport default datly;","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n"],"names":["xhtml","namespaces","svg","xlink","xml","xmlns","namespace","name","prefix","i","indexOf","slice","hasOwnProperty","space","local","creatorInherit","document","this","ownerDocument","uri","namespaceURI","documentElement","createElement","createElementNS","creatorFixed","fullname","creator","none","selector","querySelector","empty","childMatcher","node","matches","find","Array","prototype","childFirst","firstElementChild","filter","children","from","sparse","update","length","EnterNode","parent","datum","_next","_parent","__data__","bindIndex","group","enter","exit","data","groupLength","dataLength","bindKey","key","keyValue","nodeByKeyValue","Map","keyValues","call","has","set","get","delete","arraylike","ascending","a","b","NaN","attrRemove","removeAttribute","attrRemoveNS","removeAttributeNS","attrConstant","value","setAttribute","attrConstantNS","setAttributeNS","attrFunction","v","apply","arguments","attrFunctionNS","defaultView","styleRemove","style","removeProperty","styleConstant","priority","setProperty","styleFunction","propertyRemove","propertyConstant","propertyFunction","classArray","string","trim","split","classList","ClassList","_node","_names","getAttribute","classedAdd","names","list","n","add","classedRemove","remove","classedTrue","classedFalse","classedFunction","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","parentNode","appendChild","lower","previousSibling","insertBefore","firstChild","constantNull","removeChild","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","onRemove","typename","on","__on","o","j","m","type","removeEventListener","listener","options","onAdd","event","contextListener","addEventListener","push","dispatchEvent","params","window","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","constructor","child","next","querySelectorAll","join","splice","contains","root","Selection","groups","parents","_groups","_parents","select","descending","bisector","f","compare1","compare2","delta","left","x","lo","hi","mid","d","zero","center","right","subgroups","subnode","subgroup","selectAll","isArray","array","arrayAll","selectorAll","selectChild","match","childFind","selectChildren","childrenFilter","matcher","bind","constant","enterGroup","updateGroup","previous","i0","i1","_enter","_exit","map","onenter","onupdate","onexit","selection","append","merge","order","context","groups0","groups1","m0","Math","min","merges","group0","group1","compareDocumentPosition","sort","compare","compareNode","sortgroups","sortgroup","callback","nodes","size","each","attr","getAttributeNS","getPropertyValue","getComputedStyle","styleValue","property","classed","text","html","create","insert","before","deep","t","typenames","parseTypenames","dispatch","Symbol","iterator","bisectRight","bisect","extent","values","valueof","max","undefined","index","InternMap","entries","keyof","super","Object","defineProperties","_intern","_key","intern_get","intern_set","intern_delete","valueOf","identity","ascendingDefined","e10","sqrt","e5","e2","tickSpec","start","stop","count","step","power","floor","log10","error","pow","factor","i2","inc","round","ticks","reverse","tickIncrement","thresholdSturges","ceil","log","LN2","bin","domain","threshold","sturges","histogram","xz","x0","x1","tz","tn","prestep","isFinite","nice","pop","bins","_","thresholds","quickselect","k","Infinity","TypeError","compareDefined","z","s","exp","sd","swap","quantile","p","Float64Array","numbers","isNaN","value0","subarray","mean","sum","initRange","range","initInterpolator","interpolator","implicit","ordinal","unknown","scale","copy","band","bandwidth","ordinalRange","r0","r1","paddingInner","paddingOuter","align","rescale","sequence","rangeRound","padding","pointish","point","define","factory","extend","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","format","l","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","r","g","opacity","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","toString","h","Hsl","hslConvert","clamph","clampt","hsl2rgb","m1","m2","channels","assign","displayable","formatHex8","formatHsl","clamp","constant$1","nogamma","linear","spline","rgbGamma","y","exponential","gamma","end","colorRgb","rgbBasis","v1","v2","t1","v0","v3","t2","t3","basis","colors","numberArray","c","genericArray","nb","na","date","Date","setTime","interpolateNumber","object","reA","reB","source","am","bm","bs","bi","lastIndex","q","number","one","interpolate","ArrayBuffer","isView","DataView","isNumberArray","interpolateRound","unit","normalize","bimap","d0","d1","polymap","formatDecimalParts","toExponential","coefficient","exponent","abs","prefixExponent","re","formatSpecifier","specifier","Error","FormatSpecifier","fill","sign","symbol","width","comma","precision","formatRounded","formatTypes","toFixed","toLocaleString","replace","e","toPrecision","X","toUpperCase","identity$2","locale","formatPrefix","prefixes","linearish","tickFormat","tickStep","precisionPrefix","precisionRound","precisionFixed","maxIter","transform","untransform","piecewise","output","input","interpolateValue","invert","u","transformer","sequential","t0","k10","identity$1","grouping","thousands","Number","substring","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","test","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","charCodeAt","formatLocale","epsilon","translateX","translateY","offset","entering","__axis","axis","orient","tickArguments","tickValues","tickSizeInner","tickSizeOuter","tickPadding","devicePixelRatio","spacing","range0","range1","position","path","tick","tickExit","tickEnter","line","transition","tickSize","axisBottom","axisLeft","scheme","schemeCategory10","interpolateRdYlBu","interpolateRgbBasis","concat","atan2","cos","sin","pi","PI","halfPi","tau","asin","tauEpsilon","strings","Path","digits","_x0","_y0","_x1","_y1","_append","appendRound","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","w","withPath","shape","RangeError","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","_context","curveLinear","d3Line","defined","curve","buffer","defined0","lineStart","lineEnd","pointX","pointY","that","Basis","curveBasis","areaStart","_line","areaEnd","_point","plotCounter","defaultConfig","height","background","title","xlabel","ylabel","axisColor","titleColor","xAxisColor","yAxisColor","createSvg","userSelector","opts","container","config","_extends","div","id","body","styleAxis","axisSelection","plotScatter","xData","yData","_createSvg3","scaleLinear","xAxis","yAxis","_inferType","stringValue","parseFloat","_build_df","columns","n_rows","n_cols","_empty_df","_uniq","arr","Set","_flatten","obj","maxDepth","currentDepth","result","_loop","_Object$entries$_i","_Object$entries","_i","keys","forEach","subKey","item","_item$subKey","nested","_isNumber","_toNum","_numeric","_sum","reduce","_mean","_variance","sample","_std","_min","_max","_median","_quantile","pos","base","rest","_skewness","_kurtosis","s2","_corrPearson","ax","by","mx","my","num","vx","vy","_rank","indexed","ranks","_corrSpearman","_phi","_Phi","erf","SQRT2","_normInv","ln","_invErf","_ok","payload","_err","message","df_missing_report","rows","col","miss","column","missing","missing_rate","df_corr","method","numericCols","every","mat","xa","xb","matrix","normal_cdf","mu","sigma","normal_ppf","_tCDF","df","ib","aold","az","qab","qap","qam","bz","tem","ap","bp","bpp","betacf","_dot","A","B","train_linear_regression","_X$0$length","_X$","Xb","row","_addBias","pinv","lambda","At","_transpose","AtA","inv","M","pivot","tmp","pv","_inv","_pinv","yhat","resid","mse","r2","weights","_sigmoid","train_logistic_regression","_opts$learning_rate","_opts$iterations","_opts$l","_X$0$length2","_X$2","lr","learning_rate","iters","iterations","l2","grad","_loop2","wi","proba","pred","acc","accuracy","predict_linear","model_text","_m$model","JSON","parse","stringify","_lowerJson","model","predictions","_unused","predict_logistic","_m$model2","probabilities","classes","_unused2","textOrObj","fromEntries","_ref2","_unused3","metrics_classification","y_true","y_pred","tp","fp","fn","recall","confusion_matrix","f1","metrics_regression","mae","corr_kendall","concordant","discordant","_euclidean","train_knn_classifier","_X$0$length3","_X$3","predict_knn_classifier","X_test","X_train","y_train","distances","xt","dist","label","neighbors","votes","_ref4","_unused4","train_knn_regressor","_X$0$length4","_X$4","predict_knn_regressor","_unused5","_gini","counts","total","_mse_split","_build_tree","depth","max_depth","min_samples","task","leaf","prediction","best","feature","score","n_features","_loop3","_loop4","thresh","left_idx","right_idx","idx","left_y","right_y","_best_split","left_X","right_X","train_decision_tree_classifier","_opts$max_depth","_opts$min_samples_spl","_X$0$length5","_X$5","min_samples_split","tree","train_decision_tree_regressor","_opts$max_depth2","_opts$min_samples_spl2","_X$0$length6","_X$6","_predict_tree","predict_decision_tree","_unused6","_bootstrap_sample","seed","indices","X_boot","y_boot","train_random_forest_classifier","_opts$n_estimators","_opts$max_depth3","_opts$min_samples_spl3","_opts$seed","_X$0$length7","_X$7","n_trees","n_estimators","trees","_bootstrap_sample2","tree_model","train_random_forest_regressor","_opts$n_estimators2","_opts$max_depth4","_opts$min_samples_spl4","_opts$seed2","_X$0$length8","_X$8","_bootstrap_sample3","predict_random_forest_classifier","_unused7","predict_random_forest_regressor","preds","_unused8","predict_naive_bayes","scores","log_prob","priors","stats","val","std","_unused9","standard_scaler_fit","_X$0$length0","_X$0","standard_scaler_transform","scaler_text","X_scaled","preview","_unused0","_tree_feature_importance","importance","traverse","n_samples","df_from_array","includes","df_from_structured_json","jsonData","headers","header","df_from_object","flatten","_ref5","flattened","processedRow","df_get_column","df_describe","cols","targetCols","_df$data$","sorted","median","description","analyzed_columns","statistics","datly","df_from_csv","content","delimiter","skipEmptyLines","lines","_loop8","df_from_json","df_get_columns","df_filter","predicate","filtered","df_sort","av","bv","localeCompare","df_select","newRow","df_info","types","nulls","uniques","colVals","nonNull","typeSet","null_counts","unique_counts","df_head","df_tail","df_concat","dfs","allColumns","flatMap","allRows","_row$c","df_merge","df1","df2","_ref6","_ref6$how","how","_step","colSet","merged","_loop0","row1","row2","_step3","_iterator3","_createForOfIteratorHelperLoose","done","_iterator","_loop9","_step2","some","_iterator2","df_dropna","subset","df_fillna","filled","df_groupby","df_aggregate","grouped","aggMap","keyParts","rowOut","_ref7","vals","allCols","df_apply","newData","_extends2","df_to_csv","df_sample","random","df_unique","df_rename","renameMap","newColumns","df_add_column","colName","_extends3","df_drop","df_explode","_extends4","eda_overview","_desc$columns","_miss$rows","_corr$matrix","desc","corr","summary","correlation","stddeviation","variance","minv","maxv","skewness","kurtosis","corr_pearson","corr_spearman","normal_pdf","binomial_pmf","den","C","binomial_cdf","poisson_pmf","fact","poisson_cdf","t_test_independent","equal_var","se","ma","mb","va","vb","statistic","p_value","means","group_a","group_b","z_test_one_sample","mu0","alpha","moe","ci_lower","ci_upper","confidence","extra","sample_mean","hypothesized_mean","sigma_used","effect_size","chi_square_independence","table","rowS","colS","N","chi","expected","chi_square_cdf","observed","dof","anova_oneway","ns","overall","flat","ssb","ssw","dfb","dfw","F","between","within","f_cdf","group_means","grand_mean","train_test_split","test_size","ntest","test_idx","train_idx","y_test","sizes","train","x_train","t_test_paired","diffs","md","mean_difference","t_test_one_sample","shapiro_wilk","ss","note","jarque_bera","levene_test","medians","zs","allz","overall_median","df_between","df_within","kruskal_wallis","all","len","rsum","_ref3","mann_whitney","combined","U1","U","z_score","wilcoxon_signed_rank","absDiffs","Wplus","chi_square_goodness","obs","confidence_interval_mean","margin","parameter","upper","confidence_interval_proportion","successes","proportion","confidence_interval_variance","chi_lower","confidence_interval_difference","diff","difference","corr_partial","rxy","rxz","ryz","rxy_z","controlling_for","corr_matrix_all","pearson","spearman","kendall","_lowerJson$value","train_naive_bayes","_X$0$length9","_X$9","minmax_scaler_fit","_X$0$length1","_X$1","minmax_scaler_transform","_unused1","train_pca","n_components","_X$0$length10","_X$10","X_centered","cov","components","_loop5","_loop6","v_new","norm","iter","transform_pca","X_transformed","comp","_unused10","train_kmeans","_opts$max_iterations","_opts$seed3","_X$0$length11","_X$11","max_iter","max_iterations","centroids","labels","_loop7","new_labels","cluster_points","pt","inertia","predict_kmeans","cluster_labels","_unused11","ensemble_voting_classifier","models_text","voting","models","mt","all_preds","ensemble_preds","n_models","_unused12","ensemble_voting_regressor","_unused13","cross_validate","model_type","_opts$k_folds","_opts$normalize","_opts$shuffle","_opts$seed4","k_folds","shuffle","fold_size","fold","test_start","test_end","scaler","train_scaled","test_scaled","pred_result","metrics","_opts$k","_opts$k2","mean_score","std_score","min_score","max_score","normalized","shuffled","feature_importance_tree","all_importance","avg_importance","imp","_unused14","outliers_iqr","q1","q3","iqr","outliers","lower_bound","upper_bound","n_outliers","outlier_indices","outlier_values","outliers_zscore","zscores","moving_average","exponential_smoothing","smoothed","autocorrelation","lag","plotHistogram","_createSvg","d3Histogram","plotBoxplot","_createSvg2","scaleBand","allValues","minVal","maxVal","xPos","boxWidth","plotLine","_createSvg4","lineWidth","showPoints","plotBar","categories","_createSvg5","plotPie","_createSvg6","radius","scaleOrdinal","pieGen","sortValues","pie","arcs","pa","d3Pie","arcGen","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","rp","rc0","rc1","p0","p1","oc","x3","y3","x32","y32","intersect","ay","bx","kc","lc","centroid","d3Arc","showLabels","plotHeatmap","_createSvg7","scaleSequential","cells","showValues","plotViolin","_createSvg8","dataGroups","maxLen","scaleW","areaGen","mirrored","g2","plotDensity","kernel","_createSvg9","density","V","plotQQ","c1","c2","c3","c4","c5","c6","d3","d4","normalQuantile","plotParallel","dimensions","_createSvg0","scalePoint","dim","lineGen","plotPairplot","gap","totalSize","containerSel","colX","colY","plotMultiline","series","_createSvg1","allX","allY","legend"],"mappings":"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"}