@jaepil/uqa 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +788 -0
  3. package/dist/types/src/analysis/analyzer.d.ts +27 -0
  4. package/dist/types/src/analysis/analyzer.d.ts.map +1 -0
  5. package/dist/types/src/analysis/char-filter.d.ts +27 -0
  6. package/dist/types/src/analysis/char-filter.d.ts.map +1 -0
  7. package/dist/types/src/analysis/token-filter.d.ts +73 -0
  8. package/dist/types/src/analysis/token-filter.d.ts.map +1 -0
  9. package/dist/types/src/analysis/tokenizer.d.ts +42 -0
  10. package/dist/types/src/analysis/tokenizer.d.ts.map +1 -0
  11. package/dist/types/src/api/query-builder.d.ts +103 -0
  12. package/dist/types/src/api/query-builder.d.ts.map +1 -0
  13. package/dist/types/src/cli/repl.d.ts +42 -0
  14. package/dist/types/src/cli/repl.d.ts.map +1 -0
  15. package/dist/types/src/core/functor.d.ts +38 -0
  16. package/dist/types/src/core/functor.d.ts.map +1 -0
  17. package/dist/types/src/core/hierarchical.d.ts +24 -0
  18. package/dist/types/src/core/hierarchical.d.ts.map +1 -0
  19. package/dist/types/src/core/posting-list.d.ts +43 -0
  20. package/dist/types/src/core/posting-list.d.ts.map +1 -0
  21. package/dist/types/src/core/types.d.ts +116 -0
  22. package/dist/types/src/core/types.d.ts.map +1 -0
  23. package/dist/types/src/engine.d.ts +130 -0
  24. package/dist/types/src/engine.d.ts.map +1 -0
  25. package/dist/types/src/execution/batch.d.ts +144 -0
  26. package/dist/types/src/execution/batch.d.ts.map +1 -0
  27. package/dist/types/src/execution/physical.d.ts +18 -0
  28. package/dist/types/src/execution/physical.d.ts.map +1 -0
  29. package/dist/types/src/execution/relational.d.ts +174 -0
  30. package/dist/types/src/execution/relational.d.ts.map +1 -0
  31. package/dist/types/src/execution/scan.d.ts +41 -0
  32. package/dist/types/src/execution/scan.d.ts.map +1 -0
  33. package/dist/types/src/execution/spill.d.ts +39 -0
  34. package/dist/types/src/execution/spill.d.ts.map +1 -0
  35. package/dist/types/src/fdw/arrow-handler.d.ts +28 -0
  36. package/dist/types/src/fdw/arrow-handler.d.ts.map +1 -0
  37. package/dist/types/src/fdw/duckdb-handler.d.ts +32 -0
  38. package/dist/types/src/fdw/duckdb-handler.d.ts.map +1 -0
  39. package/dist/types/src/fdw/foreign-table.d.ts +47 -0
  40. package/dist/types/src/fdw/foreign-table.d.ts.map +1 -0
  41. package/dist/types/src/fdw/handler.d.ts +52 -0
  42. package/dist/types/src/fdw/handler.d.ts.map +1 -0
  43. package/dist/types/src/fusion/attention.d.ts +23 -0
  44. package/dist/types/src/fusion/attention.d.ts.map +1 -0
  45. package/dist/types/src/fusion/boolean.d.ts +6 -0
  46. package/dist/types/src/fusion/boolean.d.ts.map +1 -0
  47. package/dist/types/src/fusion/learned.d.ts +12 -0
  48. package/dist/types/src/fusion/learned.d.ts.map +1 -0
  49. package/dist/types/src/fusion/log-odds.d.ts +87 -0
  50. package/dist/types/src/fusion/log-odds.d.ts.map +1 -0
  51. package/dist/types/src/fusion/query-features.d.ts +8 -0
  52. package/dist/types/src/fusion/query-features.d.ts.map +1 -0
  53. package/dist/types/src/graph/centrality.d.ts +35 -0
  54. package/dist/types/src/graph/centrality.d.ts.map +1 -0
  55. package/dist/types/src/graph/cross-paradigm.d.ts +68 -0
  56. package/dist/types/src/graph/cross-paradigm.d.ts.map +1 -0
  57. package/dist/types/src/graph/cypher/ast.d.ts +175 -0
  58. package/dist/types/src/graph/cypher/ast.d.ts.map +1 -0
  59. package/dist/types/src/graph/cypher/compiler.d.ts +60 -0
  60. package/dist/types/src/graph/cypher/compiler.d.ts.map +1 -0
  61. package/dist/types/src/graph/cypher/lexer.d.ts +82 -0
  62. package/dist/types/src/graph/cypher/lexer.d.ts.map +1 -0
  63. package/dist/types/src/graph/cypher/parser.d.ts +50 -0
  64. package/dist/types/src/graph/cypher/parser.d.ts.map +1 -0
  65. package/dist/types/src/graph/delta.d.ts +31 -0
  66. package/dist/types/src/graph/delta.d.ts.map +1 -0
  67. package/dist/types/src/graph/graph-embedding.d.ts +13 -0
  68. package/dist/types/src/graph/graph-embedding.d.ts.map +1 -0
  69. package/dist/types/src/graph/incremental-match.d.ts +16 -0
  70. package/dist/types/src/graph/incremental-match.d.ts.map +1 -0
  71. package/dist/types/src/graph/index.d.ts +58 -0
  72. package/dist/types/src/graph/index.d.ts.map +1 -0
  73. package/dist/types/src/graph/join.d.ts +18 -0
  74. package/dist/types/src/graph/join.d.ts.map +1 -0
  75. package/dist/types/src/graph/message-passing.d.ts +17 -0
  76. package/dist/types/src/graph/message-passing.d.ts.map +1 -0
  77. package/dist/types/src/graph/operators.d.ts +81 -0
  78. package/dist/types/src/graph/operators.d.ts.map +1 -0
  79. package/dist/types/src/graph/pattern.d.ts +63 -0
  80. package/dist/types/src/graph/pattern.d.ts.map +1 -0
  81. package/dist/types/src/graph/posting-list.d.ts +24 -0
  82. package/dist/types/src/graph/posting-list.d.ts.map +1 -0
  83. package/dist/types/src/graph/rpq-optimizer.d.ts +25 -0
  84. package/dist/types/src/graph/rpq-optimizer.d.ts.map +1 -0
  85. package/dist/types/src/graph/store.d.ts +61 -0
  86. package/dist/types/src/graph/store.d.ts.map +1 -0
  87. package/dist/types/src/graph/temporal-filter.d.ts +12 -0
  88. package/dist/types/src/graph/temporal-filter.d.ts.map +1 -0
  89. package/dist/types/src/graph/temporal-pattern-match.d.ts +26 -0
  90. package/dist/types/src/graph/temporal-pattern-match.d.ts.map +1 -0
  91. package/dist/types/src/graph/temporal-traverse.d.ts +25 -0
  92. package/dist/types/src/graph/temporal-traverse.d.ts.map +1 -0
  93. package/dist/types/src/graph/versioned-store.d.ts +64 -0
  94. package/dist/types/src/graph/versioned-store.d.ts.map +1 -0
  95. package/dist/types/src/index.d.ts +20 -0
  96. package/dist/types/src/index.d.ts.map +1 -0
  97. package/dist/types/src/joins/base.d.ts +18 -0
  98. package/dist/types/src/joins/base.d.ts.map +1 -0
  99. package/dist/types/src/joins/cross-paradigm.d.ts +46 -0
  100. package/dist/types/src/joins/cross-paradigm.d.ts.map +1 -0
  101. package/dist/types/src/joins/cross.d.ts +9 -0
  102. package/dist/types/src/joins/cross.d.ts.map +1 -0
  103. package/dist/types/src/joins/index.d.ts +7 -0
  104. package/dist/types/src/joins/index.d.ts.map +1 -0
  105. package/dist/types/src/joins/inner.d.ts +7 -0
  106. package/dist/types/src/joins/inner.d.ts.map +1 -0
  107. package/dist/types/src/joins/outer.d.ts +16 -0
  108. package/dist/types/src/joins/outer.d.ts.map +1 -0
  109. package/dist/types/src/joins/semi.d.ts +22 -0
  110. package/dist/types/src/joins/semi.d.ts.map +1 -0
  111. package/dist/types/src/joins/sort-merge.d.ts +7 -0
  112. package/dist/types/src/joins/sort-merge.d.ts.map +1 -0
  113. package/dist/types/src/math/linalg.d.ts +27 -0
  114. package/dist/types/src/math/linalg.d.ts.map +1 -0
  115. package/dist/types/src/math/random.d.ts +15 -0
  116. package/dist/types/src/math/random.d.ts.map +1 -0
  117. package/dist/types/src/operators/aggregation.d.ts +65 -0
  118. package/dist/types/src/operators/aggregation.d.ts.map +1 -0
  119. package/dist/types/src/operators/attention.d.ts +16 -0
  120. package/dist/types/src/operators/attention.d.ts.map +1 -0
  121. package/dist/types/src/operators/backend.d.ts +52 -0
  122. package/dist/types/src/operators/backend.d.ts.map +1 -0
  123. package/dist/types/src/operators/base.d.ts +32 -0
  124. package/dist/types/src/operators/base.d.ts.map +1 -0
  125. package/dist/types/src/operators/boolean.d.ts +23 -0
  126. package/dist/types/src/operators/boolean.d.ts.map +1 -0
  127. package/dist/types/src/operators/calibrated-vector.d.ts +56 -0
  128. package/dist/types/src/operators/calibrated-vector.d.ts.map +1 -0
  129. package/dist/types/src/operators/deep-fusion.d.ts +104 -0
  130. package/dist/types/src/operators/deep-fusion.d.ts.map +1 -0
  131. package/dist/types/src/operators/deep-learn.d.ts +87 -0
  132. package/dist/types/src/operators/deep-learn.d.ts.map +1 -0
  133. package/dist/types/src/operators/hierarchical.d.ts +44 -0
  134. package/dist/types/src/operators/hierarchical.d.ts.map +1 -0
  135. package/dist/types/src/operators/hybrid.d.ts +75 -0
  136. package/dist/types/src/operators/hybrid.d.ts.map +1 -0
  137. package/dist/types/src/operators/learned-fusion.d.ts +15 -0
  138. package/dist/types/src/operators/learned-fusion.d.ts.map +1 -0
  139. package/dist/types/src/operators/multi-field.d.ts +13 -0
  140. package/dist/types/src/operators/multi-field.d.ts.map +1 -0
  141. package/dist/types/src/operators/multi-stage.d.ts +12 -0
  142. package/dist/types/src/operators/multi-stage.d.ts.map +1 -0
  143. package/dist/types/src/operators/primitive.d.ts +75 -0
  144. package/dist/types/src/operators/primitive.d.ts.map +1 -0
  145. package/dist/types/src/operators/progressive-fusion.d.ts +13 -0
  146. package/dist/types/src/operators/progressive-fusion.d.ts.map +1 -0
  147. package/dist/types/src/operators/sparse.d.ts +12 -0
  148. package/dist/types/src/operators/sparse.d.ts.map +1 -0
  149. package/dist/types/src/planner/cardinality.d.ts +110 -0
  150. package/dist/types/src/planner/cardinality.d.ts.map +1 -0
  151. package/dist/types/src/planner/cost-model.d.ts +16 -0
  152. package/dist/types/src/planner/cost-model.d.ts.map +1 -0
  153. package/dist/types/src/planner/executor.d.ts +48 -0
  154. package/dist/types/src/planner/executor.d.ts.map +1 -0
  155. package/dist/types/src/planner/join-enumerator.d.ts +76 -0
  156. package/dist/types/src/planner/join-enumerator.d.ts.map +1 -0
  157. package/dist/types/src/planner/join-graph.d.ts +61 -0
  158. package/dist/types/src/planner/join-graph.d.ts.map +1 -0
  159. package/dist/types/src/planner/join-order.d.ts +24 -0
  160. package/dist/types/src/planner/join-order.d.ts.map +1 -0
  161. package/dist/types/src/planner/optimizer.d.ts +62 -0
  162. package/dist/types/src/planner/optimizer.d.ts.map +1 -0
  163. package/dist/types/src/planner/parallel.d.ts +43 -0
  164. package/dist/types/src/planner/parallel.d.ts.map +1 -0
  165. package/dist/types/src/scoring/bayesian-bm25.d.ts +22 -0
  166. package/dist/types/src/scoring/bayesian-bm25.d.ts.map +1 -0
  167. package/dist/types/src/scoring/bm25.d.ts +20 -0
  168. package/dist/types/src/scoring/bm25.d.ts.map +1 -0
  169. package/dist/types/src/scoring/calibration.d.ts +68 -0
  170. package/dist/types/src/scoring/calibration.d.ts.map +1 -0
  171. package/dist/types/src/scoring/external-prior.d.ts +55 -0
  172. package/dist/types/src/scoring/external-prior.d.ts.map +1 -0
  173. package/dist/types/src/scoring/fusion-wand.d.ts +19 -0
  174. package/dist/types/src/scoring/fusion-wand.d.ts.map +1 -0
  175. package/dist/types/src/scoring/multi-field.d.ts +10 -0
  176. package/dist/types/src/scoring/multi-field.d.ts.map +1 -0
  177. package/dist/types/src/scoring/parameter-learner.d.ts +42 -0
  178. package/dist/types/src/scoring/parameter-learner.d.ts.map +1 -0
  179. package/dist/types/src/scoring/vector.d.ts +42 -0
  180. package/dist/types/src/scoring/vector.d.ts.map +1 -0
  181. package/dist/types/src/scoring/wand.d.ts +51 -0
  182. package/dist/types/src/scoring/wand.d.ts.map +1 -0
  183. package/dist/types/src/sql/compiler.d.ts +551 -0
  184. package/dist/types/src/sql/compiler.d.ts.map +1 -0
  185. package/dist/types/src/sql/expr-evaluator.d.ts +43 -0
  186. package/dist/types/src/sql/expr-evaluator.d.ts.map +1 -0
  187. package/dist/types/src/sql/fts-query.d.ts +60 -0
  188. package/dist/types/src/sql/fts-query.d.ts.map +1 -0
  189. package/dist/types/src/sql/table.d.ts +72 -0
  190. package/dist/types/src/sql/table.d.ts.map +1 -0
  191. package/dist/types/src/storage/abc/document-store.d.ts +44 -0
  192. package/dist/types/src/storage/abc/document-store.d.ts.map +1 -0
  193. package/dist/types/src/storage/abc/graph-store.d.ts +109 -0
  194. package/dist/types/src/storage/abc/graph-store.d.ts.map +1 -0
  195. package/dist/types/src/storage/abc/inverted-index.d.ts +118 -0
  196. package/dist/types/src/storage/abc/inverted-index.d.ts.map +1 -0
  197. package/dist/types/src/storage/block-max-index.d.ts +45 -0
  198. package/dist/types/src/storage/block-max-index.d.ts.map +1 -0
  199. package/dist/types/src/storage/btree-index.d.ts +18 -0
  200. package/dist/types/src/storage/btree-index.d.ts.map +1 -0
  201. package/dist/types/src/storage/catalog.d.ts +87 -0
  202. package/dist/types/src/storage/catalog.d.ts.map +1 -0
  203. package/dist/types/src/storage/document-store.d.ts +20 -0
  204. package/dist/types/src/storage/document-store.d.ts.map +1 -0
  205. package/dist/types/src/storage/index-abc.d.ts +16 -0
  206. package/dist/types/src/storage/index-abc.d.ts.map +1 -0
  207. package/dist/types/src/storage/index-manager.d.ts +19 -0
  208. package/dist/types/src/storage/index-manager.d.ts.map +1 -0
  209. package/dist/types/src/storage/index-types.d.ts +10 -0
  210. package/dist/types/src/storage/index-types.d.ts.map +1 -0
  211. package/dist/types/src/storage/inverted-index.d.ts +55 -0
  212. package/dist/types/src/storage/inverted-index.d.ts.map +1 -0
  213. package/dist/types/src/storage/ivf-index.d.ts +57 -0
  214. package/dist/types/src/storage/ivf-index.d.ts.map +1 -0
  215. package/dist/types/src/storage/managed-connection.d.ts +64 -0
  216. package/dist/types/src/storage/managed-connection.d.ts.map +1 -0
  217. package/dist/types/src/storage/spatial-index.d.ts +18 -0
  218. package/dist/types/src/storage/spatial-index.d.ts.map +1 -0
  219. package/dist/types/src/storage/sqlite-document-store.d.ts +54 -0
  220. package/dist/types/src/storage/sqlite-document-store.d.ts.map +1 -0
  221. package/dist/types/src/storage/sqlite-graph-store.d.ts +59 -0
  222. package/dist/types/src/storage/sqlite-graph-store.d.ts.map +1 -0
  223. package/dist/types/src/storage/sqlite-inverted-index.d.ts +75 -0
  224. package/dist/types/src/storage/sqlite-inverted-index.d.ts.map +1 -0
  225. package/dist/types/src/storage/transaction.d.ts +15 -0
  226. package/dist/types/src/storage/transaction.d.ts.map +1 -0
  227. package/dist/types/src/storage/vector-index.d.ts +23 -0
  228. package/dist/types/src/storage/vector-index.d.ts.map +1 -0
  229. package/dist/uqa.es.js +16156 -0
  230. package/dist/uqa.es.js.map +1 -0
  231. package/dist/uqa.umd.js +11 -0
  232. package/dist/uqa.umd.js.map +1 -0
  233. package/package.json +73 -0
