@nahisaho/musubix-library-learner 2.0.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 (66) hide show
  1. package/README.md +117 -0
  2. package/dist/LibraryLearner.d.ts +36 -0
  3. package/dist/LibraryLearner.d.ts.map +1 -0
  4. package/dist/LibraryLearner.js +217 -0
  5. package/dist/LibraryLearner.js.map +1 -0
  6. package/dist/abstraction/Abstractor.d.ts +29 -0
  7. package/dist/abstraction/Abstractor.d.ts.map +1 -0
  8. package/dist/abstraction/Abstractor.js +290 -0
  9. package/dist/abstraction/Abstractor.js.map +1 -0
  10. package/dist/abstraction/PatternMiner.d.ts +23 -0
  11. package/dist/abstraction/PatternMiner.d.ts.map +1 -0
  12. package/dist/abstraction/PatternMiner.js +263 -0
  13. package/dist/abstraction/PatternMiner.js.map +1 -0
  14. package/dist/abstraction/TypeAnalyzer.d.ts +27 -0
  15. package/dist/abstraction/TypeAnalyzer.d.ts.map +1 -0
  16. package/dist/abstraction/TypeAnalyzer.js +239 -0
  17. package/dist/abstraction/TypeAnalyzer.js.map +1 -0
  18. package/dist/abstraction/index.d.ts +10 -0
  19. package/dist/abstraction/index.d.ts.map +1 -0
  20. package/dist/abstraction/index.js +7 -0
  21. package/dist/abstraction/index.js.map +1 -0
  22. package/dist/egraph/EGraph.d.ts +29 -0
  23. package/dist/egraph/EGraph.d.ts.map +1 -0
  24. package/dist/egraph/EGraph.js +86 -0
  25. package/dist/egraph/EGraph.js.map +1 -0
  26. package/dist/egraph/EGraphBuilder.d.ts +24 -0
  27. package/dist/egraph/EGraphBuilder.d.ts.map +1 -0
  28. package/dist/egraph/EGraphBuilder.js +37 -0
  29. package/dist/egraph/EGraphBuilder.js.map +1 -0
  30. package/dist/egraph/Extractor.d.ts +24 -0
  31. package/dist/egraph/Extractor.d.ts.map +1 -0
  32. package/dist/egraph/Extractor.js +61 -0
  33. package/dist/egraph/Extractor.js.map +1 -0
  34. package/dist/egraph/index.d.ts +10 -0
  35. package/dist/egraph/index.d.ts.map +1 -0
  36. package/dist/egraph/index.js +7 -0
  37. package/dist/egraph/index.js.map +1 -0
  38. package/dist/errors.d.ts +66 -0
  39. package/dist/errors.d.ts.map +1 -0
  40. package/dist/errors.js +99 -0
  41. package/dist/errors.js.map +1 -0
  42. package/dist/index.d.ts +48 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +40 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/library/Consolidator.d.ts +26 -0
  47. package/dist/library/Consolidator.d.ts.map +1 -0
  48. package/dist/library/Consolidator.js +54 -0
  49. package/dist/library/Consolidator.js.map +1 -0
  50. package/dist/library/LibraryStore.d.ts +33 -0
  51. package/dist/library/LibraryStore.d.ts.map +1 -0
  52. package/dist/library/LibraryStore.js +61 -0
  53. package/dist/library/LibraryStore.js.map +1 -0
  54. package/dist/library/Pruner.d.ts +24 -0
  55. package/dist/library/Pruner.d.ts.map +1 -0
  56. package/dist/library/Pruner.js +41 -0
  57. package/dist/library/Pruner.js.map +1 -0
  58. package/dist/library/index.d.ts +10 -0
  59. package/dist/library/index.d.ts.map +1 -0
  60. package/dist/library/index.js +7 -0
  61. package/dist/library/index.js.map +1 -0
  62. package/dist/types.d.ts +365 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +10 -0
  65. package/dist/types.js.map +1 -0
  66. package/package.json +66 -0
