@nshiab/simple-data-analysis-core 2.0.8 → 2.1.0

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.
Files changed (513) hide show
  1. package/esm/class/SDAError.d.ts +6 -6
  2. package/esm/class/SDAError.js +6 -6
  3. package/esm/class/Simple.d.ts +9 -9
  4. package/esm/class/Simple.js +9 -9
  5. package/esm/class/SimpleDB.d.ts +80 -76
  6. package/esm/class/SimpleDB.d.ts.map +1 -1
  7. package/esm/class/SimpleDB.js +80 -76
  8. package/esm/class/SimpleTable.d.ts +2805 -1077
  9. package/esm/class/SimpleTable.d.ts.map +1 -1
  10. package/esm/class/SimpleTable.js +2777 -1077
  11. package/esm/helpers/appendColumnBatches.d.ts +3 -0
  12. package/esm/helpers/appendColumnBatches.d.ts.map +1 -0
  13. package/esm/helpers/appendColumnBatches.js +21 -0
  14. package/esm/helpers/buildApproximateMutualReachabilityMst.d.ts +45 -0
  15. package/esm/helpers/buildApproximateMutualReachabilityMst.d.ts.map +1 -0
  16. package/esm/helpers/buildApproximateMutualReachabilityMst.js +212 -0
  17. package/esm/helpers/buildChronologicalGraphComponentsSql.d.ts +14 -0
  18. package/esm/helpers/buildChronologicalGraphComponentsSql.d.ts.map +1 -0
  19. package/esm/helpers/buildChronologicalGraphComponentsSql.js +167 -0
  20. package/esm/helpers/buildExactMutualReachabilityMst.d.ts +28 -0
  21. package/esm/helpers/buildExactMutualReachabilityMst.d.ts.map +1 -0
  22. package/esm/helpers/buildExactMutualReachabilityMst.js +97 -0
  23. package/esm/helpers/buildGraphTemporalCostStateSql.d.ts +12 -0
  24. package/esm/helpers/buildGraphTemporalCostStateSql.d.ts.map +1 -0
  25. package/esm/helpers/buildGraphTemporalCostStateSql.js +86 -0
  26. package/esm/helpers/buildGraphTemporalReachabilitySql.d.ts +13 -0
  27. package/esm/helpers/buildGraphTemporalReachabilitySql.d.ts.map +1 -0
  28. package/esm/helpers/buildGraphTemporalReachabilitySql.js +70 -0
  29. package/esm/helpers/buildSparseMutualReachabilityMst.d.ts +10 -0
  30. package/esm/helpers/buildSparseMutualReachabilityMst.d.ts.map +1 -0
  31. package/esm/helpers/buildSparseMutualReachabilityMst.js +47 -0
  32. package/esm/helpers/buildUmapGraph.d.ts +21 -0
  33. package/esm/helpers/buildUmapGraph.d.ts.map +1 -0
  34. package/esm/helpers/buildUmapGraph.js +61 -0
  35. package/esm/helpers/buildVectorNeighbors.d.ts +45 -0
  36. package/esm/helpers/buildVectorNeighbors.d.ts.map +1 -0
  37. package/esm/helpers/buildVectorNeighbors.js +170 -0
  38. package/esm/helpers/buildWeakGraphComponentsSql.d.ts +3 -0
  39. package/esm/helpers/buildWeakGraphComponentsSql.d.ts.map +1 -0
  40. package/esm/helpers/buildWeakGraphComponentsSql.js +32 -0
  41. package/esm/helpers/cacheDatabase.d.ts.map +1 -1
  42. package/esm/helpers/cacheDatabase.js +2 -1
  43. package/esm/helpers/camelCase.d.ts +7 -5
  44. package/esm/helpers/camelCase.d.ts.map +1 -1
  45. package/esm/helpers/camelCase.js +7 -5
  46. package/esm/helpers/capitalize.d.ts +6 -4
  47. package/esm/helpers/capitalize.d.ts.map +1 -1
  48. package/esm/helpers/capitalize.js +6 -4
  49. package/esm/helpers/clusterHdbscan.d.ts +18 -0
  50. package/esm/helpers/clusterHdbscan.d.ts.map +1 -0
  51. package/esm/helpers/clusterHdbscan.js +342 -0
  52. package/esm/helpers/computeCovariance.d.ts +16 -0
  53. package/esm/helpers/computeCovariance.d.ts.map +1 -0
  54. package/esm/helpers/computeCovariance.js +99 -0
  55. package/esm/helpers/computeMahalanobisDistances.d.ts +14 -0
  56. package/esm/helpers/computeMahalanobisDistances.d.ts.map +1 -0
  57. package/esm/helpers/computeMahalanobisDistances.js +87 -0
  58. package/esm/helpers/createDirectory.d.ts +4 -3
  59. package/esm/helpers/createDirectory.d.ts.map +1 -1
  60. package/esm/helpers/createDirectory.js +4 -3
  61. package/esm/helpers/dataToArrays.d.ts +6 -4
  62. package/esm/helpers/dataToArrays.d.ts.map +1 -1
  63. package/esm/helpers/dataToArrays.js +6 -4
  64. package/esm/helpers/extractTypes.d.ts +1 -1
  65. package/esm/helpers/extractTypes.js +4 -9
  66. package/esm/helpers/factorCovariance.d.ts +17 -0
  67. package/esm/helpers/factorCovariance.d.ts.map +1 -0
  68. package/esm/helpers/factorCovariance.js +189 -0
  69. package/esm/helpers/findGeoColumn.d.ts +6 -4
  70. package/esm/helpers/findGeoColumn.d.ts.map +1 -1
  71. package/esm/helpers/findGeoColumn.js +6 -4
  72. package/esm/helpers/findGeoColumnFromSchema.d.ts +8 -5
  73. package/esm/helpers/findGeoColumnFromSchema.d.ts.map +1 -1
  74. package/esm/helpers/findGeoColumnFromSchema.js +8 -5
  75. package/esm/helpers/fitUmapCurve.d.ts +2 -0
  76. package/esm/helpers/fitUmapCurve.d.ts.map +1 -0
  77. package/esm/helpers/fitUmapCurve.js +66 -0
  78. package/esm/helpers/formatDate.d.ts +12 -6
  79. package/esm/helpers/formatDate.d.ts.map +1 -1
  80. package/esm/helpers/formatDate.js +12 -6
  81. package/esm/helpers/formatMissingTables.d.ts +8 -5
  82. package/esm/helpers/formatMissingTables.d.ts.map +1 -1
  83. package/esm/helpers/formatMissingTables.js +8 -5
  84. package/esm/helpers/formatNumber.d.ts +19 -10
  85. package/esm/helpers/formatNumber.d.ts.map +1 -1
  86. package/esm/helpers/formatNumber.js +32 -17
  87. package/esm/helpers/getGraphEdgeIdColumn.d.ts +9 -0
  88. package/esm/helpers/getGraphEdgeIdColumn.d.ts.map +1 -0
  89. package/esm/helpers/getGraphEdgeIdColumn.js +25 -0
  90. package/esm/helpers/getGraphEndpointColumns.d.ts +11 -0
  91. package/esm/helpers/getGraphEndpointColumns.d.ts.map +1 -0
  92. package/esm/helpers/getGraphEndpointColumns.js +160 -0
  93. package/esm/helpers/getGraphWeightColumn.d.ts +10 -0
  94. package/esm/helpers/getGraphWeightColumn.d.ts.map +1 -0
  95. package/esm/helpers/getGraphWeightColumn.js +40 -0
  96. package/esm/helpers/graphRouteResultSchema.d.ts +4 -0
  97. package/esm/helpers/graphRouteResultSchema.d.ts.map +1 -0
  98. package/esm/helpers/graphRouteResultSchema.js +12 -0
  99. package/esm/helpers/graphRouteResultSelect.d.ts +4 -0
  100. package/esm/helpers/graphRouteResultSelect.d.ts.map +1 -0
  101. package/esm/helpers/graphRouteResultSelect.js +22 -0
  102. package/esm/helpers/hasGeometryColumn.d.ts +4 -3
  103. package/esm/helpers/hasGeometryColumn.d.ts.map +1 -1
  104. package/esm/helpers/hasGeometryColumn.js +4 -3
  105. package/esm/helpers/initialUmapCoordinates.d.ts +2 -0
  106. package/esm/helpers/initialUmapCoordinates.d.ts.map +1 -0
  107. package/esm/helpers/initialUmapCoordinates.js +5 -0
  108. package/esm/helpers/inspectGraphConnectivity.d.ts +10 -0
  109. package/esm/helpers/inspectGraphConnectivity.d.ts.map +1 -0
  110. package/esm/helpers/inspectGraphConnectivity.js +55 -0
  111. package/esm/helpers/mergeOptions.d.ts +24 -13
  112. package/esm/helpers/mergeOptions.d.ts.map +1 -1
  113. package/esm/helpers/mergeOptions.js +24 -13
  114. package/esm/helpers/optimizeUmapLayout.d.ts +7 -0
  115. package/esm/helpers/optimizeUmapLayout.d.ts.map +1 -0
  116. package/esm/helpers/optimizeUmapLayout.js +93 -0
  117. package/esm/helpers/parseValue.d.ts +6 -4
  118. package/esm/helpers/parseValue.d.ts.map +1 -1
  119. package/esm/helpers/parseValue.js +6 -4
  120. package/esm/helpers/prepareGraphRouteSql.d.ts +31 -0
  121. package/esm/helpers/prepareGraphRouteSql.d.ts.map +1 -0
  122. package/esm/helpers/prepareGraphRouteSql.js +86 -0
  123. package/esm/helpers/prepareGraphStarts.d.ts +9 -0
  124. package/esm/helpers/prepareGraphStarts.d.ts.map +1 -0
  125. package/esm/helpers/prepareGraphStarts.js +68 -0
  126. package/esm/helpers/prepareGraphTemporalSql.d.ts +28 -0
  127. package/esm/helpers/prepareGraphTemporalSql.d.ts.map +1 -0
  128. package/esm/helpers/prepareGraphTemporalSql.js +154 -0
  129. package/esm/helpers/prepareGraphTraversal.d.ts +19 -0
  130. package/esm/helpers/prepareGraphTraversal.d.ts.map +1 -0
  131. package/esm/helpers/prepareGraphTraversal.js +79 -0
  132. package/esm/helpers/prepareNumericFeatures.d.ts +41 -0
  133. package/esm/helpers/prepareNumericFeatures.d.ts.map +1 -0
  134. package/esm/helpers/prepareNumericFeatures.js +210 -0
  135. package/esm/helpers/prepareUmapLayoutOptions.d.ts +14 -0
  136. package/esm/helpers/prepareUmapLayoutOptions.d.ts.map +1 -0
  137. package/esm/helpers/prepareUmapLayoutOptions.js +23 -0
  138. package/esm/helpers/prettyDuration.d.ts +14 -8
  139. package/esm/helpers/prettyDuration.d.ts.map +1 -1
  140. package/esm/helpers/prettyDuration.js +14 -8
  141. package/esm/helpers/printTable.d.ts +18 -13
  142. package/esm/helpers/printTable.d.ts.map +1 -1
  143. package/esm/helpers/printTable.js +18 -13
  144. package/esm/helpers/publishPreparedColumns.d.ts +37 -0
  145. package/esm/helpers/publishPreparedColumns.d.ts.map +1 -0
  146. package/esm/helpers/publishPreparedColumns.js +113 -0
  147. package/esm/helpers/queryDB.d.ts +24 -13
  148. package/esm/helpers/queryDB.d.ts.map +1 -1
  149. package/esm/helpers/queryDB.js +24 -13
  150. package/esm/helpers/queueAsyncBarrier.d.ts +12 -7
  151. package/esm/helpers/queueAsyncBarrier.d.ts.map +1 -1
  152. package/esm/helpers/queueAsyncBarrier.js +12 -7
  153. package/esm/helpers/queueGraphResult.d.ts +18 -0
  154. package/esm/helpers/queueGraphResult.d.ts.map +1 -0
  155. package/esm/helpers/queueGraphResult.js +39 -0
  156. package/esm/helpers/quoteIdentifier.d.ts +4 -3
  157. package/esm/helpers/quoteIdentifier.d.ts.map +1 -1
  158. package/esm/helpers/quoteIdentifier.js +4 -3
  159. package/esm/helpers/quoteQualifiedIdentifier.d.ts +6 -4
  160. package/esm/helpers/quoteQualifiedIdentifier.d.ts.map +1 -1
  161. package/esm/helpers/quoteQualifiedIdentifier.js +6 -4
  162. package/esm/helpers/readScalarNumber.d.ts +3 -0
  163. package/esm/helpers/readScalarNumber.d.ts.map +1 -0
  164. package/esm/helpers/readScalarNumber.js +4 -0
  165. package/esm/helpers/runQuery.d.ts.map +1 -1
  166. package/esm/helpers/runQuery.js +17 -3
  167. package/esm/helpers/selectFuzzyReplacements.d.ts +11 -0
  168. package/esm/helpers/selectFuzzyReplacements.d.ts.map +1 -0
  169. package/esm/helpers/selectFuzzyReplacements.js +124 -0
  170. package/esm/helpers/stabilizeCosineVectors.d.ts +14 -0
  171. package/esm/helpers/stabilizeCosineVectors.d.ts.map +1 -0
  172. package/esm/helpers/stabilizeCosineVectors.js +34 -0
  173. package/esm/helpers/stringToArray.d.ts +4 -3
  174. package/esm/helpers/stringToArray.d.ts.map +1 -1
  175. package/esm/helpers/stringToArray.js +4 -3
  176. package/esm/helpers/umapRandom.d.ts +2 -0
  177. package/esm/helpers/umapRandom.d.ts.map +1 -0
  178. package/esm/helpers/umapRandom.js +10 -0
  179. package/esm/helpers/updateColumnsWithJS.d.ts +12 -6
  180. package/esm/helpers/updateColumnsWithJS.d.ts.map +1 -1
  181. package/esm/helpers/updateColumnsWithJS.js +12 -6
  182. package/esm/helpers/validateGraphRouteResultSchema.d.ts +4 -0
  183. package/esm/helpers/validateGraphRouteResultSchema.d.ts.map +1 -0
  184. package/esm/helpers/validateGraphRouteResultSchema.js +13 -0
  185. package/esm/helpers/validateGraphTemporalEvents.d.ts +7 -0
  186. package/esm/helpers/validateGraphTemporalEvents.d.ts.map +1 -0
  187. package/esm/helpers/validateGraphTemporalEvents.js +47 -0
  188. package/esm/helpers/validateNumericalAnalysis.d.ts +10 -6
  189. package/esm/helpers/validateNumericalAnalysis.d.ts.map +1 -1
  190. package/esm/helpers/validateNumericalAnalysis.js +10 -6
  191. package/esm/helpers/validateVectorRowIds.d.ts +4 -0
  192. package/esm/helpers/validateVectorRowIds.d.ts.map +1 -0
  193. package/esm/helpers/validateVectorRowIds.js +16 -0
  194. package/esm/helpers/vectorDistanceExpression.d.ts +6 -0
  195. package/esm/helpers/vectorDistanceExpression.d.ts.map +1 -0
  196. package/esm/helpers/vectorDistanceExpression.js +11 -0
  197. package/esm/helpers/wrapString.d.ts +10 -7
  198. package/esm/helpers/wrapString.d.ts.map +1 -1
  199. package/esm/helpers/wrapString.js +10 -7
  200. package/esm/methods/addId.d.ts +5 -0
  201. package/esm/methods/addId.d.ts.map +1 -0
  202. package/esm/methods/addId.js +38 -0
  203. package/esm/methods/cache.js +1 -1
  204. package/esm/methods/commonNeighbors.d.ts +10 -0
  205. package/esm/methods/commonNeighbors.d.ts.map +1 -0
  206. package/esm/methods/commonNeighbors.js +101 -0
  207. package/esm/methods/connectedComponents.d.ts +9 -0
  208. package/esm/methods/connectedComponents.d.ts.map +1 -0
  209. package/esm/methods/connectedComponents.js +147 -0
  210. package/esm/methods/degree.d.ts +9 -0
  211. package/esm/methods/degree.d.ts.map +1 -0
  212. package/esm/methods/degree.js +135 -0
  213. package/esm/methods/distances.d.ts +12 -0
  214. package/esm/methods/distances.d.ts.map +1 -0
  215. package/esm/methods/distances.js +164 -0
  216. package/esm/methods/findCycles.d.ts +12 -0
  217. package/esm/methods/findCycles.d.ts.map +1 -0
  218. package/esm/methods/findCycles.js +330 -0
  219. package/esm/methods/fuzzyClean.d.ts.map +1 -1
  220. package/esm/methods/fuzzyClean.js +17 -136
  221. package/esm/methods/fuzzyJoin.js +70 -16
  222. package/esm/methods/getTypes.d.ts +1 -1
  223. package/esm/methods/hdbscan.d.ts +5 -0
  224. package/esm/methods/hdbscan.d.ts.map +1 -0
  225. package/esm/methods/hdbscan.js +208 -0
  226. package/esm/methods/loadArray.d.ts.map +1 -1
  227. package/esm/methods/loadArray.js +3 -20
  228. package/esm/methods/mahalanobis.d.ts +5 -0
  229. package/esm/methods/mahalanobis.d.ts.map +1 -0
  230. package/esm/methods/mahalanobis.js +92 -0
  231. package/esm/methods/neighbors.d.ts +9 -0
  232. package/esm/methods/neighbors.d.ts.map +1 -0
  233. package/esm/methods/neighbors.js +81 -0
  234. package/esm/methods/normalizeVector.d.ts +5 -0
  235. package/esm/methods/normalizeVector.d.ts.map +1 -0
  236. package/esm/methods/normalizeVector.js +132 -0
  237. package/esm/methods/paths.d.ts +12 -0
  238. package/esm/methods/paths.d.ts.map +1 -0
  239. package/esm/methods/paths.js +287 -0
  240. package/esm/methods/reachable.d.ts +11 -0
  241. package/esm/methods/reachable.d.ts.map +1 -0
  242. package/esm/methods/reachable.js +131 -0
  243. package/esm/methods/rowToVector.d.ts +5 -0
  244. package/esm/methods/rowToVector.d.ts.map +1 -0
  245. package/esm/methods/rowToVector.js +77 -0
  246. package/esm/methods/shortestPath.d.ts +12 -0
  247. package/esm/methods/shortestPath.d.ts.map +1 -0
  248. package/esm/methods/shortestPath.js +337 -0
  249. package/esm/methods/topologicalSort.d.ts +7 -0
  250. package/esm/methods/topologicalSort.d.ts.map +1 -0
  251. package/esm/methods/topologicalSort.js +164 -0
  252. package/esm/methods/umap.d.ts +5 -0
  253. package/esm/methods/umap.d.ts.map +1 -0
  254. package/esm/methods/umap.js +156 -0
  255. package/esm/methods/updateWithJS.js +9 -21
  256. package/llm.md +2170 -128
  257. package/llms.txt +1 -1
  258. package/package.json +1 -1
  259. package/script/class/SDAError.d.ts +6 -6
  260. package/script/class/SDAError.js +6 -6
  261. package/script/class/Simple.d.ts +9 -9
  262. package/script/class/Simple.js +9 -9
  263. package/script/class/SimpleDB.d.ts +80 -76
  264. package/script/class/SimpleDB.d.ts.map +1 -1
  265. package/script/class/SimpleDB.js +80 -76
  266. package/script/class/SimpleTable.d.ts +2805 -1077
  267. package/script/class/SimpleTable.d.ts.map +1 -1
  268. package/script/class/SimpleTable.js +2777 -1077
  269. package/script/helpers/appendColumnBatches.d.ts +3 -0
  270. package/script/helpers/appendColumnBatches.d.ts.map +1 -0
  271. package/script/helpers/appendColumnBatches.js +24 -0
  272. package/script/helpers/buildApproximateMutualReachabilityMst.d.ts +45 -0
  273. package/script/helpers/buildApproximateMutualReachabilityMst.d.ts.map +1 -0
  274. package/script/helpers/buildApproximateMutualReachabilityMst.js +219 -0
  275. package/script/helpers/buildChronologicalGraphComponentsSql.d.ts +14 -0
  276. package/script/helpers/buildChronologicalGraphComponentsSql.d.ts.map +1 -0
  277. package/script/helpers/buildChronologicalGraphComponentsSql.js +174 -0
  278. package/script/helpers/buildExactMutualReachabilityMst.d.ts +28 -0
  279. package/script/helpers/buildExactMutualReachabilityMst.d.ts.map +1 -0
  280. package/script/helpers/buildExactMutualReachabilityMst.js +103 -0
  281. package/script/helpers/buildGraphTemporalCostStateSql.d.ts +12 -0
  282. package/script/helpers/buildGraphTemporalCostStateSql.d.ts.map +1 -0
  283. package/script/helpers/buildGraphTemporalCostStateSql.js +92 -0
  284. package/script/helpers/buildGraphTemporalReachabilitySql.d.ts +13 -0
  285. package/script/helpers/buildGraphTemporalReachabilitySql.d.ts.map +1 -0
  286. package/script/helpers/buildGraphTemporalReachabilitySql.js +76 -0
  287. package/script/helpers/buildSparseMutualReachabilityMst.d.ts +10 -0
  288. package/script/helpers/buildSparseMutualReachabilityMst.d.ts.map +1 -0
  289. package/script/helpers/buildSparseMutualReachabilityMst.js +50 -0
  290. package/script/helpers/buildUmapGraph.d.ts +21 -0
  291. package/script/helpers/buildUmapGraph.d.ts.map +1 -0
  292. package/script/helpers/buildUmapGraph.js +67 -0
  293. package/script/helpers/buildVectorNeighbors.d.ts +45 -0
  294. package/script/helpers/buildVectorNeighbors.d.ts.map +1 -0
  295. package/script/helpers/buildVectorNeighbors.js +176 -0
  296. package/script/helpers/buildWeakGraphComponentsSql.d.ts +3 -0
  297. package/script/helpers/buildWeakGraphComponentsSql.d.ts.map +1 -0
  298. package/script/helpers/buildWeakGraphComponentsSql.js +38 -0
  299. package/script/helpers/cacheDatabase.d.ts.map +1 -1
  300. package/script/helpers/cacheDatabase.js +2 -1
  301. package/script/helpers/camelCase.d.ts +7 -5
  302. package/script/helpers/camelCase.d.ts.map +1 -1
  303. package/script/helpers/camelCase.js +7 -5
  304. package/script/helpers/capitalize.d.ts +6 -4
  305. package/script/helpers/capitalize.d.ts.map +1 -1
  306. package/script/helpers/capitalize.js +6 -4
  307. package/script/helpers/clusterHdbscan.d.ts +18 -0
  308. package/script/helpers/clusterHdbscan.d.ts.map +1 -0
  309. package/script/helpers/clusterHdbscan.js +346 -0
  310. package/script/helpers/computeCovariance.d.ts +16 -0
  311. package/script/helpers/computeCovariance.d.ts.map +1 -0
  312. package/script/helpers/computeCovariance.js +105 -0
  313. package/script/helpers/computeMahalanobisDistances.d.ts +14 -0
  314. package/script/helpers/computeMahalanobisDistances.d.ts.map +1 -0
  315. package/script/helpers/computeMahalanobisDistances.js +93 -0
  316. package/script/helpers/createDirectory.d.ts +4 -3
  317. package/script/helpers/createDirectory.d.ts.map +1 -1
  318. package/script/helpers/createDirectory.js +4 -3
  319. package/script/helpers/dataToArrays.d.ts +6 -4
  320. package/script/helpers/dataToArrays.d.ts.map +1 -1
  321. package/script/helpers/dataToArrays.js +6 -4
  322. package/script/helpers/extractTypes.d.ts +1 -1
  323. package/script/helpers/extractTypes.js +4 -9
  324. package/script/helpers/factorCovariance.d.ts +17 -0
  325. package/script/helpers/factorCovariance.d.ts.map +1 -0
  326. package/script/helpers/factorCovariance.js +194 -0
  327. package/script/helpers/findGeoColumn.d.ts +6 -4
  328. package/script/helpers/findGeoColumn.d.ts.map +1 -1
  329. package/script/helpers/findGeoColumn.js +6 -4
  330. package/script/helpers/findGeoColumnFromSchema.d.ts +8 -5
  331. package/script/helpers/findGeoColumnFromSchema.d.ts.map +1 -1
  332. package/script/helpers/findGeoColumnFromSchema.js +8 -5
  333. package/script/helpers/fitUmapCurve.d.ts +2 -0
  334. package/script/helpers/fitUmapCurve.d.ts.map +1 -0
  335. package/script/helpers/fitUmapCurve.js +69 -0
  336. package/script/helpers/formatDate.d.ts +12 -6
  337. package/script/helpers/formatDate.d.ts.map +1 -1
  338. package/script/helpers/formatDate.js +12 -6
  339. package/script/helpers/formatMissingTables.d.ts +8 -5
  340. package/script/helpers/formatMissingTables.d.ts.map +1 -1
  341. package/script/helpers/formatMissingTables.js +8 -5
  342. package/script/helpers/formatNumber.d.ts +19 -10
  343. package/script/helpers/formatNumber.d.ts.map +1 -1
  344. package/script/helpers/formatNumber.js +32 -17
  345. package/script/helpers/getGraphEdgeIdColumn.d.ts +9 -0
  346. package/script/helpers/getGraphEdgeIdColumn.d.ts.map +1 -0
  347. package/script/helpers/getGraphEdgeIdColumn.js +31 -0
  348. package/script/helpers/getGraphEndpointColumns.d.ts +11 -0
  349. package/script/helpers/getGraphEndpointColumns.d.ts.map +1 -0
  350. package/script/helpers/getGraphEndpointColumns.js +166 -0
  351. package/script/helpers/getGraphWeightColumn.d.ts +10 -0
  352. package/script/helpers/getGraphWeightColumn.d.ts.map +1 -0
  353. package/script/helpers/getGraphWeightColumn.js +46 -0
  354. package/script/helpers/graphRouteResultSchema.d.ts +4 -0
  355. package/script/helpers/graphRouteResultSchema.d.ts.map +1 -0
  356. package/script/helpers/graphRouteResultSchema.js +18 -0
  357. package/script/helpers/graphRouteResultSelect.d.ts +4 -0
  358. package/script/helpers/graphRouteResultSelect.d.ts.map +1 -0
  359. package/script/helpers/graphRouteResultSelect.js +28 -0
  360. package/script/helpers/hasGeometryColumn.d.ts +4 -3
  361. package/script/helpers/hasGeometryColumn.d.ts.map +1 -1
  362. package/script/helpers/hasGeometryColumn.js +4 -3
  363. package/script/helpers/initialUmapCoordinates.d.ts +2 -0
  364. package/script/helpers/initialUmapCoordinates.d.ts.map +1 -0
  365. package/script/helpers/initialUmapCoordinates.js +11 -0
  366. package/script/helpers/inspectGraphConnectivity.d.ts +10 -0
  367. package/script/helpers/inspectGraphConnectivity.d.ts.map +1 -0
  368. package/script/helpers/inspectGraphConnectivity.js +58 -0
  369. package/script/helpers/mergeOptions.d.ts +24 -13
  370. package/script/helpers/mergeOptions.d.ts.map +1 -1
  371. package/script/helpers/mergeOptions.js +24 -13
  372. package/script/helpers/optimizeUmapLayout.d.ts +7 -0
  373. package/script/helpers/optimizeUmapLayout.d.ts.map +1 -0
  374. package/script/helpers/optimizeUmapLayout.js +99 -0
  375. package/script/helpers/parseValue.d.ts +6 -4
  376. package/script/helpers/parseValue.d.ts.map +1 -1
  377. package/script/helpers/parseValue.js +6 -4
  378. package/script/helpers/prepareGraphRouteSql.d.ts +31 -0
  379. package/script/helpers/prepareGraphRouteSql.d.ts.map +1 -0
  380. package/script/helpers/prepareGraphRouteSql.js +127 -0
  381. package/script/helpers/prepareGraphStarts.d.ts +9 -0
  382. package/script/helpers/prepareGraphStarts.d.ts.map +1 -0
  383. package/script/helpers/prepareGraphStarts.js +71 -0
  384. package/script/helpers/prepareGraphTemporalSql.d.ts +28 -0
  385. package/script/helpers/prepareGraphTemporalSql.d.ts.map +1 -0
  386. package/script/helpers/prepareGraphTemporalSql.js +161 -0
  387. package/script/helpers/prepareGraphTraversal.d.ts +19 -0
  388. package/script/helpers/prepareGraphTraversal.d.ts.map +1 -0
  389. package/script/helpers/prepareGraphTraversal.js +87 -0
  390. package/script/helpers/prepareNumericFeatures.d.ts +41 -0
  391. package/script/helpers/prepareNumericFeatures.d.ts.map +1 -0
  392. package/script/helpers/prepareNumericFeatures.js +217 -0
  393. package/script/helpers/prepareUmapLayoutOptions.d.ts +14 -0
  394. package/script/helpers/prepareUmapLayoutOptions.d.ts.map +1 -0
  395. package/script/helpers/prepareUmapLayoutOptions.js +29 -0
  396. package/script/helpers/prettyDuration.d.ts +14 -8
  397. package/script/helpers/prettyDuration.d.ts.map +1 -1
  398. package/script/helpers/prettyDuration.js +14 -8
  399. package/script/helpers/printTable.d.ts +18 -13
  400. package/script/helpers/printTable.d.ts.map +1 -1
  401. package/script/helpers/printTable.js +18 -13
  402. package/script/helpers/publishPreparedColumns.d.ts +37 -0
  403. package/script/helpers/publishPreparedColumns.d.ts.map +1 -0
  404. package/script/helpers/publishPreparedColumns.js +119 -0
  405. package/script/helpers/queryDB.d.ts +24 -13
  406. package/script/helpers/queryDB.d.ts.map +1 -1
  407. package/script/helpers/queryDB.js +24 -13
  408. package/script/helpers/queueAsyncBarrier.d.ts +12 -7
  409. package/script/helpers/queueAsyncBarrier.d.ts.map +1 -1
  410. package/script/helpers/queueAsyncBarrier.js +12 -7
  411. package/script/helpers/queueGraphResult.d.ts +18 -0
  412. package/script/helpers/queueGraphResult.d.ts.map +1 -0
  413. package/script/helpers/queueGraphResult.js +45 -0
  414. package/script/helpers/quoteIdentifier.d.ts +4 -3
  415. package/script/helpers/quoteIdentifier.d.ts.map +1 -1
  416. package/script/helpers/quoteIdentifier.js +4 -3
  417. package/script/helpers/quoteQualifiedIdentifier.d.ts +6 -4
  418. package/script/helpers/quoteQualifiedIdentifier.d.ts.map +1 -1
  419. package/script/helpers/quoteQualifiedIdentifier.js +6 -4
  420. package/script/helpers/readScalarNumber.d.ts +3 -0
  421. package/script/helpers/readScalarNumber.d.ts.map +1 -0
  422. package/script/helpers/readScalarNumber.js +7 -0
  423. package/script/helpers/runQuery.d.ts.map +1 -1
  424. package/script/helpers/runQuery.js +17 -3
  425. package/script/helpers/selectFuzzyReplacements.d.ts +11 -0
  426. package/script/helpers/selectFuzzyReplacements.d.ts.map +1 -0
  427. package/script/helpers/selectFuzzyReplacements.js +127 -0
  428. package/script/helpers/stabilizeCosineVectors.d.ts +14 -0
  429. package/script/helpers/stabilizeCosineVectors.d.ts.map +1 -0
  430. package/script/helpers/stabilizeCosineVectors.js +40 -0
  431. package/script/helpers/stringToArray.d.ts +4 -3
  432. package/script/helpers/stringToArray.d.ts.map +1 -1
  433. package/script/helpers/stringToArray.js +4 -3
  434. package/script/helpers/umapRandom.d.ts +2 -0
  435. package/script/helpers/umapRandom.d.ts.map +1 -0
  436. package/script/helpers/umapRandom.js +13 -0
  437. package/script/helpers/updateColumnsWithJS.d.ts +12 -6
  438. package/script/helpers/updateColumnsWithJS.d.ts.map +1 -1
  439. package/script/helpers/updateColumnsWithJS.js +12 -6
  440. package/script/helpers/validateGraphRouteResultSchema.d.ts +4 -0
  441. package/script/helpers/validateGraphRouteResultSchema.d.ts.map +1 -0
  442. package/script/helpers/validateGraphRouteResultSchema.js +19 -0
  443. package/script/helpers/validateGraphTemporalEvents.d.ts +7 -0
  444. package/script/helpers/validateGraphTemporalEvents.d.ts.map +1 -0
  445. package/script/helpers/validateGraphTemporalEvents.js +53 -0
  446. package/script/helpers/validateNumericalAnalysis.d.ts +10 -6
  447. package/script/helpers/validateNumericalAnalysis.d.ts.map +1 -1
  448. package/script/helpers/validateNumericalAnalysis.js +10 -6
  449. package/script/helpers/validateVectorRowIds.d.ts +4 -0
  450. package/script/helpers/validateVectorRowIds.d.ts.map +1 -0
  451. package/script/helpers/validateVectorRowIds.js +19 -0
  452. package/script/helpers/vectorDistanceExpression.d.ts +6 -0
  453. package/script/helpers/vectorDistanceExpression.d.ts.map +1 -0
  454. package/script/helpers/vectorDistanceExpression.js +14 -0
  455. package/script/helpers/wrapString.d.ts +10 -7
  456. package/script/helpers/wrapString.d.ts.map +1 -1
  457. package/script/helpers/wrapString.js +10 -7
  458. package/script/methods/addId.d.ts +5 -0
  459. package/script/methods/addId.d.ts.map +1 -0
  460. package/script/methods/addId.js +44 -0
  461. package/script/methods/cache.js +1 -1
  462. package/script/methods/commonNeighbors.d.ts +10 -0
  463. package/script/methods/commonNeighbors.d.ts.map +1 -0
  464. package/script/methods/commonNeighbors.js +140 -0
  465. package/script/methods/connectedComponents.d.ts +9 -0
  466. package/script/methods/connectedComponents.d.ts.map +1 -0
  467. package/script/methods/connectedComponents.js +186 -0
  468. package/script/methods/degree.d.ts +9 -0
  469. package/script/methods/degree.d.ts.map +1 -0
  470. package/script/methods/degree.js +141 -0
  471. package/script/methods/distances.d.ts +12 -0
  472. package/script/methods/distances.d.ts.map +1 -0
  473. package/script/methods/distances.js +203 -0
  474. package/script/methods/findCycles.d.ts +12 -0
  475. package/script/methods/findCycles.d.ts.map +1 -0
  476. package/script/methods/findCycles.js +369 -0
  477. package/script/methods/fuzzyClean.d.ts.map +1 -1
  478. package/script/methods/fuzzyClean.js +17 -136
  479. package/script/methods/fuzzyJoin.js +70 -16
  480. package/script/methods/getTypes.d.ts +1 -1
  481. package/script/methods/hdbscan.d.ts +5 -0
  482. package/script/methods/hdbscan.d.ts.map +1 -0
  483. package/script/methods/hdbscan.js +214 -0
  484. package/script/methods/loadArray.d.ts.map +1 -1
  485. package/script/methods/loadArray.js +2 -19
  486. package/script/methods/mahalanobis.d.ts +5 -0
  487. package/script/methods/mahalanobis.d.ts.map +1 -0
  488. package/script/methods/mahalanobis.js +98 -0
  489. package/script/methods/neighbors.d.ts +9 -0
  490. package/script/methods/neighbors.d.ts.map +1 -0
  491. package/script/methods/neighbors.js +120 -0
  492. package/script/methods/normalizeVector.d.ts +5 -0
  493. package/script/methods/normalizeVector.d.ts.map +1 -0
  494. package/script/methods/normalizeVector.js +138 -0
  495. package/script/methods/paths.d.ts +12 -0
  496. package/script/methods/paths.d.ts.map +1 -0
  497. package/script/methods/paths.js +326 -0
  498. package/script/methods/reachable.d.ts +11 -0
  499. package/script/methods/reachable.d.ts.map +1 -0
  500. package/script/methods/reachable.js +170 -0
  501. package/script/methods/rowToVector.d.ts +5 -0
  502. package/script/methods/rowToVector.d.ts.map +1 -0
  503. package/script/methods/rowToVector.js +83 -0
  504. package/script/methods/shortestPath.d.ts +12 -0
  505. package/script/methods/shortestPath.d.ts.map +1 -0
  506. package/script/methods/shortestPath.js +376 -0
  507. package/script/methods/topologicalSort.d.ts +7 -0
  508. package/script/methods/topologicalSort.d.ts.map +1 -0
  509. package/script/methods/topologicalSort.js +170 -0
  510. package/script/methods/umap.d.ts +5 -0
  511. package/script/methods/umap.d.ts.map +1 -0
  512. package/script/methods/umap.js +162 -0
  513. package/script/methods/updateWithJS.js +9 -21
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = computeMahalanobisDistances;
7
+ const node_api_1 = require("@duckdb/node-api");
8
+ const factorCovariance_js_1 = require("./factorCovariance.js");
9
+ const quoteIdentifier_js_1 = __importDefault(require("./quoteIdentifier.js"));
10
+ /** Evaluates bulk distances in DuckDB; the caller owns the returned scratch table. */
11
+ async function computeMahalanobisDistances(connection, input, model, referencePoint) {
12
+ const { dimensions, means, origins, meanOffsets } = model;
13
+ if ([means, origins, meanOffsets].some((values) => values.length !== dimensions)) {
14
+ throw new Error("The covariance centroid has the wrong dimensions.");
15
+ }
16
+ const vectorLiteral = (values) => {
17
+ if (values.some((value) => !Number.isFinite(value))) {
18
+ throw new Error("Mahalanobis centering requires finite coefficients.");
19
+ }
20
+ return `[${values.join(",")}]::DOUBLE[${dimensions}]`;
21
+ };
22
+ const originSql = vectorLiteral(origins);
23
+ const offsetSql = vectorLiteral(meanOffsets);
24
+ if (referencePoint !== undefined &&
25
+ (referencePoint.length !== dimensions ||
26
+ referencePoint.some((value) => !Number.isFinite(value)))) {
27
+ throw new Error("Mahalanobis reference point must contain one finite number per dimension.");
28
+ }
29
+ // Direct subtraction retains exact matches and tiny reference offsets that
30
+ // would be lost by subtracting the centroid from both points separately.
31
+ const centeredValue = referencePoint === undefined
32
+ ? `(value - array_extract(${originSql}, dimension)) - array_extract(${offsetSql}, dimension)`
33
+ : `value - array_extract(${vectorLiteral(Float64Array.from(referencePoint))}, dimension)`;
34
+ const whitening = (0, factorCovariance_js_1.covarianceWhitening)(model);
35
+ const suffix = crypto.randomUUID().replaceAll("-", "");
36
+ const relation = `__sda_mahalanobis_distances_${suffix}`;
37
+ const weights = `__sda_mahalanobis_weights_${suffix}`;
38
+ const rowIdColumn = "row_id";
39
+ const distanceColumn = "distance";
40
+ const cleanup = async () => {
41
+ await connection.run(`DROP TABLE IF EXISTS ${(0, quoteIdentifier_js_1.default)(relation)}`);
42
+ };
43
+ try {
44
+ await connection.run(`CREATE TEMP TABLE ${(0, quoteIdentifier_js_1.default)(weights)}
45
+ (weight DOUBLE[${dimensions}])`);
46
+ const appender = await connection.createAppender(weights);
47
+ try {
48
+ // Only O(d²) summary state crosses this boundary, one O(d) row at a time.
49
+ // Binding a native table avoids parsing a matrix-sized SQL literal and
50
+ // repeatedly evaluating it inside a per-observation lambda.
51
+ for (let row = 0; row < dimensions; row++) {
52
+ appender.appendArray(Array.from(whitening.subarray(row * dimensions, (row + 1) * dimensions)), (0, node_api_1.ARRAY)(node_api_1.DOUBLE, dimensions));
53
+ appender.endRow();
54
+ }
55
+ appender.flushSync();
56
+ }
57
+ finally {
58
+ appender.closeSync();
59
+ }
60
+ // Center once per observation. The cross product is consumed by a grouped
61
+ // aggregate: O(n d²) arithmetic, O(n d) centered storage, O(d²) coefficients,
62
+ // and O(n) aggregate/output state. Source vectors never enter JavaScript.
63
+ await connection.run(`CREATE TEMP TABLE ${(0, quoteIdentifier_js_1.default)(relation)} AS
64
+ WITH centered AS MATERIALIZED (
65
+ SELECT ${(0, quoteIdentifier_js_1.default)(input.rowIdColumn)} AS row_id,
66
+ list_transform(${(0, quoteIdentifier_js_1.default)(input.vectorColumn)},
67
+ (value, dimension) -> ${centeredValue})::DOUBLE[${dimensions}] AS vector
68
+ FROM ${(0, quoteIdentifier_js_1.default)(input.relation)}
69
+ ), components AS MATERIALIZED (
70
+ SELECT row_id, abs(array_inner_product(weight, vector)) AS component
71
+ FROM centered CROSS JOIN ${(0, quoteIdentifier_js_1.default)(weights)}
72
+ ), magnitudes AS (
73
+ SELECT row_id, max(component) AS magnitude FROM components GROUP BY row_id
74
+ )
75
+ SELECT row_id, CASE WHEN magnitude = 0 THEN 0::DOUBLE
76
+ ELSE magnitude * sqrt(sum(pow(component / magnitude, 2))) END AS distance
77
+ FROM components JOIN magnitudes USING (row_id)
78
+ GROUP BY row_id, magnitude`);
79
+ const invalid = Number((await connection.runAndReadAll(`SELECT count(*) FROM ${(0, quoteIdentifier_js_1.default)(relation)}
80
+ WHERE distance IS NULL OR NOT isfinite(distance)`)).getRowsJS()[0][0]);
81
+ if (invalid > 0) {
82
+ throw new Error(`Mahalanobis distance produced ${invalid} non-finite results. Rescale features or remove numerically unstable dimensions.`);
83
+ }
84
+ return { relation, rowIdColumn, distanceColumn, cleanup };
85
+ }
86
+ catch (error) {
87
+ await cleanup();
88
+ throw error;
89
+ }
90
+ finally {
91
+ await connection.run(`DROP TABLE IF EXISTS ${(0, quoteIdentifier_js_1.default)(weights)}`);
92
+ }
93
+ }
@@ -2,14 +2,15 @@
2
2
  * Creates missing directories in an output path, including parent directories.
