@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.
- package/esm/class/SDAError.d.ts +6 -6
- package/esm/class/SDAError.js +6 -6
- package/esm/class/Simple.d.ts +9 -9
- package/esm/class/Simple.js +9 -9
- package/esm/class/SimpleDB.d.ts +80 -76
- package/esm/class/SimpleDB.d.ts.map +1 -1
- package/esm/class/SimpleDB.js +80 -76
- package/esm/class/SimpleTable.d.ts +2805 -1077
- package/esm/class/SimpleTable.d.ts.map +1 -1
- package/esm/class/SimpleTable.js +2777 -1077
- package/esm/helpers/appendColumnBatches.d.ts +3 -0
- package/esm/helpers/appendColumnBatches.d.ts.map +1 -0
- package/esm/helpers/appendColumnBatches.js +21 -0
- package/esm/helpers/buildApproximateMutualReachabilityMst.d.ts +45 -0
- package/esm/helpers/buildApproximateMutualReachabilityMst.d.ts.map +1 -0
- package/esm/helpers/buildApproximateMutualReachabilityMst.js +212 -0
- package/esm/helpers/buildChronologicalGraphComponentsSql.d.ts +14 -0
- package/esm/helpers/buildChronologicalGraphComponentsSql.d.ts.map +1 -0
- package/esm/helpers/buildChronologicalGraphComponentsSql.js +167 -0
- package/esm/helpers/buildExactMutualReachabilityMst.d.ts +28 -0
- package/esm/helpers/buildExactMutualReachabilityMst.d.ts.map +1 -0
- package/esm/helpers/buildExactMutualReachabilityMst.js +97 -0
- package/esm/helpers/buildGraphTemporalCostStateSql.d.ts +12 -0
- package/esm/helpers/buildGraphTemporalCostStateSql.d.ts.map +1 -0
- package/esm/helpers/buildGraphTemporalCostStateSql.js +86 -0
- package/esm/helpers/buildGraphTemporalReachabilitySql.d.ts +13 -0
- package/esm/helpers/buildGraphTemporalReachabilitySql.d.ts.map +1 -0
- package/esm/helpers/buildGraphTemporalReachabilitySql.js +70 -0
- package/esm/helpers/buildSparseMutualReachabilityMst.d.ts +10 -0
- package/esm/helpers/buildSparseMutualReachabilityMst.d.ts.map +1 -0
- package/esm/helpers/buildSparseMutualReachabilityMst.js +47 -0
- package/esm/helpers/buildUmapGraph.d.ts +21 -0
- package/esm/helpers/buildUmapGraph.d.ts.map +1 -0
- package/esm/helpers/buildUmapGraph.js +61 -0
- package/esm/helpers/buildVectorNeighbors.d.ts +45 -0
- package/esm/helpers/buildVectorNeighbors.d.ts.map +1 -0
- package/esm/helpers/buildVectorNeighbors.js +170 -0
- package/esm/helpers/buildWeakGraphComponentsSql.d.ts +3 -0
- package/esm/helpers/buildWeakGraphComponentsSql.d.ts.map +1 -0
- package/esm/helpers/buildWeakGraphComponentsSql.js +32 -0
- package/esm/helpers/cacheDatabase.d.ts.map +1 -1
- package/esm/helpers/cacheDatabase.js +2 -1
- package/esm/helpers/camelCase.d.ts +7 -5
- package/esm/helpers/camelCase.d.ts.map +1 -1
- package/esm/helpers/camelCase.js +7 -5
- package/esm/helpers/capitalize.d.ts +6 -4
- package/esm/helpers/capitalize.d.ts.map +1 -1
- package/esm/helpers/capitalize.js +6 -4
- package/esm/helpers/clusterHdbscan.d.ts +18 -0
- package/esm/helpers/clusterHdbscan.d.ts.map +1 -0
- package/esm/helpers/clusterHdbscan.js +342 -0
- package/esm/helpers/computeCovariance.d.ts +16 -0
- package/esm/helpers/computeCovariance.d.ts.map +1 -0
- package/esm/helpers/computeCovariance.js +99 -0
- package/esm/helpers/computeMahalanobisDistances.d.ts +14 -0
- package/esm/helpers/computeMahalanobisDistances.d.ts.map +1 -0
- package/esm/helpers/computeMahalanobisDistances.js +87 -0
- package/esm/helpers/createDirectory.d.ts +4 -3
- package/esm/helpers/createDirectory.d.ts.map +1 -1
- package/esm/helpers/createDirectory.js +4 -3
- package/esm/helpers/dataToArrays.d.ts +6 -4
- package/esm/helpers/dataToArrays.d.ts.map +1 -1
- package/esm/helpers/dataToArrays.js +6 -4
- package/esm/helpers/extractTypes.d.ts +1 -1
- package/esm/helpers/extractTypes.js +4 -9
- package/esm/helpers/factorCovariance.d.ts +17 -0
- package/esm/helpers/factorCovariance.d.ts.map +1 -0
- package/esm/helpers/factorCovariance.js +189 -0
- package/esm/helpers/findGeoColumn.d.ts +6 -4
- package/esm/helpers/findGeoColumn.d.ts.map +1 -1
- package/esm/helpers/findGeoColumn.js +6 -4
- package/esm/helpers/findGeoColumnFromSchema.d.ts +8 -5
- package/esm/helpers/findGeoColumnFromSchema.d.ts.map +1 -1
- package/esm/helpers/findGeoColumnFromSchema.js +8 -5
- package/esm/helpers/fitUmapCurve.d.ts +2 -0
- package/esm/helpers/fitUmapCurve.d.ts.map +1 -0
- package/esm/helpers/fitUmapCurve.js +66 -0
- package/esm/helpers/formatDate.d.ts +12 -6
- package/esm/helpers/formatDate.d.ts.map +1 -1
- package/esm/helpers/formatDate.js +12 -6
- package/esm/helpers/formatMissingTables.d.ts +8 -5
- package/esm/helpers/formatMissingTables.d.ts.map +1 -1
- package/esm/helpers/formatMissingTables.js +8 -5
- package/esm/helpers/formatNumber.d.ts +19 -10
- package/esm/helpers/formatNumber.d.ts.map +1 -1
- package/esm/helpers/formatNumber.js +32 -17
- package/esm/helpers/getGraphEdgeIdColumn.d.ts +9 -0
- package/esm/helpers/getGraphEdgeIdColumn.d.ts.map +1 -0
- package/esm/helpers/getGraphEdgeIdColumn.js +25 -0
- package/esm/helpers/getGraphEndpointColumns.d.ts +11 -0
- package/esm/helpers/getGraphEndpointColumns.d.ts.map +1 -0
- package/esm/helpers/getGraphEndpointColumns.js +160 -0
- package/esm/helpers/getGraphWeightColumn.d.ts +10 -0
- package/esm/helpers/getGraphWeightColumn.d.ts.map +1 -0
- package/esm/helpers/getGraphWeightColumn.js +40 -0
- package/esm/helpers/graphRouteResultSchema.d.ts +4 -0
- package/esm/helpers/graphRouteResultSchema.d.ts.map +1 -0
- package/esm/helpers/graphRouteResultSchema.js +12 -0
- package/esm/helpers/graphRouteResultSelect.d.ts +4 -0
- package/esm/helpers/graphRouteResultSelect.d.ts.map +1 -0
- package/esm/helpers/graphRouteResultSelect.js +22 -0
- package/esm/helpers/hasGeometryColumn.d.ts +4 -3
- package/esm/helpers/hasGeometryColumn.d.ts.map +1 -1
- package/esm/helpers/hasGeometryColumn.js +4 -3
- package/esm/helpers/initialUmapCoordinates.d.ts +2 -0
- package/esm/helpers/initialUmapCoordinates.d.ts.map +1 -0
- package/esm/helpers/initialUmapCoordinates.js +5 -0
- package/esm/helpers/inspectGraphConnectivity.d.ts +10 -0
- package/esm/helpers/inspectGraphConnectivity.d.ts.map +1 -0
- package/esm/helpers/inspectGraphConnectivity.js +55 -0
- package/esm/helpers/mergeOptions.d.ts +24 -13
- package/esm/helpers/mergeOptions.d.ts.map +1 -1
- package/esm/helpers/mergeOptions.js +24 -13
- package/esm/helpers/optimizeUmapLayout.d.ts +7 -0
- package/esm/helpers/optimizeUmapLayout.d.ts.map +1 -0
- package/esm/helpers/optimizeUmapLayout.js +93 -0
- package/esm/helpers/parseValue.d.ts +6 -4
- package/esm/helpers/parseValue.d.ts.map +1 -1
- package/esm/helpers/parseValue.js +6 -4
- package/esm/helpers/prepareGraphRouteSql.d.ts +31 -0
- package/esm/helpers/prepareGraphRouteSql.d.ts.map +1 -0
- package/esm/helpers/prepareGraphRouteSql.js +86 -0
- package/esm/helpers/prepareGraphStarts.d.ts +9 -0
- package/esm/helpers/prepareGraphStarts.d.ts.map +1 -0
- package/esm/helpers/prepareGraphStarts.js +68 -0
- package/esm/helpers/prepareGraphTemporalSql.d.ts +28 -0
- package/esm/helpers/prepareGraphTemporalSql.d.ts.map +1 -0
- package/esm/helpers/prepareGraphTemporalSql.js +154 -0
- package/esm/helpers/prepareGraphTraversal.d.ts +19 -0
- package/esm/helpers/prepareGraphTraversal.d.ts.map +1 -0
- package/esm/helpers/prepareGraphTraversal.js +79 -0
- package/esm/helpers/prepareNumericFeatures.d.ts +41 -0
- package/esm/helpers/prepareNumericFeatures.d.ts.map +1 -0
- package/esm/helpers/prepareNumericFeatures.js +210 -0
- package/esm/helpers/prepareUmapLayoutOptions.d.ts +14 -0
- package/esm/helpers/prepareUmapLayoutOptions.d.ts.map +1 -0
- package/esm/helpers/prepareUmapLayoutOptions.js +23 -0
- package/esm/helpers/prettyDuration.d.ts +14 -8
- package/esm/helpers/prettyDuration.d.ts.map +1 -1
- package/esm/helpers/prettyDuration.js +14 -8
- package/esm/helpers/printTable.d.ts +18 -13
- package/esm/helpers/printTable.d.ts.map +1 -1
- package/esm/helpers/printTable.js +18 -13
- package/esm/helpers/publishPreparedColumns.d.ts +37 -0
- package/esm/helpers/publishPreparedColumns.d.ts.map +1 -0
- package/esm/helpers/publishPreparedColumns.js +113 -0
- package/esm/helpers/queryDB.d.ts +24 -13
- package/esm/helpers/queryDB.d.ts.map +1 -1
- package/esm/helpers/queryDB.js +24 -13
- package/esm/helpers/queueAsyncBarrier.d.ts +12 -7
- package/esm/helpers/queueAsyncBarrier.d.ts.map +1 -1
- package/esm/helpers/queueAsyncBarrier.js +12 -7
- package/esm/helpers/queueGraphResult.d.ts +18 -0
- package/esm/helpers/queueGraphResult.d.ts.map +1 -0
- package/esm/helpers/queueGraphResult.js +39 -0
- package/esm/helpers/quoteIdentifier.d.ts +4 -3
- package/esm/helpers/quoteIdentifier.d.ts.map +1 -1
- package/esm/helpers/quoteIdentifier.js +4 -3
- package/esm/helpers/quoteQualifiedIdentifier.d.ts +6 -4
- package/esm/helpers/quoteQualifiedIdentifier.d.ts.map +1 -1
- package/esm/helpers/quoteQualifiedIdentifier.js +6 -4
- package/esm/helpers/readScalarNumber.d.ts +3 -0
- package/esm/helpers/readScalarNumber.d.ts.map +1 -0
- package/esm/helpers/readScalarNumber.js +4 -0
- package/esm/helpers/runQuery.d.ts.map +1 -1
- package/esm/helpers/runQuery.js +17 -3
- package/esm/helpers/selectFuzzyReplacements.d.ts +11 -0
- package/esm/helpers/selectFuzzyReplacements.d.ts.map +1 -0
- package/esm/helpers/selectFuzzyReplacements.js +124 -0
- package/esm/helpers/stabilizeCosineVectors.d.ts +14 -0
- package/esm/helpers/stabilizeCosineVectors.d.ts.map +1 -0
- package/esm/helpers/stabilizeCosineVectors.js +34 -0
- package/esm/helpers/stringToArray.d.ts +4 -3
- package/esm/helpers/stringToArray.d.ts.map +1 -1
- package/esm/helpers/stringToArray.js +4 -3
- package/esm/helpers/umapRandom.d.ts +2 -0
- package/esm/helpers/umapRandom.d.ts.map +1 -0
- package/esm/helpers/umapRandom.js +10 -0
- package/esm/helpers/updateColumnsWithJS.d.ts +12 -6
- package/esm/helpers/updateColumnsWithJS.d.ts.map +1 -1
- package/esm/helpers/updateColumnsWithJS.js +12 -6
- package/esm/helpers/validateGraphRouteResultSchema.d.ts +4 -0
- package/esm/helpers/validateGraphRouteResultSchema.d.ts.map +1 -0
- package/esm/helpers/validateGraphRouteResultSchema.js +13 -0
- package/esm/helpers/validateGraphTemporalEvents.d.ts +7 -0
- package/esm/helpers/validateGraphTemporalEvents.d.ts.map +1 -0
- package/esm/helpers/validateGraphTemporalEvents.js +47 -0
- package/esm/helpers/validateNumericalAnalysis.d.ts +10 -6
- package/esm/helpers/validateNumericalAnalysis.d.ts.map +1 -1
- package/esm/helpers/validateNumericalAnalysis.js +10 -6
- package/esm/helpers/validateVectorRowIds.d.ts +4 -0
- package/esm/helpers/validateVectorRowIds.d.ts.map +1 -0
- package/esm/helpers/validateVectorRowIds.js +16 -0
- package/esm/helpers/vectorDistanceExpression.d.ts +6 -0
- package/esm/helpers/vectorDistanceExpression.d.ts.map +1 -0
- package/esm/helpers/vectorDistanceExpression.js +11 -0
- package/esm/helpers/wrapString.d.ts +10 -7
- package/esm/helpers/wrapString.d.ts.map +1 -1
- package/esm/helpers/wrapString.js +10 -7
- package/esm/methods/addId.d.ts +5 -0
- package/esm/methods/addId.d.ts.map +1 -0
- package/esm/methods/addId.js +38 -0
- package/esm/methods/cache.js +1 -1
- package/esm/methods/commonNeighbors.d.ts +10 -0
- package/esm/methods/commonNeighbors.d.ts.map +1 -0
- package/esm/methods/commonNeighbors.js +101 -0
- package/esm/methods/connectedComponents.d.ts +9 -0
- package/esm/methods/connectedComponents.d.ts.map +1 -0
- package/esm/methods/connectedComponents.js +147 -0
- package/esm/methods/degree.d.ts +9 -0
- package/esm/methods/degree.d.ts.map +1 -0
- package/esm/methods/degree.js +135 -0
- package/esm/methods/distances.d.ts +12 -0
- package/esm/methods/distances.d.ts.map +1 -0
- package/esm/methods/distances.js +164 -0
- package/esm/methods/findCycles.d.ts +12 -0
- package/esm/methods/findCycles.d.ts.map +1 -0
- package/esm/methods/findCycles.js +330 -0
- package/esm/methods/fuzzyClean.d.ts.map +1 -1
- package/esm/methods/fuzzyClean.js +17 -136
- package/esm/methods/fuzzyJoin.js +70 -16
- package/esm/methods/getTypes.d.ts +1 -1
- package/esm/methods/hdbscan.d.ts +5 -0
- package/esm/methods/hdbscan.d.ts.map +1 -0
- package/esm/methods/hdbscan.js +208 -0
- package/esm/methods/loadArray.d.ts.map +1 -1
- package/esm/methods/loadArray.js +3 -20
- package/esm/methods/mahalanobis.d.ts +5 -0
- package/esm/methods/mahalanobis.d.ts.map +1 -0
- package/esm/methods/mahalanobis.js +92 -0
- package/esm/methods/neighbors.d.ts +9 -0
- package/esm/methods/neighbors.d.ts.map +1 -0
- package/esm/methods/neighbors.js +81 -0
- package/esm/methods/normalizeVector.d.ts +5 -0
- package/esm/methods/normalizeVector.d.ts.map +1 -0
- package/esm/methods/normalizeVector.js +132 -0
- package/esm/methods/paths.d.ts +12 -0
- package/esm/methods/paths.d.ts.map +1 -0
- package/esm/methods/paths.js +287 -0
- package/esm/methods/reachable.d.ts +11 -0
- package/esm/methods/reachable.d.ts.map +1 -0
- package/esm/methods/reachable.js +131 -0
- package/esm/methods/rowToVector.d.ts +5 -0
- package/esm/methods/rowToVector.d.ts.map +1 -0
- package/esm/methods/rowToVector.js +77 -0
- package/esm/methods/shortestPath.d.ts +12 -0
- package/esm/methods/shortestPath.d.ts.map +1 -0
- package/esm/methods/shortestPath.js +337 -0
- package/esm/methods/topologicalSort.d.ts +7 -0
- package/esm/methods/topologicalSort.d.ts.map +1 -0
- package/esm/methods/topologicalSort.js +164 -0
- package/esm/methods/umap.d.ts +5 -0
- package/esm/methods/umap.d.ts.map +1 -0
- package/esm/methods/umap.js +156 -0
- package/esm/methods/updateWithJS.js +9 -21
- package/llm.md +2170 -128
- package/llms.txt +1 -1
- package/package.json +1 -1
- package/script/class/SDAError.d.ts +6 -6
- package/script/class/SDAError.js +6 -6
- package/script/class/Simple.d.ts +9 -9
- package/script/class/Simple.js +9 -9
- package/script/class/SimpleDB.d.ts +80 -76
- package/script/class/SimpleDB.d.ts.map +1 -1
- package/script/class/SimpleDB.js +80 -76
- package/script/class/SimpleTable.d.ts +2805 -1077
- package/script/class/SimpleTable.d.ts.map +1 -1
- package/script/class/SimpleTable.js +2777 -1077
- package/script/helpers/appendColumnBatches.d.ts +3 -0
- package/script/helpers/appendColumnBatches.d.ts.map +1 -0
- package/script/helpers/appendColumnBatches.js +24 -0
- package/script/helpers/buildApproximateMutualReachabilityMst.d.ts +45 -0
- package/script/helpers/buildApproximateMutualReachabilityMst.d.ts.map +1 -0
- package/script/helpers/buildApproximateMutualReachabilityMst.js +219 -0
- package/script/helpers/buildChronologicalGraphComponentsSql.d.ts +14 -0
- package/script/helpers/buildChronologicalGraphComponentsSql.d.ts.map +1 -0
- package/script/helpers/buildChronologicalGraphComponentsSql.js +174 -0
- package/script/helpers/buildExactMutualReachabilityMst.d.ts +28 -0
- package/script/helpers/buildExactMutualReachabilityMst.d.ts.map +1 -0
- package/script/helpers/buildExactMutualReachabilityMst.js +103 -0
- package/script/helpers/buildGraphTemporalCostStateSql.d.ts +12 -0
- package/script/helpers/buildGraphTemporalCostStateSql.d.ts.map +1 -0
- package/script/helpers/buildGraphTemporalCostStateSql.js +92 -0
- package/script/helpers/buildGraphTemporalReachabilitySql.d.ts +13 -0
- package/script/helpers/buildGraphTemporalReachabilitySql.d.ts.map +1 -0
- package/script/helpers/buildGraphTemporalReachabilitySql.js +76 -0
- package/script/helpers/buildSparseMutualReachabilityMst.d.ts +10 -0
- package/script/helpers/buildSparseMutualReachabilityMst.d.ts.map +1 -0
- package/script/helpers/buildSparseMutualReachabilityMst.js +50 -0
- package/script/helpers/buildUmapGraph.d.ts +21 -0
- package/script/helpers/buildUmapGraph.d.ts.map +1 -0
- package/script/helpers/buildUmapGraph.js +67 -0
- package/script/helpers/buildVectorNeighbors.d.ts +45 -0
- package/script/helpers/buildVectorNeighbors.d.ts.map +1 -0
- package/script/helpers/buildVectorNeighbors.js +176 -0
- package/script/helpers/buildWeakGraphComponentsSql.d.ts +3 -0
- package/script/helpers/buildWeakGraphComponentsSql.d.ts.map +1 -0
- package/script/helpers/buildWeakGraphComponentsSql.js +38 -0
- package/script/helpers/cacheDatabase.d.ts.map +1 -1
- package/script/helpers/cacheDatabase.js +2 -1
- package/script/helpers/camelCase.d.ts +7 -5
- package/script/helpers/camelCase.d.ts.map +1 -1
- package/script/helpers/camelCase.js +7 -5
- package/script/helpers/capitalize.d.ts +6 -4
- package/script/helpers/capitalize.d.ts.map +1 -1
- package/script/helpers/capitalize.js +6 -4
- package/script/helpers/clusterHdbscan.d.ts +18 -0
- package/script/helpers/clusterHdbscan.d.ts.map +1 -0
- package/script/helpers/clusterHdbscan.js +346 -0
- package/script/helpers/computeCovariance.d.ts +16 -0
- package/script/helpers/computeCovariance.d.ts.map +1 -0
- package/script/helpers/computeCovariance.js +105 -0
- package/script/helpers/computeMahalanobisDistances.d.ts +14 -0
- package/script/helpers/computeMahalanobisDistances.d.ts.map +1 -0
- package/script/helpers/computeMahalanobisDistances.js +93 -0
- package/script/helpers/createDirectory.d.ts +4 -3
- package/script/helpers/createDirectory.d.ts.map +1 -1
- package/script/helpers/createDirectory.js +4 -3
- package/script/helpers/dataToArrays.d.ts +6 -4
- package/script/helpers/dataToArrays.d.ts.map +1 -1
- package/script/helpers/dataToArrays.js +6 -4
- package/script/helpers/extractTypes.d.ts +1 -1
- package/script/helpers/extractTypes.js +4 -9
- package/script/helpers/factorCovariance.d.ts +17 -0
- package/script/helpers/factorCovariance.d.ts.map +1 -0
- package/script/helpers/factorCovariance.js +194 -0
- package/script/helpers/findGeoColumn.d.ts +6 -4
- package/script/helpers/findGeoColumn.d.ts.map +1 -1
- package/script/helpers/findGeoColumn.js +6 -4
- package/script/helpers/findGeoColumnFromSchema.d.ts +8 -5
- package/script/helpers/findGeoColumnFromSchema.d.ts.map +1 -1
- package/script/helpers/findGeoColumnFromSchema.js +8 -5
- package/script/helpers/fitUmapCurve.d.ts +2 -0
- package/script/helpers/fitUmapCurve.d.ts.map +1 -0
- package/script/helpers/fitUmapCurve.js +69 -0
- package/script/helpers/formatDate.d.ts +12 -6
- package/script/helpers/formatDate.d.ts.map +1 -1
- package/script/helpers/formatDate.js +12 -6
- package/script/helpers/formatMissingTables.d.ts +8 -5
- package/script/helpers/formatMissingTables.d.ts.map +1 -1
- package/script/helpers/formatMissingTables.js +8 -5
- package/script/helpers/formatNumber.d.ts +19 -10
- package/script/helpers/formatNumber.d.ts.map +1 -1
- package/script/helpers/formatNumber.js +32 -17
- package/script/helpers/getGraphEdgeIdColumn.d.ts +9 -0
- package/script/helpers/getGraphEdgeIdColumn.d.ts.map +1 -0
- package/script/helpers/getGraphEdgeIdColumn.js +31 -0
- package/script/helpers/getGraphEndpointColumns.d.ts +11 -0
- package/script/helpers/getGraphEndpointColumns.d.ts.map +1 -0
- package/script/helpers/getGraphEndpointColumns.js +166 -0
- package/script/helpers/getGraphWeightColumn.d.ts +10 -0
- package/script/helpers/getGraphWeightColumn.d.ts.map +1 -0
- package/script/helpers/getGraphWeightColumn.js +46 -0
- package/script/helpers/graphRouteResultSchema.d.ts +4 -0
- package/script/helpers/graphRouteResultSchema.d.ts.map +1 -0
- package/script/helpers/graphRouteResultSchema.js +18 -0
- package/script/helpers/graphRouteResultSelect.d.ts +4 -0
- package/script/helpers/graphRouteResultSelect.d.ts.map +1 -0
- package/script/helpers/graphRouteResultSelect.js +28 -0
- package/script/helpers/hasGeometryColumn.d.ts +4 -3
- package/script/helpers/hasGeometryColumn.d.ts.map +1 -1
- package/script/helpers/hasGeometryColumn.js +4 -3
- package/script/helpers/initialUmapCoordinates.d.ts +2 -0
- package/script/helpers/initialUmapCoordinates.d.ts.map +1 -0
- package/script/helpers/initialUmapCoordinates.js +11 -0
- package/script/helpers/inspectGraphConnectivity.d.ts +10 -0
- package/script/helpers/inspectGraphConnectivity.d.ts.map +1 -0
- package/script/helpers/inspectGraphConnectivity.js +58 -0
- package/script/helpers/mergeOptions.d.ts +24 -13
- package/script/helpers/mergeOptions.d.ts.map +1 -1
- package/script/helpers/mergeOptions.js +24 -13
- package/script/helpers/optimizeUmapLayout.d.ts +7 -0
- package/script/helpers/optimizeUmapLayout.d.ts.map +1 -0
- package/script/helpers/optimizeUmapLayout.js +99 -0
- package/script/helpers/parseValue.d.ts +6 -4
- package/script/helpers/parseValue.d.ts.map +1 -1
- package/script/helpers/parseValue.js +6 -4
- package/script/helpers/prepareGraphRouteSql.d.ts +31 -0
- package/script/helpers/prepareGraphRouteSql.d.ts.map +1 -0
- package/script/helpers/prepareGraphRouteSql.js +127 -0
- package/script/helpers/prepareGraphStarts.d.ts +9 -0
- package/script/helpers/prepareGraphStarts.d.ts.map +1 -0
- package/script/helpers/prepareGraphStarts.js +71 -0
- package/script/helpers/prepareGraphTemporalSql.d.ts +28 -0
- package/script/helpers/prepareGraphTemporalSql.d.ts.map +1 -0
- package/script/helpers/prepareGraphTemporalSql.js +161 -0
- package/script/helpers/prepareGraphTraversal.d.ts +19 -0
- package/script/helpers/prepareGraphTraversal.d.ts.map +1 -0
- package/script/helpers/prepareGraphTraversal.js +87 -0
- package/script/helpers/prepareNumericFeatures.d.ts +41 -0
- package/script/helpers/prepareNumericFeatures.d.ts.map +1 -0
- package/script/helpers/prepareNumericFeatures.js +217 -0
- package/script/helpers/prepareUmapLayoutOptions.d.ts +14 -0
- package/script/helpers/prepareUmapLayoutOptions.d.ts.map +1 -0
- package/script/helpers/prepareUmapLayoutOptions.js +29 -0
- package/script/helpers/prettyDuration.d.ts +14 -8
- package/script/helpers/prettyDuration.d.ts.map +1 -1
- package/script/helpers/prettyDuration.js +14 -8
- package/script/helpers/printTable.d.ts +18 -13
- package/script/helpers/printTable.d.ts.map +1 -1
- package/script/helpers/printTable.js +18 -13
- package/script/helpers/publishPreparedColumns.d.ts +37 -0
- package/script/helpers/publishPreparedColumns.d.ts.map +1 -0
- package/script/helpers/publishPreparedColumns.js +119 -0
- package/script/helpers/queryDB.d.ts +24 -13
- package/script/helpers/queryDB.d.ts.map +1 -1
- package/script/helpers/queryDB.js +24 -13
- package/script/helpers/queueAsyncBarrier.d.ts +12 -7
- package/script/helpers/queueAsyncBarrier.d.ts.map +1 -1
- package/script/helpers/queueAsyncBarrier.js +12 -7
- package/script/helpers/queueGraphResult.d.ts +18 -0
- package/script/helpers/queueGraphResult.d.ts.map +1 -0
- package/script/helpers/queueGraphResult.js +45 -0
- package/script/helpers/quoteIdentifier.d.ts +4 -3
- package/script/helpers/quoteIdentifier.d.ts.map +1 -1
- package/script/helpers/quoteIdentifier.js +4 -3
- package/script/helpers/quoteQualifiedIdentifier.d.ts +6 -4
- package/script/helpers/quoteQualifiedIdentifier.d.ts.map +1 -1
- package/script/helpers/quoteQualifiedIdentifier.js +6 -4
- package/script/helpers/readScalarNumber.d.ts +3 -0
- package/script/helpers/readScalarNumber.d.ts.map +1 -0
- package/script/helpers/readScalarNumber.js +7 -0
- package/script/helpers/runQuery.d.ts.map +1 -1
- package/script/helpers/runQuery.js +17 -3
- package/script/helpers/selectFuzzyReplacements.d.ts +11 -0
- package/script/helpers/selectFuzzyReplacements.d.ts.map +1 -0
- package/script/helpers/selectFuzzyReplacements.js +127 -0
- package/script/helpers/stabilizeCosineVectors.d.ts +14 -0
- package/script/helpers/stabilizeCosineVectors.d.ts.map +1 -0
- package/script/helpers/stabilizeCosineVectors.js +40 -0
- package/script/helpers/stringToArray.d.ts +4 -3
- package/script/helpers/stringToArray.d.ts.map +1 -1
- package/script/helpers/stringToArray.js +4 -3
- package/script/helpers/umapRandom.d.ts +2 -0
- package/script/helpers/umapRandom.d.ts.map +1 -0
- package/script/helpers/umapRandom.js +13 -0
- package/script/helpers/updateColumnsWithJS.d.ts +12 -6
- package/script/helpers/updateColumnsWithJS.d.ts.map +1 -1
- package/script/helpers/updateColumnsWithJS.js +12 -6
- package/script/helpers/validateGraphRouteResultSchema.d.ts +4 -0
- package/script/helpers/validateGraphRouteResultSchema.d.ts.map +1 -0
- package/script/helpers/validateGraphRouteResultSchema.js +19 -0
- package/script/helpers/validateGraphTemporalEvents.d.ts +7 -0
- package/script/helpers/validateGraphTemporalEvents.d.ts.map +1 -0
- package/script/helpers/validateGraphTemporalEvents.js +53 -0
- package/script/helpers/validateNumericalAnalysis.d.ts +10 -6
- package/script/helpers/validateNumericalAnalysis.d.ts.map +1 -1
- package/script/helpers/validateNumericalAnalysis.js +10 -6
- package/script/helpers/validateVectorRowIds.d.ts +4 -0
- package/script/helpers/validateVectorRowIds.d.ts.map +1 -0
- package/script/helpers/validateVectorRowIds.js +19 -0
- package/script/helpers/vectorDistanceExpression.d.ts +6 -0
- package/script/helpers/vectorDistanceExpression.d.ts.map +1 -0
- package/script/helpers/vectorDistanceExpression.js +14 -0
- package/script/helpers/wrapString.d.ts +10 -7
- package/script/helpers/wrapString.d.ts.map +1 -1
- package/script/helpers/wrapString.js +10 -7
- package/script/methods/addId.d.ts +5 -0
- package/script/methods/addId.d.ts.map +1 -0
- package/script/methods/addId.js +44 -0
- package/script/methods/cache.js +1 -1
- package/script/methods/commonNeighbors.d.ts +10 -0
- package/script/methods/commonNeighbors.d.ts.map +1 -0
- package/script/methods/commonNeighbors.js +140 -0
- package/script/methods/connectedComponents.d.ts +9 -0
- package/script/methods/connectedComponents.d.ts.map +1 -0
- package/script/methods/connectedComponents.js +186 -0
- package/script/methods/degree.d.ts +9 -0
- package/script/methods/degree.d.ts.map +1 -0
- package/script/methods/degree.js +141 -0
- package/script/methods/distances.d.ts +12 -0
- package/script/methods/distances.d.ts.map +1 -0
- package/script/methods/distances.js +203 -0
- package/script/methods/findCycles.d.ts +12 -0
- package/script/methods/findCycles.d.ts.map +1 -0
- package/script/methods/findCycles.js +369 -0
- package/script/methods/fuzzyClean.d.ts.map +1 -1
- package/script/methods/fuzzyClean.js +17 -136
- package/script/methods/fuzzyJoin.js +70 -16
- package/script/methods/getTypes.d.ts +1 -1
- package/script/methods/hdbscan.d.ts +5 -0
- package/script/methods/hdbscan.d.ts.map +1 -0
- package/script/methods/hdbscan.js +214 -0
- package/script/methods/loadArray.d.ts.map +1 -1
- package/script/methods/loadArray.js +2 -19
- package/script/methods/mahalanobis.d.ts +5 -0
- package/script/methods/mahalanobis.d.ts.map +1 -0
- package/script/methods/mahalanobis.js +98 -0
- package/script/methods/neighbors.d.ts +9 -0
- package/script/methods/neighbors.d.ts.map +1 -0
- package/script/methods/neighbors.js +120 -0
- package/script/methods/normalizeVector.d.ts +5 -0
- package/script/methods/normalizeVector.d.ts.map +1 -0
- package/script/methods/normalizeVector.js +138 -0
- package/script/methods/paths.d.ts +12 -0
- package/script/methods/paths.d.ts.map +1 -0
- package/script/methods/paths.js +326 -0
- package/script/methods/reachable.d.ts +11 -0
- package/script/methods/reachable.d.ts.map +1 -0
- package/script/methods/reachable.js +170 -0
- package/script/methods/rowToVector.d.ts +5 -0
- package/script/methods/rowToVector.d.ts.map +1 -0
- package/script/methods/rowToVector.js +83 -0
- package/script/methods/shortestPath.d.ts +12 -0
- package/script/methods/shortestPath.d.ts.map +1 -0
- package/script/methods/shortestPath.js +376 -0
- package/script/methods/topologicalSort.d.ts +7 -0
- package/script/methods/topologicalSort.d.ts.map +1 -0
- package/script/methods/topologicalSort.js +170 -0
- package/script/methods/umap.d.ts +5 -0
- package/script/methods/umap.d.ts.map +1 -0
- package/script/methods/umap.js +162 -0
- package/script/methods/updateWithJS.js +9 -21
|
@@ -4,13 +4,6 @@
|
|
|
4
4
|
* will be broken at the character boundary. This function is primarily used
|
|
5
5
|
* for preparing text to be displayed in console tables.
|
|
6
6
|
*
|
|
7
|
-
* @param str - The string to wrap.
|
|
8
|
-
* @param maxWidth - The maximum width of each line.
|
|
9
|
-
* @param wordWrap - If true, attempts to break at word boundaries. If false,
|
|
10
|
-
* breaks at character boundaries. Defaults to `true`.
|
|
11
|
-
* @returns The wrapped string with newline characters inserted at appropriate
|
|
12
|
-
* positions.
|
|
13
|
-
*
|
|
14
7
|
* @example
|
|
15
8
|
* ```typescript
|
|
16
9
|
* const text = "This is a very long sentence that needs to be wrapped";
|
|
@@ -30,6 +23,16 @@
|
|
|
30
23
|
* // Output: Thisisaver
|
|
31
24
|
* // ylongword
|
|
32
25
|
* ```
|
|
26
|
+
*
|
|
27
|
+
* @param str - The string to wrap.
|
|
28
|
+
*
|
|
29
|
+
* @param maxWidth - The maximum width of each line.
|
|
30
|
+
*
|
|
31
|
+
* @param wordWrap - If true, attempts to break at word boundaries. If false,
|
|
32
|
+
* breaks at character boundaries. Defaults to `true`.
|
|
33
|
+
*
|
|
34
|
+
* @returns The wrapped string with newline characters inserted at appropriate
|
|
35
|
+
* positions.
|
|
33
36
|
*/
|
|
34
37
|
export default function wrapString(str, maxWidth, wordWrap = true) {
|
|
35
38
|
if (str.length <= maxWidth) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addId.d.ts","sourceRoot":"","sources":["../../src/methods/addId.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAEvD,MAAM,CAAC,OAAO,UAAU,KAAK,CAC3B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,QAgDlC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import assertNewColumns from "../helpers/assertNewColumns.js";
|
|
2
|
+
import foldIdentifier from "../helpers/foldIdentifier.js";
|
|
3
|
+
import mergeOptions from "../helpers/mergeOptions.js";
|
|
4
|
+
import queryDB from "../helpers/queryDB.js";
|
|
5
|
+
import queueOp from "../helpers/queueOp.js";
|
|
6
|
+
import quoteIdentifier from "../helpers/quoteIdentifier.js";
|
|
7
|
+
export default function addId(simpleTable, newColumn, options = {}) {
|
|
8
|
+
if (typeof newColumn !== "string") {
|
|
9
|
+
throw new TypeError("addId() newColumn must be a string.");
|
|
10
|
+
}
|
|
11
|
+
if (options.prefix !== undefined && typeof options.prefix !== "string") {
|
|
12
|
+
throw new TypeError("addId() options.prefix must be a string.");
|
|
13
|
+
}
|
|
14
|
+
// Materialize preceding operations so IDs follow their resulting row order.
|
|
15
|
+
options = structuredClone(options);
|
|
16
|
+
queueOp(simpleTable, {
|
|
17
|
+
kind: "barrier",
|
|
18
|
+
method: "addId()",
|
|
19
|
+
parameters: { newColumn, options },
|
|
20
|
+
execute: async () => {
|
|
21
|
+
const types = await simpleTable.getTypes();
|
|
22
|
+
const existingColumn = Object.keys(types).find((column) => foldIdentifier(column) === foldIdentifier(newColumn));
|
|
23
|
+
assertNewColumns(types, [existingColumn ?? newColumn], "addId()");
|
|
24
|
+
// An empty window preserves scan order without referencing rowid, which
|
|
25
|
+
// may be shadowed by a user column.
|
|
26
|
+
const rowNumber = "(ROW_NUMBER() OVER () - 1)";
|
|
27
|
+
const id = options.prefix === undefined
|
|
28
|
+
? rowNumber
|
|
29
|
+
: `CONCAT(?, CAST(${rowNumber} AS VARCHAR))`;
|
|
30
|
+
await queryDB(simpleTable, `CREATE OR REPLACE TABLE ${quoteIdentifier(simpleTable.name)} AS SELECT *, ${id} AS ${quoteIdentifier(newColumn)} FROM ${quoteIdentifier(simpleTable.name)}`, mergeOptions(simpleTable, {
|
|
31
|
+
table: simpleTable.name,
|
|
32
|
+
method: "addId()",
|
|
33
|
+
parameters: { newColumn, options },
|
|
34
|
+
values: options.prefix === undefined ? undefined : [options.prefix],
|
|
35
|
+
}));
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}
|
package/esm/methods/cache.js
CHANGED
|
@@ -7,7 +7,7 @@ import serializeCacheInputs, { getCacheInputLabel, } from "../helpers/serializeC
|
|
|
7
7
|
import { createTableGenerationId, peekTableGeneration, restoreTableGeneration, } from "../helpers/tableGeneration.js";
|
|
8
8
|
import { loadCacheDatabase, writeCacheDatabase, } from "../helpers/cacheDatabase.js";
|
|
9
9
|
import { assertCacheTableMutation, cacheTableDependenciesMatch, captureCacheTableDependencies, changedCacheTableDependenciesMessage, recordCacheTableAccess, unchangedCacheTableDependenciesMessage, } from "../helpers/cacheTableDependencies.js";
|
|
10
|
-
const CACHE_FORMAT_VERSION = "duckdb-
|
|
10
|
+
const CACHE_FORMAT_VERSION = "duckdb-v5";
|
|
11
11
|
export default async function cache(table, compute, options = {}) {
|
|
12
12
|
// If cache() is itself called from another cache computation, the outer
|
|
13
13
|
// computation depends on the table produced here.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type SimpleTable from "../class/SimpleTable.js";
|
|
2
|
+
import { type GraphId } from "../helpers/prepareGraphStarts.js";
|
|
3
|
+
import { type GraphDirection } from "../helpers/prepareGraphTraversal.js";
|
|
4
|
+
type CommonNeighborsOptions = {
|
|
5
|
+
direction?: GraphDirection;
|
|
6
|
+
outputTable?: string | boolean;
|
|
7
|
+
};
|
|
8
|
+
export default function commonNeighbors(simpleTable: SimpleTable, sourceColumn: string, targetColumn: string, nodeA: GraphId, nodeB: GraphId, options?: CommonNeighborsOptions): SimpleTable;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=commonNeighbors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commonNeighbors.d.ts","sourceRoot":"","sources":["../../src/methods/commonNeighbors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAEvD,OAA2B,EACzB,KAAK,OAAO,EAEb,MAAM,kCAAkC,CAAC;AAC1C,OAA8B,EAC5B,KAAK,cAAc,EAEpB,MAAM,qCAAqC,CAAC;AAI7C,KAAK,sBAAsB,GAAG;IAC5B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,sBAA2B,GACnC,WAAW,CAwDb"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import prepareGraphStarts from "../helpers/prepareGraphStarts.js";
|
|
2
|
+
import prepareGraphTraversal, { validateGraphStarts, } from "../helpers/prepareGraphTraversal.js";
|
|
3
|
+
import queueGraphResult from "../helpers/queueGraphResult.js";
|
|
4
|
+
import quoteIdentifier from "../helpers/quoteIdentifier.js";
|
|
5
|
+
export default function commonNeighbors(simpleTable, sourceColumn, targetColumn, nodeA, nodeB, options = {}) {
|
|
6
|
+
if (typeof sourceColumn !== "string") {
|
|
7
|
+
throw new TypeError("commonNeighbors() sourceColumn must be a string.");
|
|
8
|
+
}
|
|
9
|
+
if (typeof targetColumn !== "string") {
|
|
10
|
+
throw new TypeError("commonNeighbors() targetColumn must be a string.");
|
|
11
|
+
}
|
|
12
|
+
if (options === null || typeof options !== "object" || Array.isArray(options)) {
|
|
13
|
+
throw new TypeError("commonNeighbors() options must be an object.");
|
|
14
|
+
}
|
|
15
|
+
if (options.direction !== undefined &&
|
|
16
|
+
!["outgoing", "incoming", "both"].includes(options.direction)) {
|
|
17
|
+
throw new TypeError('commonNeighbors() options.direction must be "outgoing", "incoming", or "both".');
|
|
18
|
+
}
|
|
19
|
+
if (options.outputTable !== undefined &&
|
|
20
|
+
typeof options.outputTable !== "string" &&
|
|
21
|
+
typeof options.outputTable !== "boolean") {
|
|
22
|
+
throw new TypeError("commonNeighbors() options.outputTable must be a string or boolean.");
|
|
23
|
+
}
|
|
24
|
+
const nodes = prepareNodes(nodeA, nodeB);
|
|
25
|
+
options = structuredClone(options);
|
|
26
|
+
const direction = options.direction ?? "outgoing";
|
|
27
|
+
const parameters = { sourceColumn, targetColumn, nodeA, nodeB, options };
|
|
28
|
+
return queueGraphResult(simpleTable, {
|
|
29
|
+
method: "commonNeighbors()",
|
|
30
|
+
parameters,
|
|
31
|
+
outputTable: options.outputTable,
|
|
32
|
+
values: (schema) => {
|
|
33
|
+
validateNodes(schema, sourceColumn, targetColumn, nodes);
|
|
34
|
+
return nodes.values;
|
|
35
|
+
},
|
|
36
|
+
buildSelect: (input, schema) => commonNeighborsSelect(input, schema, sourceColumn, targetColumn, nodes, direction),
|
|
37
|
+
outputSchema: (schema) => ({
|
|
38
|
+
node: validateNodes(schema, sourceColumn, targetColumn, nodes).idType,
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function prepareNodes(nodeA, nodeB) {
|
|
43
|
+
if (Array.isArray(nodeA)) {
|
|
44
|
+
throw new TypeError("commonNeighbors() nodeA must be one node ID.");
|
|
45
|
+
}
|
|
46
|
+
if (Array.isArray(nodeB)) {
|
|
47
|
+
throw new TypeError("commonNeighbors() nodeB must be one node ID.");
|
|
48
|
+
}
|
|
49
|
+
const first = prepareGraphStarts(nodeA, "commonNeighbors()", "nodeA", true);
|
|
50
|
+
const second = prepareGraphStarts(nodeB, "commonNeighbors()", "nodeB", true);
|
|
51
|
+
if (first.family !== second.family) {
|
|
52
|
+
throw new TypeError("commonNeighbors() nodeA and nodeB must both be string IDs or both be numeric IDs.");
|
|
53
|
+
}
|
|
54
|
+
if (first.values[0] === second.values[0]) {
|
|
55
|
+
throw new TypeError("commonNeighbors() nodeA and nodeB must be different.");
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
family: first.family,
|
|
59
|
+
numericValues: [...first.numericValues, ...second.numericValues],
|
|
60
|
+
values: [first.values[0], second.values[0]],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function validateNodes(schema, source, target, nodes) {
|
|
64
|
+
return validateGraphStarts(schema, source, target, nodes, "commonNeighbors()", "nodeA and nodeB");
|
|
65
|
+
}
|
|
66
|
+
function commonNeighborsSelect(input, schema, source, target, nodes, direction) {
|
|
67
|
+
const prepared = prepareGraphTraversal(input, schema, source, target, nodes, "commonNeighbors()", "nodeA and nodeB");
|
|
68
|
+
const relations = prepared.relationNames([
|
|
69
|
+
"graph_requested_nodes",
|
|
70
|
+
"graph_edges",
|
|
71
|
+
"graph_neighbor_memberships",
|
|
72
|
+
"graph_common_neighbors",
|
|
73
|
+
]);
|
|
74
|
+
const requested = relations.graph_requested_nodes;
|
|
75
|
+
const edges = relations.graph_edges;
|
|
76
|
+
const memberships = relations.graph_neighbor_memberships;
|
|
77
|
+
const common = relations.graph_common_neighbors;
|
|
78
|
+
const q = quoteIdentifier;
|
|
79
|
+
return `WITH ${requested}(${q("node")}) AS (
|
|
80
|
+
VALUES ${prepared.startValues}
|
|
81
|
+
), ${edges} AS (
|
|
82
|
+
${prepared.edges(direction)}
|
|
83
|
+
), ${memberships} AS (
|
|
84
|
+
SELECT ${q("requested")}.${q("node")} AS ${q("requested_node")},
|
|
85
|
+
${q("edges")}.${q("__from_key")} AS ${q("__requested_key")},
|
|
86
|
+
${q("edges")}.${q("__to")} AS ${q("node")},
|
|
87
|
+
${q("edges")}.${q("__to_key")} AS ${q("__node_key")}
|
|
88
|
+
FROM ${edges} AS ${q("edges")}
|
|
89
|
+
INNER JOIN ${requested} AS ${q("requested")}
|
|
90
|
+
ON ${q("edges")}.${q("__from_key")} =
|
|
91
|
+
${prepared.key(`${q("requested")}.${q("node")}`)}
|
|
92
|
+
), ${common} AS (
|
|
93
|
+
SELECT MIN(${q("node")}) AS ${q("node")}, ${q("__node_key")}
|
|
94
|
+
FROM ${memberships}
|
|
95
|
+
GROUP BY ${q("__node_key")}
|
|
96
|
+
HAVING COUNT(DISTINCT ${q("__requested_key")}) = 2
|
|
97
|
+
)
|
|
98
|
+
SELECT ${q("node")}
|
|
99
|
+
FROM ${common}
|
|
100
|
+
ORDER BY ${q("__node_key")}`;
|
|
101
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type SimpleTable from "../class/SimpleTable.js";
|
|
2
|
+
import { type GraphTemporalOptions } from "../helpers/prepareGraphTemporalSql.js";
|
|
3
|
+
type ConnectedComponentsOptions = GraphTemporalOptions & {
|
|
4
|
+
mode?: "weak" | "strong";
|
|
5
|
+
outputTable?: string | boolean;
|
|
6
|
+
};
|
|
7
|
+
export default function connectedComponents(simpleTable: SimpleTable, sourceColumn: string, targetColumn: string, options?: ConnectedComponentsOptions): SimpleTable;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=connectedComponents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectedComponents.d.ts","sourceRoot":"","sources":["../../src/methods/connectedComponents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAGvD,OAAgC,EAC9B,KAAK,oBAAoB,EAG1B,MAAM,uCAAuC,CAAC;AAM/C,KAAK,0BAA0B,GAAG,oBAAoB,GAAG;IACvD,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,0BAA+B,GACvC,WAAW,CAqFb"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import buildChronologicalGraphComponentsSql from "../helpers/buildChronologicalGraphComponentsSql.js";
|
|
2
|
+
import buildWeakGraphComponentsSql from "../helpers/buildWeakGraphComponentsSql.js";
|
|
3
|
+
import getGraphEndpointColumns from "../helpers/getGraphEndpointColumns.js";
|
|
4
|
+
import prepareGraphTemporalSql, { prepareGraphTemporalOptions, } from "../helpers/prepareGraphTemporalSql.js";
|
|
5
|
+
import { prepareGraphSql } from "../helpers/prepareGraphTraversal.js";
|
|
6
|
+
import queueGraphResult from "../helpers/queueGraphResult.js";
|
|
7
|
+
import quoteIdentifier from "../helpers/quoteIdentifier.js";
|
|
8
|
+
import validateGraphTemporalEvents from "../helpers/validateGraphTemporalEvents.js";
|
|
9
|
+
export default function connectedComponents(simpleTable, sourceColumn, targetColumn, options = {}) {
|
|
10
|
+
if (typeof sourceColumn !== "string") {
|
|
11
|
+
throw new TypeError("connectedComponents() sourceColumn must be a string.");
|
|
12
|
+
}
|
|
13
|
+
if (typeof targetColumn !== "string") {
|
|
14
|
+
throw new TypeError("connectedComponents() targetColumn must be a string.");
|
|
15
|
+
}
|
|
16
|
+
if (options === null || typeof options !== "object" || Array.isArray(options)) {
|
|
17
|
+
throw new TypeError("connectedComponents() options must be an object.");
|
|
18
|
+
}
|
|
19
|
+
if (options.mode !== undefined &&
|
|
20
|
+
!["weak", "strong"].includes(options.mode)) {
|
|
21
|
+
throw new TypeError('connectedComponents() options.mode must be "weak" or "strong".');
|
|
22
|
+
}
|
|
23
|
+
if (options.outputTable !== undefined &&
|
|
24
|
+
typeof options.outputTable !== "string" &&
|
|
25
|
+
typeof options.outputTable !== "boolean") {
|
|
26
|
+
throw new TypeError("connectedComponents() options.outputTable must be a string or boolean.");
|
|
27
|
+
}
|
|
28
|
+
const temporalOptions = prepareGraphTemporalOptions(options, undefined, "connectedComponents()");
|
|
29
|
+
if (temporalOptions !== undefined && options.mode !== "strong") {
|
|
30
|
+
throw new TypeError('connectedComponents() chronological options require options.mode to be explicitly set to "strong".');
|
|
31
|
+
}
|
|
32
|
+
options = structuredClone(options);
|
|
33
|
+
const mode = options.mode ?? "weak";
|
|
34
|
+
const parameters = { sourceColumn, targetColumn, options };
|
|
35
|
+
return queueGraphResult(simpleTable, {
|
|
36
|
+
method: "connectedComponents()",
|
|
37
|
+
parameters,
|
|
38
|
+
outputTable: options.outputTable,
|
|
39
|
+
preflight: temporalOptions === undefined
|
|
40
|
+
? undefined
|
|
41
|
+
: (input) => validateGraphTemporalEvents(input, temporalOptions, "connectedComponents()", parameters),
|
|
42
|
+
values: (schema) => {
|
|
43
|
+
const temporal = validateInputs(schema, sourceColumn, targetColumn, temporalOptions).temporal;
|
|
44
|
+
return temporal === undefined ? [] : [temporal.gapParameter];
|
|
45
|
+
},
|
|
46
|
+
buildSelect: (input, schema) => connectedComponentsSelect(input, schema, sourceColumn, targetColumn, mode, temporalOptions),
|
|
47
|
+
outputSchema: (schema) => ({
|
|
48
|
+
componentId: "BIGINT",
|
|
49
|
+
node: validateInputs(schema, sourceColumn, targetColumn, temporalOptions).endpoints.idType,
|
|
50
|
+
}),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function validateEndpoints(schema, source, target) {
|
|
54
|
+
return getGraphEndpointColumns(schema, source, target, "connectedComponents()");
|
|
55
|
+
}
|
|
56
|
+
function validateInputs(schema, source, target, temporalOptions) {
|
|
57
|
+
const endpoints = validateEndpoints(schema, source, target);
|
|
58
|
+
const temporal = temporalOptions === undefined
|
|
59
|
+
? undefined
|
|
60
|
+
: prepareGraphTemporalSql(schema, temporalOptions, "connectedComponents()");
|
|
61
|
+
return { endpoints, temporal };
|
|
62
|
+
}
|
|
63
|
+
function connectedComponentsSelect(input, schema, source, target, mode, temporalOptions) {
|
|
64
|
+
const prepared = prepareGraphSql(input, schema, source, target, "connectedComponents()");
|
|
65
|
+
if (temporalOptions !== undefined) {
|
|
66
|
+
return buildChronologicalGraphComponentsSql(prepared, prepareGraphTemporalSql(schema, temporalOptions, "connectedComponents()"));
|
|
67
|
+
}
|
|
68
|
+
const relationNames = mode === "weak"
|
|
69
|
+
? [
|
|
70
|
+
"graph_edges",
|
|
71
|
+
"graph_nodes",
|
|
72
|
+
"graph_component_labels",
|
|
73
|
+
"graph_component_roots",
|
|
74
|
+
]
|
|
75
|
+
: [
|
|
76
|
+
"graph_edges",
|
|
77
|
+
"graph_nodes",
|
|
78
|
+
"graph_reachable",
|
|
79
|
+
"graph_component_members",
|
|
80
|
+
"graph_component_roots",
|
|
81
|
+
];
|
|
82
|
+
const relations = prepared.relationNames(relationNames);
|
|
83
|
+
const edges = relations.graph_edges;
|
|
84
|
+
const nodes = relations.graph_nodes;
|
|
85
|
+
const roots = relations.graph_component_roots;
|
|
86
|
+
const q = quoteIdentifier;
|
|
87
|
+
const common = `${edges} AS (
|
|
88
|
+
${prepared.edges(mode === "weak" ? "both" : "outgoing")}
|
|
89
|
+
), ${nodes} AS (
|
|
90
|
+
SELECT ${q("__from")} AS ${q("node")},
|
|
91
|
+
${q("__from_key")} AS ${q("__key")}
|
|
92
|
+
FROM ${edges}
|
|
93
|
+
UNION
|
|
94
|
+
SELECT ${q("__to")} AS ${q("node")},
|
|
95
|
+
${q("__to_key")} AS ${q("__key")}
|
|
96
|
+
FROM ${edges}
|
|
97
|
+
)`;
|
|
98
|
+
if (mode === "weak") {
|
|
99
|
+
const labels = relations.graph_component_labels;
|
|
100
|
+
return `WITH RECURSIVE ${common}, ${buildWeakGraphComponentsSql(edges, nodes, labels, roots)}
|
|
101
|
+
SELECT ${q("roots")}.${q("componentId")}, ${q("labels")}.${q("node")}
|
|
102
|
+
FROM ${labels} AS ${q("labels")}
|
|
103
|
+
INNER JOIN ${roots} AS ${q("roots")}
|
|
104
|
+
ON ${q("labels")}.${q("__root_key")} =
|
|
105
|
+
${q("roots")}.${q("__root_key")}
|
|
106
|
+
ORDER BY ${q("labels")}.${q("__node_key")}`;
|
|
107
|
+
}
|
|
108
|
+
const reachable = relations.graph_reachable;
|
|
109
|
+
const members = relations.graph_component_members;
|
|
110
|
+
return `WITH RECURSIVE ${common}, ${reachable}(
|
|
111
|
+
${q("__start_key")}, ${q("__node_key")}
|
|
112
|
+
) AS (
|
|
113
|
+
SELECT ${q("__key")}, ${q("__key")} FROM ${nodes}
|
|
114
|
+
UNION
|
|
115
|
+
SELECT ${q("reached")}.${q("__start_key")},
|
|
116
|
+
${q("edges")}.${q("__to_key")}
|
|
117
|
+
FROM ${reachable} AS ${q("reached")}
|
|
118
|
+
INNER JOIN ${edges} AS ${q("edges")}
|
|
119
|
+
ON ${q("reached")}.${q("__node_key")} =
|
|
120
|
+
${q("edges")}.${q("__from_key")}
|
|
121
|
+
), ${members} AS (
|
|
122
|
+
SELECT ${q("nodes")}.${q("node")}, ${q("nodes")}.${q("__key")},
|
|
123
|
+
MIN(${q("forward")}.${q("__start_key")}) AS ${q("__root_key")}
|
|
124
|
+
FROM ${nodes} AS ${q("nodes")}
|
|
125
|
+
INNER JOIN ${reachable} AS ${q("forward")}
|
|
126
|
+
ON ${q("nodes")}.${q("__key")} =
|
|
127
|
+
${q("forward")}.${q("__node_key")}
|
|
128
|
+
INNER JOIN ${reachable} AS ${q("reverse")}
|
|
129
|
+
ON ${q("forward")}.${q("__start_key")} =
|
|
130
|
+
${q("reverse")}.${q("__node_key")}
|
|
131
|
+
AND ${q("nodes")}.${q("__key")} =
|
|
132
|
+
${q("reverse")}.${q("__start_key")}
|
|
133
|
+
GROUP BY ${q("nodes")}.${q("node")}, ${q("nodes")}.${q("__key")}
|
|
134
|
+
), ${roots} AS (
|
|
135
|
+
SELECT ${q("__root_key")},
|
|
136
|
+
CAST(row_number() OVER (ORDER BY ${q("__root_key")}) - 1 AS BIGINT)
|
|
137
|
+
AS ${q("componentId")}
|
|
138
|
+
FROM (SELECT DISTINCT ${q("__root_key")} FROM ${members})
|
|
139
|
+
AS ${q("distinct_roots")}
|
|
140
|
+
)
|
|
141
|
+
SELECT ${q("roots")}.${q("componentId")}, ${q("members")}.${q("node")}
|
|
142
|
+
FROM ${members} AS ${q("members")}
|
|
143
|
+
INNER JOIN ${roots} AS ${q("roots")}
|
|
144
|
+
ON ${q("members")}.${q("__root_key")} =
|
|
145
|
+
${q("roots")}.${q("__root_key")}
|
|
146
|
+
ORDER BY ${q("members")}.${q("__key")}`;
|
|
147
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type SimpleTable from "../class/SimpleTable.js";
|
|
2
|
+
type DegreeOptions = {
|
|
3
|
+
count?: "edges" | "neighbors";
|
|
4
|
+
weight?: string;
|
|
5
|
+
outputTable?: string | boolean;
|
|
6
|
+
};
|
|
7
|
+
export default function degree(simpleTable: SimpleTable, sourceColumn: string, targetColumn: string, options?: DegreeOptions): SimpleTable;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=degree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"degree.d.ts","sourceRoot":"","sources":["../../src/methods/degree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAQvD,KAAK,aAAa,GAAG;IACnB,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,aAAkB,GAC1B,WAAW,CAoEb"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import getGraphEndpointColumns from "../helpers/getGraphEndpointColumns.js";
|
|
2
|
+
import getGraphWeightColumn from "../helpers/getGraphWeightColumn.js";
|
|
3
|
+
import { prepareGraphSql } from "../helpers/prepareGraphTraversal.js";
|
|
4
|
+
import queueGraphResult from "../helpers/queueGraphResult.js";
|
|
5
|
+
import quoteIdentifier from "../helpers/quoteIdentifier.js";
|
|
6
|
+
export default function degree(simpleTable, sourceColumn, targetColumn, options = {}) {
|
|
7
|
+
if (typeof sourceColumn !== "string") {
|
|
8
|
+
throw new TypeError("degree() sourceColumn must be a string.");
|
|
9
|
+
}
|
|
10
|
+
if (typeof targetColumn !== "string") {
|
|
11
|
+
throw new TypeError("degree() targetColumn must be a string.");
|
|
12
|
+
}
|
|
13
|
+
if (options === null || typeof options !== "object" || Array.isArray(options)) {
|
|
14
|
+
throw new TypeError("degree() options must be an object.");
|
|
15
|
+
}
|
|
16
|
+
if (options.count !== undefined &&
|
|
17
|
+
!["edges", "neighbors"].includes(options.count)) {
|
|
18
|
+
throw new TypeError('degree() options.count must be "edges" or "neighbors".');
|
|
19
|
+
}
|
|
20
|
+
if (options.weight !== undefined && typeof options.weight !== "string") {
|
|
21
|
+
throw new TypeError("degree() options.weight must be a string.");
|
|
22
|
+
}
|
|
23
|
+
if (options.outputTable !== undefined &&
|
|
24
|
+
typeof options.outputTable !== "string" &&
|
|
25
|
+
typeof options.outputTable !== "boolean") {
|
|
26
|
+
throw new TypeError("degree() options.outputTable must be a string or boolean.");
|
|
27
|
+
}
|
|
28
|
+
if (options.weight !== undefined && options.count === "neighbors") {
|
|
29
|
+
throw new TypeError('degree() options.weight cannot be combined with count: "neighbors" because weighted sums operate on edges, not distinct neighbors.');
|
|
30
|
+
}
|
|
31
|
+
options = structuredClone(options);
|
|
32
|
+
const count = options.count ?? "edges";
|
|
33
|
+
const weight = options.weight;
|
|
34
|
+
const parameters = { sourceColumn, targetColumn, options };
|
|
35
|
+
return queueGraphResult(simpleTable, {
|
|
36
|
+
method: "degree()",
|
|
37
|
+
parameters,
|
|
38
|
+
outputTable: options.outputTable,
|
|
39
|
+
values: (schema) => {
|
|
40
|
+
validateInputs(schema, sourceColumn, targetColumn, weight);
|
|
41
|
+
return [];
|
|
42
|
+
},
|
|
43
|
+
buildSelect: (input, schema) => degreeSelect(input, schema, sourceColumn, targetColumn, count, weight),
|
|
44
|
+
outputSchema: (schema) => {
|
|
45
|
+
const validated = validateInputs(schema, sourceColumn, targetColumn, weight);
|
|
46
|
+
return {
|
|
47
|
+
node: validated.idType,
|
|
48
|
+
incoming: validated.degreeType,
|
|
49
|
+
outgoing: validated.degreeType,
|
|
50
|
+
total: validated.degreeType,
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function validateInputs(schema, source, target, weight) {
|
|
56
|
+
const endpoints = getGraphEndpointColumns(schema, source, target, "degree()");
|
|
57
|
+
const degreeType = weight === undefined
|
|
58
|
+
? "BIGINT"
|
|
59
|
+
: sumType(getGraphWeightColumn(schema, weight, "degree()").distanceType);
|
|
60
|
+
return { idType: endpoints.idType, degreeType };
|
|
61
|
+
}
|
|
62
|
+
function sumType(type) {
|
|
63
|
+
// DuckDB SUM widens FLOAT to DOUBLE; retain that aggregate precision.
|
|
64
|
+
return type === "FLOAT" ? "DOUBLE" : type;
|
|
65
|
+
}
|
|
66
|
+
function degreeSelect(input, schema, source, target, count, weight) {
|
|
67
|
+
const prepared = prepareGraphSql(input, schema, source, target, "degree()");
|
|
68
|
+
const weightColumn = weight === undefined
|
|
69
|
+
? undefined
|
|
70
|
+
: getGraphWeightColumn(schema, weight, "degree()");
|
|
71
|
+
const degreeType = sumType(weightColumn?.distanceType ?? "BIGINT");
|
|
72
|
+
const relations = prepared.relationNames([
|
|
73
|
+
"graph_edges",
|
|
74
|
+
"graph_node_candidates",
|
|
75
|
+
"graph_nodes",
|
|
76
|
+
"graph_incoming",
|
|
77
|
+
"graph_outgoing",
|
|
78
|
+
]);
|
|
79
|
+
const edges = relations.graph_edges;
|
|
80
|
+
const candidates = relations.graph_node_candidates;
|
|
81
|
+
const nodes = relations.graph_nodes;
|
|
82
|
+
const incoming = relations.graph_incoming;
|
|
83
|
+
const outgoing = relations.graph_outgoing;
|
|
84
|
+
const q = quoteIdentifier;
|
|
85
|
+
const edgeWeight = weightColumn === undefined
|
|
86
|
+
? undefined
|
|
87
|
+
: `CAST(${q("edges")}.${q(weightColumn.column)} AS ${degreeType}) AS ${q("__weight")}`;
|
|
88
|
+
const aggregate = (direction) => {
|
|
89
|
+
const neighborKey = direction === "incoming" ? "__from_key" : "__to_key";
|
|
90
|
+
if (edgeWeight !== undefined) {
|
|
91
|
+
return `CAST(SUM(${q("__weight")}) AS ${degreeType})`;
|
|
92
|
+
}
|
|
93
|
+
return count === "neighbors"
|
|
94
|
+
? `COUNT(DISTINCT ${q(neighborKey)})`
|
|
95
|
+
: "COUNT(*)";
|
|
96
|
+
};
|
|
97
|
+
const zero = `CAST(0 AS ${degreeType})`;
|
|
98
|
+
const incomingDegree = `COALESCE(${q("incoming")}.${q("incoming")}, ${zero})`;
|
|
99
|
+
const outgoingDegree = `COALESCE(${q("outgoing")}.${q("outgoing")}, ${zero})`;
|
|
100
|
+
return `WITH ${edges} AS (
|
|
101
|
+
${prepared.edges("outgoing", edgeWeight === undefined ? [] : [edgeWeight])}
|
|
102
|
+
), ${candidates} AS (
|
|
103
|
+
SELECT ${q("__from")} AS ${q("node")},
|
|
104
|
+
${q("__from_key")} AS ${q("__key")}
|
|
105
|
+
FROM ${edges}
|
|
106
|
+
UNION ALL
|
|
107
|
+
SELECT ${q("__to")} AS ${q("node")},
|
|
108
|
+
${q("__to_key")} AS ${q("__key")}
|
|
109
|
+
FROM ${edges}
|
|
110
|
+
), ${nodes} AS (
|
|
111
|
+
SELECT MIN(${q("node")}) AS ${q("node")}, ${q("__key")}
|
|
112
|
+
FROM ${candidates}
|
|
113
|
+
GROUP BY ${q("__key")}
|
|
114
|
+
), ${incoming} AS (
|
|
115
|
+
SELECT ${q("__to_key")} AS ${q("__key")},
|
|
116
|
+
${aggregate("incoming")} AS ${q("incoming")}
|
|
117
|
+
FROM ${edges}
|
|
118
|
+
GROUP BY ${q("__to_key")}
|
|
119
|
+
), ${outgoing} AS (
|
|
120
|
+
SELECT ${q("__from_key")} AS ${q("__key")},
|
|
121
|
+
${aggregate("outgoing")} AS ${q("outgoing")}
|
|
122
|
+
FROM ${edges}
|
|
123
|
+
GROUP BY ${q("__from_key")}
|
|
124
|
+
)
|
|
125
|
+
SELECT ${q("nodes")}.${q("node")},
|
|
126
|
+
${incomingDegree} AS ${q("incoming")},
|
|
127
|
+
${outgoingDegree} AS ${q("outgoing")},
|
|
128
|
+
CAST(${incomingDegree} + ${outgoingDegree} AS ${degreeType}) AS ${q("total")}
|
|
129
|
+
FROM ${nodes} AS ${q("nodes")}
|
|
130
|
+
LEFT JOIN ${incoming} AS ${q("incoming")}
|
|
131
|
+
ON ${q("nodes")}.${q("__key")} = ${q("incoming")}.${q("__key")}
|
|
132
|
+
LEFT JOIN ${outgoing} AS ${q("outgoing")}
|
|
133
|
+
ON ${q("nodes")}.${q("__key")} = ${q("outgoing")}.${q("__key")}
|
|
134
|
+
ORDER BY ${q("total")} DESC, ${q("nodes")}.${q("__key")}`;
|
|
135
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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 DistancesOptions = GraphTemporalOptions & {
|
|
6
|
+
direction?: GraphDirection;
|
|
7
|
+
outputTable?: string | boolean;
|
|
8
|
+
weight?: string;
|
|
9
|
+
};
|
|
10
|
+
export default function distances(simpleTable: SimpleTable, sourceColumn: string, targetColumn: string, startNodes: GraphId | GraphId[], options?: DistancesOptions): SimpleTable;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=distances.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distances.d.ts","sourceRoot":"","sources":["../../src/methods/distances.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAIvD,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;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,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,CAyGb"}
|