@tellegen/engine 0.2.0 → 0.3.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 (44) hide show
  1. package/README.md +19 -14
  2. package/dist/generated/contracts.d.ts +25 -17
  3. package/dist/generated/contracts.d.ts.map +1 -1
  4. package/dist/generated/contracts.js +3 -3
  5. package/dist/generated/study-contracts.d.ts +426 -0
  6. package/dist/generated/study-contracts.d.ts.map +1 -0
  7. package/dist/generated/study-contracts.js +4 -0
  8. package/dist/generated/study-contracts.js.map +1 -0
  9. package/dist/generated/study-schema.d.ts +2 -0
  10. package/dist/generated/study-schema.d.ts.map +1 -0
  11. package/dist/generated/study-schema.js +3 -0
  12. package/dist/generated/study-schema.js.map +1 -0
  13. package/dist/host.d.ts +12 -0
  14. package/dist/host.d.ts.map +1 -1
  15. package/dist/host.js +58 -10
  16. package/dist/host.js.map +1 -1
  17. package/dist/index.d.ts +309 -119
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +359 -110
  20. package/dist/index.js.map +1 -1
  21. package/dist/input-limit.d.ts +1 -1
  22. package/dist/input-limit.js +1 -1
  23. package/dist/module.d.ts +1 -0
  24. package/dist/module.d.ts.map +1 -1
  25. package/dist/module.js.map +1 -1
  26. package/dist/protocol.d.ts +87 -26
  27. package/dist/protocol.d.ts.map +1 -1
  28. package/dist/protocol.js +60 -23
  29. package/dist/protocol.js.map +1 -1
  30. package/dist/study-document.d.ts +46 -0
  31. package/dist/study-document.d.ts.map +1 -0
  32. package/dist/study-document.js +183 -0
  33. package/dist/study-document.js.map +1 -0
  34. package/dist/study-document.test.d.ts +2 -0
  35. package/dist/study-document.test.d.ts.map +1 -0
  36. package/dist/study-document.test.js +119 -0
  37. package/dist/study-document.test.js.map +1 -0
  38. package/dist/wasm-pkg/tellegen.d.ts +167 -85
  39. package/dist/wasm-pkg/tellegen.js +667 -187
  40. package/dist/wasm-pkg/tellegen_bg.wasm +0 -0
  41. package/dist/wasm-pkg/tellegen_bg.wasm.d.ts +27 -9
  42. package/dist/worker.js +15 -3
  43. package/dist/worker.js.map +1 -1
  44. package/package.json +20 -3
@@ -2,17 +2,47 @@
2
2
  /* eslint-disable */
3
3
 
4
4
  /**
5
- * A build-once handle over the engine, exported to JS. Construct once per case (the
6
- * network is parsed and the model built here); then [`replace_edits`](Study::replace_edits)
5
+ * A retained fixed-point current-injection session. The prepared network,
6
+ * sparse LU, and last converged voltage remain in this WASM object across
7
+ * load edits.
8
+ */
9
+ export class McPfSession {
10
+ free(): void;
11
+ [Symbol.dispose](): void;
12
+ /**
13
+ * Materialize the current edited input as PowerIO IR.
14
+ */
15
+ input_module(): string;
16
+ /**
17
+ * Editable load branches with base and current P/Q values.
18
+ */
19
+ load_branches(): string;
20
+ constructor(module_json: string, options_json: string);
21
+ /**
22
+ * Replace the absolute branch-power edit state and solve with the retained
23
+ * factorization and previous converged voltage.
24
+ */
25
+ replace_load_powers(edits_json: string): string;
26
+ /**
27
+ * The current complete solver result.
28
+ */
29
+ result(): string;
30
+ /**
31
+ * Save the current edited point and result without re-solving.
32
+ */
33
+ snapshot(study_id: string, study_title: string): string;
34
+ }
35
+
36
+ /**
37
+ * A retained handle over the engine, exported to JS. Construct once per PowerIO module;
38
+ * then [`replace_edits`](Study::replace_edits)
7
39
  * solves exactly at an absolute edit state and [`preview_replacement`](Study::preview_replacement)
8
- * returns a first-order linearization toward an absolute edit state — neither re-parses
9
- * the network, unlike `solve_json` which rebuilds it on every call. This is
10
- * the path a reactive drag should use.
40
+ * returns a first order linearization toward an absolute edit state.
11
41
  *
12
42
  * Arguments and results are JSON in the engine's `Study` shapes: edits are a
13
43
  * `NetworkEdit[]` (e.g. `[{"kind":"add_load","bus":2,"p_mw":50}]`; the element key
14
- * also accepts the powerio row uid string `ingest_case` stamps, e.g.
15
- * `"bus":"buses:1"`), `preview` watches an
44
+ * also accepts a powerio row uid string when the source format carries uids,
45
+ * e.g. `"bus":"buses:1"`), `preview` watches an
16
46
  * `Operand[]` (e.g. `[{"Price":"Active"}]`) and returns a `Preview`. `commit` takes the
17
47
  * edits plus a `SensRequest[]` of watched cells and returns `{ solution, iterations,
18
48
  * sensitivities }` — the committed [`SolveResponse`] plus the requested ∂operand/∂param
@@ -25,7 +55,7 @@ export class Study {
25
55
  /**
26
56
  * Apply a geographic layer (a canonical `.geo.json` from [`parse_geo`] or
27
57
  * [`apply_layout`]) onto this study's base network, so a later
28
- * [`save_package`](Study::save_package) or export carries the coordinates
58
+ * [`save_module`](Study::save_module) or export carries the coordinates
29
59
  * on screen. Locations are metadata the model never reads; nothing
30
60
  * re-solves. Returns the apply report JSON.
31
61
  */