3
3
  * Non-hidden path segments containing a dot are treated as filenames and omitted.
4
4
  *
5
- * @param path - An output file path or a directory path without dotted segments.
6
- * @returns Nothing. Existing directories are left unchanged.
7
- *
8
5
  * @example
9
6
  * ```ts
10
7
  * import { createDirectory } from "@nshiab/simple-data-analysis-core/helpers";
11
8
  * createDirectory("output/tables/results.csv"); // Creates output/tables.
12
9
  * ```
10
+ *
11
+ * @param path - An output file path or a directory path without dotted segments.
12
+ *
13
+ * @returns Nothing. Existing directories are left unchanged.
13
14
  */
14
15
  export default function createDirectory(path: string): void;
15
16
  //# sourceMappingURL=createDirectory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createDirectory.d.ts","sourceRoot":"","sources":["../../src/helpers/createDirectory.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAS1D"}
1
+ {"version":3,"file":"createDirectory.d.ts","sourceRoot":"","sources":["../../src/helpers/createDirectory.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAS1D"}
@@ -6,14 +6,15 @@ const node_fs_1 = require("node:fs");
6
6
  * Creates missing directories in an output path, including parent directories.
7
7
  * Non-hidden path segments containing a dot are treated as filenames and omitted.
8
8
  *
9
- * @param path - An output file path or a directory path without dotted segments.
10
- * @returns Nothing. Existing directories are left unchanged.
11
- *
12
9
  * @example
13
10
  * ```ts
14
11
  * import { createDirectory } from "@nshiab/simple-data-analysis-core/helpers";
15
12
  * createDirectory("output/tables/results.csv"); // Creates output/tables.
16
13
  * ```
14
+ *
15
+ * @param path - An output file path or a directory path without dotted segments.
16
+ *
17
+ * @returns Nothing. Existing directories are left unchanged.
17
18
  */
18
19
  function createDirectory(path) {
19
20
  path = path
@@ -1,10 +1,6 @@
1
1
  /**
2
2
  * Transforms an array of objects into an object of arrays. This function is the inverse of `arraysToData` and is useful for converting data from a row-based format to a columnar format.
3
3
  *
4
- * @param data An array of objects. Each object is expected to have the same set of keys.
5
- *
6
- * @returns An object where each key maps to an array of values, effectively representing the data in a columnar format.
7
- *
8
4
  * @example
9
5
  * ```ts
10
6
  * // Basic usage with a simple dataset
@@ -24,6 +20,7 @@
24
20
  * // city: ['New York', 'London', 'Paris']
25
21
  * // }
26
22
  * ```
23
+ *
27
24
  * @example
28
25
  * ```ts
29
26
  * // Preparing data for statistical analysis
@@ -43,6 +40,11 @@
43
40
  * // humidity: [60, 65, 55]
44
41
  * // }
45
42
  * ```
43
+ *
44
+ * @param data An array of objects. Each object is expected to have the same set of keys.
45
+ *
46
+ * @returns An object where each key maps to an array of values, effectively representing the data in a columnar format.
47
+ *
46
48
  * @category Formatting
47
49
  */
48
50
  export default function dataToArrays<T extends Record<string, unknown>>(data: T[]): {
@@ -1 +1 @@
1
- {"version":3,"file":"dataToArrays.d.ts","sourceRoot":"","sources":["../../src/helpers/dataToArrays.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,IAAI,EAAE,CAAC,EAAE,GACR;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;CAAE,CAU5B"}
1
+ {"version":3,"file":"dataToArrays.d.ts","sourceRoot":"","sources":["../../src/helpers/dataToArrays.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,IAAI,EAAE,CAAC,EAAE,GACR;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;CAAE,CAU5B"}
@@ -2,10 +2,6 @@
2
2
  /**
3
3
  * Transforms an array of objects into an object of arrays. This function is the inverse of `arraysToData` and is useful for converting data from a row-based format to a columnar format.
4
4
  *
5
- * @param data An array of objects. Each object is expected to have the same set of keys.
6
- *
7
- * @returns An object where each key maps to an array of values, effectively representing the data in a columnar format.
8
- *
9
5
  * @example
10
6
  * ```ts
11
7
  * // Basic usage with a simple dataset
@@ -25,6 +21,7 @@
25
21
  * // city: ['New York', 'London', 'Paris']
26
22
  * // }
27
23
  * ```
24
+ *
28
25
  * @example
29
26
  * ```ts
30
27
  * // Preparing data for statistical analysis
@@ -44,6 +41,11 @@
44
41
  * // humidity: [60, 65, 55]
45
42
  * // }
46
43
  * ```
44
+ *
45
+ * @param data An array of objects. Each object is expected to have the same set of keys.
46
+ *
47
+ * @returns An object where each key maps to an array of values, effectively representing the data in a columnar format.
48
+ *
47
49
  * @category Formatting
48
50
  */
49
51
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,6 +1,6 @@
1
1
  export default function extractTypes(types: {
2
2
  [key: string]: unknown;
3
3
  }[] | null): {
4
- [key: string]: string;
4
+ [k: string]: string;
5
5
  };
6
6
  //# sourceMappingURL=extractTypes.d.ts.map
@@ -2,13 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = extractTypes;
4
4
  function extractTypes(types) {
5
- const typesObj = {};
6
- if (types) {
7
- for (const t of types) {
8
- if (t.column_name) {
9
- typesObj[t.column_name] = t.column_type;
10
- }
11
- }
12
- }
13
- return typesObj;
5
+ const rows = (types ?? []);
6
+ // Define own properties so valid names such as __proto__ do not invoke
7
+ // Object.prototype setters in Node.js.
8
+ return Object.fromEntries(rows.filter((row) => row.column_name).map((row) => [row.column_name, row.column_type]));
14
9
  }
@@ -0,0 +1,17 @@
1
+ export type CovarianceFactor = {
2
+ dimensions: number;
3
+ covariance: Float64Array;
4
+ scales: Float64Array;
5
+ cholesky: Float64Array;
6
+ reciprocalCondition: number;
7
+ };
8
+ /** Factors a sample covariance matrix for stable repeated linear solves. */
9
+ export declare function factorCovariance(covarianceInput: ArrayLike<number>, dimensions: number): CovarianceFactor;
10
+ /** Solves covariance * x = rightHandSide through the scaled Cholesky factor. */
11
+ export declare function solveCovariance(factor: CovarianceFactor, rightHandSide: ArrayLike<number>): Float64Array;
12
+ /**
13
+ * Returns the lower-triangular transform whose squared norm is Mahalanobis
14
+ * squared distance. This inverts only the Cholesky factor, never covariance.
15
+ */
16
+ export declare function covarianceWhitening(factor: CovarianceFactor): Float64Array;
17
+ //# sourceMappingURL=factorCovariance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factorCovariance.d.ts","sourceRoot":"","sources":["../../src/helpers/factorCovariance.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,YAAY,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAkGF,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,EAClC,UAAU,EAAE,MAAM,GACjB,gBAAgB,CAoGlB;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,GAC/B,YAAY,CAsBd;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,GACvB,YAAY,CA2Bd"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.factorCovariance = factorCovariance;
4
+ exports.solveCovariance = solveCovariance;
5
+ exports.covarianceWhitening = covarianceWhitening;
6
+ const instabilityMultiplier = 64;
7
+ function singularCovariance(reason) {
8
+ return new Error(`Covariance is singular or numerically unstable (${reason}). Constant columns, linearly dependent features, or too few observations are common causes. Remove redundant features or provide more observations.`);
9
+ }
10
+ function scaleCovarianceEntry(value, leftScale, rightScale) {
11
+ // Divide by the larger scale first. For a valid covariance, Cauchy-Schwarz
12
+ // bounds |value| by their product, so this avoids intermediate overflow when
13
+ // two otherwise equivalent features use radically different units.
14
+ return leftScale >= rightScale
15
+ ? value / leftScale / rightScale
16
+ : value / rightScale / leftScale;
17
+ }
18
+ function solveCorrelation(cholesky, dimensions, rightHandSide) {
19
+ const solution = new Float64Array(dimensions);
20
+ for (let row = 0; row < dimensions; row++) {
21
+ let value = rightHandSide[row];
22
+ for (let column = 0; column < row; column++) {
23
+ value -= cholesky[row * dimensions + column] * solution[column];
24
+ }
25
+ solution[row] = value / cholesky[row * dimensions + row];
26
+ }
27
+ for (let row = dimensions - 1; row >= 0; row--) {
28
+ let value = solution[row];
29
+ for (let column = row + 1; column < dimensions; column++) {
30
+ value -= cholesky[column * dimensions + row] * solution[column];
31
+ }
32
+ solution[row] = value / cholesky[row * dimensions + row];
33
+ }
34
+ return solution;
35
+ }
36
+ // Hager's estimator avoids forming the inverse merely to decide whether the
37
+ // correlation-scaled covariance is safe to solve. Scaling first makes this
38
+ // rank decision invariant to a change of units in any feature.
39
+ function estimateInverseOneNorm(cholesky, dimensions) {
40
+ let vector = new Float64Array(dimensions).fill(1 / dimensions);
41
+ let estimate = 0;
42
+ let previousIndex = -1;
43
+ for (let iteration = 0; iteration < 8; iteration++) {
44
+ const solved = solveCorrelation(cholesky, dimensions, vector);
45
+ estimate = Math.max(estimate, solved.reduce((sum, value) => sum + Math.abs(value), 0));
46
+ const signs = solved.map((value) => value < 0 ? -1 : 1);
47
+ const dual = solveCorrelation(cholesky, dimensions, signs);
48
+ let index = 0;
49
+ for (let i = 1; i < dimensions; i++) {
50
+ if (Math.abs(dual[i]) > Math.abs(dual[index]))
51
+ index = i;
52
+ }
53
+ const directional = dual.reduce((sum, value, i) => sum + value * vector[i], 0);
54
+ if (Math.abs(dual[index]) <= directional || index === previousIndex)
55
+ break;
56
+ vector = new Float64Array(dimensions);
57
+ vector[index] = 1;
58
+ previousIndex = index;
59
+ }
60
+ // The all-positive initial vector can be an eigenvector that causes Hager's
61
+ // iteration to stop at the *smallest* inverse eigenvalue (for example an
62
+ // equicorrelation matrix). Higham's alternating, increasing-magnitude probe
63
+ // prevents that failure; normalize by its 1-norm to retain a lower estimate.
64
+ // Reference: https://www.netlib.org/lapack/double/dlacon.f (final stage).
65
+ const alternating = Float64Array.from({ length: dimensions }, (_, i) => (i % 2 === 0 ? 1 : -1) * (1 + i / Math.max(1, dimensions - 1)));
66
+ const alternatingNorm = alternating.reduce((sum, value) => sum + Math.abs(value), 0);
67
+ const solved = solveCorrelation(cholesky, dimensions, alternating);
68
+ estimate = Math.max(estimate, solved.reduce((sum, value) => sum + Math.abs(value), 0) / alternatingNorm);
69
+ return estimate;
70
+ }
71
+ /** Factors a sample covariance matrix for stable repeated linear solves. */
72
+ function factorCovariance(covarianceInput, dimensions) {
73
+ if (!Number.isSafeInteger(dimensions) || dimensions < 1) {
74
+ throw new Error("Covariance dimensions must be a positive safe integer.");
75
+ }
76
+ if (covarianceInput.length !== dimensions * dimensions) {
77
+ throw new Error(`Expected ${dimensions * dimensions} covariance values, received ${covarianceInput.length}.`);
78
+ }
79
+ const covariance = Float64Array.from(covarianceInput);
80
+ const scales = new Float64Array(dimensions);
81
+ for (let dimension = 0; dimension < dimensions; dimension++) {
82
+ const variance = covariance[dimension * dimensions + dimension];
83
+ if (!Number.isFinite(variance) || variance <= 0) {
84
+ throw singularCovariance(`feature ${dimension + 1} has non-positive or non-finite sample variance`);
85
+ }
86
+ scales[dimension] = Math.sqrt(variance);
87
+ }
88
+ const correlation = new Float64Array(dimensions * dimensions);
89
+ let correlationOneNorm = 0;
90
+ for (let column = 0; column < dimensions; column++) {
91
+ let columnSum = 0;
92
+ for (let row = 0; row < dimensions; row++) {
93
+ const left = covariance[row * dimensions + column];
94
+ const right = covariance[column * dimensions + row];
95
+ if (!Number.isFinite(left) || !Number.isFinite(right)) {
96
+ throw singularCovariance("the sample covariance contains non-finite values");
97
+ }
98
+ const value = row === column ? 1 : scaleCovarianceEntry(left, scales[row], scales[column]) / 2 + scaleCovarianceEntry(right, scales[row], scales[column]) / 2;
99
+ if (!Number.isFinite(value)) {
100
+ throw singularCovariance("correlation scaling produced a non-finite value");
101
+ }
102
+ correlation[row * dimensions + column] = value;
103
+ columnSum += Math.abs(value);
104
+ }
105
+ correlationOneNorm = Math.max(correlationOneNorm, columnSum);
106
+ }
107
+ const cholesky = new Float64Array(dimensions * dimensions);
108
+ for (let row = 0; row < dimensions; row++) {
109
+ for (let column = 0; column <= row; column++) {
110
+ let value = correlation[row * dimensions + column];
111
+ for (let k = 0; k < column; k++) {
112
+ value -= cholesky[row * dimensions + k] *
113
+ cholesky[column * dimensions + k];
114
+ }
115
+ if (row === column) {
116
+ if (!Number.isFinite(value) || value <= 0) {
117
+ throw singularCovariance(`correlation-scaled Cholesky pivot ${row + 1} is not positive`);
118
+ }
119
+ cholesky[row * dimensions + column] = Math.sqrt(value);
120
+ }
121
+ else {
122
+ cholesky[row * dimensions + column] = value /
123
+ cholesky[column * dimensions + column];
124
+ }
125
+ }
126
+ }
127
+ const inverseOneNorm = estimateInverseOneNorm(cholesky, dimensions);
128
+ const reciprocalCondition = 1 / (correlationOneNorm * inverseOneNorm);
129
+ // This is the usual dimension-scaled floating-point rank tolerance, with a
130
+ // modest safety factor for covariance aggregation and subsequent row solves.
131
+ const tolerance = instabilityMultiplier * dimensions * Number.EPSILON;
132
+ if (!Number.isFinite(reciprocalCondition) || reciprocalCondition <= tolerance) {
133
+ throw singularCovariance(`estimated reciprocal condition ${reciprocalCondition} is at or below ${tolerance}`);
134
+ }
135
+ return {
136
+ dimensions,
137
+ covariance,
138
+ scales,
139
+ cholesky,
140
+ reciprocalCondition,
141
+ };
142
+ }
143
+ /** Solves covariance * x = rightHandSide through the scaled Cholesky factor. */
144
+ function solveCovariance(factor, rightHandSide) {
145
+ const { dimensions, scales, cholesky } = factor;
146
+ if (rightHandSide.length !== dimensions) {
147
+ throw new Error(`Expected a right-hand side with ${dimensions} values, received ${rightHandSide.length}.`);
148
+ }
149
+ const scaled = new Float64Array(dimensions);
150
+ for (let i = 0; i < dimensions; i++) {
151
+ if (!Number.isFinite(rightHandSide[i])) {
152
+ throw new Error("The covariance solve requires finite values.");
153
+ }
154
+ scaled[i] = rightHandSide[i] / scales[i];
155
+ }
156
+ const solution = solveCorrelation(cholesky, dimensions, scaled);
157
+ for (let i = 0; i < dimensions; i++) {
158
+ solution[i] /= scales[i];
159
+ if (!Number.isFinite(solution[i])) {
160
+ throw singularCovariance("the linear solve produced a non-finite value");
161
+ }
162
+ }
163
+ return solution;
164
+ }
165
+ /**
166
+ * Returns the lower-triangular transform whose squared norm is Mahalanobis
167
+ * squared distance. This inverts only the Cholesky factor, never covariance.
168
+ */
169
+ function covarianceWhitening(factor) {
170
+ const { dimensions, scales, cholesky } = factor;
171
+ const whitening = new Float64Array(dimensions * dimensions);
172
+ // Invert the triangular correlation factor first, then apply feature units.
173
+ // Keeping units out of the recurrence avoids repeated underflow/rounding of
174
+ // the same coefficient, and visits only the nonzero triangle.
175
+ for (let column = 0; column < dimensions; column++) {
176
+ for (let row = column; row < dimensions; row++) {
177
+ let value = row === column ? 1 : 0;
178
+ for (let k = column; k < row; k++) {
179
+ value -= cholesky[row * dimensions + k] *
180
+ whitening[k * dimensions + column];
181
+ }
182
+ whitening[row * dimensions + column] = value /
183
+ cholesky[row * dimensions + row];
184
+ }
185
+ for (let row = column; row < dimensions; row++) {
186
+ const index = row * dimensions + column;
187
+ whitening[index] /= scales[column];
188
+ if (!Number.isFinite(whitening[index])) {
189
+ throw singularCovariance("the whitening transform produced a non-finite value");
190
+ }
191
+ }
192
+ }
193
+ return whitening;
194
+ }
@@ -2,14 +2,16 @@ import type SimpleTable from "../class/SimpleTable.js";
2
2
  /**
3
3
  * Returns the only geometry column in a table.
4
4
  *
5
- * @param simpleTable - The table to inspect.
6
- * @param method - The SDA method requesting a geometry column.
7
- * @returns A promise resolving to the name of the only geometry column.
8
- *
9
5
  * @example
10
6
  * ```ts
11
7
  * const column = await findGeoColumn(table, "getGeoData()");
12
8
  * ```
9
+ *
10
+ * @param simpleTable - The table to inspect.
11
+ *
12
+ * @param method - The SDA method requesting a geometry column.
13
+ *
14
+ * @returns A promise resolving to the name of the only geometry column.
13
15
  */
14
16
  export default function findGeoColumn(simpleTable: SimpleTable, method: string): Promise<string>;
15
17
  //# sourceMappingURL=findGeoColumn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findGeoColumn.d.ts","sourceRoot":"","sources":["../../src/helpers/findGeoColumn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,wBAA8B,aAAa,CACzC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAMjB"}
1
+ {"version":3,"file":"findGeoColumn.d.ts","sourceRoot":"","sources":["../../src/helpers/findGeoColumn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,wBAA8B,aAAa,CACzC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAMjB"}
@@ -8,14 +8,16 @@ const findGeoColumnFromSchema_js_1 = __importDefault(require("./findGeoColumnFro
8
8
  /**
9
9
  * Returns the only geometry column in a table.
10
10
  *
11
- * @param simpleTable - The table to inspect.
12
- * @param method - The SDA method requesting a geometry column.
13
- * @returns A promise resolving to the name of the only geometry column.
14
- *
15
11
  * @example
16
12
  * ```ts
17
13
  * const column = await findGeoColumn(table, "getGeoData()");
18
14
  * ```
15
+ *
16
+ * @param simpleTable - The table to inspect.
17
+ *
18
+ * @param method - The SDA method requesting a geometry column.
19
+ *
20
+ * @returns A promise resolving to the name of the only geometry column.
19
21
  */
20
22
  async function findGeoColumn(simpleTable, method) {
21
23
  return (0, findGeoColumnFromSchema_js_1.default)(await simpleTable.getTypes(), method, simpleTable.name);
@@ -2,11 +2,6 @@ import type { TableSchema } from "./pendingOps.js";
2
2
  /**
3
3
  * Returns the only geometry column in a table schema.
4
4
  *
5
- * @param types - The table schema to inspect.
6
- * @param method - The SDA method requesting a geometry column.
7
- * @param tableName - The name of the table represented by the schema.
8
- * @returns The name of the only geometry column.
9
- *
10
5
  * @example
11
6
  * ```ts
12
7
  * const column = findGeoColumnFromSchema(
@@ -15,6 +10,14 @@ import type { TableSchema } from "./pendingOps.js";
15
10
  * "places",
16
11
  * );
17
12
  * ```
13
+ *
14
+ * @param types - The table schema to inspect.
15
+ *
16
+ * @param method - The SDA method requesting a geometry column.
17
+ *
18
+ * @param tableName - The name of the table represented by the schema.
19
+ *
20
+ * @returns The name of the only geometry column.
18
21
  */
19
22
  export default function findGeoColumnFromSchema(types: TableSchema, method: string, tableName: string): string;
20
23
  //# sourceMappingURL=findGeoColumnFromSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findGeoColumnFromSchema.d.ts","sourceRoot":"","sources":["../../src/helpers/findGeoColumnFromSchema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,MAAM,CAoBR"}
1
+ {"version":3,"file":"findGeoColumnFromSchema.d.ts","sourceRoot":"","sources":["../../src/helpers/findGeoColumnFromSchema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,MAAM,CAoBR"}
@@ -8,11 +8,6 @@ const quoteIdentifier_js_1 = __importDefault(require("./quoteIdentifier.js"));
8
8
  /**
9
9
  * Returns the only geometry column in a table schema.
10
10
  *
11
- * @param types - The table schema to inspect.
12
- * @param method - The SDA method requesting a geometry column.
13
- * @param tableName - The name of the table represented by the schema.
14
- * @returns The name of the only geometry column.
15
- *
16
11
  * @example
17
12
  * ```ts
18
13
  * const column = findGeoColumnFromSchema(
@@ -21,6 +16,14 @@ const quoteIdentifier_js_1 = __importDefault(require("./quoteIdentifier.js"));
21
16
  * "places",
22
17
  * );
23
18
  * ```
19
+ *
20
+ * @param types - The table schema to inspect.
21
+ *
22
+ * @param method - The SDA method requesting a geometry column.
23
+ *
24
+ * @param tableName - The name of the table represented by the schema.
25
+ *
26
+ * @returns The name of the only geometry column.
24
27
  */
25
28
  function findGeoColumnFromSchema(types, method, tableName) {
26
29
  const geometryColumns = Object.keys(types).filter((column) => types[column].toLowerCase().includes("geometry")).sort();
@@ -0,0 +1,2 @@
1
+ export default function fitUmapCurve(minDistance: number): [number, number];
2
+ //# sourceMappingURL=fitUmapCurve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fitUmapCurve.d.ts","sourceRoot":"","sources":["../../src/helpers/fitUmapCurve.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA2D1E"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = fitUmapCurve;
4
+ // Least-squares fit of 1/(1+a*x^(2*b)) to the reference UMAP target curve.
5
+ // Spread is fixed to one. See umap-learn's find_ab_params (0.5.9.post2).
6
+ // A two-parameter damped Gauss-Newton solve avoids a runtime fitting dependency.
7
+ function fitUmapCurve(minDistance) {
8
+ if (!Number.isFinite(minDistance) || minDistance < 0 || minDistance > 1) {
9
+ throw new Error("minDistance must be between zero and one.");
10
+ }
11
+ const samples = Array.from({ length: 299 }, (_, i) => {
12
+ const x = (i + 1) * 3 / 299;
13
+ return {
14
+ logX: Math.log(x),
15
+ target: Math.exp(-Math.max(0, x - minDistance)),
16
+ };
17
+ });
18
+ const loss = (logA, logB) => {
19
+ let sum = 0;
20
+ for (const { logX, target } of samples) {
21
+ const residual = 1 / (1 + Math.exp(logA + 2 * Math.exp(logB) * logX)) -
22
+ target;
23
+ sum += residual * residual;
24
+ }
25
+ return sum;
26
+ };
27
+ let logA = 0, logB = 0, damping = 1e-3;
28
+ let error = loss(logA, logB);
29
+ for (let iteration = 0; iteration < 100; iteration++) {
30
+ let aa = 0, ab = 0, bb = 0, ga = 0, gb = 0;
31
+ for (const { logX, target } of samples) {
32
+ const power = Math.exp(logA + 2 * Math.exp(logB) * logX);
33
+ const predicted = 1 / (1 + power);
34
+ const da = -power * predicted * predicted;
35
+ const db = da * 2 * Math.exp(logB) * logX;
36
+ aa += da * da;
37
+ ab += da * db;
38
+ bb += db * db;
39
+ ga += da * (predicted - target);
40
+ gb += db * (predicted - target);
41
+ }
42
+ const aDiagonal = aa + damping * Math.max(aa, 1e-12);
43
+ const bDiagonal = bb + damping * Math.max(bb, 1e-12);
44
+ const determinant = aDiagonal * bDiagonal - ab * ab;
45
+ if (!(determinant > 0))
46
+ throw new Error("UMAP curve fit became singular.");
47
+ const stepA = (ab * gb - bDiagonal * ga) / determinant;
48
+ const stepB = (ab * ga - aDiagonal * gb) / determinant;
49
+ const nextA = Math.max(-20, Math.min(20, logA + stepA));
50
+ const nextB = Math.max(-20, Math.min(20, logB + stepB));
51
+ const nextError = loss(nextA, nextB);
52
+ if (nextError < error) {
53
+ const improvement = error - nextError;
54
+ logA = nextA;
55
+ logB = nextB;
56
+ error = nextError;
57
+ damping = Math.max(damping / 3, 1e-12);
58
+ if (improvement < 1e-13)
59
+ return [Math.exp(logA), Math.exp(logB)];
60
+ }
61
+ else {
62
+ damping *= 10;
63
+ if (Math.max(Math.abs(ga), Math.abs(gb)) < 1e-7) {
64
+ return [Math.exp(logA), Math.exp(logB)];
65
+ }
66
+ }
67
+ }
68
+ throw new Error("UMAP curve fit did not converge.");
69
+ }