@@ -0,0 +1,110 @@
1
+ import type { IndexStats } from "../core/types.js";
2
+ import type { ColumnStats } from "../sql/table.js";
3
+ import { Operator } from "../operators/base.js";
4
+ export declare class GraphStats {
5
+ numVertices: number;
6
+ numEdges: number;
7
+ labelCounts: Map<string, number>;
8
+ avgOutDegree: number;
9
+ degreeDistribution: Map<number, number>;
10
+ minTimestamp: number | null;
11
+ maxTimestamp: number | null;
12
+ graphName: string;
13
+ vertexLabelCounts: Map<string, number>;
14
+ labelDegreeMap: Map<string, number>;
15
+ constructor(opts?: {
16
+ numVertices?: number;
17
+ numEdges?: number;
18
+ labelCounts?: Map<string, number>;
19
+ avgOutDegree?: number;
20
+ degreeDistribution?: Map<number, number>;
21
+ minTimestamp?: number | null;
22
+ maxTimestamp?: number | null;
23
+ graphName?: string;
24
+ vertexLabelCounts?: Map<string, number>;
25
+ labelDegreeMap?: Map<string, number>;
26
+ });
27
+ /**
28
+ * Compute statistics from a graph store instance.
29
+ */
30
+ static fromGraphStore(graphStore: unknown, graph?: string): GraphStats;
31
+ private static _fromNamedGraph;
32
+ labelSelectivity(label: string | null): number;
33
+ edgeDensity(): number;
34
+ }
35
+ export declare class CardinalityEstimator {
36
+ private readonly _columnStats;
37
+ private readonly _graphStats;
38
+ private readonly _graphStore;
39
+ constructor(columnStatsOrOpts?: Map<string, ColumnStats> | {
40
+ columnStats?: Map<string, ColumnStats>;
41
+ graphStats?: GraphStats;
42
+ graphStore?: unknown;
43
+ } | null, opts?: {
44
+ graphStats?: GraphStats;
45
+ graphStore?: unknown;
46
+ });
47
+ estimate(op: Operator, stats: IndexStats): number;
48
+ private _intersectionDamping;
49
+ private static _vectorSelectivity;
50
+ /**
51
+ * Estimate cardinality of a join operand, handling untyped objects.
52
+ */
53
+ estimateJoinSide(side: unknown, stats: IndexStats, n: number): number;
54
+ /**
55
+ * Approximate cardinality via random walk sampling (Section 6.3, Paper 2).
56
+ * Returns estimated number of pattern matches, or -1 if sampling
57
+ * is unavailable (no graph store or empty graph).
58
+ */
59
+ sampleGraphCardinality(pattern: {
60
+ vertexPatterns?: {
61
+ variable: string;
62
+ constraints: ((v: unknown) => boolean)[];
63
+ }[];
64
+ edgePatterns?: {
65
+ sourceVar: string;
66
+ targetVar: string;
67
+ label: string | null;
68
+ }[];
69
+ }, sampleSize?: number): number;
70
+ estimateJoin(leftCard: number, rightCard: number, domainSize: number): number;
71
+ private _filterSelectivity;
72
+ private static _equalitySelectivity;
73
+ static histogramFraction(boundaries: unknown[], low: unknown, high: unknown): number;
74
+ private _rangeSelectivity;
75
+ private _gtSelectivity;
76
+ private _ltSelectivity;
77
+ estimateGraphPattern(patternSize: number, edgeLabels?: string[]): number;
78
+ estimatePathQuery(pathLength: number, edgeLabel?: string): number;
79
+ estimateTraverse(hops: number, label?: string | null): number;
80
+ estimatePatternMatch(vertexCount: number, edgeCount: number, edgeLabels?: string[]): number;
81
+ /**
82
+ * Estimate cardinality for cross-paradigm operators that combine
83
+ * text retrieval, graph traversal, and vector similarity.
84
+ */
85
+ estimateCrossParadigm(op: Operator, stats: IndexStats, paradigm: string): number;
86
+ /**
87
+ * Estimate cardinality for temporal graph pattern queries.
88
+ * Takes into account the time range selectivity.
89
+ */
90
+ estimateTemporalPattern(vertexCount: number, edgeCount: number, edgeLabels: string[], timeRangeStart: number | null, timeRangeEnd: number | null): number;
91
+ /**
92
+ * Estimate cardinality for temporal traversal with time-filtered edges.
93
+ */
94
+ estimateTemporalTraverse(hops: number, label: string | null, timeRangeStart: number | null, timeRangeEnd: number | null): number;
95
+ /**
96
+ * Estimate cardinality for weighted regular path queries.
97
+ * Weighted RPQ considers edge weights/probabilities alongside the
98
+ * structural path pattern.
99
+ */
100
+ estimateWeightedRPQ(pathLength: number, edgeLabels: string[], weightThreshold: number | null): number;
101
+ /**
102
+ * Estimate cardinality for bounded regular path queries.
103
+ * A bounded RPQ has min/max repetition constraints.
104
+ */
105
+ estimateBoundedRPQ(minLength: number, maxLength: number, edgeLabel: string | null): number;
106
+ }
107
+ export declare function columnEntropy(cs: ColumnStats): number;
108
+ export declare function mutualInformationEstimate(csX: ColumnStats, csY: ColumnStats, jointSelectivity: number): number;
109
+ export declare function entropyCardinalityLowerBound(n: number, entropies: number[]): number;
110
+ //# sourceMappingURL=cardinality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cardinality.d.ts","sourceRoot":"","sources":["../../../../src/planner/cardinality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { IndexStats } from "../core/types.js";
2
+ import type { Operator } from "../operators/base.js";
3
+ export interface GraphStats {
4
+ numVertices: number;
5
+ avgOutDegree: number;
6
+ labelSelectivity(label: string | null): number;
7
+ }
8
+ /**
9
+ * Operator cost estimation for query optimization (Definition 6.2.1, Paper 1).
10
+ */
11
+ export declare class CostModel {
12
+ private _graphStats;
13
+ constructor(graphStats?: GraphStats | null);
14
+ estimate(op: Operator, stats: IndexStats): number;
15
+ }
16
+ //# sourceMappingURL=cost-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-model.d.ts","sourceRoot":"","sources":["../../../../src/planner/cost-model.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA6DrD,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;CAChD;AAMD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAoB;gBAE3B,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAI1C,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM;CAsRlD"}
@@ -0,0 +1,48 @@
1
+ import { PostingList } from "../core/posting-list.js";
2
+ import type { ExecutionContext } from "../operators/base.js";
3
+ import type { Operator } from "../operators/base.js";
4
+ export interface ExecutionStats {
5
+ operatorName: string;
6
+ elapsedMs: number;
7
+ resultCount: number;
8
+ children: ExecutionStats[];
9
+ }
10
+ /**
11
+ * Executes an operator tree against an ExecutionContext, collecting
12
+ * per-operator timing statistics.
13
+ */
14
+ export declare class PlanExecutor {
15
+ private readonly _context;
16
+ private _lastStats;
17
+ constructor(context: ExecutionContext);
18
+ /**
19
+ * Execute the operator tree and return the resulting PostingList.
20
+ */
21
+ execute(op: Operator): PostingList;
22
+ /**
23
+ * Return a human-readable EXPLAIN string for the operator tree.
24
+ */
25
+ explain(op: Operator): string;
26
+ /**
27
+ * Return the execution statistics from the last execute() call.
28
+ */
29
+ get lastStats(): ExecutionStats | null;
30
+ private _executeWithStats;
31
+ private _explainNode;
32
+ private _operatorName;
33
+ private _operatorDetails;
34
+ /**
35
+ * Recursive EXPLAIN with full cost and cardinality estimation.
36
+ * Produces a detailed plan tree with estimated rows and cost per node.
37
+ */
38
+ explainAnalyze(op: Operator, opts?: {
39
+ verbose?: boolean;
40
+ }): string;
41
+ private _explainAnalyzeNode;
42
+ /**
43
+ * Return a structured EXPLAIN output as a tree of objects.
44
+ */
45
+ explainTree(op: Operator): Record<string, unknown>;
46
+ private _explainTreeNode;
47
+ }
48
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../../src/planner/executor.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAqBrD,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAMD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,UAAU,CAA+B;gBAErC,OAAO,EAAE,gBAAgB;IAIrC;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,WAAW;IAMlC;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM;IAI7B;;OAEG;IACH,IAAI,SAAS,IAAI,cAAc,GAAG,IAAI,CAErC;IAMD,OAAO,CAAC,iBAAiB;IAgFzB,OAAO,CAAC,YAAY;IAwCpB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,gBAAgB;IA6FxB;;;OAGG;IACH,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM;IAKlE,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIlD,OAAO,CAAC,gBAAgB;CAmDzB"}
@@ -0,0 +1,76 @@
1
+ import type { JoinGraph, JoinPlan } from "./join-graph.js";
2
+ export declare class DPccp {
3
+ private readonly _graph;
4
+ private _dp;
5
+ private readonly _allMask;
6
+ constructor(graph: JoinGraph);
7
+ /**
8
+ * Find the optimal join plan for all relations in the graph.
9
+ *
10
+ * Returns the JoinPlan covering all relations with minimum cost.
11
+ * Falls back to greedy for large queries.
12
+ */
13
+ optimize(): JoinPlan;
14
+ /**
15
+ * Core DPccp: enumerate all connected subgraph complement pairs.
16
+ *
17
+ * Builds connected subgraphs incrementally via BFS extension
18
+ * instead of generating all C(n,k) subsets and filtering.
19
+ * Each connected subgraph S is formed by extending a smaller
20
+ * connected subgraph with an adjacent vertex whose index exceeds
21
+ * min(S), ensuring each subgraph is generated exactly once.
22
+ *
23
+ * Uses a Uint8Array lookup table (indexed by bitmask) for O(1)
24
+ * connectivity checks instead of hash-based set lookups.
25
+ */
26
+ private _enumerateCsgCmpPairs;
27
+ /**
28
+ * Try all valid splits of subsetMask into (s1, s2).
29
+ *
30
+ * Enumerates only submasks that contain the lowest set bit
31
+ * (canonical half) using the identity:
32
+ * rest = subsetMask ^ lowestBit; iterate submasks of
33
+ * rest and OR in lowestBit. This skips the entire
34
+ * non-canonical half without branch checks.
35
+ *
36
+ * Connectivity is checked via O(1) Uint8Array indexing.
37
+ */
38
+ private _enumerateSplits;
39
+ /**
40
+ * Consider joining plan1 and plan2 via the given edges.
41
+ */
42
+ private _emitCsgCmpPair;
43
+ /**
44
+ * Check if the subgraph induced by subset is connected.
45
+ */
46
+ private _isConnected;
47
+ /**
48
+ * Handle disconnected join graphs by cross-joining components.
49
+ *
50
+ * When the join graph is not fully connected (e.g. FROM a, b
51
+ * with no join predicate), identify connected components and
52
+ * join them with cross products.
53
+ */
54
+ private _joinDisconnectedComponents;
55
+ /**
56
+ * Find all connected components of the join graph.
57
+ */
58
+ private _findConnectedComponents;
59
+ /**
60
+ * Build a JoinGraph containing only the given nodes.
61
+ */
62
+ private _buildSubgraph;
63
+ /**
64
+ * Remap plan relation indices from subgraph back to original graph.
65
+ */
66
+ private _remapPlan;
67
+ /**
68
+ * Greedy join ordering for large queries (> MAX_DP_RELATIONS).
69
+ *
70
+ * At each step, pick the pair of existing plans with the lowest
71
+ * join cost and merge them. This is O(n^3) in the number of
72
+ * relations.
73
+ */
74
+ private _greedyOptimize;
75
+ }
76
+ //# sourceMappingURL=join-enumerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-enumerator.d.ts","sourceRoot":"","sources":["../../../../src/planner/join-enumerator.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAY,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AA0BrE,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,KAAK,EAAE,SAAS;IAM5B;;;;;OAKG;IACH,QAAQ,IAAI,QAAQ;IA8CpB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,qBAAqB;IAsD7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA+CvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IAmDnC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA4BhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;CA0FxB"}
@@ -0,0 +1,61 @@
1
+ import type { Operator } from "../operators/base.js";
2
+ import type { ColumnStats } from "../sql/table.js";
3
+ export interface JoinEdge {
4
+ leftNode: number;
5
+ rightNode: number;
6
+ leftField: string;
7
+ rightField: string;
8
+ selectivity: number;
9
+ }
10
+ export interface JoinNode {
11
+ index: number;
12
+ alias: string;
13
+ operator: Operator | null;
14
+ table: unknown;
15
+ cardinality: number;
16
+ columnStats: Map<string, ColumnStats> | null;
17
+ }
18
+ export interface JoinPlan {
19
+ relations: Set<number>;
20
+ cardinality: number;
21
+ cost: number;
22
+ left: JoinPlan | null;
23
+ right: JoinPlan | null;
24
+ joinEdge: JoinEdge | null;
25
+ }
26
+ export declare class JoinGraph {
27
+ private _nodes;
28
+ private _edges;
29
+ private _adjacency;
30
+ /**
31
+ * Add a relation node to the graph.
32
+ * @returns The index of the new node.
33
+ */
34
+ addNode(alias: string, operator: Operator | null, table: unknown, cardinality: number, columnStats?: Map<string, ColumnStats> | null): number;
35
+ /**
36
+ * Add a join edge between two nodes.
37
+ * @param selectivity Fraction of the cross product retained (default 0.1).
38
+ */
39
+ addEdge(leftNode: number, rightNode: number, leftField: string, rightField: string, selectivity?: number): void;
40
+ /** Return the neighbor node indices for the given node. */
41
+ neighbors(node: number): number[];
42
+ /**
43
+ * Return all edges that connect a node in setA to a node in setB.
44
+ */
45
+ edgesBetween(setA: Set<number>, setB: Set<number>): JoinEdge[];
46
+ /** Total number of nodes in the graph. */
47
+ get length(): number;
48
+ /** Access nodes by index. */
49
+ getNode(index: number): JoinNode;
50
+ /** Return all nodes. */
51
+ get nodes(): readonly JoinNode[];
52
+ /** Return all edges. */
53
+ get edges(): readonly JoinEdge[];
54
+ /**
55
+ * Estimate join selectivity between two nodes using column statistics.
56
+ * Returns 1/max(distinct_count_left, distinct_count_right) when stats are
57
+ * available, otherwise falls back to the default selectivity of 0.01.
58
+ */
59
+ estimateJoinSelectivity(leftNode: number, rightNode: number, leftField: string, rightField: string): number;
60
+ }
61
+ //# sourceMappingURL=join-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-graph.d.ts","sourceRoot":"","sources":["../../../../src/planner/join-graph.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMnD,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAMD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAAuC;IAEzD;;;OAGG;IACH,OAAO,CACL,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI,GAC5C,MAAM;IAcT;;;OAGG;IACH,OAAO,CACL,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,SAAM,GAChB,IAAI;IAmBP,2DAA2D;IAC3D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAMjC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE;IAe9D,0CAA0C;IAC1C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,6BAA6B;IAC7B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAQhC,wBAAwB;IACxB,IAAI,KAAK,IAAI,SAAS,QAAQ,EAAE,CAE/B;IAED,wBAAwB;IACxB,IAAI,KAAK,IAAI,SAAS,QAAQ,EAAE,CAE/B;IAED;;;;OAIG;IACH,uBAAuB,CACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM;CAkBV"}
@@ -0,0 +1,24 @@
1
+ import type { JoinEdge, JoinNode, JoinPlan } from "./join-graph.js";
2
+ /**
3
+ * Greedy join-order optimizer.
4
+ *
5
+ * For each step, picks the cheapest pair (lowest estimated intermediate
6
+ * cardinality) from the remaining relations and fuses them.
7
+ * Works well for star schemas and small numbers of relations (< ~8).
8
+ * For larger join graphs, use the DPccp enumerator instead.
9
+ */
10
+ export declare class JoinOrderOptimizer {
11
+ /**
12
+ * Find a join ordering for the given relations and join predicates.
13
+ *
14
+ * @param relations The base relation nodes.
15
+ * @param predicates The join predicates (edges).
16
+ * @returns A JoinPlan tree, or null if no valid plan can be formed.
17
+ */
18
+ optimize(relations: JoinNode[], predicates: JoinEdge[]): JoinPlan | null;
19
+ /**
20
+ * Find the first edge connecting any node in setA to any node in setB.
21
+ */
22
+ private _findEdge;
23
+ }
24
+ //# sourceMappingURL=join-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-order.d.ts","sourceRoot":"","sources":["../../../../src/planner/join-order.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAMpE;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,QAAQ,GAAG,IAAI;IAoGxE;;OAEG;IACH,OAAO,CAAC,SAAS;CAgBlB"}
@@ -0,0 +1,62 @@
1
+ import type { IndexStats } from "../core/types.js";
2
+ import type { ColumnStats } from "../sql/table.js";
3
+ import type { IndexManager } from "../storage/index-manager.js";
4
+ import type { Operator } from "../operators/base.js";
5
+ import type { GraphStats } from "./cardinality.js";
6
+ import { CardinalityEstimator } from "./cardinality.js";
7
+ export declare class QueryOptimizer {
8
+ readonly stats: IndexStats;
9
+ readonly estimator: CardinalityEstimator;
10
+ private readonly _costModel;
11
+ private readonly _graphStats;
12
+ private readonly _indexManager;
13
+ private readonly _tableName;
14
+ constructor(stats: IndexStats, opts?: {
15
+ columnStats?: Map<string, ColumnStats>;
16
+ indexManager?: IndexManager;
17
+ tableName?: string;
18
+ graphStats?: GraphStats;
19
+ });
20
+ optimize(op: Operator): Operator;
21
+ private _simplifyAlgebra;
22
+ private _recurseSimplify;
23
+ private static _isEmptyOperator;
24
+ private _pushFiltersDown;
25
+ /**
26
+ * Push filter predicates into graph pattern constraints.
27
+ * When a FilterOperator sits above a PatternMatchOperator or TraverseOperator
28
+ * and filters on vertex/edge properties, the filter can be pushed into the
29
+ * graph operator's own constraint set, reducing intermediate results.
30
+ */
31
+ private _pushGraphPatternFilters;
32
+ /**
33
+ * Push vertex-property filters into BFS pruning within TraverseOperator.
34
+ * This converts a Filter(TraverseOp) into TraverseOp(vertexPredicate=...).
35
+ */
36
+ private _pushFilterIntoTraverse;
37
+ /**
38
+ * Push filters below graph join operators when the filter predicate
39
+ * only references columns from one side of the join.
40
+ */
41
+ private _pushFilterBelowGraphJoin;
42
+ /**
43
+ * Fuse intersected pattern match operations into a single combined
44
+ * pattern when they share variables or graph context.
45
+ */
46
+ private _fuseJoinPattern;
47
+ private _mergeVectorThresholds;
48
+ private _vectorsClose;
49
+ private _reorderIntersect;
50
+ private _reorderFusionSignals;
51
+ /**
52
+ * Compute graph-aware signal cost for fusion operator reordering.
53
+ * Graph operators get discounted costs when graph statistics are available
54
+ * because they can leverage graph indexes for faster execution.
55
+ */
56
+ private _graphAwareSignalCost;
57
+ private _applyIndexScan;
58
+ private _recurseGeneric;
59
+ private _recurseChildren;
60
+ private static _filterAppliesTo;
61
+ }
62
+ //# sourceMappingURL=optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["../../../../src/planner/optimizer.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAsBrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAOxD,qBAAa,cAAc;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;gBAGzC,KAAK,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACvC,YAAY,CAAC,EAAE,YAAY,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB;IAaH,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,QAAQ;IAmBhC,OAAO,CAAC,gBAAgB;IAwFxB,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAW/B,OAAO,CAAC,gBAAgB;IA+BxB;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IA0EhC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA8D/B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA+DjC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA4DxB,OAAO,CAAC,sBAAsB;IA+C9B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,qBAAqB;IAqB7B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAmD7B,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,gBAAgB;IAuExB,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAgBhC"}
@@ -0,0 +1,43 @@
1
+ import type { PostingList } from "../core/posting-list.js";
2
+ import type { ExecutionContext } from "../operators/base.js";
3
+ import type { Operator } from "../operators/base.js";
4
+ /**
5
+ * Executes multiple independent operator branches.
6
+ *
7
+ * The current implementation runs branches sequentially on the main thread.
8
+ * When Web Worker support is added, branches will be dispatched to a pool
9
+ * of workers for true parallelism.
10
+ */
11
+ export declare class ParallelExecutor {
12
+ private readonly _maxWorkers;
13
+ private _shutdown;
14
+ /**
15
+ * @param maxWorkers Maximum number of concurrent workers (reserved for
16
+ * future Web Worker support; currently unused).
17
+ */
18
+ constructor(maxWorkers?: number);
19
+ /**
20
+ * Whether parallel execution is actually enabled.
21
+ * Returns false in the current sequential implementation.
22
+ */
23
+ get enabled(): boolean;
24
+ /**
25
+ * Execute each operator independently and return their results.
26
+ *
27
+ * In the sequential implementation, operators are executed one after
28
+ * another on the main thread.
29
+ *
30
+ * @param operators Array of independent operators to execute.
31
+ * @param context The shared execution context.
32
+ * @returns Array of PostingList results, one per operator.
33
+ */
34
+ executeBranches(operators: Operator[], context: ExecutionContext): PostingList[];
35
+ /**
36
+ * Release all resources.
37
+ *
38
+ * In the sequential implementation this is a no-op but it marks the
39
+ * executor as shut down to prevent further use.
40
+ */
41
+ shutdown(): void;
42
+ }
43
+ //# sourceMappingURL=parallel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../../../src/planner/parallel.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAMrD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,SAAS,CAAkB;IAEnC;;;OAGG;gBACS,UAAU,SAAI;IAI1B;;;OAGG;IACH,IAAI,OAAO,IAAI,OAAO,CAIrB;IAED;;;;;;;;;OASG;IACH,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,WAAW,EAAE;IAYhF;;;;;OAKG;IACH,QAAQ,IAAI,IAAI;CAGjB"}
@@ -0,0 +1,22 @@
1
+ import type { IndexStats } from "../core/types.js";
2
+ import type { BM25Params } from "./bm25.js";
3
+ import { BM25Scorer } from "./bm25.js";
4
+ export interface BayesianBM25Params {
5
+ readonly bm25: BM25Params;
6
+ readonly alpha: number;
7
+ readonly beta: number;
8
+ readonly baseRate: number;
9
+ }
10
+ export declare function createBayesianBM25Params(opts?: Partial<BayesianBM25Params>): BayesianBM25Params;
11
+ export declare class BayesianBM25Scorer {
12
+ private readonly _bm25;
13
+ private readonly _transform;
14
+ constructor(params: BayesianBM25Params, indexStats: IndexStats);
15
+ get bm25(): BM25Scorer;
16
+ idf(docFreq: number): number;
17
+ score(termFreq: number, docLength: number, docFreq: number): number;
18
+ scoreWithIdf(termFreq: number, docLength: number, idfVal: number): number;
19
+ combineScores(scores: number[]): number;
20
+ upperBound(docFreq: number): number;
21
+ }
22
+ //# sourceMappingURL=bayesian-bm25.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bayesian-bm25.d.ts","sourceRoot":"","sources":["../../../../src/scoring/bayesian-bm25.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,wBAAwB,CACtC,IAAI,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACjC,kBAAkB,CAOpB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;gBAE9C,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU;IAS9D,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI5B,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAInE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAOzE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAMvC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAIpC"}
@@ -0,0 +1,20 @@
1
+ import type { IndexStats } from "../core/types.js";
2
+ export interface BM25Params {
3
+ readonly k1: number;
4
+ readonly b: number;
5
+ readonly boost: number;
6
+ }
7
+ export declare function createBM25Params(opts?: Partial<BM25Params>): BM25Params;
8
+ export declare class BM25Scorer {
9
+ private readonly _params;
10
+ private readonly _totalDocs;
11
+ private readonly _avgDocLength;
12
+ constructor(params: BM25Params, indexStats: IndexStats);
13
+ get params(): BM25Params;
14
+ idf(docFreq: number): number;
15
+ score(termFreq: number, docLength: number, docFreq: number): number;
16
+ scoreWithIdf(termFreq: number, docLength: number, idfVal: number): number;
17
+ combineScores(scores: number[]): number;
18
+ upperBound(docFreq: number): number;
19
+ }
20
+ //# sourceMappingURL=bm25.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bm25.d.ts","sourceRoot":"","sources":["../../../../src/scoring/bm25.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAMvE;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAMtD,IAAI,MAAM,IAAI,UAAU,CAEvB;IAED,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK5B,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAInE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAQzE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAQvC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAGpC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Calibration diagnostics for evaluating how well predicted relevance
3
+ * probabilities match actual relevance rates.
4
+ *
5
+ * Provides log loss, expected calibration error (ECE), Brier score,
6
+ * full calibration reports, and reliability diagram data.
7
+ */
8
+ export declare class CalibrationMetrics {
9
+ /**
10
+ * Negative log-likelihood (log loss).
11
+ *
12
+ * Strictly proper scoring rule that penalizes the probabilistic
13
+ * model directly. Lower is better.
14
+ *
15
+ * L = -(1/N) * sum[ y_i * log(p_i) + (1 - y_i) * log(1 - p_i) ]
16
+ *
17
+ * @param probabilities - Predicted probabilities in (0, 1).
18
+ * @param labels - Binary relevance labels (0 or 1).
19
+ * @returns Log loss value.
20
+ */
21
+ static logLoss(probabilities: number[], labels: number[]): number;
22
+ /**
23
+ * Expected Calibration Error.
24
+ *
25
+ * Measures how well predicted probabilities match actual relevance
26
+ * rates. Lower is better. Perfect calibration = 0.
27
+ *
28
+ * @param probabilities - Predicted probabilities.
29
+ * @param labels - Binary relevance labels.
30
+ * @param nBins - Number of bins for bucketing (default 10).
31
+ * @returns ECE value.
32
+ */
33
+ static ece(probabilities: number[], labels: number[], nBins?: number): number;
34
+ /**
35
+ * Brier score: mean squared error between probabilities and labels.
36
+ *
37
+ * Decomposes into calibration + discrimination. Lower is better.
38
+ *
39
+ * @param probabilities - Predicted probabilities.
40
+ * @param labels - Binary relevance labels.
41
+ * @returns Brier score value.
42
+ */
43
+ static brier(probabilities: number[], labels: number[]): number;
44
+ /**
45
+ * Full calibration diagnostic report.
46
+ *
47
+ * Returns a dict with keys: ece, brier, nSamples, nBins, reliability,
48
+ * and any additional diagnostics from the bayesian_bm25 package.
49
+ *
50
+ * @param probabilities - Predicted probabilities.
51
+ * @param labels - Binary relevance labels.
52
+ * @param nBins - Number of bins (default 10).
53
+ * @returns Calibration report dict.
54
+ */
55
+ static report(probabilities: number[], labels: number[], nBins?: number): Record<string, unknown>;
56
+ /**
57
+ * Compute reliability diagram data: (avgPredicted, avgActual, count) per bin.
58
+ *
59
+ * Perfect calibration means avgPredicted == avgActual for every bin.
60
+ *
61
+ * @param probabilities - Predicted probabilities.
62
+ * @param labels - Binary relevance labels.
63
+ * @param nBins - Number of bins (default 10).
64
+ * @returns Array of [avgPredicted, avgActual, count] tuples.
65
+ */
66
+ static reliabilityDiagram(probabilities: number[], labels: number[], nBins?: number): [number, number, number][];
67
+ }
68
+ //# sourceMappingURL=calibration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calibration.d.ts","sourceRoot":"","sources":["../../../../src/scoring/calibration.ts"],"names":[],"mappings":"AAyBA;;;;;;GAMG;AAEH,qBAAa,kBAAkB;IAC7B;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAYjE;;;;;;;;;;OAUG;IACH,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,SAAK,GAAG,MAAM;IAIzE;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAI/D;;;;;;;;;;OAUG;IACH,MAAM,CAAC,MAAM,CACX,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,SAAK,GACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAY1B;;;;;;;;;OASG;IACH,MAAM,CAAC,kBAAkB,CACvB,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,SAAK,GACT,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;CAG9B"}