@nshiab/simple-data-analysis-core 2.0.9 → 2.1.1

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 (459) 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 +2806 -1139
  9. package/esm/class/SimpleTable.d.ts.map +1 -1
  10. package/esm/class/SimpleTable.js +2792 -1149
  11. package/esm/helpers/buildApproximateMutualReachabilityMst.d.ts +45 -0
  12. package/esm/helpers/buildApproximateMutualReachabilityMst.d.ts.map +1 -0
  13. package/esm/helpers/buildApproximateMutualReachabilityMst.js +212 -0
  14. package/esm/helpers/buildChronologicalGraphComponentsSql.d.ts +14 -0
  15. package/esm/helpers/buildChronologicalGraphComponentsSql.d.ts.map +1 -0
  16. package/esm/helpers/buildChronologicalGraphComponentsSql.js +167 -0
  17. package/esm/helpers/buildExactMutualReachabilityMst.d.ts +28 -0
  18. package/esm/helpers/buildExactMutualReachabilityMst.d.ts.map +1 -0
  19. package/esm/helpers/buildExactMutualReachabilityMst.js +97 -0
  20. package/esm/helpers/buildGraphTemporalCostStateSql.d.ts +12 -0
  21. package/esm/helpers/buildGraphTemporalCostStateSql.d.ts.map +1 -0
  22. package/esm/helpers/buildGraphTemporalCostStateSql.js +86 -0
  23. package/esm/helpers/buildGraphTemporalReachabilitySql.d.ts +13 -0
  24. package/esm/helpers/buildGraphTemporalReachabilitySql.d.ts.map +1 -0
  25. package/esm/helpers/buildGraphTemporalReachabilitySql.js +70 -0
  26. package/esm/helpers/buildSparseMutualReachabilityMst.d.ts +10 -0
  27. package/esm/helpers/buildSparseMutualReachabilityMst.d.ts.map +1 -0
  28. package/esm/helpers/buildSparseMutualReachabilityMst.js +47 -0
  29. package/esm/helpers/buildUmapGraph.d.ts +2 -5
  30. package/esm/helpers/buildUmapGraph.d.ts.map +1 -1
  31. package/esm/helpers/buildUmapGraph.js +6 -100
  32. package/esm/helpers/buildVectorNeighbors.d.ts +45 -0
  33. package/esm/helpers/buildVectorNeighbors.d.ts.map +1 -0
  34. package/esm/helpers/buildVectorNeighbors.js +170 -0
  35. package/esm/helpers/buildWeakGraphComponentsSql.d.ts +3 -0
  36. package/esm/helpers/buildWeakGraphComponentsSql.d.ts.map +1 -0
  37. package/esm/helpers/buildWeakGraphComponentsSql.js +32 -0
  38. package/esm/helpers/camelCase.d.ts +7 -5
  39. package/esm/helpers/camelCase.d.ts.map +1 -1
  40. package/esm/helpers/camelCase.js +7 -5
  41. package/esm/helpers/capitalize.d.ts +6 -4
  42. package/esm/helpers/capitalize.d.ts.map +1 -1
  43. package/esm/helpers/capitalize.js +6 -4
  44. package/esm/helpers/clusterHdbscan.d.ts +18 -0
  45. package/esm/helpers/clusterHdbscan.d.ts.map +1 -0
  46. package/esm/helpers/clusterHdbscan.js +342 -0
  47. package/esm/helpers/computeCovariance.d.ts +16 -0
  48. package/esm/helpers/computeCovariance.d.ts.map +1 -0
  49. package/esm/helpers/computeCovariance.js +99 -0
  50. package/esm/helpers/computeMahalanobisDistances.d.ts +14 -0
  51. package/esm/helpers/computeMahalanobisDistances.d.ts.map +1 -0
  52. package/esm/helpers/computeMahalanobisDistances.js +87 -0
  53. package/esm/helpers/createDirectory.d.ts +4 -3
  54. package/esm/helpers/createDirectory.d.ts.map +1 -1
  55. package/esm/helpers/createDirectory.js +4 -3
  56. package/esm/helpers/dataToArrays.d.ts +6 -4
  57. package/esm/helpers/dataToArrays.d.ts.map +1 -1
  58. package/esm/helpers/dataToArrays.js +6 -4
  59. package/esm/helpers/extractTypes.d.ts +1 -1
  60. package/esm/helpers/extractTypes.js +4 -9
  61. package/esm/helpers/factorCovariance.d.ts +17 -0
  62. package/esm/helpers/factorCovariance.d.ts.map +1 -0
  63. package/esm/helpers/factorCovariance.js +189 -0
  64. package/esm/helpers/findGeoColumn.d.ts +6 -4
  65. package/esm/helpers/findGeoColumn.d.ts.map +1 -1
  66. package/esm/helpers/findGeoColumn.js +6 -4
  67. package/esm/helpers/findGeoColumnFromSchema.d.ts +8 -5
  68. package/esm/helpers/findGeoColumnFromSchema.d.ts.map +1 -1
  69. package/esm/helpers/findGeoColumnFromSchema.js +8 -5
  70. package/esm/helpers/formatDate.d.ts +12 -6
  71. package/esm/helpers/formatDate.d.ts.map +1 -1
  72. package/esm/helpers/formatDate.js +12 -6
  73. package/esm/helpers/formatMissingTables.d.ts +8 -5
  74. package/esm/helpers/formatMissingTables.d.ts.map +1 -1
  75. package/esm/helpers/formatMissingTables.js +8 -5
  76. package/esm/helpers/formatNumber.d.ts +19 -10
  77. package/esm/helpers/formatNumber.d.ts.map +1 -1
  78. package/esm/helpers/formatNumber.js +32 -17
  79. package/esm/helpers/getGraphEdgeIdColumn.d.ts +9 -0
  80. package/esm/helpers/getGraphEdgeIdColumn.d.ts.map +1 -0
  81. package/esm/helpers/getGraphEdgeIdColumn.js +25 -0
  82. package/esm/helpers/getGraphEndpointColumns.d.ts +11 -0
  83. package/esm/helpers/getGraphEndpointColumns.d.ts.map +1 -0
  84. package/esm/helpers/getGraphEndpointColumns.js +160 -0
  85. package/esm/helpers/getGraphWeightColumn.d.ts +10 -0
  86. package/esm/helpers/getGraphWeightColumn.d.ts.map +1 -0
  87. package/esm/helpers/getGraphWeightColumn.js +40 -0
  88. package/esm/helpers/graphRouteResultSchema.d.ts +4 -0
  89. package/esm/helpers/graphRouteResultSchema.d.ts.map +1 -0
  90. package/esm/helpers/graphRouteResultSchema.js +12 -0
  91. package/esm/helpers/graphRouteResultSelect.d.ts +4 -0
  92. package/esm/helpers/graphRouteResultSelect.d.ts.map +1 -0
  93. package/esm/helpers/graphRouteResultSelect.js +22 -0
  94. package/esm/helpers/hasGeometryColumn.d.ts +4 -3
  95. package/esm/helpers/hasGeometryColumn.d.ts.map +1 -1
  96. package/esm/helpers/hasGeometryColumn.js +4 -3
  97. package/esm/helpers/inspectGraphConnectivity.d.ts +10 -0
  98. package/esm/helpers/inspectGraphConnectivity.d.ts.map +1 -0
  99. package/esm/helpers/inspectGraphConnectivity.js +55 -0
  100. package/esm/helpers/mergeOptions.d.ts +24 -13
  101. package/esm/helpers/mergeOptions.d.ts.map +1 -1
  102. package/esm/helpers/mergeOptions.js +24 -13
  103. package/esm/helpers/parseValue.d.ts +6 -4
  104. package/esm/helpers/parseValue.d.ts.map +1 -1
  105. package/esm/helpers/parseValue.js +6 -4
  106. package/esm/helpers/prepareGraphRouteSql.d.ts +31 -0
  107. package/esm/helpers/prepareGraphRouteSql.d.ts.map +1 -0
  108. package/esm/helpers/prepareGraphRouteSql.js +86 -0
  109. package/esm/helpers/prepareGraphStarts.d.ts +9 -0
  110. package/esm/helpers/prepareGraphStarts.d.ts.map +1 -0
  111. package/esm/helpers/prepareGraphStarts.js +68 -0
  112. package/esm/helpers/prepareGraphTemporalSql.d.ts +28 -0
  113. package/esm/helpers/prepareGraphTemporalSql.d.ts.map +1 -0
  114. package/esm/helpers/prepareGraphTemporalSql.js +154 -0
  115. package/esm/helpers/prepareGraphTraversal.d.ts +19 -0
  116. package/esm/helpers/prepareGraphTraversal.d.ts.map +1 -0
  117. package/esm/helpers/prepareGraphTraversal.js +79 -0
  118. package/esm/helpers/prepareNumericFeatures.d.ts +41 -0
  119. package/esm/helpers/prepareNumericFeatures.d.ts.map +1 -0
  120. package/esm/helpers/prepareNumericFeatures.js +210 -0
  121. package/esm/helpers/prettyDuration.d.ts +14 -8
  122. package/esm/helpers/prettyDuration.d.ts.map +1 -1
  123. package/esm/helpers/prettyDuration.js +14 -8
  124. package/esm/helpers/printTable.d.ts +18 -13
  125. package/esm/helpers/printTable.d.ts.map +1 -1
  126. package/esm/helpers/printTable.js +18 -13
  127. package/esm/helpers/publishPreparedColumns.d.ts +37 -0
  128. package/esm/helpers/publishPreparedColumns.d.ts.map +1 -0
  129. package/esm/helpers/publishPreparedColumns.js +113 -0
  130. package/esm/helpers/queryDB.d.ts +24 -13
  131. package/esm/helpers/queryDB.d.ts.map +1 -1
  132. package/esm/helpers/queryDB.js +24 -13
  133. package/esm/helpers/queueAsyncBarrier.d.ts +12 -7
  134. package/esm/helpers/queueAsyncBarrier.d.ts.map +1 -1
  135. package/esm/helpers/queueAsyncBarrier.js +12 -7
  136. package/esm/helpers/queueGraphResult.d.ts +18 -0
  137. package/esm/helpers/queueGraphResult.d.ts.map +1 -0
  138. package/esm/helpers/queueGraphResult.js +39 -0
  139. package/esm/helpers/quoteIdentifier.d.ts +4 -3
  140. package/esm/helpers/quoteIdentifier.d.ts.map +1 -1
  141. package/esm/helpers/quoteIdentifier.js +4 -3
  142. package/esm/helpers/quoteQualifiedIdentifier.d.ts +6 -4
  143. package/esm/helpers/quoteQualifiedIdentifier.d.ts.map +1 -1
  144. package/esm/helpers/quoteQualifiedIdentifier.js +6 -4
  145. package/esm/helpers/runQuery.d.ts.map +1 -1
  146. package/esm/helpers/runQuery.js +17 -3
  147. package/esm/helpers/selectFuzzyReplacements.d.ts +11 -0
  148. package/esm/helpers/selectFuzzyReplacements.d.ts.map +1 -0
  149. package/esm/helpers/selectFuzzyReplacements.js +124 -0
  150. package/esm/helpers/stabilizeCosineVectors.d.ts +14 -0
  151. package/esm/helpers/stabilizeCosineVectors.d.ts.map +1 -0
  152. package/esm/helpers/stabilizeCosineVectors.js +34 -0
  153. package/esm/helpers/stringToArray.d.ts +4 -3
  154. package/esm/helpers/stringToArray.d.ts.map +1 -1
  155. package/esm/helpers/stringToArray.js +4 -3
  156. package/esm/helpers/updateColumnsWithJS.d.ts +12 -6
  157. package/esm/helpers/updateColumnsWithJS.d.ts.map +1 -1
  158. package/esm/helpers/updateColumnsWithJS.js +12 -6
  159. package/esm/helpers/validateGraphRouteResultSchema.d.ts +4 -0
  160. package/esm/helpers/validateGraphRouteResultSchema.d.ts.map +1 -0
  161. package/esm/helpers/validateGraphRouteResultSchema.js +13 -0
  162. package/esm/helpers/validateGraphTemporalEvents.d.ts +7 -0
  163. package/esm/helpers/validateGraphTemporalEvents.d.ts.map +1 -0
  164. package/esm/helpers/validateGraphTemporalEvents.js +47 -0
  165. package/esm/helpers/validateNumericalAnalysis.d.ts +10 -6
  166. package/esm/helpers/validateNumericalAnalysis.d.ts.map +1 -1
  167. package/esm/helpers/validateNumericalAnalysis.js +10 -6
  168. package/esm/helpers/validateVectorRowIds.d.ts +4 -0
  169. package/esm/helpers/validateVectorRowIds.d.ts.map +1 -0
  170. package/esm/helpers/validateVectorRowIds.js +16 -0
  171. package/esm/helpers/vectorDistanceExpression.d.ts +6 -0
  172. package/esm/helpers/vectorDistanceExpression.d.ts.map +1 -0
  173. package/esm/helpers/vectorDistanceExpression.js +11 -0
  174. package/esm/helpers/wrapString.d.ts +10 -7
  175. package/esm/helpers/wrapString.d.ts.map +1 -1
  176. package/esm/helpers/wrapString.js +10 -7
  177. package/esm/methods/addId.d.ts +5 -0
  178. package/esm/methods/addId.d.ts.map +1 -0
  179. package/esm/methods/addId.js +38 -0
  180. package/esm/methods/commonNeighbors.d.ts +10 -0
  181. package/esm/methods/commonNeighbors.d.ts.map +1 -0
  182. package/esm/methods/commonNeighbors.js +101 -0
  183. package/esm/methods/connectedComponents.d.ts +9 -0
  184. package/esm/methods/connectedComponents.d.ts.map +1 -0
  185. package/esm/methods/connectedComponents.js +147 -0
  186. package/esm/methods/degree.d.ts +9 -0
  187. package/esm/methods/degree.d.ts.map +1 -0
  188. package/esm/methods/degree.js +135 -0
  189. package/esm/methods/distances.d.ts +12 -0
  190. package/esm/methods/distances.d.ts.map +1 -0
  191. package/esm/methods/distances.js +164 -0
  192. package/esm/methods/findCycles.d.ts +12 -0
  193. package/esm/methods/findCycles.d.ts.map +1 -0
  194. package/esm/methods/findCycles.js +330 -0
  195. package/esm/methods/fuzzyClean.d.ts.map +1 -1
  196. package/esm/methods/fuzzyClean.js +17 -136
  197. package/esm/methods/fuzzyJoin.js +70 -16
  198. package/esm/methods/getTypes.d.ts +1 -1
  199. package/esm/methods/hdbscan.d.ts +5 -0
  200. package/esm/methods/hdbscan.d.ts.map +1 -0
  201. package/esm/methods/hdbscan.js +208 -0
  202. package/esm/methods/mahalanobis.d.ts +5 -0
  203. package/esm/methods/mahalanobis.d.ts.map +1 -0
  204. package/esm/methods/mahalanobis.js +92 -0
  205. package/esm/methods/neighbors.d.ts +9 -0
  206. package/esm/methods/neighbors.d.ts.map +1 -0
  207. package/esm/methods/neighbors.js +81 -0
  208. package/esm/methods/normalizeVector.d.ts +5 -0
  209. package/esm/methods/normalizeVector.d.ts.map +1 -0
  210. package/esm/methods/normalizeVector.js +132 -0
  211. package/esm/methods/paths.d.ts +12 -0
  212. package/esm/methods/paths.d.ts.map +1 -0
  213. package/esm/methods/paths.js +287 -0
  214. package/esm/methods/reachable.d.ts +11 -0
  215. package/esm/methods/reachable.d.ts.map +1 -0
  216. package/esm/methods/reachable.js +131 -0
  217. package/esm/methods/rowToVector.d.ts +5 -0
  218. package/esm/methods/rowToVector.d.ts.map +1 -0
  219. package/esm/methods/rowToVector.js +77 -0
  220. package/esm/methods/shortestPath.d.ts +12 -0
  221. package/esm/methods/shortestPath.d.ts.map +1 -0
  222. package/esm/methods/shortestPath.js +337 -0
  223. package/esm/methods/topologicalSort.d.ts +7 -0
  224. package/esm/methods/topologicalSort.d.ts.map +1 -0
  225. package/esm/methods/topologicalSort.js +164 -0
  226. package/esm/methods/trim.d.ts +1 -1
  227. package/esm/methods/trim.d.ts.map +1 -1
  228. package/esm/methods/trim.js +17 -8
  229. package/llm.md +2146 -173
  230. package/llms.txt +1 -1
  231. package/package.json +1 -1
  232. package/script/class/SDAError.d.ts +6 -6
  233. package/script/class/SDAError.js +6 -6
  234. package/script/class/Simple.d.ts +9 -9
  235. package/script/class/Simple.js +9 -9
  236. package/script/class/SimpleDB.d.ts +80 -76
  237. package/script/class/SimpleDB.d.ts.map +1 -1
  238. package/script/class/SimpleDB.js +80 -76
  239. package/script/class/SimpleTable.d.ts +2806 -1139
  240. package/script/class/SimpleTable.d.ts.map +1 -1
  241. package/script/class/SimpleTable.js +2792 -1149
  242. package/script/helpers/buildApproximateMutualReachabilityMst.d.ts +45 -0
  243. package/script/helpers/buildApproximateMutualReachabilityMst.d.ts.map +1 -0
  244. package/script/helpers/buildApproximateMutualReachabilityMst.js +219 -0
  245. package/script/helpers/buildChronologicalGraphComponentsSql.d.ts +14 -0
  246. package/script/helpers/buildChronologicalGraphComponentsSql.d.ts.map +1 -0
  247. package/script/helpers/buildChronologicalGraphComponentsSql.js +174 -0
  248. package/script/helpers/buildExactMutualReachabilityMst.d.ts +28 -0
  249. package/script/helpers/buildExactMutualReachabilityMst.d.ts.map +1 -0
  250. package/script/helpers/buildExactMutualReachabilityMst.js +103 -0
  251. package/script/helpers/buildGraphTemporalCostStateSql.d.ts +12 -0
  252. package/script/helpers/buildGraphTemporalCostStateSql.d.ts.map +1 -0
  253. package/script/helpers/buildGraphTemporalCostStateSql.js +92 -0
  254. package/script/helpers/buildGraphTemporalReachabilitySql.d.ts +13 -0
  255. package/script/helpers/buildGraphTemporalReachabilitySql.d.ts.map +1 -0
  256. package/script/helpers/buildGraphTemporalReachabilitySql.js +76 -0
  257. package/script/helpers/buildSparseMutualReachabilityMst.d.ts +10 -0
  258. package/script/helpers/buildSparseMutualReachabilityMst.d.ts.map +1 -0
  259. package/script/helpers/buildSparseMutualReachabilityMst.js +50 -0
  260. package/script/helpers/buildUmapGraph.d.ts +2 -5
  261. package/script/helpers/buildUmapGraph.d.ts.map +1 -1
  262. package/script/helpers/buildUmapGraph.js +6 -100
  263. package/script/helpers/buildVectorNeighbors.d.ts +45 -0
  264. package/script/helpers/buildVectorNeighbors.d.ts.map +1 -0
  265. package/script/helpers/buildVectorNeighbors.js +176 -0
  266. package/script/helpers/buildWeakGraphComponentsSql.d.ts +3 -0
  267. package/script/helpers/buildWeakGraphComponentsSql.d.ts.map +1 -0
  268. package/script/helpers/buildWeakGraphComponentsSql.js +38 -0
  269. package/script/helpers/camelCase.d.ts +7 -5
  270. package/script/helpers/camelCase.d.ts.map +1 -1
  271. package/script/helpers/camelCase.js +7 -5
  272. package/script/helpers/capitalize.d.ts +6 -4
  273. package/script/helpers/capitalize.d.ts.map +1 -1
  274. package/script/helpers/capitalize.js +6 -4
  275. package/script/helpers/clusterHdbscan.d.ts +18 -0
  276. package/script/helpers/clusterHdbscan.d.ts.map +1 -0
  277. package/script/helpers/clusterHdbscan.js +346 -0
  278. package/script/helpers/computeCovariance.d.ts +16 -0
  279. package/script/helpers/computeCovariance.d.ts.map +1 -0
  280. package/script/helpers/computeCovariance.js +105 -0
  281. package/script/helpers/computeMahalanobisDistances.d.ts +14 -0
  282. package/script/helpers/computeMahalanobisDistances.d.ts.map +1 -0
  283. package/script/helpers/computeMahalanobisDistances.js +93 -0
  284. package/script/helpers/createDirectory.d.ts +4 -3
  285. package/script/helpers/createDirectory.d.ts.map +1 -1
  286. package/script/helpers/createDirectory.js +4 -3
  287. package/script/helpers/dataToArrays.d.ts +6 -4
  288. package/script/helpers/dataToArrays.d.ts.map +1 -1
  289. package/script/helpers/dataToArrays.js +6 -4
  290. package/script/helpers/extractTypes.d.ts +1 -1
  291. package/script/helpers/extractTypes.js +4 -9
  292. package/script/helpers/factorCovariance.d.ts +17 -0
  293. package/script/helpers/factorCovariance.d.ts.map +1 -0
  294. package/script/helpers/factorCovariance.js +194 -0
  295. package/script/helpers/findGeoColumn.d.ts +6 -4
  296. package/script/helpers/findGeoColumn.d.ts.map +1 -1
  297. package/script/helpers/findGeoColumn.js +6 -4
  298. package/script/helpers/findGeoColumnFromSchema.d.ts +8 -5
  299. package/script/helpers/findGeoColumnFromSchema.d.ts.map +1 -1
  300. package/script/helpers/findGeoColumnFromSchema.js +8 -5
  301. package/script/helpers/formatDate.d.ts +12 -6
  302. package/script/helpers/formatDate.d.ts.map +1 -1
  303. package/script/helpers/formatDate.js +12 -6
  304. package/script/helpers/formatMissingTables.d.ts +8 -5
  305. package/script/helpers/formatMissingTables.d.ts.map +1 -1
  306. package/script/helpers/formatMissingTables.js +8 -5
  307. package/script/helpers/formatNumber.d.ts +19 -10
  308. package/script/helpers/formatNumber.d.ts.map +1 -1
  309. package/script/helpers/formatNumber.js +32 -17
  310. package/script/helpers/getGraphEdgeIdColumn.d.ts +9 -0
  311. package/script/helpers/getGraphEdgeIdColumn.d.ts.map +1 -0
  312. package/script/helpers/getGraphEdgeIdColumn.js +31 -0
  313. package/script/helpers/getGraphEndpointColumns.d.ts +11 -0
  314. package/script/helpers/getGraphEndpointColumns.d.ts.map +1 -0
  315. package/script/helpers/getGraphEndpointColumns.js +166 -0
  316. package/script/helpers/getGraphWeightColumn.d.ts +10 -0
  317. package/script/helpers/getGraphWeightColumn.d.ts.map +1 -0
  318. package/script/helpers/getGraphWeightColumn.js +46 -0
  319. package/script/helpers/graphRouteResultSchema.d.ts +4 -0
  320. package/script/helpers/graphRouteResultSchema.d.ts.map +1 -0
  321. package/script/helpers/graphRouteResultSchema.js +18 -0
  322. package/script/helpers/graphRouteResultSelect.d.ts +4 -0
  323. package/script/helpers/graphRouteResultSelect.d.ts.map +1 -0
  324. package/script/helpers/graphRouteResultSelect.js +28 -0
  325. package/script/helpers/hasGeometryColumn.d.ts +4 -3
  326. package/script/helpers/hasGeometryColumn.d.ts.map +1 -1
  327. package/script/helpers/hasGeometryColumn.js +4 -3
  328. package/script/helpers/inspectGraphConnectivity.d.ts +10 -0
  329. package/script/helpers/inspectGraphConnectivity.d.ts.map +1 -0
  330. package/script/helpers/inspectGraphConnectivity.js +58 -0
  331. package/script/helpers/mergeOptions.d.ts +24 -13
  332. package/script/helpers/mergeOptions.d.ts.map +1 -1
  333. package/script/helpers/mergeOptions.js +24 -13
  334. package/script/helpers/parseValue.d.ts +6 -4
  335. package/script/helpers/parseValue.d.ts.map +1 -1
  336. package/script/helpers/parseValue.js +6 -4
  337. package/script/helpers/prepareGraphRouteSql.d.ts +31 -0
  338. package/script/helpers/prepareGraphRouteSql.d.ts.map +1 -0
  339. package/script/helpers/prepareGraphRouteSql.js +127 -0
  340. package/script/helpers/prepareGraphStarts.d.ts +9 -0
  341. package/script/helpers/prepareGraphStarts.d.ts.map +1 -0
  342. package/script/helpers/prepareGraphStarts.js +71 -0
  343. package/script/helpers/prepareGraphTemporalSql.d.ts +28 -0
  344. package/script/helpers/prepareGraphTemporalSql.d.ts.map +1 -0
  345. package/script/helpers/prepareGraphTemporalSql.js +161 -0
  346. package/script/helpers/prepareGraphTraversal.d.ts +19 -0
  347. package/script/helpers/prepareGraphTraversal.d.ts.map +1 -0
  348. package/script/helpers/prepareGraphTraversal.js +87 -0
  349. package/script/helpers/prepareNumericFeatures.d.ts +41 -0
  350. package/script/helpers/prepareNumericFeatures.d.ts.map +1 -0
  351. package/script/helpers/prepareNumericFeatures.js +217 -0
  352. package/script/helpers/prettyDuration.d.ts +14 -8
  353. package/script/helpers/prettyDuration.d.ts.map +1 -1
  354. package/script/helpers/prettyDuration.js +14 -8
  355. package/script/helpers/printTable.d.ts +18 -13
  356. package/script/helpers/printTable.d.ts.map +1 -1
  357. package/script/helpers/printTable.js +18 -13
  358. package/script/helpers/publishPreparedColumns.d.ts +37 -0
  359. package/script/helpers/publishPreparedColumns.d.ts.map +1 -0
  360. package/script/helpers/publishPreparedColumns.js +119 -0
  361. package/script/helpers/queryDB.d.ts +24 -13
  362. package/script/helpers/queryDB.d.ts.map +1 -1
  363. package/script/helpers/queryDB.js +24 -13
  364. package/script/helpers/queueAsyncBarrier.d.ts +12 -7
  365. package/script/helpers/queueAsyncBarrier.d.ts.map +1 -1
  366. package/script/helpers/queueAsyncBarrier.js +12 -7
  367. package/script/helpers/queueGraphResult.d.ts +18 -0
  368. package/script/helpers/queueGraphResult.d.ts.map +1 -0
  369. package/script/helpers/queueGraphResult.js +45 -0
  370. package/script/helpers/quoteIdentifier.d.ts +4 -3
  371. package/script/helpers/quoteIdentifier.d.ts.map +1 -1
  372. package/script/helpers/quoteIdentifier.js +4 -3
  373. package/script/helpers/quoteQualifiedIdentifier.d.ts +6 -4
  374. package/script/helpers/quoteQualifiedIdentifier.d.ts.map +1 -1
  375. package/script/helpers/quoteQualifiedIdentifier.js +6 -4
  376. package/script/helpers/runQuery.d.ts.map +1 -1
  377. package/script/helpers/runQuery.js +17 -3
  378. package/script/helpers/selectFuzzyReplacements.d.ts +11 -0
  379. package/script/helpers/selectFuzzyReplacements.d.ts.map +1 -0
  380. package/script/helpers/selectFuzzyReplacements.js +127 -0
  381. package/script/helpers/stabilizeCosineVectors.d.ts +14 -0
  382. package/script/helpers/stabilizeCosineVectors.d.ts.map +1 -0
  383. package/script/helpers/stabilizeCosineVectors.js +40 -0
  384. package/script/helpers/stringToArray.d.ts +4 -3
  385. package/script/helpers/stringToArray.d.ts.map +1 -1
  386. package/script/helpers/stringToArray.js +4 -3
  387. package/script/helpers/updateColumnsWithJS.d.ts +12 -6
  388. package/script/helpers/updateColumnsWithJS.d.ts.map +1 -1
  389. package/script/helpers/updateColumnsWithJS.js +12 -6
  390. package/script/helpers/validateGraphRouteResultSchema.d.ts +4 -0
  391. package/script/helpers/validateGraphRouteResultSchema.d.ts.map +1 -0
  392. package/script/helpers/validateGraphRouteResultSchema.js +19 -0
  393. package/script/helpers/validateGraphTemporalEvents.d.ts +7 -0
  394. package/script/helpers/validateGraphTemporalEvents.d.ts.map +1 -0
  395. package/script/helpers/validateGraphTemporalEvents.js +53 -0
  396. package/script/helpers/validateNumericalAnalysis.d.ts +10 -6
  397. package/script/helpers/validateNumericalAnalysis.d.ts.map +1 -1
  398. package/script/helpers/validateNumericalAnalysis.js +10 -6
  399. package/script/helpers/validateVectorRowIds.d.ts +4 -0
  400. package/script/helpers/validateVectorRowIds.d.ts.map +1 -0
  401. package/script/helpers/validateVectorRowIds.js +19 -0
  402. package/script/helpers/vectorDistanceExpression.d.ts +6 -0
  403. package/script/helpers/vectorDistanceExpression.d.ts.map +1 -0
  404. package/script/helpers/vectorDistanceExpression.js +14 -0
  405. package/script/helpers/wrapString.d.ts +10 -7
  406. package/script/helpers/wrapString.d.ts.map +1 -1
  407. package/script/helpers/wrapString.js +10 -7
  408. package/script/methods/addId.d.ts +5 -0
  409. package/script/methods/addId.d.ts.map +1 -0
  410. package/script/methods/addId.js +44 -0
  411. package/script/methods/commonNeighbors.d.ts +10 -0
  412. package/script/methods/commonNeighbors.d.ts.map +1 -0
  413. package/script/methods/commonNeighbors.js +140 -0
  414. package/script/methods/connectedComponents.d.ts +9 -0
  415. package/script/methods/connectedComponents.d.ts.map +1 -0
  416. package/script/methods/connectedComponents.js +186 -0
  417. package/script/methods/degree.d.ts +9 -0
  418. package/script/methods/degree.d.ts.map +1 -0
  419. package/script/methods/degree.js +141 -0
  420. package/script/methods/distances.d.ts +12 -0
  421. package/script/methods/distances.d.ts.map +1 -0
  422. package/script/methods/distances.js +203 -0
  423. package/script/methods/findCycles.d.ts +12 -0
  424. package/script/methods/findCycles.d.ts.map +1 -0
  425. package/script/methods/findCycles.js +369 -0
  426. package/script/methods/fuzzyClean.d.ts.map +1 -1
  427. package/script/methods/fuzzyClean.js +17 -136
  428. package/script/methods/fuzzyJoin.js +70 -16
  429. package/script/methods/getTypes.d.ts +1 -1
  430. package/script/methods/hdbscan.d.ts +5 -0
  431. package/script/methods/hdbscan.d.ts.map +1 -0
  432. package/script/methods/hdbscan.js +214 -0
  433. package/script/methods/mahalanobis.d.ts +5 -0
  434. package/script/methods/mahalanobis.d.ts.map +1 -0
  435. package/script/methods/mahalanobis.js +98 -0
  436. package/script/methods/neighbors.d.ts +9 -0
  437. package/script/methods/neighbors.d.ts.map +1 -0
  438. package/script/methods/neighbors.js +120 -0
  439. package/script/methods/normalizeVector.d.ts +5 -0
  440. package/script/methods/normalizeVector.d.ts.map +1 -0
  441. package/script/methods/normalizeVector.js +138 -0
  442. package/script/methods/paths.d.ts +12 -0
  443. package/script/methods/paths.d.ts.map +1 -0
  444. package/script/methods/paths.js +326 -0
  445. package/script/methods/reachable.d.ts +11 -0
  446. package/script/methods/reachable.d.ts.map +1 -0
  447. package/script/methods/reachable.js +170 -0
  448. package/script/methods/rowToVector.d.ts +5 -0
  449. package/script/methods/rowToVector.d.ts.map +1 -0
  450. package/script/methods/rowToVector.js +83 -0
  451. package/script/methods/shortestPath.d.ts +12 -0
  452. package/script/methods/shortestPath.d.ts.map +1 -0
  453. package/script/methods/shortestPath.js +376 -0
  454. package/script/methods/topologicalSort.d.ts +7 -0
  455. package/script/methods/topologicalSort.d.ts.map +1 -0
  456. package/script/methods/topologicalSort.js +170 -0
  457. package/script/methods/trim.d.ts +1 -1
  458. package/script/methods/trim.d.ts.map +1 -1
  459. package/script/methods/trim.js +17 -8
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = neighbors;
40
+ const prepareGraphStarts_js_1 = __importDefault(require("../helpers/prepareGraphStarts.js"));
41
+ const prepareGraphTraversal_js_1 = __importStar(require("../helpers/prepareGraphTraversal.js"));
42
+ const queueGraphResult_js_1 = __importDefault(require("../helpers/queueGraphResult.js"));
43
+ const quoteIdentifier_js_1 = __importDefault(require("../helpers/quoteIdentifier.js"));
44
+ function neighbors(simpleTable, sourceColumn, targetColumn, startNodes, options = {}) {
45
+ if (typeof sourceColumn !== "string") {
46
+ throw new TypeError("neighbors() sourceColumn must be a string.");
47
+ }
48
+ if (typeof targetColumn !== "string") {
49
+ throw new TypeError("neighbors() targetColumn must be a string.");
50
+ }
51
+ if (options === null || typeof options !== "object" || Array.isArray(options)) {
52
+ throw new TypeError("neighbors() options must be an object.");
53
+ }
54
+ if (options.direction !== undefined &&
55
+ !["outgoing", "incoming", "both"].includes(options.direction)) {
56
+ throw new TypeError('neighbors() options.direction must be "outgoing", "incoming", or "both".');
57
+ }
58
+ if (options.outputTable !== undefined &&
59
+ typeof options.outputTable !== "string" &&
60
+ typeof options.outputTable !== "boolean") {
61
+ throw new TypeError("neighbors() options.outputTable must be a string or boolean.");
62
+ }
63
+ const preparedStarts = (0, prepareGraphStarts_js_1.default)(startNodes, "neighbors()", "startNodes");
64
+ options = structuredClone(options);
65
+ const direction = options.direction ?? "outgoing";
66
+ const parameters = {
67
+ sourceColumn,
68
+ targetColumn,
69
+ startNodes: structuredClone(startNodes),
70
+ options,
71
+ };
72
+ return (0, queueGraphResult_js_1.default)(simpleTable, {
73
+ method: "neighbors()",
74
+ parameters,
75
+ outputTable: options.outputTable,
76
+ values: (schema) => {
77
+ validateStarts(schema, sourceColumn, targetColumn, preparedStarts);
78
+ return preparedStarts.values;
79
+ },
80
+ buildSelect: (input, schema) => neighborsSelect(input, schema, sourceColumn, targetColumn, preparedStarts, direction),
81
+ outputSchema: (schema) => {
82
+ const endpoints = validateStarts(schema, sourceColumn, targetColumn, preparedStarts);
83
+ return { start: endpoints.idType, node: endpoints.idType };
84
+ },
85
+ });
86
+ }
87
+ function validateStarts(schema, source, target, starts) {
88
+ return (0, prepareGraphTraversal_js_1.validateGraphStarts)(schema, source, target, starts, "neighbors()", "startNodes");
89
+ }
90
+ function neighborsSelect(input, schema, source, target, starts, direction) {
91
+ const prepared = (0, prepareGraphTraversal_js_1.default)(input, schema, source, target, starts, "neighbors()", "startNodes");
92
+ const relations = prepared.relationNames([
93
+ "graph_starts",
94
+ "graph_edges",
95
+ "neighbor_matches",
96
+ ]);
97
+ const startsRelation = relations.graph_starts;
98
+ const edgesRelation = relations.graph_edges;
99
+ const matchesRelation = relations.neighbor_matches;
100
+ return `WITH ${startsRelation}(${(0, quoteIdentifier_js_1.default)("start")}) AS (
101
+ VALUES ${prepared.startValues}
102
+ ), ${edgesRelation} AS (
103
+ ${prepared.edges(direction)}
104
+ ), ${matchesRelation} AS (
105
+ SELECT ${(0, quoteIdentifier_js_1.default)("starts")}.${(0, quoteIdentifier_js_1.default)("start")},
106
+ ${(0, quoteIdentifier_js_1.default)("edges")}.${(0, quoteIdentifier_js_1.default)("__to")} AS ${(0, quoteIdentifier_js_1.default)("node")},
107
+ ${(0, quoteIdentifier_js_1.default)("edges")}.${(0, quoteIdentifier_js_1.default)("__from_key")} AS ${(0, quoteIdentifier_js_1.default)("__start_key")},
108
+ ${(0, quoteIdentifier_js_1.default)("edges")}.${(0, quoteIdentifier_js_1.default)("__to_key")} AS ${(0, quoteIdentifier_js_1.default)("__node_key")}
109
+ FROM ${edgesRelation} AS ${(0, quoteIdentifier_js_1.default)("edges")}
110
+ INNER JOIN ${startsRelation} AS ${(0, quoteIdentifier_js_1.default)("starts")}
111
+ ON ${(0, quoteIdentifier_js_1.default)("edges")}.${(0, quoteIdentifier_js_1.default)("__from_key")} =
112
+ ${prepared.key(`${(0, quoteIdentifier_js_1.default)("starts")}.${(0, quoteIdentifier_js_1.default)("start")}`)}
113
+ )
114
+ SELECT ${(0, quoteIdentifier_js_1.default)("start")}, ${(0, quoteIdentifier_js_1.default)("node")}
115
+ FROM (
116
+ SELECT DISTINCT ${(0, quoteIdentifier_js_1.default)("start")}, ${(0, quoteIdentifier_js_1.default)("node")}, ${(0, quoteIdentifier_js_1.default)("__start_key")}, ${(0, quoteIdentifier_js_1.default)("__node_key")}
117
+ FROM ${matchesRelation}
118
+ ) AS ${(0, quoteIdentifier_js_1.default)("distinct_neighbors")}
119
+ ORDER BY ${(0, quoteIdentifier_js_1.default)("__start_key")}, ${(0, quoteIdentifier_js_1.default)("__node_key")}`;
120
+ }
@@ -0,0 +1,5 @@
1
+ import type SimpleTable from "../class/SimpleTable.js";
2
+ type Options = NonNullable<Parameters<SimpleTable["normalizeVector"]>[2]>;
3
+ export default function normalizeVector(table: SimpleTable, column: string, newColumn: string, options?: Options): void;
4
+ export {};
5
+ //# sourceMappingURL=normalizeVector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeVector.d.ts","sourceRoot":"","sources":["../../src/methods/normalizeVector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAOvD,KAAK,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1E,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,OAAY,GACpB,IAAI,CAiBN"}
@@ -0,0 +1,138 @@
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 = normalizeVector;
7
+ const foldIdentifier_js_1 = __importDefault(require("../helpers/foldIdentifier.js"));
8
+ const prepareNumericFeatures_js_1 = __importDefault(require("../helpers/prepareNumericFeatures.js"));
9
+ const publishPreparedColumns_js_1 = __importDefault(require("../helpers/publishPreparedColumns.js"));
10
+ const queueOp_js_1 = __importDefault(require("../helpers/queueOp.js"));
11
+ const quoteIdentifier_js_1 = __importDefault(require("../helpers/quoteIdentifier.js"));
12
+ function normalizeVector(table, column, newColumn, options = {}) {
13
+ if (options.normalization !== undefined &&
14
+ options.normalization !== "dimensionMinMax" &&
15
+ options.normalization !== "rowL2") {
16
+ throw new Error('normalizeVector() options.normalization must be "dimensionMinMax" or "rowL2".');
17
+ }
18
+ const settings = structuredClone(options);
19
+ (0, queueOp_js_1.default)(table, {
20
+ kind: "barrier",
21
+ method: "normalizeVector()",
22
+ parameters: { column, newColumn, options: settings },
23
+ execute: () => execute(table, column, newColumn, settings),
24
+ });
25
+ }
26
+ async function execute(table, column, newColumn, options) {
27
+ const normalization = options.normalization ?? "dimensionMinMax";
28
+ const overwrite = (0, foldIdentifier_js_1.default)(column) === (0, foldIdentifier_js_1.default)(newColumn);
29
+ if (!overwrite) {
30
+ const sourceColumns = Object.keys(await table.getTypes());
31
+ if (sourceColumns.some((name) => (0, foldIdentifier_js_1.default)(name) === (0, foldIdentifier_js_1.default)(newColumn))) {
32
+ throw new Error(`normalizeVector() cannot create ${(0, quoteIdentifier_js_1.default)(newColumn)} because that column already exists. Remove it first or choose a different name.`);
33
+ }
34
+ }
35
+ const prepared = await (0, prepareNumericFeatures_js_1.default)(table, { kind: "vector", column }, { method: "normalizeVector()" });
36
+ const connection = table.connection;
37
+ const q = quoteIdentifier_js_1.default;
38
+ const suffix = crypto.randomUUID().replaceAll("-", "");
39
+ const statsName = `__sda_normalize_vector_${suffix}_stats`;
40
+ const resultName = `__sda_normalize_vector_${suffix}_result`;
41
+ const dimension = q(`__sda_dimension_${suffix}`);
42
+ const minimum = q(`__sda_min_${suffix}`);
43
+ const maximum = q(`__sda_max_${suffix}`);
44
+ const normalized = `__sda_normalized_${suffix}`;
45
+ try {
46
+ if (prepared.rowCount === 0) {
47
+ throw new Error("normalizeVector() requires at least one row; the dataset is empty.");
48
+ }
49
+ const sourceColumn = prepared.sourceColumns.find((name) => (0, foldIdentifier_js_1.default)(name) === (0, foldIdentifier_js_1.default)(column));
50
+ if (normalization === "rowL2") {
51
+ // Scale before squaring so extreme finite magnitudes do not overflow
52
+ // or underflow the norm. A zero vector stays zero.
53
+ await connection.run(`CREATE TEMP TABLE ${q(resultName)} AS
54
+ WITH magnitudes AS (
55
+ SELECT ${q(prepared.rowIdColumn)}, ${q(prepared.vectorColumn)} AS vec,
56
+ list_max(list_transform(${q(prepared.vectorColumn)}, value -> abs(value))) AS magnitude
57
+ FROM ${q(prepared.relation)}
58
+ ), scaled AS (
59
+ SELECT *, list_transform(vec, value -> value / nullif(magnitude, 0)) AS unit_scale
60
+ FROM magnitudes
61
+ ), norms AS (
62
+ SELECT *, sqrt(list_sum(list_transform(unit_scale, value -> value * value))) AS norm
63
+ FROM scaled
64
+ )
65
+ SELECT ${q(prepared.rowIdColumn)},
66
+ (CASE WHEN magnitude = 0 THEN vec::DOUBLE[]
67
+ ELSE list_transform(unit_scale, value -> value / norm)
68
+ END)::DOUBLE[${prepared.dimensions}] AS ${q(normalized)}
69
+ FROM norms`);
70
+ }
71
+ else {
72
+ await connection.run(`CREATE TEMP TABLE ${q(statsName)} AS
73
+ SELECT ordinal::BIGINT AS ${dimension}, min(value)::DOUBLE AS ${minimum},
74
+ max(value)::DOUBLE AS ${maximum}
75
+ FROM ${q(prepared.relation)} p,
76
+ UNNEST(p.${q(prepared.vectorColumn)}::DOUBLE[]) WITH ORDINALITY AS values(value, ordinal)
77
+ GROUP BY ordinal`);
78
+ const invalidStats = Number((await connection.runAndReadAll(`SELECT count(*) FROM ${q(statsName)}
79
+ WHERE NOT isfinite(${minimum}) OR NOT isfinite(${maximum})`)).getRowsJS()[0][0]);
80
+ if (invalidStats > 0) {
81
+ throw new Error(`normalizeVector() found ${invalidStats} dimension${invalidStats === 1 ? "" : "s"} with non-finite aggregate values after conversion to DOUBLE.`);
82
+ }
83
+ const constantDimensions = (await connection.runAndReadAll(`SELECT ${dimension} FROM ${q(statsName)}
84
+ WHERE ${minimum} = ${maximum} ORDER BY ${dimension}`)).getRowsJS().map((row) => Number(row[0]));
85
+ if (constantDimensions.length > 0) {
86
+ throw new Error(`normalizeVector() cannot scale constant dimension${constantDimensions.length === 1 ? "" : "s"} ${constantDimensions.join(", ")} in column ${q(sourceColumn)} because the range is zero. Remove ${constantDimensions.length === 1
87
+ ? "that dimension"
88
+ : "those dimensions"} before normalizing. Conversion to DOUBLE can also collapse distinct large integers or decimals at its precision limit.`);
89
+ }
90
+ const value = `p.${q(prepared.vectorColumn)}[s.${dimension}]`;
91
+ const min = `s.${minimum}`;
92
+ const max = `s.${maximum}`;
93
+ // Dividing both sides by the larger magnitude when a range crosses zero
94
+ // avoids overflowing max - min for extreme finite DOUBLE values.
95
+ const scaled = `CASE
96
+ WHEN ${min} < 0 AND ${max} > 0 AND -${min} >= ${max}
97
+ THEN ((${value} / -${min}) + 1.0) / ((${max} / -${min}) + 1.0)
98
+ WHEN ${min} < 0 AND ${max} > 0
99
+ THEN ((${value} / ${max}) + (-${min} / ${max})) /
100
+ (1.0 + (-${min} / ${max}))
101
+ ELSE (${value} - ${min}) / (${max} - ${min})
102
+ END`;
103
+ await connection.run(`CREATE TEMP TABLE ${q(resultName)} AS
104
+ SELECT p.${q(prepared.rowIdColumn)},
105
+ list(${scaled} ORDER BY s.${dimension})::DOUBLE[${prepared.dimensions}]
106
+ AS ${q(normalized)}
107
+ FROM ${q(prepared.relation)} p CROSS JOIN ${q(statsName)} s
108
+ GROUP BY p.${q(prepared.rowIdColumn)}`);
109
+ }
110
+ const invalidResults = Number((await connection.runAndReadAll(`SELECT count(*) FROM ${q(resultName)}
111
+ WHERE ${q(normalized)} IS NULL
112
+ OR list_count(${q(normalized)}) != ${prepared.dimensions}
113
+ OR NOT list_bool_and(list_transform(${q(normalized)}, value -> isfinite(value)))
114
+ OR list_min(${q(normalized)}) < ${normalization === "rowL2" ? -1 : 0}
115
+ OR list_max(${q(normalized)}) > 1`)).getRowsJS()[0][0]);
116
+ if (invalidResults > 0) {
117
+ throw new Error(`normalizeVector() produced non-finite or out-of-range values for ${invalidResults} row${invalidResults === 1 ? "" : "s"}. Rescale the source values before normalizing.`);
118
+ }
119
+ await (0, publishPreparedColumns_js_1.default)(table, prepared, {
120
+ method: "normalizeVector()",
121
+ parameters: { column, newColumn, options },
122
+ result: {
123
+ relation: resultName,
124
+ rowIdColumn: prepared.rowIdColumn,
125
+ },
126
+ outputs: [{
127
+ name: overwrite ? sourceColumn : newColumn,
128
+ expression: `r.${q(normalized)}`,
129
+ replace: overwrite ? sourceColumn : undefined,
130
+ }],
131
+ });
132
+ }
133
+ finally {
134
+ await connection.run(`DROP TABLE IF EXISTS ${q(resultName)}`);
135
+ await connection.run(`DROP TABLE IF EXISTS ${q(statsName)}`);
136
+ await prepared.cleanup();
137
+ }
138
+ }
@@ -0,0 +1,12 @@
1
+ import type SimpleTable from "../class/SimpleTable.js";
2
+ import type { GraphId } from "../helpers/prepareGraphStarts.js";
3
+ import { type GraphTemporalOptions } from "../helpers/prepareGraphTemporalSql.js";
4
+ import type { GraphDirection } from "../helpers/prepareGraphTraversal.js";
5
+ type PathsOptions = GraphTemporalOptions & {
6
+ direction?: GraphDirection;
7
+ outputTable?: string | boolean;
8
+ weight?: string;
9
+ };
10
+ export default function paths(simpleTable: SimpleTable, sourceColumn: string, targetColumn: string, edgeId: string, start: GraphId, end: GraphId, options?: PathsOptions): SimpleTable;
11
+ export {};
12
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/methods/paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AASvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAgC,EAC9B,KAAK,oBAAoB,EAG1B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAM1E,KAAK,YAAY,GAAG,oBAAoB,GAAG;IACzC,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,KAAK,CAC3B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,YAAiB,GACzB,WAAW,CA+Gb"}
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = paths;
40
+ const prepareGraphRouteSql_js_1 = require("../helpers/prepareGraphRouteSql.js");
41
+ const graphRouteResultSchema_js_1 = __importDefault(require("../helpers/graphRouteResultSchema.js"));
42
+ const graphRouteResultSelect_js_1 = __importDefault(require("../helpers/graphRouteResultSelect.js"));
43
+ const prepareGraphTemporalSql_js_1 = __importStar(require("../helpers/prepareGraphTemporalSql.js"));
44
+ const queueGraphResult_js_1 = __importDefault(require("../helpers/queueGraphResult.js"));
45
+ const quoteIdentifier_js_1 = __importDefault(require("../helpers/quoteIdentifier.js"));
46
+ const validateGraphTemporalEvents_js_1 = __importDefault(require("../helpers/validateGraphTemporalEvents.js"));
47
+ function paths(simpleTable, sourceColumn, targetColumn, edgeId, start, end, options = {}) {
48
+ if (typeof sourceColumn !== "string") {
49
+ throw new TypeError("paths() sourceColumn must be a string.");
50
+ }
51
+ if (typeof targetColumn !== "string") {
52
+ throw new TypeError("paths() targetColumn must be a string.");
53
+ }
54
+ if (typeof edgeId !== "string") {
55
+ throw new TypeError("paths() edgeId must be a string.");
56
+ }
57
+ if (options === null || typeof options !== "object" || Array.isArray(options)) {
58
+ throw new TypeError("paths() options must be an object.");
59
+ }
60
+ if (options.direction !== undefined &&
61
+ !["outgoing", "incoming", "both"].includes(options.direction)) {
62
+ throw new TypeError('paths() options.direction must be "outgoing", "incoming", or "both".');
63
+ }
64
+ if (options.weight !== undefined && typeof options.weight !== "string") {
65
+ throw new TypeError("paths() options.weight must be a string.");
66
+ }
67
+ if (options.outputTable !== undefined &&
68
+ typeof options.outputTable !== "string" &&
69
+ typeof options.outputTable !== "boolean") {
70
+ throw new TypeError("paths() options.outputTable must be a string or boolean.");
71
+ }
72
+ const endpoints = (0, prepareGraphRouteSql_js_1.prepareGraphRouteEndpoints)(start, end, "paths()");
73
+ const direction = options.direction ?? "outgoing";
74
+ const temporalOptions = (0, prepareGraphTemporalSql_js_1.prepareGraphTemporalOptions)(options, direction, "paths()");
75
+ options = structuredClone(options);
76
+ const parameters = {
77
+ sourceColumn,
78
+ targetColumn,
79
+ edgeId,
80
+ start,
81
+ end,
82
+ options,
83
+ };
84
+ return (0, queueGraphResult_js_1.default)(simpleTable, {
85
+ method: "paths()",
86
+ parameters,
87
+ outputTable: options.outputTable,
88
+ preflight: temporalOptions === undefined
89
+ ? undefined
90
+ : (input) => (0, validateGraphTemporalEvents_js_1.default)(input, temporalOptions, "paths()", parameters),
91
+ values: (schema) => {
92
+ (0, prepareGraphRouteSql_js_1.validateGraphRouteInputs)(schema, sourceColumn, targetColumn, edgeId, endpoints, options.weight, "paths()");
93
+ const temporal = temporalOptions === undefined
94
+ ? undefined
95
+ : (0, prepareGraphTemporalSql_js_1.default)(schema, temporalOptions, "paths()");
96
+ return temporal === undefined
97
+ ? endpoints.values.values
98
+ : [temporal.gapParameter, ...endpoints.values.values];
99
+ },
100
+ buildSelect: (input, schema) => pathsSelect(input, schema, sourceColumn, targetColumn, edgeId, endpoints, direction, options.weight, temporalOptions),
101
+ outputSchema: (schema) => {
102
+ const validated = (0, prepareGraphRouteSql_js_1.validateGraphRouteInputs)(schema, sourceColumn, targetColumn, edgeId, endpoints, options.weight, "paths()");
103
+ if (temporalOptions !== undefined) {
104
+ (0, prepareGraphTemporalSql_js_1.default)(schema, temporalOptions, "paths()");
105
+ }
106
+ return (0, graphRouteResultSchema_js_1.default)(schema, validated.distanceType, "paths()");
107
+ },
108
+ });
109
+ }
110
+ function pathsSelect(input, schema, source, target, edgeId, routeEndpoints, direction, weight, temporalOptions) {
111
+ const route = (0, prepareGraphRouteSql_js_1.prepareGraphRouteSql)(input, schema, source, target, edgeId, routeEndpoints, weight, "paths()");
112
+ const prepared = route.traversal;
113
+ if (temporalOptions !== undefined) {
114
+ const temporal = (0, prepareGraphTemporalSql_js_1.default)(schema, temporalOptions, "paths()");
115
+ return temporalPathsSelect(route, direction, temporal);
116
+ }
117
+ const distanceType = route.distanceType;
118
+ const q = quoteIdentifier_js_1.default;
119
+ const relations = prepared.relationNames([
120
+ "graph_route_endpoints",
121
+ "graph_edges",
122
+ "graph_nodes",
123
+ "graph_to_end",
124
+ "graph_routes",
125
+ "graph_complete_routes",
126
+ "graph_ranked_routes",
127
+ ]);
128
+ const endpointRelation = relations.graph_route_endpoints;
129
+ const edgesRelation = relations.graph_edges;
130
+ const nodesRelation = relations.graph_nodes;
131
+ const toEndRelation = relations.graph_to_end;
132
+ const routesRelation = relations.graph_routes;
133
+ const completeRelation = relations.graph_complete_routes;
134
+ const rankedRelation = relations.graph_ranked_routes;
135
+ const edgeFromKey = `${q("edges")}.${q("__from_key")}`;
136
+ const edgeToKey = `${q("edges")}.${q("__to_key")}`;
137
+ const edgeTo = `${q("edges")}.${q("__to")}`;
138
+ const edgeCost = `${q("edges")}.${q("__weight")}`;
139
+ const candidateDistance = `CAST(${q("routes")}.${q("distance")} + ${edgeCost} AS ${distanceType})`;
140
+ return `WITH RECURSIVE ${endpointRelation}(
141
+ ${q("start")}, ${q("end")}, ${q("__start_key")}, ${q("__end_key")}
142
+ ) AS (
143
+ SELECT ${q("start")}, ${q("end")},
144
+ ${prepared.key(q("start"))}, ${prepared.key(q("end"))}
145
+ FROM (SELECT ${route.endpointValue} AS ${q("start")},
146
+ ${route.endpointValue} AS ${q("end")}) AS ${q("values")}
147
+ ), ${edgesRelation} AS (
148
+ ${prepared.edges(direction, [
149
+ `${route.typedEdgeId} AS ${q("__edge_id")}`,
150
+ `${route.edgeKey} AS ${q("__edge_key")}`,
151
+ `${route.edgeWeight} AS ${q("__weight")}`,
152
+ ])}
153
+ ), ${nodesRelation} AS (
154
+ SELECT ${q("__from_key")} AS ${q("__key")} FROM ${edgesRelation}
155
+ UNION
156
+ SELECT ${q("__to_key")} AS ${q("__key")} FROM ${edgesRelation}
157
+ ), ${toEndRelation}(${q("__key")}) AS (
158
+ SELECT ${q("__end_key")}
159
+ FROM ${endpointRelation}
160
+ INNER JOIN ${nodesRelation}
161
+ ON ${q("__end_key")} = ${q("__key")}
162
+ UNION
163
+ SELECT ${edgeFromKey}
164
+ FROM ${toEndRelation} AS ${q("reached")}
165
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
166
+ ON ${q("reached")}.${q("__key")} = ${edgeToKey}
167
+ ), ${routesRelation}(
168
+ ${q("node")}, ${q("__node_key")}, ${q("__visited")},
169
+ ${q("__edge_keys")}, ${q("steps")}, ${q("distance")}
170
+ ) AS (
171
+ SELECT ${q("start")}, ${q("__start_key")},
172
+ [${q("__start_key")}], CAST([] AS ${route.keyType}[]),
173
+ CAST([] AS ${route.stepType}[]), CAST(0 AS ${distanceType})
174
+ FROM ${endpointRelation}
175
+ INNER JOIN ${toEndRelation}
176
+ ON ${q("__start_key")} = ${q("__key")}
177
+ UNION ALL
178
+ SELECT ${edgeTo}, ${edgeToKey},
179
+ list_append(${q("routes")}.${q("__visited")}, ${edgeToKey}),
180
+ list_append(${q("routes")}.${q("__edge_keys")}, ${q("edges")}.${q("__edge_key")}),
181
+ list_append(${q("routes")}.${q("steps")}, struct_pack(
182
+ ${q("edgeId")} := ${q("edges")}.${q("__edge_id")},
183
+ ${q("source")} := ${q("edges")}.${q("__from")},
184
+ ${q("target")} := ${edgeTo},
185
+ ${q("weight")} := ${edgeCost},
186
+ ${q("distance")} := ${candidateDistance}
187
+ )), ${candidateDistance}
188
+ FROM ${routesRelation} AS ${q("routes")}
189
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
190
+ ON ${q("routes")}.${q("__node_key")} = ${edgeFromKey}
191
+ INNER JOIN ${toEndRelation} AS ${q("can_reach_end")}
192
+ ON ${edgeToKey} = ${q("can_reach_end")}.${q("__key")}
193
+ CROSS JOIN ${endpointRelation}
194
+ WHERE ${q("routes")}.${q("__node_key")} <> ${q("__end_key")}
195
+ AND NOT list_contains(${q("routes")}.${q("__visited")}, ${edgeToKey})
196
+ ), ${completeRelation} AS (
197
+ SELECT ${q("__edge_keys")}, ${q("steps")}
198
+ FROM ${routesRelation}
199
+ CROSS JOIN ${endpointRelation}
200
+ WHERE ${q("__node_key")} = ${q("__end_key")}
201
+ ), ${rankedRelation} AS (
202
+ SELECT CAST(row_number() OVER (ORDER BY ${q("__edge_keys")}) - 1 AS BIGINT) AS ${q("pathId")},
203
+ ${q("steps")}
204
+ FROM ${completeRelation}
205
+ )
206
+ ${(0, graphRouteResultSelect_js_1.default)(rankedRelation, route.input, route.edgeIdColumn)}`;
207
+ }
208
+ function temporalPathsSelect(route, direction, temporal) {
209
+ const prepared = route.traversal;
210
+ const distanceType = route.distanceType;
211
+ const q = quoteIdentifier_js_1.default;
212
+ const relations = prepared.relationNames([
213
+ "graph_route_endpoints",
214
+ "graph_temporal_settings",
215
+ "graph_event_rows",
216
+ "graph_edges",
217
+ "graph_nodes",
218
+ "graph_to_end",
219
+ "graph_routes",
220
+ "graph_complete_routes",
221
+ "graph_ranked_routes",
222
+ ]);
223
+ const endpointRelation = relations.graph_route_endpoints;
224
+ const settingsRelation = relations.graph_temporal_settings;
225
+ const eventRowsRelation = relations.graph_event_rows;
226
+ const edgesRelation = relations.graph_edges;
227
+ const nodesRelation = relations.graph_nodes;
228
+ const toEndRelation = relations.graph_to_end;
229
+ const routesRelation = relations.graph_routes;
230
+ const completeRelation = relations.graph_complete_routes;
231
+ const rankedRelation = relations.graph_ranked_routes;
232
+ const edgeFromKey = `${q("edges")}.${q("__from_key")}`;
233
+ const edgeToKey = `${q("edges")}.${q("__to_key")}`;
234
+ const edgeTo = `${q("edges")}.${q("__to")}`;
235
+ const edgeCost = `${q("edges")}.${q("__weight")}`;
236
+ const edgeKey = `${q("edges")}.${q("__edge_key")}`;
237
+ const candidateDistance = `CAST(${q("routes")}.${q("distance")} + ${edgeCost} AS ${distanceType})`;
238
+ const gap = `${q("settings")}.${q("__gap")}`;
239
+ const step = (distance) => `struct_pack(
240
+ ${q("edgeId")} := ${q("edges")}.${q("__edge_id")},
241
+ ${q("source")} := ${q("edges")}.${q("__from")},
242
+ ${q("target")} := ${edgeTo},
243
+ ${q("weight")} := ${edgeCost},
244
+ ${q("distance")} := ${distance}
245
+ )`;
246
+ return `WITH RECURSIVE ${settingsRelation} AS MATERIALIZED (
247
+ SELECT CAST(? AS HUGEINT) AS ${q("__gap")}
248
+ ), ${endpointRelation}(
249
+ ${q("start")}, ${q("end")}, ${q("__start_key")}, ${q("__end_key")}
250
+ ) AS (
251
+ SELECT ${q("start")}, ${q("end")},
252
+ ${prepared.key(q("start"))}, ${prepared.key(q("end"))}
253
+ FROM (SELECT ${route.endpointValue} AS ${q("start")},
254
+ ${route.endpointValue} AS ${q("end")}) AS ${q("values")}
255
+ ), ${eventRowsRelation} AS MATERIALIZED (
256
+ ${prepared.edges(direction, [
257
+ `${route.typedEdgeId} AS ${q("__edge_id")}`,
258
+ `${route.edgeKey} AS ${q("__edge_key")}`,
259
+ `${route.edgeWeight} AS ${q("__weight")}`,
260
+ ...temporal.eventSelections("edges"),
261
+ ])}
262
+ ), ${edgesRelation} AS MATERIALIZED (
263
+ SELECT *
264
+ FROM ${eventRowsRelation} AS ${q("events")}
265
+ WHERE ${temporal.eventValidity("events")}
266
+ ), ${nodesRelation} AS (
267
+ SELECT ${q("__from_key")} AS ${q("__key")} FROM ${edgesRelation}
268
+ UNION
269
+ SELECT ${q("__to_key")} AS ${q("__key")} FROM ${edgesRelation}
270
+ ), ${toEndRelation}(${q("__key")}) AS (
271
+ SELECT ${q("__end_key")}
272
+ FROM ${endpointRelation}
273
+ INNER JOIN ${nodesRelation}
274
+ ON ${q("__end_key")} = ${q("__key")}
275
+ UNION
276
+ SELECT ${edgeFromKey}
277
+ FROM ${toEndRelation} AS ${q("reached")}
278
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
279
+ ON ${q("reached")}.${q("__key")} = ${edgeToKey}
280
+ ), ${routesRelation}(
281
+ ${q("node")}, ${q("__node_key")}, ${q("__visited")},
282
+ ${q("__edge_keys")}, ${q("steps")}, ${q("distance")},
283
+ ${q("__event_id")}, ${q("__event_start")}, ${q("__event_end")}
284
+ ) AS (
285
+ SELECT ${edgeTo}, ${edgeToKey},
286
+ [${q("__start_key")}, ${edgeToKey}], [${edgeKey}],
287
+ [${step(edgeCost)}], ${edgeCost},
288
+ ${q("edges")}.${q("__event_id")},
289
+ ${q("edges")}.${q("__event_start")},
290
+ ${q("edges")}.${q("__event_end")}
291
+ FROM ${endpointRelation}
292
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
293
+ ON ${q("__start_key")} = ${edgeFromKey}
294
+ INNER JOIN ${toEndRelation} AS ${q("can_reach_end")}
295
+ ON ${edgeToKey} = ${q("can_reach_end")}.${q("__key")}
296
+ WHERE ${q("__start_key")} <> ${edgeToKey}
297
+ UNION ALL
298
+ SELECT ${edgeTo}, ${edgeToKey},
299
+ list_append(${q("routes")}.${q("__visited")}, ${edgeToKey}),
300
+ list_append(${q("routes")}.${q("__edge_keys")}, ${edgeKey}),
301
+ list_append(${q("routes")}.${q("steps")}, ${step(candidateDistance)}),
302
+ ${candidateDistance}, ${q("edges")}.${q("__event_id")},
303
+ ${q("edges")}.${q("__event_start")},
304
+ ${q("edges")}.${q("__event_end")}
305
+ FROM ${routesRelation} AS ${q("routes")}
306
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
307
+ ON ${q("routes")}.${q("__node_key")} = ${edgeFromKey}
308
+ INNER JOIN ${toEndRelation} AS ${q("can_reach_end")}
309
+ ON ${edgeToKey} = ${q("can_reach_end")}.${q("__key")}
310
+ CROSS JOIN ${endpointRelation}
311
+ CROSS JOIN ${settingsRelation} AS ${q("settings")}
312
+ WHERE ${q("routes")}.${q("__node_key")} <> ${q("__end_key")}
313
+ AND NOT list_contains(${q("routes")}.${q("__visited")}, ${edgeToKey})
314
+ AND ${temporal.transition("routes", "edges", direction, gap)}
315
+ ), ${completeRelation} AS (
316
+ SELECT ${q("__edge_keys")}, ${q("steps")}
317
+ FROM ${routesRelation}
318
+ CROSS JOIN ${endpointRelation}
319
+ WHERE ${q("__node_key")} = ${q("__end_key")}
320
+ ), ${rankedRelation} AS (
321
+ SELECT CAST(row_number() OVER (ORDER BY ${q("__edge_keys")}) - 1 AS BIGINT)
322
+ AS ${q("pathId")}, ${q("steps")}
323
+ FROM ${completeRelation}
324
+ )
325
+ ${(0, graphRouteResultSelect_js_1.default)(rankedRelation, route.input, route.edgeIdColumn)}`;
326
+ }
@@ -0,0 +1,11 @@
1
+ import type SimpleTable from "../class/SimpleTable.js";
2
+ import { type GraphTemporalOptions } from "../helpers/prepareGraphTemporalSql.js";
3
+ import { type GraphId } from "../helpers/prepareGraphStarts.js";
4
+ import { type GraphDirection } from "../helpers/prepareGraphTraversal.js";
5
+ type ReachableOptions = GraphTemporalOptions & {
6
+ direction?: GraphDirection;
7
+ outputTable?: string | boolean;
8
+ };
9
+ export default function reachable(simpleTable: SimpleTable, sourceColumn: string, targetColumn: string, startNodes: GraphId | GraphId[], options?: ReachableOptions): SimpleTable;
10
+ export {};
11
+ //# sourceMappingURL=reachable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reachable.d.ts","sourceRoot":"","sources":["../../src/methods/reachable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAGvD,OAAgC,EAC9B,KAAK,oBAAoB,EAG1B,MAAM,uCAAuC,CAAC;AAC/C,OAA2B,EACzB,KAAK,OAAO,EAEb,MAAM,kCAAkC,CAAC;AAC1C,OAA8B,EAC5B,KAAK,cAAc,EAEpB,MAAM,qCAAqC,CAAC;AAK7C,KAAK,gBAAgB,GAAG,oBAAoB,GAAG;IAC7C,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,OAAO,GAAG,OAAO,EAAE,EAC/B,OAAO,GAAE,gBAAqB,GAC7B,WAAW,CAkGb"}