perttool 0.1.0-alpha.2

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 (176) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/LICENSE +21 -0
  3. package/README.md +134 -0
  4. package/dist/analysis/graph.d.ts +41 -0
  5. package/dist/analysis/graph.d.ts.map +1 -0
  6. package/dist/analysis/graph.js +199 -0
  7. package/dist/analysis/graph.js.map +1 -0
  8. package/dist/analysis/precedence.d.ts +52 -0
  9. package/dist/analysis/precedence.d.ts.map +1 -0
  10. package/dist/analysis/precedence.js +187 -0
  11. package/dist/analysis/precedence.js.map +1 -0
  12. package/dist/analysis/resource.d.ts +96 -0
  13. package/dist/analysis/resource.d.ts.map +1 -0
  14. package/dist/analysis/resource.js +522 -0
  15. package/dist/analysis/resource.js.map +1 -0
  16. package/dist/application/analyze.d.ts +32 -0
  17. package/dist/application/analyze.d.ts.map +1 -0
  18. package/dist/application/analyze.js +144 -0
  19. package/dist/application/analyze.js.map +1 -0
  20. package/dist/application/check.d.ts +24 -0
  21. package/dist/application/check.d.ts.map +1 -0
  22. package/dist/application/check.js +43 -0
  23. package/dist/application/check.js.map +1 -0
  24. package/dist/application/format.d.ts +21 -0
  25. package/dist/application/format.d.ts.map +1 -0
  26. package/dist/application/format.js +52 -0
  27. package/dist/application/format.js.map +1 -0
  28. package/dist/application/mutate.d.ts +4 -0
  29. package/dist/application/mutate.d.ts.map +1 -0
  30. package/dist/application/mutate.js +175 -0
  31. package/dist/application/mutate.js.map +1 -0
  32. package/dist/application/next.d.ts +86 -0
  33. package/dist/application/next.d.ts.map +1 -0
  34. package/dist/application/next.js +310 -0
  35. package/dist/application/next.js.map +1 -0
  36. package/dist/cli.d.ts +3 -0
  37. package/dist/cli.d.ts.map +1 -0
  38. package/dist/cli.js +2103 -0
  39. package/dist/cli.js.map +1 -0
  40. package/dist/conversion/mermaid-import.d.ts +26 -0
  41. package/dist/conversion/mermaid-import.d.ts.map +1 -0
  42. package/dist/conversion/mermaid-import.js +655 -0
  43. package/dist/conversion/mermaid-import.js.map +1 -0
  44. package/dist/conversion/mermaid.d.ts +38 -0
  45. package/dist/conversion/mermaid.d.ts.map +1 -0
  46. package/dist/conversion/mermaid.js +362 -0
  47. package/dist/conversion/mermaid.js.map +1 -0
  48. package/dist/editing/unified-diff.d.ts +7 -0
  49. package/dist/editing/unified-diff.d.ts.map +1 -0
  50. package/dist/editing/unified-diff.js +81 -0
  51. package/dist/editing/unified-diff.js.map +1 -0
  52. package/dist/formatter/source-formatter.d.ts +17 -0
  53. package/dist/formatter/source-formatter.d.ts.map +1 -0
  54. package/dist/formatter/source-formatter.js +210 -0
  55. package/dist/formatter/source-formatter.js.map +1 -0
  56. package/dist/help/registry.d.ts +37 -0
  57. package/dist/help/registry.d.ts.map +1 -0
  58. package/dist/help/registry.js +657 -0
  59. package/dist/help/registry.js.map +1 -0
  60. package/dist/index.d.ts +44 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +23 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/io/document-file.d.ts +9 -0
  65. package/dist/io/document-file.d.ts.map +1 -0
  66. package/dist/io/document-file.js +19 -0
  67. package/dist/io/document-file.js.map +1 -0
  68. package/dist/io/safe-write.d.ts +33 -0
  69. package/dist/io/safe-write.d.ts.map +1 -0
  70. package/dist/io/safe-write.js +280 -0
  71. package/dist/io/safe-write.js.map +1 -0
  72. package/dist/model/diagnostics.d.ts +43 -0
  73. package/dist/model/diagnostics.d.ts.map +1 -0
  74. package/dist/model/diagnostics.js +47 -0
  75. package/dist/model/diagnostics.js.map +1 -0
  76. package/dist/model/rational.d.ts +21 -0
  77. package/dist/model/rational.d.ts.map +1 -0
  78. package/dist/model/rational.js +84 -0
  79. package/dist/model/rational.js.map +1 -0
  80. package/dist/model/syntax.d.ts +67 -0
  81. package/dist/model/syntax.d.ts.map +1 -0
  82. package/dist/model/syntax.js +15 -0
  83. package/dist/model/syntax.js.map +1 -0
  84. package/dist/model/units.d.ts +18 -0
  85. package/dist/model/units.d.ts.map +1 -0
  86. package/dist/model/units.js +29 -0
  87. package/dist/model/units.js.map +1 -0
  88. package/dist/mutation/advance.d.ts +26 -0
  89. package/dist/mutation/advance.d.ts.map +1 -0
  90. package/dist/mutation/advance.js +261 -0
  91. package/dist/mutation/advance.js.map +1 -0
  92. package/dist/mutation/diagnostics.d.ts +10 -0
  93. package/dist/mutation/diagnostics.d.ts.map +1 -0
  94. package/dist/mutation/diagnostics.js +10 -0
  95. package/dist/mutation/diagnostics.js.map +1 -0
  96. package/dist/mutation/entity-editor.d.ts +16 -0
  97. package/dist/mutation/entity-editor.d.ts.map +1 -0
  98. package/dist/mutation/entity-editor.js +103 -0
  99. package/dist/mutation/entity-editor.js.map +1 -0
  100. package/dist/mutation/milestone.d.ts +5 -0
  101. package/dist/mutation/milestone.d.ts.map +1 -0
  102. package/dist/mutation/milestone.js +194 -0
  103. package/dist/mutation/milestone.js.map +1 -0
  104. package/dist/mutation/resource.d.ts +5 -0
  105. package/dist/mutation/resource.d.ts.map +1 -0
  106. package/dist/mutation/resource.js +145 -0
  107. package/dist/mutation/resource.js.map +1 -0
  108. package/dist/mutation/source.d.ts +22 -0
  109. package/dist/mutation/source.d.ts.map +1 -0
  110. package/dist/mutation/source.js +155 -0
  111. package/dist/mutation/source.js.map +1 -0
  112. package/dist/mutation/task.d.ts +10 -0
  113. package/dist/mutation/task.d.ts.map +1 -0
  114. package/dist/mutation/task.js +644 -0
  115. package/dist/mutation/task.js.map +1 -0
  116. package/dist/mutation/text-edits.d.ts +8 -0
  117. package/dist/mutation/text-edits.d.ts.map +1 -0
  118. package/dist/mutation/text-edits.js +33 -0
  119. package/dist/mutation/text-edits.js.map +1 -0
  120. package/dist/mutation/types.d.ts +153 -0
  121. package/dist/mutation/types.d.ts.map +1 -0
  122. package/dist/mutation/types.js +2 -0
  123. package/dist/mutation/types.js.map +1 -0
  124. package/dist/parser/document-parser.d.ts +6 -0
  125. package/dist/parser/document-parser.d.ts.map +1 -0
  126. package/dist/parser/document-parser.js +735 -0
  127. package/dist/parser/document-parser.js.map +1 -0
  128. package/dist/recommendation/explanation-types.d.ts +226 -0
  129. package/dist/recommendation/explanation-types.d.ts.map +1 -0
  130. package/dist/recommendation/explanation-types.js +2 -0
  131. package/dist/recommendation/explanation-types.js.map +1 -0
  132. package/dist/recommendation/explanation-validation.d.ts +4 -0
  133. package/dist/recommendation/explanation-validation.d.ts.map +1 -0
  134. package/dist/recommendation/explanation-validation.js +745 -0
  135. package/dist/recommendation/explanation-validation.js.map +1 -0
  136. package/dist/recommendation/explanation-values.d.ts +7 -0
  137. package/dist/recommendation/explanation-values.d.ts.map +1 -0
  138. package/dist/recommendation/explanation-values.js +283 -0
  139. package/dist/recommendation/explanation-values.js.map +1 -0
  140. package/dist/recommendation/explanation.d.ts +8 -0
  141. package/dist/recommendation/explanation.d.ts.map +1 -0
  142. package/dist/recommendation/explanation.js +1022 -0
  143. package/dist/recommendation/explanation.js.map +1 -0
  144. package/dist/recommendation/failure.d.ts +3 -0
  145. package/dist/recommendation/failure.d.ts.map +1 -0
  146. package/dist/recommendation/failure.js +4 -0
  147. package/dist/recommendation/failure.js.map +1 -0
  148. package/dist/recommendation/json.d.ts +3 -0
  149. package/dist/recommendation/json.d.ts.map +1 -0
  150. package/dist/recommendation/json.js +252 -0
  151. package/dist/recommendation/json.js.map +1 -0
  152. package/dist/recommendation/override-types.d.ts +117 -0
  153. package/dist/recommendation/override-types.d.ts.map +1 -0
  154. package/dist/recommendation/override-types.js +2 -0
  155. package/dist/recommendation/override-types.js.map +1 -0
  156. package/dist/recommendation/override.d.ts +7 -0
  157. package/dist/recommendation/override.d.ts.map +1 -0
  158. package/dist/recommendation/override.js +717 -0
  159. package/dist/recommendation/override.js.map +1 -0
  160. package/dist/recommendation/ranking.d.ts +7 -0
  161. package/dist/recommendation/ranking.d.ts.map +1 -0
  162. package/dist/recommendation/ranking.js +391 -0
  163. package/dist/recommendation/ranking.js.map +1 -0
  164. package/dist/recommendation/types.d.ts +83 -0
  165. package/dist/recommendation/types.d.ts.map +1 -0
  166. package/dist/recommendation/types.js +2 -0
  167. package/dist/recommendation/types.js.map +1 -0
  168. package/dist/semantic/validator.d.ts +4 -0
  169. package/dist/semantic/validator.d.ts.map +1 -0
  170. package/dist/semantic/validator.js +490 -0
  171. package/dist/semantic/validator.js.map +1 -0
  172. package/dist/version.d.ts +2 -0
  173. package/dist/version.d.ts.map +1 -0
  174. package/dist/version.js +2 -0
  175. package/dist/version.js.map +1 -0
  176. package/package.json +61 -0