@@ -0,0 +1,239 @@
1
+ /**
2
+ * TypeAnalyzer - Type-directed search and analysis
3
+ *
4
+ * REQ-LL-003: 型指向探索
5
+ * DES-PHASE2-001: Abstraction Engine / TypeAnalyzer
6
+ */
7
+ /**
8
+ * Default TypeAnalyzer implementation
9
+ */
10
+ class TypeAnalyzerImpl {
11
+ isCompatible(source, target) {
12
+ // Same kind check
13
+ if (source.kind !== target.kind) {
14
+ // Special cases
15
+ if (target.kind === 'union' && target.members) {
16
+ return target.members.some((m) => this.isCompatible(source, m));
17
+ }
18
+ if (source.kind === 'primitive' && source.name === 'any') {
19
+ return true;
20
+ }
21
+ if (target.kind === 'primitive' && target.name === 'any') {
22
+ return true;
23
+ }
24
+ // unknown is compatible with anything (top type)
25
+ if (source.kind === 'primitive' && source.name === 'unknown') {
26
+ return true;
27
+ }
28
+ if (target.kind === 'primitive' && target.name === 'unknown') {
29
+ return true;
30
+ }
31
+ return false;
32
+ }
33
+ switch (source.kind) {
34
+ case 'primitive':
35
+ return source.name === target.name ||
36
+ target.name === 'any' ||
37
+ source.name === 'any' ||
38
+ source.name === 'unknown' ||
39
+ target.name === 'unknown';
40
+ case 'function':
41
+ return this.isFunctionCompatible(source, target);
42
+ case 'array':
43
+ return this.isCompatible(source.elementType ?? { kind: 'primitive', name: 'unknown' }, target.elementType ?? { kind: 'primitive', name: 'unknown' });
44
+ case 'object':
45
+ return this.isObjectCompatible(source, target);
46
+ case 'union':
47
+ return this.isUnionCompatible(source, target);
48
+ case 'intersection':
49
+ return this.isIntersectionCompatible(source, target);
50
+ case 'generic':
51
+ // Generics match if they have the same type parameters
52
+ return JSON.stringify(source.typeParams) === JSON.stringify(target.typeParams);
53
+ default:
54
+ return false;
55
+ }
56
+ }
57
+ filterByType(candidates, expectedType) {
58
+ return candidates.filter((candidate) => {
59
+ const candidateType = this.inferPatternType(candidate);
60
+ return this.isCompatible(candidateType, expectedType);
61
+ });
62
+ }
63
+ scoreByTypeMatch(candidate, context) {
64
+ const candidateType = this.inferPatternType(candidate);
65
+ let score = 0;
66
+ // Check compatibility with context variables
67
+ for (const [name, type] of context.variables) {
68
+ if (this.usesVariable(candidate, name)) {
69
+ if (this.isCompatible(candidateType, type)) {
70
+ score += 1;
71
+ }
72
+ }
73
+ }
74
+ // Check compatibility with context functions
75
+ for (const [name, type] of context.functions) {
76
+ if (this.usesFunction(candidate, name)) {
77
+ if (this.isCompatible(candidateType, type)) {
78
+ score += 1;
79
+ }
80
+ }
81
+ }
82
+ return score;
83
+ }
84
+ inferType(expression) {
85
+ if (expression === null) {
86
+ return { kind: 'primitive', name: 'null' };
87
+ }
88
+ if (expression === undefined) {
89
+ return { kind: 'primitive', name: 'undefined' };
90
+ }
91
+ switch (typeof expression) {
92
+ case 'string':
93
+ return { kind: 'primitive', name: 'string' };
94
+ case 'number':
95
+ return { kind: 'primitive', name: 'number' };
96
+ case 'boolean':
97
+ return { kind: 'primitive', name: 'boolean' };
98
+ case 'function':
99
+ return { kind: 'function', paramTypes: [], returnType: { kind: 'primitive', name: 'unknown' } };
100
+ case 'object':
101
+ if (Array.isArray(expression)) {
102
+ const elementType = expression.length > 0
103
+ ? this.inferType(expression[0])
104
+ : { kind: 'primitive', name: 'unknown' };
105
+ return { kind: 'array', elementType };
106
+ }
107
+ return this.inferObjectType(expression);
108
+ default:
109
+ return { kind: 'primitive', name: 'unknown' };
110
+ }
111
+ }
112
+ isSubtype(sub, sup) {
113
+ // any is supertype of everything
114
+ if (sup.kind === 'primitive' && sup.name === 'any') {
115
+ return true;
116
+ }
117
+ // never is subtype of everything
118
+ if (sub.kind === 'primitive' && sub.name === 'never') {
119
+ return true;
120
+ }
121
+ // unknown is not subtype of anything except any and unknown
122
+ if (sub.kind === 'primitive' && sub.name === 'unknown') {
123
+ return sup.kind === 'primitive' && (sup.name === 'any' || sup.name === 'unknown');
124
+ }
125
+ return this.isCompatible(sub, sup);
126
+ }
127
+ // =========================================================================
128
+ // Private methods
129
+ // =========================================================================
130
+ isFunctionCompatible(source, target) {
131
+ // Contravariant parameter types, covariant return type
132
+ const sourceParams = source.paramTypes ?? [];
133
+ const targetParams = target.paramTypes ?? [];
134
+ // Target can have fewer parameters (extra params are ignored)
135
+ if (targetParams.length > sourceParams.length) {
136
+ return false;
137
+ }
138
+ // Check parameter types (contravariant)
139
+ for (let i = 0; i < targetParams.length; i++) {
140
+ if (!this.isCompatible(targetParams[i], sourceParams[i])) {
141
+ return false;
142
+ }
143
+ }
144
+ // Check return type (covariant)
145
+ const sourceReturn = source.returnType ?? { kind: 'primitive', name: 'void' };
146
+ const targetReturn = target.returnType ?? { kind: 'primitive', name: 'void' };
147
+ return this.isCompatible(sourceReturn, targetReturn);
148
+ }
149
+ isObjectCompatible(source, target) {
150
+ const sourceProps = source.properties ?? {};
151
+ const targetProps = target.properties ?? {};
152
+ // Source must have all properties that target requires
153
+ for (const [key, targetType] of Object.entries(targetProps)) {
154
+ const sourceType = sourceProps[key];
155
+ if (!sourceType) {
156
+ return false;
157
+ }
158
+ if (!this.isCompatible(sourceType, targetType)) {
159
+ return false;
160
+ }
161
+ }
162
+ return true;
163
+ }
164
+ isUnionCompatible(source, target) {
165
+ const sourceMembers = source.members ?? [];
166
+ const targetMembers = target.members ?? [];
167
+ // Every source member must be compatible with some target member
168
+ return sourceMembers.every((sm) => targetMembers.some((tm) => this.isCompatible(sm, tm)));
169
+ }
170
+ isIntersectionCompatible(source, target) {
171
+ const sourceMembers = source.members ?? [];
172
+ const targetMembers = target.members ?? [];
173
+ // Source must satisfy all target intersection members
174
+ return targetMembers.every((tm) => sourceMembers.some((sm) => this.isCompatible(sm, tm)));
175
+ }
176
+ inferPatternType(candidate) {
177
+ // Infer type from pattern AST
178
+ const ast = candidate.ast;
179
+ switch (ast.type) {
180
+ case 'Declaration':
181
+ return { kind: 'primitive', name: 'void' };
182
+ case 'ReturnStatement':
183
+ return { kind: 'primitive', name: 'unknown' };
184
+ case 'IfStatement':
185
+ case 'ForLoop':
186
+ case 'WhileLoop':
187
+ return { kind: 'primitive', name: 'void' };
188
+ case 'Expression':
189
+ return this.inferType(ast.value);
190
+ case 'NumberLiteral':
191
+ return { kind: 'primitive', name: 'number' };
192
+ case 'StringLiteral':
193
+ return { kind: 'primitive', name: 'string' };
194
+ case 'BooleanLiteral':
195
+ return { kind: 'primitive', name: 'boolean' };
196
+ case 'ArrayExpression':
197
+ return { kind: 'array', elementType: { kind: 'primitive', name: 'unknown' } };
198
+ case 'Identifier':
199
+ return { kind: 'primitive', name: 'unknown' };
200
+ default:
201
+ return { kind: 'primitive', name: 'unknown' };
202
+ }
203
+ }
204
+ inferObjectType(obj) {
205
+ const properties = {};
206
+ for (const [key, value] of Object.entries(obj)) {
207
+ properties[key] = this.inferType(value);
208
+ }
209
+ return { kind: 'object', properties };
210
+ }
211
+ usesVariable(candidate, name) {
212
+ // Check if the pattern uses a variable with the given name
213
+ return this.astContains(candidate.ast, name);
214
+ }
215
+ usesFunction(candidate, name) {
216
+ // Check if the pattern calls a function with the given name
217
+ return this.astContains(candidate.ast, name);
218
+ }
219
+ astContains(node, name) {
220
+ if (typeof node !== 'object' || node === null) {
221
+ return node === name;
222
+ }
223
+ const obj = node;
224
+ if (obj.name === name || obj.value === name) {
225
+ return true;
226
+ }
227
+ if (Array.isArray(obj.children)) {
228
+ return obj.children.some((child) => this.astContains(child, name));
229
+ }
230
+ return false;
231
+ }
232
+ }
233
+ /**
234
+ * Factory function to create a TypeAnalyzer
235
+ */
236
+ export function createTypeAnalyzer() {
237
+ return new TypeAnalyzerImpl();
238
+ }
239
+ //# sourceMappingURL=TypeAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeAnalyzer.js","sourceRoot":"","sources":["../../src/abstraction/TypeAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Abstraction Engine exports
3
+ */
4
+ export type { PatternMiner } from './PatternMiner.js';
5
+ export { createPatternMiner } from './PatternMiner.js';
6
+ export type { Abstractor } from './Abstractor.js';
7
+ export { createAbstractor } from './Abstractor.js';
8
+ export type { TypeAnalyzer } from './TypeAnalyzer.js';
9
+ export { createTypeAnalyzer } from './TypeAnalyzer.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/abstraction/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Abstraction Engine exports
3
+ */
4
+ export { createPatternMiner } from './PatternMiner.js';
5
+ export { createAbstractor } from './Abstractor.js';
6
+ export { createTypeAnalyzer } from './TypeAnalyzer.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/abstraction/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * EGraph - Equality Graph data structure
3
+ *
4
+ * REQ-LL-004: E-graph最適化
5
+ * DES-PHASE2-001: E-Graph Optimizer / EGraph
6
+ *
7
+ * @stub This is a stub implementation. Full implementation in M3.
8
+ */
9
+ import type { ENode, EClass, EClassId } from '../types.js';
10
+ /**
11
+ * EGraph interface
12
+ */
13
+ export interface EGraph {
14
+ /** Add a node to the e-graph */
15
+ add(node: ENode): EClassId;
16
+ /** Merge two e-classes */
17
+ merge(id1: EClassId, id2: EClassId): EClassId;
18
+ /** Get an e-class by ID */
19
+ getEClass(id: EClassId): EClass | undefined;
20
+ /** Get all e-classes */
21
+ getAllClasses(): EClass[];
22
+ /** Find the canonical ID for an e-class */
23
+ find(id: EClassId): EClassId;
24
+ }
25
+ /**
26
+ * Factory function to create an EGraph
27
+ */
28
+ export declare function createEGraph(): EGraph;
29
+ //# sourceMappingURL=EGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EGraph.d.ts","sourceRoot":"","sources":["../../src/egraph/EGraph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,gCAAgC;IAChC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IAE3B,0BAA0B;IAC1B,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAE9C,2BAA2B;IAC3B,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IAE5C,wBAAwB;IACxB,aAAa,IAAI,MAAM,EAAE,CAAC;IAE1B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC9B;AAqFD;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * EGraph - Equality Graph data structure
3
+ *
4
+ * REQ-LL-004: E-graph最適化
5
+ * DES-PHASE2-001: E-Graph Optimizer / EGraph
6
+ *
7
+ * @stub This is a stub implementation. Full implementation in M3.
8
+ */
9
+ /**
10
+ * Default EGraph implementation (stub)
11
+ */
12
+ class EGraphImpl {
13
+ classes = new Map();
14
+ unionFind = new Map();
15
+ nextId = 0;
16
+ add(node) {
17
+ const id = this.nextId++;
18
+ const eclass = {
19
+ id,
20
+ nodes: [node],
21
+ parents: new Set(),
22
+ };
23
+ this.classes.set(id, eclass);
24
+ this.unionFind.set(id, id);
25
+ return id;
26
+ }
27
+ merge(id1, id2) {
28
+ const root1 = this.find(id1);
29
+ const root2 = this.find(id2);
30
+ if (root1 === root2) {
31
+ return root1;
32
+ }
33
+ // Merge root2 into root1
34
+ const class1 = this.classes.get(root1);
35
+ const class2 = this.classes.get(root2);
36
+ if (class1 && class2) {
37
+ class1.nodes.push(...class2.nodes);
38
+ for (const parent of class2.parents) {
39
+ class1.parents.add(parent);
40
+ }
41
+ this.unionFind.set(root2, root1);
42
+ }
43
+ return root1;
44
+ }
45
+ getEClass(id) {
46
+ const root = this.find(id);
47
+ return this.classes.get(root);
48
+ }
49
+ getAllClasses() {
50
+ // Return only root classes
51
+ const roots = new Set();
52
+ for (const id of this.classes.keys()) {
53
+ roots.add(this.find(id));
54
+ }
55
+ return Array.from(roots).map((id) => this.classes.get(id)).filter(Boolean);
56
+ }
57
+ find(id) {
58
+ // Handle unregistered IDs
59
+ if (!this.unionFind.has(id)) {
60
+ return id;
61
+ }
62
+ let root = id;
63
+ let parent = this.unionFind.get(root);
64
+ while (parent !== undefined && parent !== root) {
65
+ root = parent;
66
+ parent = this.unionFind.get(root);
67
+ }
68
+ // Path compression
69
+ let current = id;
70
+ while (current !== root) {
71
+ const next = this.unionFind.get(current);
72
+ if (next === undefined)
73
+ break;
74
+ this.unionFind.set(current, root);
75
+ current = next;
76
+ }
77
+ return root;
78
+ }
79
+ }
80
+ /**
81
+ * Factory function to create an EGraph
82
+ */
83
+ export function createEGraph() {
84
+ return new EGraphImpl();
85
+ }
86
+ //# sourceMappingURL=EGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EGraph.js","sourceRoot":"","sources":["../../src/egraph/EGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * EGraphBuilder - Build e-graphs from patterns
3
+ *
4
+ * REQ-LL-004: E-graph最適化
5
+ * DES-PHASE2-001: E-Graph Optimizer / EGraphBuilder
6
+ *
7
+ * @stub This is a stub implementation. Full implementation in M3.
8
+ */
9
+ import type { LearnedPattern, EqualityRule } from '../types.js';
10
+ import type { EGraph } from './EGraph.js';
11
+ /**
12
+ * EGraphBuilder interface
13
+ */
14
+ export interface EGraphBuilder {
15
+ /** Build an e-graph from patterns */
16
+ build(patterns: LearnedPattern[]): EGraph;
17
+ /** Apply rules until saturation */
18
+ saturate(graph: EGraph, rules: EqualityRule[]): EGraph;
19
+ }
20
+ /**
21
+ * Factory function to create an EGraphBuilder
22
+ */
23
+ export declare function createEGraphBuilder(): EGraphBuilder;
24
+ //# sourceMappingURL=EGraphBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EGraphBuilder.d.ts","sourceRoot":"","sources":["../../src/egraph/EGraphBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAE1C,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;CACxD;AA2BD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * EGraphBuilder - Build e-graphs from patterns
3
+ *
4
+ * REQ-LL-004: E-graph最適化
5
+ * DES-PHASE2-001: E-Graph Optimizer / EGraphBuilder
6
+ *
7
+ * @stub This is a stub implementation. Full implementation in M3.
8
+ */
9
+ import { createEGraph } from './EGraph.js';
10
+ /**
11
+ * Default EGraphBuilder implementation (stub)
12
+ */
13
+ class EGraphBuilderImpl {
14
+ build(patterns) {
15
+ const graph = createEGraph();
16
+ for (const pattern of patterns) {
17
+ // Add pattern as a node
18
+ graph.add({
19
+ op: pattern.name,
20
+ children: [],
21
+ });
22
+ }
23
+ return graph;
24
+ }
25
+ saturate(graph, _rules) {
26
+ // Stub: return graph unchanged
27
+ // Full implementation would apply rules until fixpoint
28
+ return graph;
29
+ }
30
+ }
31
+ /**
32
+ * Factory function to create an EGraphBuilder
33
+ */
34
+ export function createEGraphBuilder() {
35
+ return new EGraphBuilderImpl();
36
+ }
37
+ //# sourceMappingURL=EGraphBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EGraphBuilder.js","sourceRoot":"","sources":["../../src/egraph/EGraphBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAa3C;;GAEG;AACH,MAAM,iBAAiB;IACrB,KAAK,CAAC,QAA0B;QAC9B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAE7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,wBAAwB;YACxB,KAAK,CAAC,GAAG,CAAC;gBACR,EAAE,EAAE,OAAO,CAAC,IAAI;gBAChB,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,MAAsB;QAC5C,+BAA+B;QAC/B,uDAAuD;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,iBAAiB,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Extractor - Extract optimal expressions from e-graphs
3
+ *
4
+ * REQ-LL-004: E-graph最適化
5
+ * DES-PHASE2-001: E-Graph Optimizer / Extractor
6
+ *
7
+ * @stub This is a stub implementation. Full implementation in M3.
8
+ */
9
+ import type { EClassId, CostFunction, OptimalExpression } from '../types.js';
10
+ import type { EGraph } from './EGraph.js';
11
+ /**
12
+ * Extractor interface
13
+ */
14
+ export interface Extractor {
15
+ /** Extract the optimal expression from an e-graph */
16
+ extract(graph: EGraph, costFn: CostFunction): OptimalExpression;
17
+ /** Extract from a specific e-class */
18
+ extractFromClass(graph: EGraph, classId: EClassId, costFn: CostFunction): OptimalExpression;
19
+ }
20
+ /**
21
+ * Factory function to create an Extractor
22
+ */
23
+ export declare function createExtractor(): Extractor;
24
+ //# sourceMappingURL=Extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Extractor.d.ts","sourceRoot":"","sources":["../../src/egraph/Extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,qDAAqD;IACrD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,iBAAiB,CAAC;IAEhE,sCAAsC;IACtC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,GAAG,iBAAiB,CAAC;CAC7F;AAsDD;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAE3C"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Extractor - Extract optimal expressions from e-graphs
3
+ *
4
+ * REQ-LL-004: E-graph最適化
5
+ * DES-PHASE2-001: E-Graph Optimizer / Extractor
6
+ *
7
+ * @stub This is a stub implementation. Full implementation in M3.
8
+ */
9
+ /**
10
+ * Default Extractor implementation (stub)
11
+ */
12
+ class ExtractorImpl {
13
+ extract(graph, costFn) {
14
+ const classes = graph.getAllClasses();
15
+ if (classes.length === 0) {
16
+ return {
17
+ root: -1,
18
+ ast: { type: 'Empty' },
19
+ cost: Infinity,
20
+ };
21
+ }
22
+ // Find the root (class with no parents)
23
+ const root = classes.find((c) => c.parents.size === 0) ?? classes[0];
24
+ return this.extractFromClass(graph, root.id, costFn);
25
+ }
26
+ extractFromClass(graph, classId, costFn) {
27
+ const eclass = graph.getEClass(classId);
28
+ if (!eclass || eclass.nodes.length === 0) {
29
+ return {
30
+ root: classId,
31
+ ast: { type: 'Empty' },
32
+ cost: Infinity,
33
+ };
34
+ }
35
+ // Find the lowest cost node
36
+ let bestNode = eclass.nodes[0];
37
+ let bestCost = costFn(bestNode, []);
38
+ for (const node of eclass.nodes) {
39
+ const cost = costFn(node, []);
40
+ if (cost < bestCost) {
41
+ bestCost = cost;
42
+ bestNode = node;
43
+ }
44
+ }
45
+ return {
46
+ root: classId,
47
+ ast: {
48
+ type: bestNode.op,
49
+ children: [],
50
+ },
51
+ cost: bestCost,
52
+ };
53
+ }
54
+ }
55
+ /**
56
+ * Factory function to create an Extractor
57
+ */
58
+ export function createExtractor() {
59
+ return new ExtractorImpl();
60
+ }
61
+ //# sourceMappingURL=Extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Extractor.js","sourceRoot":"","sources":["../../src/egraph/Extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH;;GAEG;AACH,MAAM,aAAa;IACjB,OAAO,CAAC,KAAa,EAAE,MAAoB;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,CAAC,CAAC;gBACR,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;gBACtB,IAAI,EAAE,QAAQ;aACf,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;IAED,gBAAgB,CAAC,KAAa,EAAE,OAAiB,EAAE,MAAoB;QACrE,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;gBACtB,IAAI,EAAE,QAAQ;aACf,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAEpC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACpB,QAAQ,GAAG,IAAI,CAAC;gBAChB,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,OAAO;YACb,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ,CAAC,EAAE;gBACjB,QAAQ,EAAE,EAAE;aACb;YACD,IAAI,EAAE,QAAQ;SACf,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * E-Graph exports
3
+ */
4
+ export type { EGraph } from './EGraph.js';
5
+ export { createEGraph } from './EGraph.js';
6
+ export type { EGraphBuilder } from './EGraphBuilder.js';
7
+ export { createEGraphBuilder } from './EGraphBuilder.js';
8
+ export type { Extractor } from './Extractor.js';
9
+ export { createExtractor } from './Extractor.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/egraph/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * E-Graph exports
3
+ */
4
+ export { createEGraph } from './EGraph.js';
5
+ export { createEGraphBuilder } from './EGraphBuilder.js';
6
+ export { createExtractor } from './Extractor.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/egraph/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}