datly 0.0.1 → 0.0.3

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.
@@ -0,0 +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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"}