@ohtaman/washi 0.4.0 → 0.6.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 (130) hide show
  1. package/README.ja.md +149 -121
  2. package/README.md +149 -121
  3. package/README.zh-CN.md +150 -122
  4. package/THIRD_PARTY_LICENSES.md +3 -4
  5. package/dist/browser/_washi-node-only-BvRk9kiK.js +0 -0
  6. package/dist/browser/browser-runtime-TLCY0hkc.js +1793 -0
  7. package/dist/browser/highs-worker.js +21 -3
  8. package/dist/browser/highs.wasm +0 -0
  9. package/dist/browser/highs.wasm.LICENSE +1 -2
  10. package/dist/browser/loader-DewlSho8.js +643 -0
  11. package/dist/browser/solvers/glpk.js +433 -286
  12. package/dist/browser/solvers/glpk.min.js +1 -1
  13. package/dist/browser/solvers/z3.js +1008 -981
  14. package/dist/browser/solvers/z3.min.js +2 -2
  15. package/dist/browser/washi.js +2778 -673
  16. package/dist/browser/washi.min.js +3 -4
  17. package/dist/lib/_washi-node-only-BvRk9kiK.js +0 -0
  18. package/dist/lib/highs-browser-runtime.js +2120 -4124
  19. package/dist/lib/highs-node-runtime.js +24 -1
  20. package/dist/lib/highs-runtime.js +2 -0
  21. package/dist/lib/highs-worker.js +21 -3
  22. package/dist/lib/highs.wasm +0 -0
  23. package/dist/lib/highs.wasm.LICENSE +1 -2
  24. package/dist/lib/loader-BZUQNvh4.js +649 -0
  25. package/dist/lib/registry-C20sxTwm.js +964 -0
  26. package/dist/lib/solvers/glpk.js +201 -90
  27. package/dist/lib/solvers/z3.js +399 -259
  28. package/dist/lib/washi.js +2363 -1056
  29. package/dist/types/decomposition/benders.d.ts +32 -0
  30. package/dist/types/decomposition/benders.d.ts.map +1 -0
  31. package/dist/types/decomposition/column-generation.d.ts +34 -0
  32. package/dist/types/decomposition/column-generation.d.ts.map +1 -0
  33. package/dist/types/decomposition/index.d.ts +4 -0
  34. package/dist/types/decomposition/index.d.ts.map +1 -0
  35. package/dist/types/decomposition/types.d.ts +230 -0
  36. package/dist/types/decomposition/types.d.ts.map +1 -0
  37. package/dist/types/index.d.ts +5 -4
  38. package/dist/types/index.d.ts.map +1 -1
  39. package/dist/types/modeler/big-m.d.ts +75 -0
  40. package/dist/types/modeler/big-m.d.ts.map +1 -0
  41. package/dist/types/modeler/boolean-expr.d.ts +103 -14
  42. package/dist/types/modeler/boolean-expr.d.ts.map +1 -1
  43. package/dist/types/modeler/constraint.d.ts +47 -9
  44. package/dist/types/modeler/constraint.d.ts.map +1 -1
  45. package/dist/types/modeler/expression.d.ts +123 -28
  46. package/dist/types/modeler/expression.d.ts.map +1 -1
  47. package/dist/types/modeler/index.d.ts +11 -6
  48. package/dist/types/modeler/index.d.ts.map +1 -1
  49. package/dist/types/modeler/linearizer.d.ts +15 -0
  50. package/dist/types/modeler/linearizer.d.ts.map +1 -0
  51. package/dist/types/modeler/lp-writer.d.ts +30 -3
  52. package/dist/types/modeler/lp-writer.d.ts.map +1 -1
  53. package/dist/types/modeler/model.d.ts +623 -131
  54. package/dist/types/modeler/model.d.ts.map +1 -1
  55. package/dist/types/modeler/objective.d.ts +59 -0
  56. package/dist/types/modeler/objective.d.ts.map +1 -0
  57. package/dist/types/modeler/parser.d.ts +34 -10
  58. package/dist/types/modeler/parser.d.ts.map +1 -1
  59. package/dist/types/modeler/quad-expr.d.ts +26 -7
  60. package/dist/types/modeler/quad-expr.d.ts.map +1 -1
  61. package/dist/types/modeler/solution-validator.d.ts +93 -0
  62. package/dist/types/modeler/solution-validator.d.ts.map +1 -0
  63. package/dist/types/modeler/solvers/glpk/solver.d.ts +26 -2
  64. package/dist/types/modeler/solvers/glpk/solver.d.ts.map +1 -1
  65. package/dist/types/modeler/solvers/highs/browser-runtime.d.ts +2 -1
  66. package/dist/types/modeler/solvers/highs/browser-runtime.d.ts.map +1 -1
  67. package/dist/types/modeler/solvers/highs/driver.d.ts +232 -0
  68. package/dist/types/modeler/solvers/highs/driver.d.ts.map +1 -0
  69. package/dist/types/modeler/solvers/highs/index.d.ts +1 -0
  70. package/dist/types/modeler/solvers/highs/index.d.ts.map +1 -1
  71. package/dist/types/modeler/solvers/highs/loader.d.ts +38 -13
  72. package/dist/types/modeler/solvers/highs/loader.d.ts.map +1 -1
  73. package/dist/types/modeler/solvers/highs/node-runtime.d.ts +2 -1
  74. package/dist/types/modeler/solvers/highs/node-runtime.d.ts.map +1 -1
  75. package/dist/types/modeler/solvers/highs/solver.d.ts +12 -5
  76. package/dist/types/modeler/solvers/highs/solver.d.ts.map +1 -1
  77. package/dist/types/modeler/solvers/highs/worker-client.d.ts.map +1 -1
  78. package/dist/types/modeler/solvers/mock.d.ts +14 -5
  79. package/dist/types/modeler/solvers/mock.d.ts.map +1 -1
  80. package/dist/types/modeler/solvers/types.d.ts +73 -11
  81. package/dist/types/modeler/solvers/types.d.ts.map +1 -1
  82. package/dist/types/modeler/solvers/z3/loader.d.ts +2 -3
  83. package/dist/types/modeler/solvers/z3/loader.d.ts.map +1 -1
  84. package/dist/types/modeler/solvers/z3/solver.d.ts +15 -5
  85. package/dist/types/modeler/solvers/z3/solver.d.ts.map +1 -1
  86. package/dist/types/modeler/types.d.ts +86 -1
  87. package/dist/types/modeler/types.d.ts.map +1 -1
  88. package/dist/types/modeler/validation.d.ts +56 -0
  89. package/dist/types/modeler/validation.d.ts.map +1 -0
  90. package/dist/types/modeler/variable.d.ts +48 -14
  91. package/dist/types/modeler/variable.d.ts.map +1 -1
  92. package/docs/examples/diet-sensitivity.md +90 -0
  93. package/docs/examples/ecommerce-coupons.md +106 -0
  94. package/docs/examples/index.md +57 -0
  95. package/docs/examples/knapsack.md +60 -0
  96. package/docs/examples/portfolio-qp.md +83 -0
  97. package/docs/examples/production.md +51 -0
  98. package/docs/examples/shift-scheduling.md +175 -0
  99. package/docs/examples/smt-security.md +74 -0
  100. package/docs/examples/transportation.md +90 -0
  101. package/docs/examples/traveling-salesperson.md +173 -0
  102. package/docs/examples/unsat-core.md +64 -0
  103. package/docs/examples/vehicle-routing.md +206 -0
  104. package/docs/getting-started/ai-agents.md +271 -0
  105. package/docs/getting-started/cross-origin.md +87 -0
  106. package/docs/getting-started/index.md +116 -0
  107. package/docs/getting-started/runtimes.md +227 -0
  108. package/docs/guide/constraints.md +177 -0
  109. package/docs/guide/decomposition.md +399 -0
  110. package/docs/guide/expressions.md +204 -0
  111. package/docs/guide/objectives.md +170 -0
  112. package/docs/guide/unsat-core.md +154 -0
  113. package/docs/guide/variables.md +188 -0
  114. package/docs/ja/getting-started/ai-agents.md +270 -0
  115. package/docs/solvers/custom-solver.md +525 -0
  116. package/docs/solvers/glpk.md +66 -0
  117. package/docs/solvers/highs.md +115 -0
  118. package/docs/solvers/index.md +42 -0
  119. package/docs/solvers/z3.md +78 -0
  120. package/docs/zh/getting-started/ai-agents.md +270 -0
  121. package/llms-full.txt +4065 -0
  122. package/llms.txt +201 -0
  123. package/package.json +32 -16
  124. package/skills/washi/SKILL.md +197 -0
  125. package/dist/browser/browser-runtime-D13gHOT5.js +0 -4189
  126. package/dist/browser/loader-CVt4CloI.js +0 -58
  127. package/dist/lib/async-mutex-Duo4jwzn.js +0 -195
  128. package/dist/lib/constraint-BRuB3ooC.js +0 -90
  129. package/dist/lib/loader-Dti0v9yC.js +0 -50
  130. package/dist/lib/registry-DksqCSjI.js +0 -32