@@ -40,16 +70,34 @@ export class Study {
40
70
  * columns so the UI renders the ∂LMP/∂d column without a second solve.
41
71
  */
42
72
  commit(edits_json: string, sensitivities_json: string): string;
73
+ /**
74
+ * Export the committed operating point to a powerio `format` (`matpower`,
75
+ * `psse`, ...). Returns `{ text, diagnostics, format,
76
+ * extension }` as JSON: the serialized case, this output operation's
77
+ * structured diagnostics, and the format token and file extension.
78
+ */
79
+ export(format: string): string;
43
80
  /**
44
81
  * The formulation tag (`"dcopf"` / `"acpf"`).
45
82
  */
46
83
  formulation(): string;
47
84
  /**
48
- * Build a study over `network_json` for `formulation` (`"dcopf"` / `"acpf"`, and —
85
+ * Build a study over `module_json` for `formulation` (`"dcopf"` / `"acpf"`, and —
49
86
  * in a build that includes them — `"socwr"` / `"acopf"`), solving the base case.
50
- * Errors on an unknown or not-built formulation.
87
+ * Bare model JSON and unknown or unavailable formulations are rejected.
88
+ */
89
+ constructor(module_json: string, formulation: string);
90
+ /**
91
+ * Run a bounded differentiable planning search over the committed
92
+ * operating point: the implicit gradient of the serializable outer
93
+ * objective through the exact DC OPF KKT orders capacity trials
94
+ * whose every step is verified by an exact re-solve. Read only — the
95
+ * committed case, edits, and revision are untouched. `spec_json` is a
96
+ * [`tellegen::plan::CapacityPlanSpec`]; the returned JSON is the complete
97
+ * [`tellegen::plan::CapacityPlanOutcome`] trace with the unapplied
98
+ * proposal. A non-DC formulation returns a typed error.
51
99
  */
52
- constructor(network_json: string, formulation: string);
100
+ plan(spec_json: string): string;
53
101
  /**
54
102
  * First-order preview of `edits_json` (a `NetworkEdit[]`) for the `watched_json`
55
103
  * operands (an `Operand[]`), at the committed point, without re-solving. Returns the
@@ -69,12 +117,21 @@ export class Study {
69
117
  */
70
118
  replace_edits(edits_json: string, sensitivities_json: string): string;
71
119
  /**
72
- * Serialize this study as a `.pio.json` package: the base network is the payload,
73
- * the edit log is the study block (one commit per `commit` call, keyed by row uid),
74
- * and the formulation and solve options ride under `study.app["tellegen"]`. Returns
75
- * the package JSON, ready to download or hand to [`export_study`].
120
+ * Serialize the exact problem instance, including its inner objective and constraints.
121
+ */
122
+ save_instance_module(): string;
123
+ /**
124
+ * Serialize the committed operating point as a stored PowerIO module:
125
+ * the materialized network with one descriptive `Edit` history entry per
126
+ * committed edit, ready to download as `.pio.json`. Any PowerIO reader
127
+ * understands the file; reloading it starts a fresh session.
128
+ */
129
+ save_module(): string;
130
+ /**
131
+ * Save the committed exact DC OPF result as a PowerIO solution module.
132
+ * The embedded instance contains the materialized case that was solved.
76
133
  */
77
- save_package(): string;
134
+ save_solution_module(): string;
78
135
  /**
79
136
  * The most recent committed solution as `SolveResponse` JSON.
80
137
  */
@@ -87,7 +144,7 @@ export class Study {
87
144
  * `SubNum` extras key. Returns the refreshed `ingest_case` payload plus a
88
145
  * `report`; errors when no bus joined.
89
146
  */
90
- export function apply_display_geo(network_json: string, bytes: Uint8Array): string;
147
+ export function apply_display_geo(module_json: string, bytes: Uint8Array): string;
91
148
 
92
149
  /**
93
150
  * Apply a [`parse_geo`] layer onto a case network: matched bus points land in
@@ -96,7 +153,7 @@ export function apply_display_geo(network_json: string, bytes: Uint8Array): stri
96
153
  * the refreshed `ingest_case` payload plus a `report` of matched/unmatched
97
154
  * counts; errors when nothing matched.
98
155
  */
99
- export function apply_geo(network_json: string, layer_geojson: string): string;
156
+ export function apply_geo(module_json: string, layer_geojson: string): string;
100
157
 
101
158
  /**
102
159
  * Stamp a computed layout (bus id => `[lon, lat]`) onto a case network with
@@ -104,7 +161,12 @@ export function apply_geo(network_json: string, layer_geojson: string): string;
104
161
  * `ingest_case` payload plus `layer`, the stamped layout as a canonical
105
162
  * `.geo.json` document.
106
163
  */
107
- export function apply_layout(network_json: string, coords_json: string, kind: string): string;
164
+ export function apply_layout(module_json: string, coords_json: string, kind: string): string;
165
+
166
+ /**
167
+ * Attach geographic or drawing positions to a saved multiconductor result.
168
+ */
169
+ export function apply_mc_study_geo(snapshot_json: string, layer_geojson: string): string;
108
170
 
109
171
  /**
110
172
  * The capability matrix as JSON: which `(formulation, operand, parameter)` cells this
@@ -118,25 +180,16 @@ export function capabilities_json(): string;
118
180
  */
119
181
  export function classify_json(bytes: Uint8Array): string;
120
182
 
121
- /**
122
- * Export the balanced study state at commit `commit` to a powerio `format`
123
- * (`matpower`, `psse`, `model-json`, ...). Returns `{ text, warnings, format,
124
- * extension }` as JSON: the serialized case, the writer's fidelity warnings so the
125
- * frontend can surface them, and the format token and file extension. The package
126
- * JSON is untrusted; malformed input returns a `JsError`, never a panic.
127
- */
128
- export function export_study(package_json: string, commit: number, format: string): string;
129
-
130
183
  /**
131
184
  * A case's coordinates as a canonical `.geo.json` document (one point per
132
185
  * located bus, one route per routed branch, provenance preserved). Errors
133
186
  * when the case carries none.
134
187
  */
135
- export function extract_geo(network_json: string): string;
188
+ export function extract_geo(module_json: string): string;
136
189
 
137
190
  /**
138
191
  * Everything the drop panel needs from one parse: counts, total load and
139
- * capacity, parse warnings, and a `view` of buses and branches in the shape
192
+ * capacity, parse diagnostics, and a `view` of buses and branches in the shape
140
193
  * the tellegen API serves, placed at the coordinates the file carries
141
194
  * (PowerWorld complete case aux exports). `view` is null when the file has no
142
195
  * coordinates.
@@ -149,13 +202,14 @@ export function ingest_case(bytes: Uint8Array, format: string): string;
149
202
  /**
150
203
  * The distribution counterpart of [`ingest_case`]: view a multiconductor case
151
204
  * with no solve. `format` is a distribution reader token (`dss`, `bmopf`,
152
- * `pmd`) parsed by [`powerio_dist`], or `pio` for a `.pio.json` package
153
- * carrying a multiconductor payload. Returns the drop-panel payload JSON:
154
- * name, element counts, connected load/generation (kW), parse warnings,
205
+ * `pmd`) parsed by [`powerio_dist`], or `pio` for a `.pio.json` stored module
206
+ * holding a supported multiconductor network, instance, or solution. Returns
207
+ * the drop-panel payload JSON:
208
+ * name, element counts, connected load/generation (kW), parse diagnostics,
155
209
  * coordinate provenance, and the bus/terminal graph the frontend renders (see
156
- * [`dist`]).
210
+ * the private `dist` adapter).
157
211
  *
158
- * Untrusted input: the parse and package restore return error strings (mapped
212
+ * Untrusted input: the parse and module restore return error strings (mapped
159
213
  * to `JsError` here), so a malformed, truncated, or oversized `.dss`/JSON
160
214
  * rejects cleanly and never panics the wasm instance.
161
215
  */
@@ -170,113 +224,141 @@ export function ingest_dist_case_bytes(bytes: Uint8Array, format: string): strin
170
224
  * Classify and ingest one dropped JSON byte buffer. Known inputs return their
171
225
  * render-ready payload; ambiguous and unknown documents return a null payload
172
226
  * so the caller can request an explicit format without decoding the bytes a
173
- * second time. Package envelopes are decoded once and the parsed package is
174
- * passed directly to the appropriate restore path.
227
+ * second time. A stored module is read once and its value routed to the
228
+ * balanced or multiconductor view. The TS drop-classify layer must mirror
229
+ * the kinds (`module` and powerio's families).
175
230
  */
176
231
  export function ingest_json_drop(bytes: Uint8Array): string;
177
232
 
178
233
  /**
179
- * [`ingest_case`] for powerio's own model JSON, the document `export_study`
180
- * writes under the `model-json` token and powerio classifies as
181
- * `JsonClass::ModelJson`. It is not a case format, so it reaches
182
- * `BalancedNetwork::from_json` rather than a case reader, and there are no
183
- * reader warnings to carry: nothing was converted.
234
+ * Parse a case file (MATPOWER, PSS/E RAW, PowerWorld aux, PowerModels or
235
+ * egret JSON) and return `{"network": ..., "diagnostics": [...]}` as JSON.
236
+ *
237
+ * Takes the upload's bytes, not decoded text: powerio refuses a text format
238
+ * whose bytes are not UTF-8, where a browser side `File.text()` would have
239
+ * replaced each offending byte with U+FFFD and parsed on. It also reaches
240
+ * PowerWorld `.pwb`, which has no text form at all.
184
241
  */
185
- export function ingest_model_json(network_json: string): string;
242
+ export function parse_case(bytes: Uint8Array, format: string): string;
186
243
 
187
244
  /**
188
- * Byte counterpart of [`ingest_model_json`] for dropped files. UTF-8 decoding
189
- * and model validation both stay in powerio.
245
+ * Decode a PowerWorld drawing as a canonical PowerIO GeoLayer in diagram units.
190
246
  */
191
- export function ingest_model_json_bytes(bytes: Uint8Array): string;
247
+ export function parse_display(bytes: Uint8Array, format: string): string;
192
248
 
193
249
  /**
194
- * Restore a study saved by [`Study::save_package`]. Returns a JSON bundle the frontend
195
- * reads to rebuild its case, edit sliders, formulation, and solve options in one step.
196
- * See [`load_package_bundle`] for the shape and the fail-closed contract.
250
+ * Parse a geographic sidecar (buscoords CSV, aliased CSV/JSON records,
251
+ * GeoJSON) from raw dropped bytes; `hint` is the file name ("" to sniff).
252
+ * Returns `{ layer, diagnostics, n_points, n_routes }` — the layer as its
253
+ * canonical `.geo.json` document, ready for [`apply_geo`]. Untrusted input
254
+ * rejects as a `JsError`, never a panic.
197
255
  */
198
- export function load_package(package_json: string): string;
256
+ export function parse_geo(bytes: Uint8Array, hint: string): string;
199
257
 
200
258
  /**
201
- * Byte counterpart of [`load_package`] for a dropped package.
259
+ * Validate and canonicalize a saved multiconductor Study snapshot without
260
+ * re-solving it.
202
261
  */
203
- export function load_package_bytes(bytes: Uint8Array): string;
262
+ export function replay_mc_study(snapshot_json: string): string;
204
263
 
205
264
  /**
206
- * Parse a case file (MATPOWER, PSS/E RAW, PowerWorld aux, PowerModels or
207
- * egret JSON) and return `{"network": ..., "warnings": [...]}` as JSON.
208
- *
209
- * Takes the upload's bytes, not decoded text: `powerio::parse_bytes` refuses a
210
- * text format whose bytes are not UTF-8, where a browser side `File.text()`
211
- * would have replaced each offending byte with U+FFFD and parsed on. It also
212
- * reaches PowerWorld `.pwb`, which has no text form at all.
265
+ * Solve a raw BMOPF multiconductor constant-power case. The parser and
266
+ * fixed-point implementation remain in the engine crate; this export only
267
+ * performs the bounded text/JSON conversion at the browser boundary.
213
268
  */
214
- export function parse_case(bytes: Uint8Array, format: string): string;
269
+ export function solve_mc_bmopf(text: string, options_json: string): string;
215
270
 
216
271
  /**
217
- * Decode a PowerWorld `.pwd` display file (binary). Returns the substation
218
- * symbols at the diagram coordinates the file stores (x east, y north) plus
219
- * the canvas size, each with the approximate `lon`/`lat` projection
220
- * (`pwd_mercator_to_lonlat`; hand edited diagrams drift from it). A `.pwd`
221
- * carries no buses or branches. `format` is "pwd". Pure in-memory parsing,
222
- * no filesystem, so it runs in the browser.
272
+ * Solve a stored PowerIO multiconductor module. This accepts the portable
273
+ * module form used by browser persistence in addition to raw BMOPF text.
223
274
  */
224
- export function parse_display(bytes: Uint8Array, format: string): string;
275
+ export function solve_mc_module(module_json: string, options_json: string): string;
225
276
 
226
277
  /**
227
- * Parse a geographic sidecar (buscoords CSV, aliased CSV/JSON records,
228
- * GeoJSON) from raw dropped bytes; `hint` is the file name ("" to sniff).
229
- * Returns `{ layer, warnings, n_points, n_routes }` — the layer as its
230
- * canonical `.geo.json` document, ready for [`apply_geo`]. Untrusted input
231
- * rejects as a `JsError`, never a panic.
278
+ * Solve a supported multiconductor Study input and return a self-contained,
279
+ * replayable snapshot containing the typed input, PowerIO solution module, and
280
+ * terminal-aware result view.
232
281
  */
233
- export function parse_geo(bytes: Uint8Array, hint: string): string;
282
+ export function solve_mc_study(module_json: string, study_id: string, study_title: string, options_json: string): string;
234
283
 
235
284
  /**
236
- * The stateless solve front door: a [`SolveRequest`](tellegen::SolveRequest) JSON
237
- * in, a [`SolveResponse`](tellegen::SolveResponse) JSON out. One-shot callers only;
285
+ * The stateless solve front door: a retained PowerIO module and a
286
+ * [`tellegen::SolveRequest`] JSON in, a [`tellegen::SolveResponse`] JSON out. One-shot callers only;
238
287
  * the reactive hot path is the [`Study`].
239
288
  */
240
- export function solve_json(network_json: string, request_json: string): string;
289
+ export function solve_module(module_json: string, request_json: string): string;
290
+
291
+ /**
292
+ * Create a portable application Study through the shared native controller.
293
+ */
294
+ export function study_document_create(request_json: string): string;
295
+
296
+ /**
297
+ * Validate and normalize a portable bundle without executing its contents.
298
+ */
299
+ export function study_document_import(bundle_json: string): string;
300
+
301
+ /**
302
+ * Execute a revision-checked Study operation and return the completed bundle.
303
+ */
304
+ export function study_document_run(bundle_json: string, request_json: string, cancelled: Function): Promise<string>;
241
305
 
242
306
  export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
243
307
 
244
308
  export interface InitOutput {
245
309
  readonly memory: WebAssembly.Memory;
310
+ readonly __wbg_mcpfsession_free: (a: number, b: number) => void;
246
311
  readonly __wbg_study_free: (a: number, b: number) => void;
247
312
  readonly apply_display_geo: (a: number, b: number, c: number, d: number) => [number, number, number, number];
248
313
  readonly apply_geo: (a: number, b: number, c: number, d: number) => [number, number, number, number];
249
314
  readonly apply_layout: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
315
+ readonly apply_mc_study_geo: (a: number, b: number, c: number, d: number) => [number, number, number, number];
250
316
  readonly capabilities_json: () => [number, number];
251
317
  readonly classify_json: (a: number, b: number) => [number, number, number, number];
252
- readonly export_study: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
253
318
  readonly extract_geo: (a: number, b: number) => [number, number, number, number];
254
319
  readonly ingest_case: (a: number, b: number, c: number, d: number) => [number, number, number, number];
255
320
  readonly ingest_dist_case: (a: number, b: number, c: number, d: number) => [number, number, number, number];
256
321
  readonly ingest_dist_case_bytes: (a: number, b: number, c: number, d: number) => [number, number, number, number];
257
322
  readonly ingest_json_drop: (a: number, b: number) => [number, number, number, number];
258
- readonly ingest_model_json: (a: number, b: number) => [number, number, number, number];
259
- readonly ingest_model_json_bytes: (a: number, b: number) => [number, number, number, number];
260
- readonly load_package: (a: number, b: number) => [number, number, number, number];
261
- readonly load_package_bytes: (a: number, b: number) => [number, number, number, number];
323
+ readonly mcpfsession_input_module: (a: number) => [number, number, number, number];
324
+ readonly mcpfsession_load_branches: (a: number) => [number, number, number, number];
325
+ readonly mcpfsession_new: (a: number, b: number, c: number, d: number) => [number, number, number];
326
+ readonly mcpfsession_replace_load_powers: (a: number, b: number, c: number) => [number, number, number, number];
327
+ readonly mcpfsession_result: (a: number) => [number, number, number, number];
328
+ readonly mcpfsession_snapshot: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
262
329
  readonly parse_case: (a: number, b: number, c: number, d: number) => [number, number, number, number];
263
330
  readonly parse_display: (a: number, b: number, c: number, d: number) => [number, number, number, number];
264
331
  readonly parse_geo: (a: number, b: number, c: number, d: number) => [number, number, number, number];
265
- readonly solve_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
332
+ readonly replay_mc_study: (a: number, b: number) => [number, number, number, number];
333
+ readonly solve_mc_bmopf: (a: number, b: number, c: number, d: number) => [number, number, number, number];
334
+ readonly solve_mc_module: (a: number, b: number, c: number, d: number) => [number, number, number, number];
335
+ readonly solve_mc_study: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number];
336
+ readonly solve_module: (a: number, b: number, c: number, d: number) => [number, number, number, number];
266
337
  readonly study_apply_geo: (a: number, b: number, c: number) => [number, number, number, number];
267
338
  readonly study_commit: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
339
+ readonly study_document_create: (a: number, b: number) => [number, number, number, number];
340
+ readonly study_document_import: (a: number, b: number) => [number, number, number, number];
341
+ readonly study_document_run: (a: number, b: number, c: number, d: number, e: any) => any;
342
+ readonly study_export: (a: number, b: number, c: number) => [number, number, number, number];
268
343
  readonly study_formulation: (a: number) => [number, number];
269
344
  readonly study_new: (a: number, b: number, c: number, d: number) => [number, number, number];
345
+ readonly study_plan: (a: number, b: number, c: number) => [number, number, number, number];
270
346
  readonly study_preview: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
271
347
  readonly study_preview_replacement: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
272
348
  readonly study_replace_edits: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
273
- readonly study_save_package: (a: number) => [number, number, number, number];
349
+ readonly study_save_instance_module: (a: number) => [number, number, number, number];
350
+ readonly study_save_module: (a: number) => [number, number, number, number];
351
+ readonly study_save_solution_module: (a: number) => [number, number, number, number];
274
352
  readonly study_solution: (a: number) => [number, number, number, number];
353
+ readonly wasm_bindgen__convert__closures_____invoke__h0178a8f776e4ef73: (a: number, b: number, c: any, d: any) => void;
354
+ readonly wasm_bindgen__convert__closures_____invoke__h42fc1c09ce4112c3: (a: number, b: number, c: any) => [number, number];
355
+ readonly __wbindgen_exn_store: (a: number) => void;
356
+ readonly __externref_table_alloc: () => number;
357
+ readonly __wbindgen_externrefs: WebAssembly.Table;
275
358
  readonly __wbindgen_free: (a: number, b: number, c: number) => void;
276
359
  readonly __wbindgen_malloc: (a: number, b: number) => number;
277
360
  readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
278
- readonly __externref_table_alloc: () => number;
279
- readonly __wbindgen_externrefs: WebAssembly.Table;
361
+ readonly __wbindgen_destroy_closure: (a: number, b: number) => void;
280
362
  readonly __externref_table_dealloc: (a: number) => void;
281
363
  readonly __wbindgen_start: () => void;
282
364
  }