@tellegen/engine 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.
@@ -0,0 +1,333 @@
1
+ /** The browser engine API. Requests run in a dedicated Web Worker when the
2
+ * browser allows one — a solve never blocks the page — and on the calling
3
+ * thread otherwise (see host.ts). Nothing downloads until the first engine
4
+ * call; dropped files are parsed locally and never leave the machine. */
5
+ import { type EngineHost } from "./host.js";
6
+ import type { BranchRatingDeltas, BrowserFormulation, DemandDeltas, NetworkBranch, NetworkBus, ProblemCaps, SensitivityColumn, Solution, SolveRequest, SolveResponse, SolveIteration } from "./generated/contracts.js";
7
+ export { CONTRACT_SOURCE_SHA256, CONTRACT_VERSION, FORMULATION_IDS, SOLVE_STATUSES, } from "./generated/contracts.js";
8
+ export type { BranchRatingDeltas, BrowserFormulation, CaseSummary, DemandDeltas, Network, NetworkBranch, NetworkBus, ProblemCaps, SensRequest, SensitivityColumn, SensitivityMatrix, Solution, SolveIteration, SolveRequest, SolveResponse, } from "./generated/contracts.js";
9
+ export interface CaseFileSummary {
10
+ name: string;
11
+ base_mva: number;
12
+ n_bus: number;
13
+ n_branch: number;
14
+ n_gen: number;
15
+ load_mw: number;
16
+ gen_mw: number;
17
+ has_coords: boolean;
18
+ /** Coordinate provenance: `file` for coordinates the case (or a geographic
19
+ * sidecar) carried, `synthetic`/`manual` for a stamped layout (a restored
20
+ * package echoes the kind it was saved with), `synthetic_pending` when the
21
+ * case awaits placement. */
22
+ coords_kind: "file" | "synthetic_pending" | "synthetic" | "manual";
23
+ warnings: string[];
24
+ }
25
+ export interface TopologyBus {
26
+ id: number;
27
+ /** powerio row uid, stamped at ingest (e.g. "buses:0"). */
28
+ uid: string;
29
+ demand_mw: number;
30
+ gen_mw: number;
31
+ }
32
+ export interface TopologyBranch {
33
+ id: number;
34
+ /** powerio row uid, stamped at ingest (e.g. "branches:0"). */
35
+ uid: string;
36
+ from: number;
37
+ to: number;
38
+ rate_mw: number;
39
+ status: number;
40
+ }
41
+ export interface Topology {
42
+ buses: TopologyBus[];
43
+ branches: TopologyBranch[];
44
+ }
45
+ /** One parse per dropped file: summary stats, plus map geometry when the
46
+ * file carries coordinates and topology for synthetic placement otherwise. */
47
+ export interface IngestedCase extends CaseFileSummary {
48
+ network_json: string;
49
+ topology: Topology;
50
+ view: {
51
+ buses: NetworkBus[];
52
+ branches: NetworkBranch[];
53
+ } | null;
54
+ }
55
+ /** Edge family in the collapsed distribution graph. */
56
+ export type DistEdgeKind = "line" | "switch" | "transformer";
57
+ /** Terminal attachment family. */
58
+ export type DistAttachmentKind = "load" | "generator" | "ibr" | "shunt" | "source";
59
+ /** One element connected to a bus terminal. */
60
+ export interface DistGraphAttachment {
61
+ kind: DistAttachmentKind;
62
+ id: string;
63
+ }
64
+ /** One bus node in the collapsed distribution graph. `xy` is present when the
65
+ * source carried a position (`[x, y]`, longitude/latitude when the case is
66
+ * geographic); `terminal_attachments` maps each terminal name to the elements
67
+ * on it. */
68
+ export interface DistGraphBus {
69
+ id: string;
70
+ terminals: string[];
71
+ grounded: string[];
72
+ xy?: [number, number];
73
+ load_kw: number;
74
+ gen_kw: number;
75
+ has_source: boolean;
76
+ terminal_attachments?: Record<string, DistGraphAttachment[]>;
77
+ }
78
+ /** One edge in the collapsed distribution graph. `conductors` pairs the
79
+ * `[from_terminal, to_terminal]` names in conductor order; `closed` is false
80
+ * for an open switch. */
81
+ export interface DistGraphEdge {
82
+ kind: DistEdgeKind;
83
+ id: string;
84
+ from: string;
85
+ to: string;
86
+ conductors: [string, string][];
87
+ closed: boolean;
88
+ n_phases: number;
89
+ }
90
+ /** The render-ready bus/terminal projection of a distribution network. */
91
+ export interface DistGraph {
92
+ buses: DistGraphBus[];
93
+ edges: DistGraphEdge[];
94
+ }
95
+ /** One multiconductor parse for the viewing path: element counts, connected
96
+ * load and generation (kW), parse warnings, coordinate provenance, and the
97
+ * bus/terminal graph. No solve, no network JSON — distribution cases are viewed,
98
+ * not solved. `coords_kind` tells the frontend how to place buses: `geographic`
99
+ * drops `xy` straight onto the map, `planar` fits provided positions into a box
100
+ * at a placement center, `synthetic` runs the force layout. */
101
+ export interface IngestedDistCase {
102
+ name: string | null;
103
+ model: "multiconductor";
104
+ n_bus: number;
105
+ n_edge: number;
106
+ n_line: number;
107
+ n_switch: number;
108
+ n_transformer: number;
109
+ n_load: number;
110
+ n_generator: number;
111
+ n_ibr: number;
112
+ n_source: number;
113
+ n_shunt: number;
114
+ load_kw: number;
115
+ gen_kw: number;
116
+ base_frequency: number;
117
+ has_coords: boolean;
118
+ placed_buses: number;
119
+ coords_space: "geographic" | "projected" | "diagram" | "unknown" | "none";
120
+ coords_kind: "geographic" | "planar" | "synthetic";
121
+ warnings: string[];
122
+ graph: DistGraph;
123
+ }
124
+ /** A study restored from a saved `.pio.json` package: the ingest payload plus the
125
+ * restored formulation, solve options, and folded edit state. `deltas` are keyed by
126
+ * bus id and `rates` by branch id — the numeric keys the sliders use. */
127
+ export interface LoadedPackage extends IngestedCase {
128
+ formulation: Formulation;
129
+ options: {
130
+ shed: boolean;
131
+ warm_start: boolean;
132
+ };
133
+ deltas: DemandDeltas;
134
+ rates: BranchRatingDeltas;
135
+ }
136
+ /** A study state written to a target format: the serialized case text, the writer's
137
+ * fidelity warnings (empty when the conversion is faithful), and the format token and
138
+ * file extension so a caller can name the download. */
139
+ export interface ExportedCase {
140
+ text: string;
141
+ warnings: string[];
142
+ format: string;
143
+ extension: string;
144
+ }
145
+ export declare function preloadEngine(): Promise<void>;
146
+ /** powerio format token from a file name; null for non-case files. */
147
+ export declare function formatOf(name: string): string | null;
148
+ export declare function ingestCase(text: string, format: string): Promise<IngestedCase>;
149
+ /** Parse a multiconductor distribution case for viewing. `format` is a
150
+ * distribution reader token (`dss`, `bmopf`, `pmd`) or `pio` for a `.pio.json`
151
+ * package carrying a multiconductor payload. Rejects on malformed input or a
152
+ * balanced package (which the study-restore path handles). */
153
+ export declare function ingestDistCase(text: string, format: string): Promise<IngestedDistCase>;
154
+ /** Substations from a PowerWorld .pwd display file. `x`/`y` are diagram
155
+ * coordinates as stored; `lon`/`lat` are the engine's approximate projection
156
+ * (powerio's inverse of the auto layout Mercator — hand edited diagrams
157
+ * drift from it). */
158
+ export interface DisplayPreview {
159
+ substations: {
160
+ number: number;
161
+ name: string;
162
+ x: number;
163
+ y: number;
164
+ lon: number;
165
+ lat: number;
166
+ }[];
167
+ canvas_width: number;
168
+ canvas_height: number;
169
+ }
170
+ /** True for binary display files (PowerWorld .pwd), read via parseDisplay.
171
+ * Kept separate from formatOf: a .pwd is display data, not a case format. */
172
+ export declare function isDisplayFile(name: string): boolean;
173
+ export declare function parseDisplay(bytes: Uint8Array): Promise<DisplayPreview>;
174
+ /** A parsed geographic sidecar: the layer as its canonical `.geo.json`
175
+ * document (hand it to {@link applyGeo} or `BrowserStudy.applyGeoLayer`),
176
+ * the tolerant reader's notes on records it could not use, and the feature
177
+ * counts. */
178
+ export interface ParsedGeoLayer {
179
+ layer: string;
180
+ warnings: string[];
181
+ n_points: number;
182
+ n_routes: number;
183
+ }
184
+ /** Result of applying a geographic layer onto a case network. */
185
+ export interface GeoApplyReport {
186
+ matched_buses: number;
187
+ matched_branches: number;
188
+ unmatched_features: number;
189
+ notes: string[];
190
+ }
191
+ /** The refreshed ingest payload after a geo apply: `network_json`, the view,
192
+ * and the summary all reflect the applied coordinates, and `report` carries
193
+ * the matched/unmatched counts for the warnings panel. */
194
+ export interface AppliedGeoCase extends IngestedCase {
195
+ report: GeoApplyReport;
196
+ }
197
+ /** The refreshed ingest payload after stamping a layout, plus `layer`, the
198
+ * stamped layout as a canonical `.geo.json` document (ready to download or
199
+ * to sync onto a live study). */
200
+ export interface StampedLayoutCase extends IngestedCase {
201
+ layer: string;
202
+ }
203
+ /** Parse a geographic sidecar (buscoords CSV, aliased CSV/JSON records,
204
+ * GeoJSON) from raw dropped bytes through powerio's tolerant reader. `hint`
205
+ * is the file name (picks CSV against JSON; "" sniffs). Rejects input with
206
+ * no usable coordinates. */
207
+ export declare function parseGeo(bytes: Uint8Array, hint: string): Promise<ParsedGeoLayer>;
208
+ /** Apply a parsed layer onto a case network (matching by uid, external id,
209
+ * name, and the unordered branch endpoint pair). Rejects when nothing
210
+ * matched. */
211
+ export declare function applyGeo(networkJson: string, layer: string): Promise<AppliedGeoCase>;
212
+ /** Stamp a computed layout (bus id => [lon, lat]) onto a case network with
213
+ * its provenance, so saves and exports carry it. */
214
+ export declare function applyLayout(networkJson: string, coords: Record<number, [number, number]>, kind: "synthetic" | "manual"): Promise<StampedLayoutCase>;
215
+ /** A case's coordinates as a canonical `.geo.json` document. Rejects when the
216
+ * case carries none. */
217
+ export declare function extractGeo(networkJson: string): Promise<string>;
218
+ /** Fill case coordinates from a PowerWorld `.pwd` sibling: substation symbols
219
+ * project to approximate longitude/latitude and join onto buses through the
220
+ * `SubNum` extras key. Rejects when no bus joined. */
221
+ export declare function applyDisplayGeo(networkJson: string, bytes: Uint8Array): Promise<AppliedGeoCase>;
222
+ export declare function capabilities(): Promise<ProblemCaps[]>;
223
+ export declare function solveJson(networkJson: string, request?: SolveRequest): Promise<SolveResponse>;
224
+ export { errorText } from "./errors.js";
225
+ /** True when the engine wasm module has failed to load in a way it can never
226
+ * recover from in this browser. Nothing solves client side when this is true;
227
+ * the caller decides whether a server fallback exists. */
228
+ export declare function isPermanentEngineFailure(message: string): boolean;
229
+ /** The sensitivity selection target: a bus (the ∂LMP/∂d column at that bus) or a
230
+ * branch (the ∂LMP/∂rating column at that branch). Ids are the external element
231
+ * ids; `BrowserStudy` translates them to the engine's dense indices. */
232
+ export type SensTarget = {
233
+ bus: number;
234
+ } | {
235
+ branch: number;
236
+ };
237
+ /** The formulations the full wasm build solves entirely in the browser. Each returns LMP,
238
+ * so the price map, legend, and the ∂LMP/∂d overlay apply unchanged to all of them. Tags
239
+ * are the engine's serde-lowercase `Problem` variants accepted by `new Study(json, tag)`.
240
+ * `dcopf` is the default (zero regression from the prior fixed behavior). */
241
+ export type Formulation = BrowserFormulation;
242
+ /** UI-facing formulation menu: tag, a short label, and a one-line description. The order
243
+ * is the menu order; `dcopf` is first and is the default. */
244
+ export declare const FORMULATIONS: ReadonlyArray<{
245
+ id: Formulation;
246
+ label: string;
247
+ hint: string;
248
+ disabled?: boolean;
249
+ }>;
250
+ /** The default formulation: DC OPF, preserving the prior fixed behavior byte-for-byte. */
251
+ export declare const DEFAULT_FORMULATION: Formulation;
252
+ /** Build-once browser transport for the reactive demand drag. The network is
253
+ * parsed and the model built when the Study is created; `commit` solves exactly
254
+ * at the UI's absolute demand delta state and `preview` returns a first-order
255
+ * linearization toward an absolute demand delta state, neither re-parsing the
256
+ * network. The wasm Study lives behind the engine host (a dedicated worker
257
+ * when the browser allows one), so every method is async. */
258
+ export declare class BrowserStudy {
259
+ #private;
260
+ constructor(host: EngineHost, handle: number);
261
+ /** Exact solve at demand = base + `deltas` and ratings = base + `rates`, replacing
262
+ * the committed point. When `target` names a bus or branch, its ∂LMP/∂parameter
263
+ * column is computed in the *same* solve and returned (no second round-trip);
264
+ * otherwise `sensitivity` is null. `caseId` labels the returned column. Returns the
265
+ * UI Solution, the solver iterates, and the column. */
266
+ commit(caseId: string, deltas: DemandDeltas, rates: BranchRatingDeltas, target: SensTarget | null): Promise<{
267
+ solution: Solution;
268
+ iterations: SolveIteration[];
269
+ sensitivity: SensitivityColumn | null;
270
+ }>;
271
+ /** The ∂LMP/∂parameter column at `target` for this study's formulation, computed by
272
+ * an exact re-solve at the edited point (the same one-call path `commit` uses, but
273
+ * returning only the column). Used when a bus or branch is selected so the overlay
274
+ * matches the active formulation rather than always the DC sensitivity. `caseId`
275
+ * labels the column; returns null when no recognized column comes back. */
276
+ sensitivity(caseId: string, deltas: DemandDeltas, rates: BranchRatingDeltas, target: SensTarget): Promise<SensitivityColumn | null>;
277
+ /** First-order LMP preview for replacing the committed point with
278
+ * demand = base + `deltas` and ratings = base + `rates`, with no re-solve:
279
+ * predicted per-bus ΔLMP and the predicted Δobjective. */
280
+ preview(deltas: DemandDeltas, rates?: BranchRatingDeltas): Promise<{
281
+ lmp: {
282
+ bus: number;
283
+ usd_per_mwh: number;
284
+ }[];
285
+ objectiveDelta: number | null;
286
+ }>;
287
+ /** The Study's current exact solution. Called immediately after Study creation
288
+ * to cache the base point for formulation comparisons. */
289
+ currentSolution(): Promise<Solution>;
290
+ /** Serialize this study as a `.pio.json` package: the base network payload, the
291
+ * edit log as the study block, and the formulation and solve options under
292
+ * `study.app["tellegen"]`. The returned text is ready to download or hand to
293
+ * `exportStudy`. */
294
+ savePackage(): Promise<string>;
295
+ /** Apply a parsed geographic layer (the canonical `.geo.json` from
296
+ * `parseGeo` or `applyLayout`) onto this study's base network, so the next
297
+ * `savePackage` or export carries the coordinates on screen. Locations are
298
+ * metadata the model never reads; nothing re-solves. */
299
+ applyGeoLayer(layer: string): Promise<GeoApplyReport>;
300
+ /** Release the wasm Study; call when discarding it (e.g. the case's
301
+ * networkJson changed, or the case was removed). Fire and forget: the
302
+ * handle is invalid from this call on. */
303
+ free(): void;
304
+ }
305
+ export declare function createStudy(networkJson: string, formulation?: Formulation): Promise<BrowserStudy>;
306
+ /** Restore a study saved by `BrowserStudy.savePackage`: the case, edit sliders,
307
+ * formulation, and solve options in one step. Rejects on a malformed package or one
308
+ * that is not a tellegen study (the engine fails the load closed). */
309
+ export declare function loadPackage(text: string): Promise<LoadedPackage>;
310
+ /** Export a saved study package at commit `commit` to a powerio `format` (`matpower`,
311
+ * `psse`, `powerio-json`, ...). Returns the serialized case text, the writer's fidelity
312
+ * warnings, and the format token and file extension. */
313
+ export declare function exportStudy(packageJson: string, commit: number, format: string): Promise<ExportedCase>;
314
+ export interface EngineTransport {
315
+ preloadEngine(): Promise<void>;
316
+ ingestCase(text: string, format: string): Promise<IngestedCase>;
317
+ ingestDistCase(text: string, format: string): Promise<IngestedDistCase>;
318
+ parseDisplay(bytes: Uint8Array): Promise<DisplayPreview>;
319
+ parseGeo(bytes: Uint8Array, hint: string): Promise<ParsedGeoLayer>;
320
+ applyGeo(networkJson: string, layer: string): Promise<AppliedGeoCase>;
321
+ applyLayout(networkJson: string, coords: Record<number, [number, number]>, kind: "synthetic" | "manual"): Promise<StampedLayoutCase>;
322
+ extractGeo(networkJson: string): Promise<string>;
323
+ applyDisplayGeo(networkJson: string, bytes: Uint8Array): Promise<AppliedGeoCase>;
324
+ capabilities(): Promise<ProblemCaps[]>;
325
+ solveJson(networkJson: string, request?: SolveRequest): Promise<SolveResponse>;
326
+ createStudy(networkJson: string, formulation?: Formulation): Promise<BrowserStudy>;
327
+ loadPackage(text: string): Promise<LoadedPackage>;
328
+ exportStudy(packageJson: string, commit: number, format: string): Promise<ExportedCase>;
329
+ }
330
+ export declare const browserWasmTransport: EngineTransport;
331
+ export declare function createBrowserWasmTransport(): EngineTransport;
332
+ export { BrowserStudy as Study };
333
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}