@@ -0,0 +1,187 @@
1
+ import { compareStableStrings } from "../model/diagnostics.js";
2
+ import { ZERO, absolute, add, compare, isZero, subtract, } from "../model/rational.js";
3
+ function pathFromEdges(edges) {
4
+ return {
5
+ edgeIds: edges.map((edge) => edge.id),
6
+ taskIds: edges.filter((edge) => edge.kind === "task").map((edge) => edge.id),
7
+ gateIds: edges.filter((edge) => edge.kind === "gate").map((edge) => edge.id),
8
+ variance: edges.reduce((sum, edge) => add(sum, edge.variance), ZERO),
9
+ };
10
+ }
11
+ function criticalPaths(graph, edgeTimings, maxPaths) {
12
+ const drivingOutgoing = new Map([...graph.vertices.keys()].map((id) => [id, []]));
13
+ for (const edge of edgeTimings) {
14
+ if (edge.isDriving)
15
+ drivingOutgoing.get(edge.source).push(edge);
16
+ }
17
+ for (const list of drivingOutgoing.values()) {
18
+ list.sort((left, right) => compareStableStrings(left.id, right.id));
19
+ }
20
+ const counts = new Map([[graph.finish, 1n]]);
21
+ for (const vertex of [...graph.topologicalOrder].reverse()) {
22
+ if (vertex === graph.finish)
23
+ continue;
24
+ const count = drivingOutgoing
25
+ .get(vertex)
26
+ .reduce((sum, edge) => sum + (counts.get(edge.target) ?? 0n), 0n);
27
+ counts.set(vertex, count);
28
+ }
29
+ const viableFrontier = graph.frontier
30
+ .filter((id) => (counts.get(id) ?? 0n) > 0n)
31
+ .sort(compareStableStrings);
32
+ const pathCount = viableFrontier.reduce((sum, id) => sum + (counts.get(id) ?? 0n), 0n);
33
+ if (pathCount === 0n)
34
+ throw new Error("precedence critical path invariant failed");
35
+ const emitted = [];
36
+ const visit = (vertex, current) => {
37
+ if (emitted.length >= maxPaths)
38
+ return;
39
+ if (vertex === graph.finish) {
40
+ emitted.push(pathFromEdges(current));
41
+ return;
42
+ }
43
+ for (const edge of drivingOutgoing.get(vertex)) {
44
+ if ((counts.get(edge.target) ?? 0n) === 0n)
45
+ continue;
46
+ visit(edge.target, [...current, edge]);
47
+ if (emitted.length >= maxPaths)
48
+ return;
49
+ }
50
+ };
51
+ for (const frontier of viableFrontier) {
52
+ visit(frontier, []);
53
+ if (emitted.length >= maxPaths)
54
+ break;
55
+ }
56
+ let representative;
57
+ const representativeEdges = [];
58
+ let vertex = viableFrontier[0];
59
+ while (vertex !== undefined && vertex !== graph.finish) {
60
+ const next = drivingOutgoing
61
+ .get(vertex)
62
+ .find((edge) => (counts.get(edge.target) ?? 0n) > 0n);
63
+ if (next === undefined)
64
+ throw new Error("precedence representative path invariant failed");
65
+ representativeEdges.push(next);
66
+ vertex = next.target;
67
+ }
68
+ representative = pathFromEdges(representativeEdges);
69
+ return {
70
+ representativePath: representative,
71
+ pathCount,
72
+ paths: emitted,
73
+ pathsTruncated: pathCount > BigInt(emitted.length),
74
+ };
75
+ }
76
+ export function analyzePrecedence(graph, maxPaths) {
77
+ const earliest = new Map();
78
+ const edgeEarly = new Map();
79
+ for (const vertex of graph.topologicalOrder) {
80
+ let value;
81
+ if (graph.frontier.includes(vertex)) {
82
+ value = ZERO;
83
+ }
84
+ else {
85
+ const incoming = graph.incoming.get(vertex);
86
+ if (incoming.length === 0)
87
+ throw new Error(`residual root ${vertex} is not frontier`);
88
+ value = incoming.reduce((maximum, edge, index) => {
89
+ const candidate = edgeEarly.get(edge.id).ef;
90
+ return index === 0 || compare(candidate, maximum) > 0 ? candidate : maximum;
91
+ }, ZERO);
92
+ }
93
+ earliest.set(vertex, value);
94
+ for (const edge of graph.outgoing.get(vertex)) {
95
+ edgeEarly.set(edge.id, { es: value, ef: add(value, edge.expected) });
96
+ }
97
+ }
98
+ const makespan = earliest.get(graph.finish);
99
+ if (makespan === undefined)
100
+ throw new Error("finish earliest time is missing");
101
+ const latest = new Map([[graph.finish, makespan]]);
102
+ const edgeLate = new Map();
103
+ for (const vertex of [...graph.topologicalOrder].reverse()) {
104
+ if (vertex !== graph.finish) {
105
+ const outgoing = graph.outgoing.get(vertex);
106
+ if (outgoing.length === 0)
107
+ throw new Error(`non-finish ${vertex} has no outgoing edge`);
108
+ let value;
109
+ for (const edge of outgoing) {
110
+ const targetLatest = latest.get(edge.target);
111
+ if (targetLatest === undefined)
112
+ throw new Error(`latest time for ${edge.target} is missing`);
113
+ const candidate = subtract(targetLatest, edge.expected);
114
+ edgeLate.set(edge.id, { ls: candidate, lf: targetLatest });
115
+ if (value === undefined || compare(candidate, value) < 0)
116
+ value = candidate;
117
+ }
118
+ latest.set(vertex, value);
119
+ }
120
+ const vertexLatest = latest.get(vertex);
121
+ for (const edge of graph.incoming.get(vertex)) {
122
+ edgeLate.set(edge.id, {
123
+ ls: subtract(vertexLatest, edge.expected),
124
+ lf: vertexLatest,
125
+ });
126
+ }
127
+ }
128
+ const position = new Map(graph.topologicalOrder.map((id, index) => [id, index]));
129
+ const edges = graph.edges
130
+ .map((edge) => {
131
+ const early = edgeEarly.get(edge.id);
132
+ const late = edgeLate.get(edge.id);
133
+ const totalFloat = subtract(late.ls, early.es);
134
+ const freeFloat = subtract(earliest.get(edge.target), early.ef);
135
+ if (compare(totalFloat, ZERO) < 0 || compare(freeFloat, ZERO) < 0) {
136
+ throw new Error(`negative float for edge ${edge.id}`);
137
+ }
138
+ return {
139
+ id: edge.id,
140
+ source: edge.source,
141
+ target: edge.target,
142
+ kind: edge.kind,
143
+ status: edge.status,
144
+ expected: edge.expected,
145
+ variance: edge.variance,
146
+ es: early.es,
147
+ ef: early.ef,
148
+ ls: late.ls,
149
+ lf: late.lf,
150
+ totalFloat,
151
+ freeFloat,
152
+ isCritical: compare(absolute(totalFloat), graph.criticalEpsilon) <= 0,
153
+ isDriving: isZero(totalFloat),
154
+ edge,
155
+ };
156
+ })
157
+ .sort((left, right) => {
158
+ const byPosition = position.get(left.source) - position.get(right.source);
159
+ return byPosition !== 0 ? byPosition : compareStableStrings(left.id, right.id);
160
+ });
161
+ const milestones = graph.topologicalOrder.map((id) => {
162
+ const milestoneEarliest = earliest.get(id);
163
+ const milestoneLatest = latest.get(id);
164
+ const slack = subtract(milestoneLatest, milestoneEarliest);
165
+ if (compare(slack, ZERO) < 0)
166
+ throw new Error(`negative milestone slack for ${id}`);
167
+ return { id, earliest: milestoneEarliest, latest: milestoneLatest, slack };
168
+ });
169
+ const pathResult = criticalPaths(graph, edges, maxPaths);
170
+ return {
171
+ makespan,
172
+ conditionalOnBlocksResolved: graph.blockedTaskIds.length > 0,
173
+ blockedTaskIds: graph.blockedTaskIds,
174
+ milestones,
175
+ edges,
176
+ critical: {
177
+ milestoneIds: milestones
178
+ .filter((milestone) => compare(absolute(milestone.slack), graph.criticalEpsilon) <= 0)
179
+ .map((milestone) => milestone.id),
180
+ taskIds: edges.filter((edge) => edge.kind === "task" && edge.isCritical).map((edge) => edge.id),
181
+ gateIds: edges.filter((edge) => edge.kind === "gate" && edge.isCritical).map((edge) => edge.id),
182
+ drivingEdgeIds: edges.filter((edge) => edge.isDriving).map((edge) => edge.id),
183
+ ...pathResult,
184
+ },
185
+ };
186
+ }
187
+ //# sourceMappingURL=precedence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"precedence.js","sourceRoot":"","sources":["../../src/analysis/precedence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAwD9B,SAAS,aAAa,CAAC,KAA4B;IACjD,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;KACrE,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,KAAoB,EACpB,WAAkC,EAClC,QAAgB;IAEhB,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAkB,CAAC,CAAC,CACjE,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,SAAS;YAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAiB,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3D,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,SAAS;QACtC,MAAM,KAAK,GAAG,eAAe;aAC1B,GAAG,CAAC,MAAM,CAAE;aACZ,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ;SAClC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;SAC3C,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACvF,IAAI,SAAS,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAEnF,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,OAAqB,EAAQ,EAAE;QAC5D,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;YAAE,OAAO;QACvC,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAE,EAAE,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;gBAAE,SAAS;YACrD,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YACvC,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;gBAAE,OAAO;QACzC,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;QACtC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpB,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;YAAE,MAAM;IACxC,CAAC;IAED,IAAI,cAAwC,CAAC;IAC7C,MAAM,mBAAmB,GAAiB,EAAE,CAAC;IAC7C,IAAI,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,eAAe;aACzB,GAAG,CAAC,MAAM,CAAE;aACZ,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAC3F,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,cAAc,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACpD,OAAO;QACL,kBAAkB,EAAE,cAAc;QAClC,SAAS;QACT,KAAK,EAAE,OAAO;QACd,cAAc,EAAE,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAoB,EACpB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,GAAG,EAA4D,CAAC;IACtF,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC5C,IAAI,KAAe,CAAC;QACpB,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;YAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,MAAM,kBAAkB,CAAC,CAAC;YACtF,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAW,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;gBACzD,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,EAAE,CAAC;gBAC7C,OAAO,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9E,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,EAAE,CAAC;YAC/C,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAE/E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAmB,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4D,CAAC;IACrF,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3D,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;YAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,uBAAuB,CAAC,CAAC;YACxF,IAAI,KAA2B,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAI,YAAY,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC;gBAC7F,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;gBAC3D,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;oBAAE,KAAK,GAAG,SAAS,CAAC;YAC9E,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAM,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,EAAE,CAAC;YAC/C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBACpB,EAAE,EAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC;gBACzC,EAAE,EAAE,YAAY;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;SACtB,GAAG,CAAC,CAAC,IAAI,EAAc,EAAE;QACxB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;QACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU;YACV,SAAS;YACT,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC;YACrE,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;YAC7B,IAAI;SACL,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC;QAC5E,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IACL,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAmB,EAAE;QACpE,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QAC5C,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;QACpF,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAC7E,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzD,OAAO;QACL,QAAQ;QACR,2BAA2B,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QAC5D,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,UAAU;QACV,KAAK;QACL,QAAQ,EAAE;YACR,YAAY,EAAE,UAAU;iBACrB,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;iBACrF,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/F,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/F,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7E,GAAG,UAAU;SACd;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,96 @@
1
+ import type { Rational } from "../model/rational.js";
2
+ import type { RequirementValue } from "../model/syntax.js";
3
+ import type { ResidualGraph, TaskStatus } from "./graph.js";
4
+ import type { PrecedenceResult } from "./precedence.js";
5
+ export interface ScheduledTask {
6
+ readonly id: string;
7
+ readonly status: TaskStatus;
8
+ readonly expected: Rational;
9
+ readonly variance: Rational;
10
+ readonly eligibleTime: Rational;
11
+ readonly start: Rational;
12
+ readonly finish: Rational;
13
+ readonly resourceWait: Rational;
14
+ readonly requirements: readonly RequirementValue[];
15
+ readonly priorityKey: {
16
+ readonly priority: number;
17
+ readonly precedenceTotalFloat: Rational;
18
+ readonly expected: Rational;
19
+ readonly taskId: string;
20
+ };
21
+ readonly conditionalBlocked: boolean;
22
+ }
23
+ export interface ResourceCapacity {
24
+ readonly id: string;
25
+ readonly declared: number;
26
+ readonly override: number | null;
27
+ readonly effective: number;
28
+ }
29
+ export interface ResourceTimelineEntry {
30
+ readonly taskId: string;
31
+ readonly start: Rational;
32
+ readonly finish: Rational;
33
+ readonly units: number;
34
+ }
35
+ export interface ResourceStatistic {
36
+ readonly id: string;
37
+ readonly capacity: number;
38
+ readonly amountTime: Rational;
39
+ readonly utilization: Rational;
40
+ readonly peakUsage: number;
41
+ readonly lastRelease: Rational;
42
+ readonly timeline: readonly ResourceTimelineEntry[];
43
+ }
44
+ export interface ResourceArc {
45
+ readonly id: string;
46
+ readonly fromTaskId: string;
47
+ readonly toTaskId: string;
48
+ readonly atTime: Rational;
49
+ readonly waitFrom: Rational;
50
+ readonly resources: ReadonlyMap<string, number>;
51
+ readonly scheduleFloat: Rational;
52
+ readonly isCritical: boolean;
53
+ readonly isDriving: boolean;
54
+ }
55
+ export type ScheduleConstraintKind = "precedence" | "gate" | "resource";
56
+ export interface SchedulePath {
57
+ readonly taskIds: readonly string[];
58
+ readonly constraints: readonly {
59
+ readonly fromTaskId: string;
60
+ readonly toTaskId: string;
61
+ readonly kind: ScheduleConstraintKind;
62
+ readonly resourceArcId: string | null;
63
+ }[];
64
+ readonly connectorIds: readonly string[];
65
+ }
66
+ export interface ScheduleCriticalResult {
67
+ readonly taskIds: readonly string[];
68
+ readonly resourceArcIds: readonly string[];
69
+ readonly drivingConstraintIds: readonly string[];
70
+ readonly representativePath: SchedulePath;
71
+ readonly pathCount: bigint;
72
+ readonly paths: readonly SchedulePath[];
73
+ readonly pathsTruncated: boolean;
74
+ }
75
+ export interface ResourceScheduleResult {
76
+ readonly algorithm: {
77
+ readonly id: "parallel-sgs";
78
+ readonly version: 1;
79
+ readonly optimal: false;
80
+ };
81
+ readonly conditionalOnBlocksResolved: boolean;
82
+ readonly blockedTaskIds: readonly string[];
83
+ readonly capacities: readonly ResourceCapacity[];
84
+ readonly precedenceLowerBound: Rational;
85
+ readonly makespan: Rational;
86
+ readonly resourceDelay: Rational;
87
+ readonly tasks: readonly ScheduledTask[];
88
+ readonly resources: readonly ResourceStatistic[];
89
+ readonly resourceArcs: readonly ResourceArc[];
90
+ readonly constraintGraphReplay: {
91
+ readonly ok: true;
92
+ };
93
+ readonly scheduleCritical: ScheduleCriticalResult;
94
+ }
95
+ export declare function analyzeResources(graph: ResidualGraph, precedence: PrecedenceResult, overrides: ReadonlyMap<string, number>, maxPaths: number): ResourceScheduleResult;
96
+ //# sourceMappingURL=resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../src/analysis/resource.ts"],"names":[],"mappings":"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"}