@@ -0,0 +1,649 @@
1
+ import { getBundledWasmUrl as e } from "./highs-assets.js";
2
+ import { loadNodeHighs as t } from "./highs-node-runtime.js";
3
+ //#region src/modeler/solvers/highs/driver.ts
4
+ function n(e, t, n) {
5
+ if (n <= 0 || !t) return /* @__PURE__ */ new Float64Array();
6
+ let r = e.wasmMemory ? e.wasmMemory.buffer : e.HEAPF64 ? e.HEAPF64.buffer : e.HEAP8?.buffer;
7
+ if (r) return new Float64Array(r, t, n).slice();
8
+ let i = new Float64Array(n);
9
+ for (let r = 0; r < n; r++) i[r] = e.getValue(t + r * 8, "double");
10
+ return i;
11
+ }
12
+ var r = class extends Error {
13
+ constructor(e) {
14
+ super(e), this.name = "HighsError";
15
+ }
16
+ }, i = class extends r {
17
+ constructor(e) {
18
+ super(e), this.name = "HighsUnsupportedOptionError";
19
+ }
20
+ }, a = {
21
+ 0: "Not Set",
22
+ 1: "Load error",
23
+ 2: "Model error",
24
+ 3: "Presolve error",
25
+ 4: "Solve error",
26
+ 5: "Postsolve error",
27
+ 6: "Empty",
28
+ 7: "Optimal",
29
+ 8: "Infeasible",
30
+ 9: "Primal infeasible or unbounded",
31
+ 10: "Unbounded",
32
+ 11: "Bound on objective reached",
33
+ 12: "Target for objective reached",
34
+ 13: "Time limit reached",
35
+ 14: "Iteration limit reached",
36
+ 15: "Unknown",
37
+ 16: "Solution limit reached",
38
+ 17: "Interrupted",
39
+ 18: "Memory limit reached"
40
+ }, o = {
41
+ callbackType: {
42
+ logging: 0,
43
+ simplexInterrupt: 1,
44
+ ipmInterrupt: 2,
45
+ mipSolution: 3,
46
+ mipImprovingSolution: 4,
47
+ mipLogging: 5,
48
+ mipInterrupt: 6,
49
+ mipGetCutPool: 7,
50
+ mipDefineLazyConstraints: 8,
51
+ mipUserSolution: 9
52
+ },
53
+ solutionStatus: {
54
+ none: 0,
55
+ infeasible: 1,
56
+ feasible: 2
57
+ },
58
+ modelStatus: {
59
+ notSet: 0,
60
+ loadError: 1,
61
+ modelError: 2,
62
+ presolveError: 3,
63
+ solveError: 4,
64
+ postsolveError: 5,
65
+ modelEmpty: 6,
66
+ optimal: 7,
67
+ infeasible: 8,
68
+ unboundedOrInfeasible: 9,
69
+ unbounded: 10,
70
+ objectiveBound: 11,
71
+ objectiveTarget: 12,
72
+ timeLimit: 13,
73
+ iterationLimit: 14,
74
+ unknown: 15,
75
+ solutionLimit: 16,
76
+ interrupt: 17
77
+ }
78
+ };
79
+ function s(e) {
80
+ return {
81
+ create: e.cwrap("Highs_create", "number", []),
82
+ destroy: e.cwrap("Highs_destroy", "void", ["number"]),
83
+ clearModel: e.cwrap("Highs_clearModel", "number", ["number"]),
84
+ version: e.cwrap("Highs_version", "string", []),
85
+ readModel: e.cwrap("Highs_readModel", "number", ["number", "string"]),
86
+ run: e.cwrap("Highs_run", "number", ["number"]),
87
+ getNumCol: e.cwrap("Highs_getNumCol", "number", ["number"]),
88
+ getNumRow: e.cwrap("Highs_getNumRow", "number", ["number"]),
89
+ getNumNz: e.cwrap("Highs_getNumNz", "number", ["number"]),
90
+ getObjectiveValue: e.cwrap("Highs_getObjectiveValue", "number", ["number"]),
91
+ getModelStatus: e.cwrap("Highs_getModelStatus", "number", ["number"]),
92
+ getSolution: e.cwrap("Highs_getSolution", "number", [
93
+ "number",
94
+ "number",
95
+ "number",
96
+ "number",
97
+ "number"
98
+ ]),
99
+ getColName: e.cwrap("Highs_getColName", "number", [
100
+ "number",
101
+ "number",
102
+ "number"
103
+ ]),
104
+ getRowName: e.cwrap("Highs_getRowName", "number", [
105
+ "number",
106
+ "number",
107
+ "number"
108
+ ]),
109
+ getColIntegrality: e.cwrap("Highs_getColIntegrality", "number", [
110
+ "number",
111
+ "number",
112
+ "number"
113
+ ]),
114
+ changeObjectiveOffset: e.cwrap("Highs_changeObjectiveOffset", "number", ["number", "number"]),
115
+ getObjectiveOffset: e.cwrap("Highs_getObjectiveOffset", "number", ["number", "number"]),
116
+ setBoolOptionValue: e.cwrap("Highs_setBoolOptionValue", "number", [
117
+ "number",
118
+ "string",
119
+ "number"
120
+ ]),
121
+ setIntOptionValue: e.cwrap("Highs_setIntOptionValue", "number", [
122
+ "number",
123
+ "string",
124
+ "number"
125
+ ]),
126
+ setDoubleOptionValue: e.cwrap("Highs_setDoubleOptionValue", "number", [
127
+ "number",
128
+ "string",
129
+ "number"
130
+ ]),
131
+ setStringOptionValue: e.cwrap("Highs_setStringOptionValue", "number", [
132
+ "number",
133
+ "string",
134
+ "string"
135
+ ]),
136
+ setSolution: e.cwrap("Highs_setSolution", "number", [
137
+ "number",
138
+ "number",
139
+ "number",
140
+ "number",
141
+ "number"
142
+ ]),
143
+ setSparseSolution: e.cwrap("Highs_setSparseSolution", "number", [
144
+ "number",
145
+ "number",
146
+ "number",
147
+ "number"
148
+ ]),
149
+ getIntInfoValue: e.cwrap("Highs_getIntInfoValue", "number", [
150
+ "number",
151
+ "string",
152
+ "number"
153
+ ]),
154
+ getDoubleInfoValue: e.cwrap("Highs_getDoubleInfoValue", "number", [
155
+ "number",
156
+ "string",
157
+ "number"
158
+ ]),
159
+ getInt64InfoValue: e.cwrap("Highs_getInt64InfoValue", "number", [
160
+ "number",
161
+ "string",
162
+ "number"
163
+ ]),
164
+ setCallback: e.cwrap("Highs_setCallback", "number", [
165
+ "number",
166
+ "number",
167
+ "number"
168
+ ]),
169
+ startCallback: e.cwrap("Highs_startCallback", "number", ["number", "number"]),
170
+ stopCallback: e.cwrap("Highs_stopCallback", "number", ["number", "number"])
171
+ };
172
+ }
173
+ var c = 0, l = class {
174
+ highs;
175
+ module;
176
+ bindings;
177
+ stringBuf;
178
+ isDestroyed = !1;
179
+ constructor(e, t, n) {
180
+ this.module = e, this.bindings = t, this.highs = n ?? t.create(), this.stringBuf = e._malloc(512);
181
+ }
182
+ changeObjectiveOffset(e) {
183
+ let t = this.bindings.changeObjectiveOffset(this.highs, e);
184
+ if (t !== 0) throw new r(`Highs_changeObjectiveOffset failed with status ${t}`);
185
+ }
186
+ getObjectiveOffset() {
187
+ let e = this.module._malloc(8);
188
+ try {
189
+ return this.bindings.getObjectiveOffset(this.highs, e), this.module.getValue(e, "double");
190
+ } finally {
191
+ this.module._free(e);
192
+ }
193
+ }
194
+ options = { set: (e, t) => {
195
+ let n = -1;
196
+ if (typeof t == "boolean" ? n = this.bindings.setBoolOptionValue(this.highs, e, +!!t) : typeof t == "number" ? Number.isInteger(t) ? (n = this.bindings.setIntOptionValue(this.highs, e, t), n !== 0 && (n = this.bindings.setDoubleOptionValue(this.highs, e, t))) : n = this.bindings.setDoubleOptionValue(this.highs, e, t) : typeof t == "string" && (n = this.bindings.setStringOptionValue(this.highs, e, t)), n !== 0) throw new i(`Option "${e}" with value ${JSON.stringify(t)} is not supported or invalid in HiGHS`);
197
+ } };
198
+ getDimensions() {
199
+ return {
200
+ numCols: this.bindings.getNumCol(this.highs),
201
+ numRows: this.bindings.getNumRow(this.highs)
202
+ };
203
+ }
204
+ getColIntegrality(e) {
205
+ let t = this.module._malloc(4);
206
+ try {
207
+ return this.bindings.getColIntegrality(this.highs, e, t), this.module.getValue(t, "i32");
208
+ } finally {
209
+ this.module._free(t);
210
+ }
211
+ }
212
+ getColName(e) {
213
+ return this.bindings.getColName(this.highs, e, this.stringBuf), this.module.UTF8ToString(this.stringBuf);
214
+ }
215
+ getRowName(e) {
216
+ return this.bindings.getRowName(this.highs, e, this.stringBuf), this.module.UTF8ToString(this.stringBuf);
217
+ }
218
+ setSolution(e) {
219
+ if (e.colValue && Array.isArray(e.colValue)) {
220
+ let t = e.colValue.length, n = this.module._malloc(t * 8);
221
+ try {
222
+ for (let r = 0; r < t; r++) this.module.setValue(n + r * 8, e.colValue[r], "double");
223
+ let i = this.bindings.setSolution(this.highs, n, 0, 0, 0);
224
+ if (i !== 0) throw new r(`Highs_setSolution failed with status ${i}`);
225
+ } finally {
226
+ this.module._free(n);
227
+ }
228
+ return;
229
+ }
230
+ if (e.indices && e.values && e.indices.length === e.values.length) {
231
+ let t = e.indices.length, n = this.module._malloc(t * 4), i = this.module._malloc(t * 8);
232
+ try {
233
+ for (let r = 0; r < t; r++) this.module.setValue(n + r * 4, e.indices[r], "i32"), this.module.setValue(i + r * 8, e.values[r], "double");
234
+ let a = this.bindings.setSparseSolution(this.highs, t, n, i);
235
+ if (a !== 0) throw new r(`Highs_setSparseSolution failed with status ${a}`);
236
+ } finally {
237
+ this.module._free(n), this.module._free(i);
238
+ }
239
+ return;
240
+ }
241
+ throw new r("Invalid argument to setSolution (expected { colValue } or { indices, values })");
242
+ }
243
+ run(e) {
244
+ let t = 0, r = [];
245
+ if (e && typeof this.module.addFunction == "function") {
246
+ t = this.module.addFunction((t, r, i, a) => {
247
+ let o = e[t];
248
+ if (!o) return;
249
+ let s = {};
250
+ if (i) {
251
+ let e = this.module.getValue(i + 8, "double"), t = this.module.getValue(i + 16, "i32"), r = this.module.getValue(i + 20, "i32"), a = this.module.getValue(i + 24, "i32"), o = this.module.getValue(i + 32, "double"), c = Number(this.module.getValue(i + 40, "i32")), l = Number(this.module.getValue(i + 48, "i32")), u = this.module.getValue(i + 56, "double"), d = this.module.getValue(i + 64, "double"), f = this.module.getValue(i + 72, "double"), p = this.module.getValue(i + 80, "i32"), m = this.module.getValue(i + 84, "i32"), h;
252
+ p && m > 0 && (h = n(this.module, p, m)), s = {
253
+ running_time: e,
254
+ simplex_iteration_count: t,
255
+ ipm_iteration_count: r,
256
+ pdlp_iteration_count: a,
257
+ objective_function_value: o,
258
+ mip_node_count: c,
259
+ mip_total_lp_iterations: l,
260
+ mip_primal_bound: u,
261
+ mip_dual_bound: d,
262
+ mip_gap: f,
263
+ ...h ? { mip_solution: h } : {}
264
+ };
265
+ }
266
+ let c = r ? this.module.UTF8ToString(r) : "";
267
+ o({
268
+ data: s,
269
+ message: c,
270
+ interrupt: () => {
271
+ a && this.module.setValue(a, 1, "i32");
272
+ }
273
+ });
274
+ }, "vipppp"), this.bindings.setCallback(this.highs, t, 0);
275
+ for (let t of Object.keys(e)) {
276
+ let e = Number(t);
277
+ this.bindings.startCallback(this.highs, e), r.push(e);
278
+ }
279
+ }
280
+ try {
281
+ return this.bindings.run(this.highs);
282
+ } finally {
283
+ if (t) {
284
+ for (let e of r) try {
285
+ this.bindings.stopCallback(this.highs, e);
286
+ } catch {}
287
+ try {
288
+ this.module.removeFunction(t);
289
+ } catch {}
290
+ }
291
+ }
292
+ }
293
+ getModelStatus() {
294
+ return this.bindings.getModelStatus(this.highs);
295
+ }
296
+ info = { get: (e) => {
297
+ let t = this.module._malloc(8);
298
+ try {
299
+ if (this.bindings.getDoubleInfoValue(this.highs, e, t) === 0) return this.module.getValue(t, "double");
300
+ } finally {
301
+ this.module._free(t);
302
+ }
303
+ let n = this.module._malloc(4);
304
+ try {
305
+ if (this.bindings.getIntInfoValue(this.highs, e, n) === 0) return this.module.getValue(n, "i32");
306
+ } finally {
307
+ this.module._free(n);
308
+ }
309
+ throw new r(`Info item "${e}" not available or unknown in HiGHS`);
310
+ } };
311
+ getSolution() {
312
+ let e = this.getDimensions(), t = e.numCols > 0 ? this.module._malloc(e.numCols * 8) : 0, r = e.numCols > 0 ? this.module._malloc(e.numCols * 8) : 0, i = e.numRows > 0 ? this.module._malloc(e.numRows * 8) : 0, a = e.numRows > 0 ? this.module._malloc(e.numRows * 8) : 0;
313
+ try {
314
+ return this.bindings.getSolution(this.highs, t, r, i, a), {
315
+ colValue: n(this.module, t, e.numCols),
316
+ colDual: n(this.module, r, e.numCols),
317
+ rowValue: n(this.module, i, e.numRows),
318
+ rowDual: n(this.module, a, e.numRows)
319
+ };
320
+ } finally {
321
+ t && this.module._free(t), r && this.module._free(r), i && this.module._free(i), a && this.module._free(a);
322
+ }
323
+ }
324
+ getObjectiveValue() {
325
+ return this.bindings.getObjectiveValue(this.highs);
326
+ }
327
+ destroy() {
328
+ if (!this.isDestroyed) {
329
+ this.isDestroyed = !0;
330
+ try {
331
+ this.module._free(this.stringBuf);
332
+ } catch {}
333
+ try {
334
+ this.bindings.destroy(this.highs);
335
+ } catch {}
336
+ }
337
+ }
338
+ [Symbol.dispose]() {
339
+ this.destroy();
340
+ }
341
+ }, u = class {
342
+ module;
343
+ bindings;
344
+ constants = o;
345
+ errors = {
346
+ HighsError: r,
347
+ HighsUnsupportedOptionError: i
348
+ };
349
+ constructor(e) {
350
+ this.module = e, this.bindings = s(e);
351
+ }
352
+ withModel(e, t) {
353
+ let n = this.bindings.create(), i = new l(this.module, this.bindings, n), a = `/model_${++c}.${e.format}`;
354
+ if (!this.module.FS) throw new r("Emscripten FS is not initialized on this HiGHS module instance");
355
+ let o = this.module.FS;
356
+ try {
357
+ o.writeFile(a, e.data);
358
+ let s = this.bindings.readModel(n, a);
359
+ if (s !== 0) throw new r(`Failed to load ${e.format.toUpperCase()} model into HiGHS (status ${s})`);
360
+ return t(i);
361
+ } finally {
362
+ try {
363
+ o.unlink(a);
364
+ } catch {}
365
+ i.destroy();
366
+ }
367
+ }
368
+ solve(e, t = {}) {
369
+ return this.withModel({
370
+ format: "lp",
371
+ data: e
372
+ }, (e) => {
373
+ for (let [n, r] of Object.entries(t)) try {
374
+ e.options.set(n, r);
375
+ } catch {}
376
+ e.run();
377
+ let n = e.getModelStatus(), r = e.getDimensions(), i = e.getSolution(), o = {};
378
+ for (let t = 0; t < r.numCols; t++) {
379
+ let n = e.getColName(t);
380
+ o[n] = {
381
+ Index: t,
382
+ Name: n,
383
+ Primal: i.colValue[t],
384
+ Dual: i.colDual[t]
385
+ };
386
+ }
387
+ return {
388
+ Status: a[n] ?? "Unknown",
389
+ StatusCode: n,
390
+ ObjectiveValue: e.getObjectiveValue(),
391
+ Columns: o
392
+ };
393
+ });
394
+ }
395
+ }, d = "https://cdn.jsdelivr.net/npm/highs@1.15.1/build/highs.wasm", f = null, p = null, m = null;
396
+ function h(e) {
397
+ m = e, f = null, p = null;
398
+ }
399
+ function g() {
400
+ return m;
401
+ }
402
+ function _(e) {
403
+ return e.length >= 4 && e[0] === 0 && e[1] === 97 && e[2] === 115 && e[3] === 109;
404
+ }
405
+ async function v(e) {
406
+ try {
407
+ let t = await fetch(e, { headers: { Range: "bytes=0-3" } });
408
+ if (!t.ok || (t.headers.get("content-type") || "").includes("text/html")) return !1;
409
+ if (!t.body) return !0;
410
+ let n = t.body.getReader(), { value: r, done: i } = await n.read();
411
+ return await n.cancel(), i || !r || r.length < 4 ? !1 : _(r);
412
+ } catch {
413
+ return !1;
414
+ }
415
+ }
416
+ async function y(t) {
417
+ return t || m || e();
418
+ }
419
+ async function b(e = {}) {
420
+ let n = typeof process < "u" && process.versions?.node && process.type !== "renderer", r = n ? null : await y(e.wasmUrl), i = r ?? "node";
421
+ if (f && p === i) return f;
422
+ p = i;
423
+ let a = (async () => {
424
+ let e = n ? await t() : (await import("./highs-browser-runtime.js")).default;
425
+ return n ? await e() : await e({ locateFile: (e) => e.endsWith(".wasm") ? r : e });
426
+ })().catch((e) => {
427
+ f === a && (f = null, p = null);
428
+ let t = e instanceof Error ? e.message : String(e);
429
+ throw Error(`[WaSHI] Failed to initialize HiGHS${r ? ` from "${r}"` : ""}. Deploy the package's WASM asset or explicitly set wasmUrl; no CDN fallback is attempted. ${t}`, { cause: e });
430
+ });
431
+ return f = a, a;
432
+ }
433
+ async function x(e, t = {}) {
434
+ if (t.signal?.aborted) return {
435
+ result: {
436
+ Status: "Interrupted",
437
+ StatusCode: 17,
438
+ HasPrimalSolution: !1,
439
+ ObjectiveValue: NaN,
440
+ Columns: {},
441
+ Rows: []
442
+ },
443
+ runTime: 0
444
+ };
445
+ let n = await b(t);
446
+ if (t.signal?.aborted) return {
447
+ result: {
448
+ Status: "Interrupted",
449
+ StatusCode: 17,
450
+ HasPrimalSolution: !1,
451
+ ObjectiveValue: NaN,
452
+ Columns: {},
453
+ Rows: []
454
+ },
455
+ runTime: 0
456
+ };
457
+ let r = performance.now(), i = { output_flag: t.outputFlag ?? !1 };
458
+ t.timeLimit !== void 0 && (i.time_limit = t.timeLimit), t.presolve !== void 0 && (i.presolve = t.presolve), t.solver !== void 0 && (i.solver = t.solver), t.relGap === void 0 ? t.mipGap !== void 0 && (i.mip_rel_gap = t.mipGap) : i.mip_rel_gap = t.relGap, t.absGap !== void 0 && (i.mip_abs_gap = t.absGap);
459
+ for (let e of [
460
+ "mip_max_nodes",
461
+ "mip_max_improving_sols",
462
+ "mip_max_leaves",
463
+ "simplex_iteration_limit",
464
+ "ipm_iteration_limit"
465
+ ]) t[e] !== void 0 && (i[e] = t[e]);
466
+ let o = typeof t.objectiveOffset == "number" && Number.isFinite(t.objectiveOffset) ? t.objectiveOffset : 0, s = t.initialValues, c = !1;
467
+ if (s) {
468
+ for (let [e, t] of Object.entries(s)) if (t !== void 0) {
469
+ if (typeof t != "number" || !Number.isFinite(t)) throw Error(`Invalid initial value for column "${e}": ${String(t)} (must be a finite number).`);
470
+ c = !0;
471
+ }
472
+ }
473
+ if (typeof n.withModel == "function") return {
474
+ result: n.withModel({
475
+ format: "lp",
476
+ data: e
477
+ }, (e) => {
478
+ if (o !== 0 && typeof e.changeObjectiveOffset == "function") {
479
+ let t = typeof e.getObjectiveOffset == "function" ? e.getObjectiveOffset() : 0;
480
+ e.changeObjectiveOffset(t + o);
481
+ }
482
+ for (let [t, r] of Object.entries(i)) try {
483
+ e.options.set(t, r);
484
+ } catch (e) {
485
+ if (e?.name !== "HighsUnsupportedOptionError" && !(n.errors?.HighsUnsupportedOptionError && e instanceof n.errors.HighsUnsupportedOptionError)) throw e;
486
+ }
487
+ let l = e.getDimensions(), u = [], d = !1;
488
+ for (let t = 0; t < l.numCols; t++) {
489
+ let n = e.getColIntegrality(t);
490
+ n !== 0 && (d = !0), u.push({
491
+ name: e.getColName(t),
492
+ type: n === 1 ? "Integer" : "Continuous"
493
+ });
494
+ }
495
+ if (c && s) {
496
+ if (typeof e.setSolution != "function") throw Error("HiGHS runtime does not support setting primal initial values (setSolution is unavailable).");
497
+ let t = /* @__PURE__ */ new Map();
498
+ for (let e = 0; e < l.numCols; e++) t.set(u[e].name, e);
499
+ for (let [e, n] of Object.entries(s)) if (n !== void 0 && !t.has(e)) throw Error(`Unknown column "${e}" in initialValues (column does not exist in the HiGHS LP model).`);
500
+ let n = [], r = [];
501
+ for (let e = 0; e < l.numCols; e++) {
502
+ let t = u[e].name;
503
+ if (Object.prototype.hasOwnProperty.call(s, t)) {
504
+ let i = s[t];
505
+ i !== void 0 && (n.push(e), r.push(i));
506
+ }
507
+ }
508
+ n.length > 0 && (n.length === l.numCols ? e.setSolution({ colValue: r }) : e.setSolution({
509
+ indices: n,
510
+ values: r
511
+ }));
512
+ }
513
+ let f = null, p = null, m = 0, h = (e) => {
514
+ let t = e?.data ?? {}, n = typeof t.running_time == "number" && Number.isFinite(t.running_time) ? t.running_time : (performance.now() - r) / 1e3, i = typeof t.mip_primal_bound == "number" && Number.isFinite(t.mip_primal_bound) ? t.mip_primal_bound : typeof t.objective_function_value == "number" && Number.isFinite(t.objective_function_value) ? t.objective_function_value : void 0, a = typeof t.mip_dual_bound == "number" && Number.isFinite(t.mip_dual_bound) ? t.mip_dual_bound : void 0, o = typeof t.mip_gap == "number" && Number.isFinite(t.mip_gap) ? t.mip_gap : void 0, s = i !== void 0 && a !== void 0 ? Math.abs(i - a) : void 0, c = typeof t.mip_node_count == "bigint" ? Number(t.mip_node_count) : typeof t.mip_node_count == "number" && Number.isFinite(t.mip_node_count) ? t.mip_node_count : void 0, l = typeof t.mip_total_lp_iterations == "bigint" ? Number(t.mip_total_lp_iterations) : typeof t.simplex_iteration_count == "number" && Number.isFinite(t.simplex_iteration_count) ? t.simplex_iteration_count : typeof t.ipm_iteration_count == "number" && Number.isFinite(t.ipm_iteration_count) ? t.ipm_iteration_count : void 0, u = typeof e?.message == "string" && e.message.trim().length > 0 ? e.message.trim() : void 0, d = {
515
+ elapsedTime: n,
516
+ elapsedSeconds: n,
517
+ ...i === void 0 ? {} : { objectiveValue: i },
518
+ ...a === void 0 ? {} : { objectiveBound: a },
519
+ ...o === void 0 ? {} : {
520
+ relGap: o,
521
+ mipGap: o
522
+ },
523
+ ...s === void 0 ? {} : { absGap: s },
524
+ ...c === void 0 ? {} : { nodes: c },
525
+ ...l === void 0 ? {} : { iterations: l },
526
+ ...u === void 0 ? {} : { message: u }
527
+ };
528
+ return p = d, d;
529
+ }, g = (e) => {
530
+ let n = e?.data;
531
+ if (!n || !(n.mip_solution instanceof Float64Array)) return;
532
+ let r = n.mip_solution, i = {};
533
+ for (let e = 0; e < u.length && e < r.length; e++) Object.defineProperty(i, u[e].name, {
534
+ value: {
535
+ Index: e,
536
+ Type: u[e].type,
537
+ Name: u[e].name,
538
+ Primal: r[e]
539
+ },
540
+ enumerable: !0,
541
+ writable: !0,
542
+ configurable: !0
543
+ });
544
+ let a = typeof n.objective_function_value == "number" && Number.isFinite(n.objective_function_value) ? n.objective_function_value : typeof n.mip_primal_bound == "number" && Number.isFinite(n.mip_primal_bound) ? n.mip_primal_bound : NaN;
545
+ Number.isFinite(a) && (f = {
546
+ objectiveValue: a,
547
+ ...typeof n.mip_dual_bound == "number" && Number.isFinite(n.mip_dual_bound) ? { mipDualBound: n.mip_dual_bound } : {},
548
+ ...typeof n.mip_gap == "number" && Number.isFinite(n.mip_gap) ? { mipGap: n.mip_gap } : {},
549
+ columns: i
550
+ }, t.onIncumbent?.(f));
551
+ }, _ = !1;
552
+ if (t.signal || t.onProgress || t.onIncumbent) {
553
+ let r = n.constants?.callbackType ?? {
554
+ logging: 0,
555
+ simplexInterrupt: 1,
556
+ ipmInterrupt: 2,
557
+ mipSolution: 3,
558
+ mipImprovingSolution: 4,
559
+ mipLogging: 5,
560
+ mipInterrupt: 6
561
+ }, i = (e) => {
562
+ if (t.signal?.aborted) {
563
+ _ = !0, e.interrupt();
564
+ return;
565
+ }
566
+ t.onProgress && (m++, t.onProgress(h(e)), t.signal?.aborted && (_ = !0, e.interrupt()));
567
+ }, a = {
568
+ [r.simplexInterrupt]: i,
569
+ [r.ipmInterrupt]: i,
570
+ [r.mipInterrupt]: i,
571
+ [r.mipImprovingSolution]: (e) => {
572
+ g(e), t.onProgress && !t.signal?.aborted && (m++, t.onProgress(h(e)));
573
+ },
574
+ [r.mipLogging]: (e) => {
575
+ t.onProgress && !t.signal?.aborted && (m++, t.onProgress(h(e)));
576
+ }
577
+ };
578
+ e.run(a);
579
+ } else e.run();
580
+ let v = e.getModelStatus();
581
+ _ && (v = 17);
582
+ let y = a[v] ?? "Unknown", b = 0, x = 0;
583
+ try {
584
+ b = Number(e.info.get("primal_solution_status"));
585
+ } catch {}
586
+ try {
587
+ x = Number(e.info.get("dual_solution_status"));
588
+ } catch {}
589
+ let S = n.constants?.solutionStatus?.feasible ?? 2, C = b === S, w = x === S, T = C || w ? e.getSolution() : null, E = C, D = {};
590
+ if (!C && f !== null) E = !0, D = f.columns;
591
+ else for (let e = 0; e < l.numCols; e++) {
592
+ let t = u[e], n = {
593
+ Index: e,
594
+ Type: t.type,
595
+ Name: t.name
596
+ };
597
+ C && T && (n.Primal = T.colValue[e]), !d && w && T && (n.Dual = T.colDual[e]), Object.defineProperty(D, t.name, {
598
+ value: n,
599
+ enumerable: !0,
600
+ writable: !0,
601
+ configurable: !0
602
+ });
603
+ }
604
+ let O = [];
605
+ for (let t = 0; t < l.numRows; t++) {
606
+ let n = e.getRowName(t), r = {
607
+ Index: t,
608
+ Name: n
609
+ };
610
+ C && T && (r.Primal = T.rowValue[t]), !d && w && T && (r.Dual = T.rowDual[t]), O.push(r);
611
+ }
612
+ let k = C ? e.getObjectiveValue() : f === null ? NaN : f.objectiveValue, A, j;
613
+ if (d) {
614
+ try {
615
+ let t = Number(e.info.get("mip_dual_bound"));
616
+ Number.isFinite(t) && (A = t);
617
+ } catch {}
618
+ A === void 0 && p && p.objectiveBound !== void 0 && (A = p.objectiveBound);
619
+ try {
620
+ let t = Number(e.info.get("mip_gap"));
621
+ Number.isFinite(t) && (j = t);
622
+ } catch {}
623
+ j === void 0 && p && p.relGap !== void 0 && (j = p.relGap);
624
+ }
625
+ return {
626
+ Status: a[v] ?? y,
627
+ StatusCode: v,
628
+ PrimalSolutionStatus: b,
629
+ DualSolutionStatus: x,
630
+ HasPrimalSolution: E,
631
+ IsMip: d,
632
+ ObjectiveValue: k,
633
+ ObjectiveOffsetApplied: o !== 0,
634
+ MipDualBound: A,
635
+ MipGap: j,
636
+ Columns: D,
637
+ Rows: O
638
+ };
639
+ }),
640
+ runTime: (performance.now() - r) / 1e3
641
+ };
642
+ if (c) throw Error("HiGHS runtime does not support setting primal initial values (withModel/setSolution is unavailable).");
643
+ return {
644
+ result: n.solve(e, i),
645
+ runTime: (performance.now() - r) / 1e3
646
+ };
647
+ }
648
+ //#endregion
649
+ export { v as a, x as c, u as d, r as f, s as h, _ as i, o as l, i as m, b as n, y as o, l as p, g as r, h as s, d as t, a as u };