@ohtaman/washi 0.1.1 → 0.2.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 (97) hide show
  1. package/README.ja.md +124 -22
  2. package/README.md +124 -22
  3. package/README.zh-CN.md +124 -22
  4. package/dist/browser/browser-runtime-D13gHOT5.js +4189 -0
  5. package/dist/browser/highs-worker.js +21 -0
  6. package/dist/{lib/demo → browser}/highs.wasm +0 -0
  7. package/dist/browser/highs.wasm.LICENSE +22 -0
  8. package/dist/browser/loader-CVt4CloI.js +58 -0
  9. package/dist/browser/solvers/glpk.js +1057 -0
  10. package/dist/browser/solvers/glpk.min.js +1 -0
  11. package/dist/browser/solvers/z3-built.js +8245 -0
  12. package/dist/browser/solvers/z3-built.wasm +4 -0
  13. package/dist/browser/solvers/z3.js +7528 -0
  14. package/dist/browser/solvers/z3.min.js +5 -0
  15. package/dist/browser/washi.js +1213 -0
  16. package/dist/browser/washi.min.js +5 -0
  17. package/dist/lib/async-mutex-Duo4jwzn.js +195 -0
  18. package/dist/lib/constraint-XWdn0ID9.js +93 -0
  19. package/dist/lib/highs-assets.js +1 -0
  20. package/dist/lib/highs-browser-runtime.js +4189 -0
  21. package/dist/lib/highs-node-runtime.js +1 -0
  22. package/dist/lib/highs-worker-factory.js +1 -0
  23. package/dist/lib/highs-worker.js +21 -0
  24. package/dist/lib/highs.wasm +0 -0
  25. package/dist/lib/loader-Dti0v9yC.js +50 -0
  26. package/dist/lib/registry-DksqCSjI.js +32 -0
  27. package/dist/lib/solvers/glpk.js +153 -2
  28. package/dist/lib/solvers/z3-assets.js +1 -0
  29. package/dist/lib/solvers/z3-built.js +8245 -0
  30. package/dist/lib/solvers/z3-built.wasm +4 -0
  31. package/dist/lib/solvers/z3.js +451 -2
  32. package/dist/lib/washi.js +388 -78
  33. package/dist/types/index.d.ts +2 -3
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/types/modeler/index.d.ts +1 -1
  36. package/dist/types/modeler/index.d.ts.map +1 -1
  37. package/dist/types/modeler/model.d.ts +1 -1
  38. package/dist/types/modeler/model.d.ts.map +1 -1
  39. package/dist/types/modeler/solvers/glpk/index.d.ts +3 -0
  40. package/dist/types/modeler/solvers/glpk/index.d.ts.map +1 -0
  41. package/dist/types/modeler/solvers/glpk/loader.d.ts +16 -0
  42. package/dist/types/modeler/solvers/glpk/loader.d.ts.map +1 -0
  43. package/dist/types/modeler/solvers/glpk/solver.d.ts +26 -0
  44. package/dist/types/modeler/solvers/glpk/solver.d.ts.map +1 -0
  45. package/dist/types/modeler/solvers/glpk.d.ts +1 -21
  46. package/dist/types/modeler/solvers/glpk.d.ts.map +1 -1
  47. package/dist/types/modeler/solvers/highs/assets.d.ts +3 -0
  48. package/dist/types/modeler/solvers/highs/assets.d.ts.map +1 -0
  49. package/dist/types/modeler/solvers/highs/browser-runtime.d.ts +2 -0
  50. package/dist/types/modeler/solvers/highs/browser-runtime.d.ts.map +1 -0
  51. package/dist/types/modeler/solvers/highs/index.d.ts +6 -0
  52. package/dist/types/modeler/solvers/highs/index.d.ts.map +1 -0
  53. package/dist/types/{highs-loader.d.ts → modeler/solvers/highs/loader.d.ts} +3 -3
  54. package/dist/types/modeler/solvers/highs/loader.d.ts.map +1 -0
  55. package/dist/types/modeler/solvers/highs/node-runtime.d.ts +2 -0
  56. package/dist/types/modeler/solvers/highs/node-runtime.d.ts.map +1 -0
  57. package/dist/types/modeler/solvers/highs/solver.d.ts +33 -0
  58. package/dist/types/modeler/solvers/highs/solver.d.ts.map +1 -0
  59. package/dist/types/modeler/solvers/highs/worker-client.d.ts +13 -0
  60. package/dist/types/modeler/solvers/highs/worker-client.d.ts.map +1 -0
  61. package/dist/types/modeler/solvers/highs/worker-factory.d.ts +3 -0
  62. package/dist/types/modeler/solvers/highs/worker-factory.d.ts.map +1 -0
  63. package/dist/types/modeler/solvers/highs/worker.d.ts +2 -0
  64. package/dist/types/modeler/solvers/highs/worker.d.ts.map +1 -0
  65. package/dist/types/modeler/solvers/highs.d.ts +1 -25
  66. package/dist/types/modeler/solvers/highs.d.ts.map +1 -1
  67. package/dist/types/modeler/solvers/index.d.ts +0 -2
  68. package/dist/types/modeler/solvers/index.d.ts.map +1 -1
  69. package/dist/types/modeler/solvers/mock.d.ts +1 -0
  70. package/dist/types/modeler/solvers/mock.d.ts.map +1 -1
  71. package/dist/types/modeler/solvers/registry.d.ts +1 -2
  72. package/dist/types/modeler/solvers/registry.d.ts.map +1 -1
  73. package/dist/types/modeler/solvers/types.d.ts +1 -1
  74. package/dist/types/modeler/solvers/types.d.ts.map +1 -1
  75. package/dist/types/modeler/solvers/z3/assets.d.ts +11 -0
  76. package/dist/types/modeler/solvers/z3/assets.d.ts.map +1 -0
  77. package/dist/types/modeler/solvers/z3/index.d.ts +3 -0
  78. package/dist/types/modeler/solvers/z3/index.d.ts.map +1 -0
  79. package/dist/types/modeler/solvers/z3/loader.d.ts +44 -0
  80. package/dist/types/modeler/solvers/z3/loader.d.ts.map +1 -0
  81. package/dist/types/modeler/solvers/z3/solver.d.ts +34 -0
  82. package/dist/types/modeler/solvers/z3/solver.d.ts.map +1 -0
  83. package/dist/types/modeler/solvers/z3.d.ts +1 -36
  84. package/dist/types/modeler/solvers/z3.d.ts.map +1 -1
  85. package/package.json +35 -9
  86. package/dist/lib/assets/highs-worker-DeDWU6KI.js +0 -3
  87. package/dist/lib/glpk-BC32ZaPG.js +0 -126
  88. package/dist/lib/washi-logo.png +0 -0
  89. package/dist/lib/washi-logo.svg +0 -70
  90. package/dist/lib/z3-C8g-PtmP.js +0 -582
  91. package/dist/types/glpk-loader.d.ts +0 -8
  92. package/dist/types/glpk-loader.d.ts.map +0 -1
  93. package/dist/types/highs-loader.d.ts.map +0 -1
  94. package/dist/types/highs-worker-client.d.ts +0 -12
  95. package/dist/types/highs-worker-client.d.ts.map +0 -1
  96. package/dist/types/highs-worker.d.ts +0 -2
  97. package/dist/types/highs-worker.d.ts.map +0 -1
@@ -1,582 +0,0 @@
1
- import { t as e } from "./glpk-BC32ZaPG.js";
2
- //#region src/modeler/boolean-expr.ts
3
- var t = 0, n = class {
4
- and(e) {
5
- return new i("and", [this, e]);
6
- }
7
- or(e) {
8
- return new i("or", [this, e]);
9
- }
10
- implies(e) {
11
- return new i("implies", [this, e]);
12
- }
13
- xor(e) {
14
- return new i("xor", [this, e]);
15
- }
16
- not() {
17
- return new i("not", [this]);
18
- }
19
- }, r = class extends n {
20
- id;
21
- name;
22
- value = null;
23
- constructor(e) {
24
- super(), this.id = ++t, this.name = e || `p_${this.id}`;
25
- }
26
- toString() {
27
- return this.name;
28
- }
29
- }, i = class extends n {
30
- op;
31
- children;
32
- constructor(e, t) {
33
- super(), this.op = e, this.children = t;
34
- }
35
- toString() {
36
- return this.op === "not" ? `not(${this.children[0].toString()})` : `(${this.children.map((e) => e.toString()).join(` ${this.op} `)})`;
37
- }
38
- };
39
- function a(...e) {
40
- if (e.length === 0) throw Error("and() requires at least one expression");
41
- return new i("and", e);
42
- }
43
- function o(...e) {
44
- if (e.length === 0) throw Error("or() requires at least one expression");
45
- return new i("or", e);
46
- }
47
- function s(e) {
48
- return new i("not", [e]);
49
- }
50
- function c(e, t) {
51
- return new i("implies", [e, t]);
52
- }
53
- function l(...e) {
54
- if (e.length === 0) throw Error("xor() requires at least one expression");
55
- return new i("xor", e);
56
- }
57
- //#endregion
58
- //#region src/modeler/constraint.ts
59
- var u = 0, d = class {
60
- id;
61
- lhs;
62
- sense;
63
- rhs;
64
- name;
65
- slack = null;
66
- dual = null;
67
- constructor(e, t, n, r) {
68
- this.id = ++u, this.lhs = e, this.sense = t, this.rhs = n, this.name = r || `c_${this.id}`;
69
- }
70
- get pi() {
71
- return this.dual;
72
- }
73
- and(e) {
74
- return new i("and", [this, e]);
75
- }
76
- or(e) {
77
- return new i("or", [this, e]);
78
- }
79
- implies(e) {
80
- return new i("implies", [this, e]);
81
- }
82
- xor(e) {
83
- return new i("xor", [this, e]);
84
- }
85
- not() {
86
- return new i("not", [this]);
87
- }
88
- toString() {
89
- let e = this.sense === "==" ? "=" : this.sense;
90
- return `${this.name}: ${this.lhs.toString()} ${e} ${this.rhs}`;
91
- }
92
- }, f = "https://cdn.jsdelivr.net/npm/highs@1.15.3/build/highs.wasm", p = null, m = null;
93
- function h(e) {
94
- m = e, p = null;
95
- }
96
- function g() {
97
- return m;
98
- }
99
- function _(e) {
100
- return e.length >= 4 && e[0] === 0 && e[1] === 97 && e[2] === 115 && e[3] === 109;
101
- }
102
- async function v(e) {
103
- try {
104
- let t = await fetch(e, { headers: { Range: "bytes=0-3" } });
105
- if (!t.ok || (t.headers.get("content-type") || "").includes("text/html")) return !1;
106
- if (!t.body) return !0;
107
- let n = t.body.getReader(), { value: r, done: i } = await n.read();
108
- return await n.cancel(), i || !r || r.length < 4 ? !1 : _(r);
109
- } catch {
110
- return !1;
111
- }
112
- }
113
- async function y(e) {
114
- if (e) return e;
115
- if (m) return m;
116
- let t = typeof window < "u" ? new URL("/highs.wasm", window.location.origin).href : typeof self < "u" && self.location ? new URL("highs.wasm", self.location.href).href : "/highs.wasm";
117
- return await v(t) ? t : (typeof console < "u" && console.info && console.info(`[WaSHI] Local highs.wasm not found or invalid at "${t}". Automatically falling back to official CDN: ${f}`), f);
118
- }
119
- async function b(e = {}) {
120
- return p || (p = (async () => {
121
- let t = await import("highs"), n = t.default || t;
122
- if (typeof process < "u" && process.versions && process.versions.node && process.type !== "renderer") return await n();
123
- let r = await y(e.wasmUrl);
124
- return await n({ locateFile: (e) => e.endsWith(".wasm") ? r : e });
125
- })(), p);
126
- }
127
- async function x(e, t = {}) {
128
- let n = await b(t), r = performance.now(), i = { output_flag: t.outputFlag ?? !1 };
129
- return 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 && (i.mip_rel_gap = t.relGap), t.absGap !== void 0 && (i.mip_abs_gap = t.absGap), {
130
- result: n.solve(e, i),
131
- runTime: (performance.now() - r) / 1e3
132
- };
133
- }
134
- //#endregion
135
- //#region src/highs-worker-client.ts
136
- var S = null, C = 0, w = /* @__PURE__ */ new Map();
137
- function T() {
138
- if (typeof window > "u" || typeof Worker > "u") return null;
139
- if (!S) try {
140
- S = new Worker(new URL(
141
- /* @vite-ignore */
142
- "/assets/highs-worker-DeDWU6KI.js",
143
- "" + import.meta.url
144
- ), { type: "module" }), S.onmessage = (e) => {
145
- let { type: t, id: n, result: r, runTime: i, error: a } = e.data, o = w.get(n);
146
- o && (w.delete(n), t === "SOLVE_SUCCESS" ? o.resolve({
147
- result: r,
148
- runTime: i
149
- }) : o.reject(Error(a || "Worker solve failed")));
150
- }, S.onerror = (e) => {
151
- console.error("HiGHS Web Worker error:", e);
152
- };
153
- } catch (e) {
154
- console.warn("Could not instantiate Web Worker, falling back to main thread:", e), S = null;
155
- }
156
- return S;
157
- }
158
- async function E(e, t = {}) {
159
- let n = t.useWorker ?? typeof window < "u" ? T() : null;
160
- if (!n) return x(e, t);
161
- let r = await y(t.wasmUrl), i = {
162
- ...t,
163
- wasmUrl: r
164
- }, a = `req_${++C}`;
165
- return new Promise((t, r) => {
166
- w.set(a, {
167
- resolve: t,
168
- reject: r
169
- }), n.postMessage({
170
- type: "SOLVE",
171
- id: a,
172
- lpString: e,
173
- options: i
174
- });
175
- });
176
- }
177
- //#endregion
178
- //#region src/modeler/solvers/highs.ts
179
- var D = class e {
180
- static capabilities = {
181
- supportsMIP: !0,
182
- supportsQP: !0
183
- };
184
- name = "HiGHS";
185
- version = "1.15.3";
186
- capabilities = e.capabilities;
187
- options;
188
- constructor(e = {}) {
189
- this.options = e;
190
- }
191
- async solve(e, t, n = {}) {
192
- let r = {
193
- ...this.options,
194
- ...n
195
- }, { lpString: i, nameToVar: a, nameToConstraint: o } = t, { result: s, runTime: c } = await E(i, r), l = s.Status || "Unknown", u;
196
- u = l.includes("Optimal") ? "Optimal" : l.includes("Infeasible") ? "Infeasible" : l.includes("Unbounded") ? "Unbounded" : l.includes("TimeLimit") || l.includes("Time limit") ? "TimeLimit" : l.includes("IterationLimit") ? "IterationLimit" : "Optimal";
197
- let d = s.ObjectiveValue, f = typeof d == "number" ? d + e.objective.constant : null, p = {}, m = {}, h = {}, g = {};
198
- if (s.Columns) for (let [e, t] of Object.entries(s.Columns)) {
199
- let n = a.get(e);
200
- if (n) {
201
- let e = Math.abs(t.Primal) < 1e-9 ? 0 : t.Primal;
202
- p[n.name] = e, t.Dual !== void 0 && (h[n.name] = Math.abs(t.Dual) < 1e-9 ? 0 : t.Dual);
203
- }
204
- }
205
- if (s.Rows) {
206
- let e = Array.isArray(s.Rows) ? s.Rows : Object.values(s.Rows);
207
- for (let t of e) {
208
- let e = t.Name, n = o.get(e);
209
- if (n && (t.Dual !== void 0 && (m[n.name] = Math.abs(t.Dual) < 1e-9 ? 0 : t.Dual), t.Primal !== void 0)) {
210
- let e = n.rhs - t.Primal;
211
- g[n.name] = Math.abs(e) < 1e-9 ? 0 : e;
212
- }
213
- }
214
- }
215
- return {
216
- status: u,
217
- objectiveValue: f,
218
- values: p,
219
- reducedCosts: h,
220
- duals: m,
221
- slacks: g,
222
- runTime: c,
223
- raw: s
224
- };
225
- }
226
- }, O = D, k = class {
227
- name;
228
- capabilities;
229
- options;
230
- constructor(e = {}) {
231
- this.name = e.name || "MockSolver", this.capabilities = e.capabilities || {
232
- supportsMIP: !0,
233
- supportsQP: !0
234
- }, this.options = e;
235
- }
236
- async solve(e, t, n = {}) {
237
- let r = {
238
- ...this.options,
239
- ...n
240
- };
241
- return r.delayMs && r.delayMs > 0 && await new Promise((e) => setTimeout(e, r.delayMs)), {
242
- status: r.status || "Optimal",
243
- objectiveValue: r.objectiveValue ?? 0,
244
- values: r.values || {},
245
- reducedCosts: r.reducedCosts,
246
- duals: r.duals,
247
- slacks: r.slacks,
248
- runTime: .001,
249
- raw: { mock: !0 }
250
- };
251
- }
252
- }, A = /* @__PURE__ */ new Map();
253
- A.set("highs", (e) => new D(e)), A.set("glpk", (t) => new e(t)), A.set("mock", (e) => new k(e));
254
- var j = (e) => new D(e);
255
- function M(e, t) {
256
- A.set(e.toLowerCase(), t);
257
- }
258
- function N(e) {
259
- if (typeof e == "string") {
260
- let t = A.get(e.toLowerCase());
261
- if (!t) throw Error(`Solver '${e}' is not registered.`);
262
- j = t;
263
- } else j = typeof e == "function" ? e : () => e;
264
- }
265
- function P(e, t) {
266
- if (!e) return j(t);
267
- if (typeof e == "string") {
268
- let n = A.get(e.toLowerCase());
269
- if (!n) throw Error(`Solver '${e}' not found. Available solvers: ${F().join(", ")}`);
270
- return n(t);
271
- }
272
- return e;
273
- }
274
- function F() {
275
- return Array.from(A.keys());
276
- }
277
- //#endregion
278
- //#region src/modeler/solvers/z3.ts
279
- var I = null;
280
- async function L() {
281
- return I ||= (async () => {
282
- try {
283
- return await (await import("z3-solver")).init();
284
- } catch (e) {
285
- throw Error(`Failed to load z3-solver. Ensure it is installed: npm install z3-solver. Error: ${e instanceof Error ? e.message : String(e)}`);
286
- }
287
- })(), I;
288
- }
289
- var R = class {
290
- name = "z3";
291
- capabilities = {
292
- supportsMIP: !0,
293
- supportsQP: !1,
294
- supportsSMT: !0,
295
- supportsUnsatCore: !0
296
- };
297
- createContextTranslator(e) {
298
- let t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
299
- function a(n) {
300
- if (!t.has(n.name)) {
301
- let r = n.type === "Continuous" || n.type === "CONTINUOUS" ? e.Real.const(n.name) : e.Int.const(n.name);
302
- t.set(n.name, r);
303
- }
304
- return t.get(n.name);
305
- }
306
- function o(t) {
307
- if (!n.has(t.name)) {
308
- let r = e.Bool.const(t.name);
309
- n.set(t.name, r);
310
- }
311
- return n.get(t.name);
312
- }
313
- function s(t) {
314
- let n = null;
315
- if (t && t.terms) for (let [e, r] of t.terms.entries()) {
316
- let t = a(e).mul(r);
317
- n = n === null ? t : n.add(t);
318
- }
319
- let r = t && typeof t.constant == "number" ? t.constant : 0;
320
- if (r !== 0 || n === null) {
321
- let t = e.Real.val(r);
322
- n = n === null ? t : n.add(t);
323
- }
324
- return n;
325
- }
326
- function c(t) {
327
- let n = null;
328
- if (t.linearTerms) for (let [e, r] of t.linearTerms.entries()) {
329
- let t = a(e).mul(r);
330
- n = n === null ? t : n.add(t);
331
- }
332
- if (t.quadTerms) for (let e of t.quadTerms.values()) {
333
- let t = a(e.var1), r = a(e.var2), i = t.mul(r).mul(e.coeff);
334
- n = n === null ? i : n.add(i);
335
- }
336
- let r = t && typeof t.constant == "number" ? t.constant : 0;
337
- if (r !== 0 || n === null) {
338
- let t = e.Real.val(r);
339
- n = n === null ? t : n.add(t);
340
- }
341
- return n;
342
- }
343
- function l(e) {
344
- let t = e.lhs instanceof Object && "quadTerms" in e.lhs ? c(e.lhs) : s(e.lhs), n = typeof e.rhs == "number" ? e.rhs : 0;
345
- return e.sense === "<=" ? t.le(n) : e.sense === ">=" ? t.ge(n) : t.eq(n);
346
- }
347
- function u(t) {
348
- if (t instanceof r) return o(t);
349
- if (t instanceof d) return l(t);
350
- if (t instanceof i) switch (t.op) {
351
- case "and": return e.And(...t.children.map(u));
352
- case "or": return e.Or(...t.children.map(u));
353
- case "not": return e.Not(u(t.children[0]));
354
- case "implies": return e.Implies(u(t.children[0]), u(t.children[1]));
355
- case "xor": return e.Xor(u(t.children[0]), u(t.children[1]));
356
- default: throw Error(`Unsupported boolean operation: ${t.op}`);
357
- }
358
- throw Error(`Unknown logic element: ${String(t)}`);
359
- }
360
- function f(e) {
361
- if (!e) return 0;
362
- if (typeof e.asNumber == "function") return e.asNumber();
363
- let t = e.toString();
364
- if (t.startsWith("(/ ")) {
365
- let e = t.slice(3, -1).trim().split(/\s+/);
366
- if (e.length === 2) return Number(e[0]) / Number(e[1]);
367
- }
368
- return Number(t);
369
- }
370
- return {
371
- getVarAst: a,
372
- getBoolVarAst: o,
373
- translateLinExpr: s,
374
- translateQuadExpr: c,
375
- translateConstraint: l,
376
- translateBoolExpr: u,
377
- parseAstValue: f,
378
- varAstMap: t,
379
- boolVarAstMap: n
380
- };
381
- }
382
- async check(e, t = {}) {
383
- if (typeof window < "u" && window.document !== void 0) return this.fallbackCheck(e);
384
- try {
385
- let { Context: t } = await L(), n = new t(`check_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`), r = new n.Solver(), i = this.createContextTranslator(n), a = e.variables || e.vars || [], o = e.boolVars || [], s = e.constraints || [], c = e.logicalConstraints || [];
386
- for (let e of a) {
387
- let t = i.getVarAst(e);
388
- e.lb !== -Infinity && r.add(t.ge(e.lb)), e.ub !== Infinity && r.add(t.le(e.ub)), (e.type === "Binary" || e.type === "BINARY") && (r.add(t.ge(0)), r.add(t.le(1)));
389
- }
390
- for (let e of s) {
391
- let t = i.translateConstraint(e), a = n.Bool.const(e.name);
392
- r.addAndTrack(t, a);
393
- }
394
- for (let e = 0; e < c.length; e++) {
395
- let t = c[e], a = t && t.name || `lc_${e + 1}`, o = t && t.expr || t, s = i.translateBoolExpr(o), l = n.Bool.const(a);
396
- r.addAndTrack(s, l);
397
- }
398
- let l = (await r.check()).toString();
399
- if (l === "sat") {
400
- let e = r.model(), t = {};
401
- for (let n of a) {
402
- let r = i.getVarAst(n), a = e.eval(r);
403
- t[n.name] = i.parseAstValue(a);
404
- }
405
- for (let n of o) {
406
- let r = i.getBoolVarAst(n), a = e.eval(r);
407
- t[n.name] = a.toString() === "true";
408
- }
409
- return {
410
- status: "Sat",
411
- values: t
412
- };
413
- }
414
- if (l === "unsat") {
415
- let e = r.unsatCore(), t = [], n = typeof e.length == "function" ? e.length() : e.length;
416
- for (let r = 0; r < n; r++) t.push(e.get(r).toString());
417
- return {
418
- status: "Unsat",
419
- values: {},
420
- unsatCore: t
421
- };
422
- }
423
- return {
424
- status: "Unknown",
425
- values: {}
426
- };
427
- } catch {
428
- return this.fallbackCheck(e);
429
- }
430
- }
431
- fallbackCheck(e) {
432
- let t = performance.now(), n = e.variables || e.vars || [], a = e.boolVars || [], o = e.constraints || [], s = e.logicalConstraints || [];
433
- function c(e, t) {
434
- let n = e.constant || 0;
435
- if (e.terms && e.terms instanceof Map) for (let [r, i] of e.terms.entries()) {
436
- let e = typeof r == "string" ? r : r.name;
437
- n += i * (t.get(e) ?? 0);
438
- }
439
- return n;
440
- }
441
- function l(e, t) {
442
- let n = c(e.lhs, t), r = 1e-6;
443
- return e.sense === "<=" ? n <= e.rhs + r : e.sense === ">=" ? n >= e.rhs - r : e.sense === "==" && Math.abs(n - e.rhs) <= r;
444
- }
445
- function u(e, t, n) {
446
- if (e instanceof r) return t.get(e.name) ?? !1;
447
- if (e instanceof d) return l(e, n);
448
- if (e instanceof i) switch (e.op) {
449
- case "and": return e.children.every((e) => u(e, t, n));
450
- case "or": return e.children.some((e) => u(e, t, n));
451
- case "not": return !u(e.children[0], t, n);
452
- case "implies": return !u(e.children[0], t, n) || u(e.children[1], t, n);
453
- case "xor": return u(e.children[0], t, n) !== u(e.children[1], t, n);
454
- }
455
- return !1;
456
- }
457
- let f = /* @__PURE__ */ new Map();
458
- for (let e of n) {
459
- let t = /* @__PURE__ */ new Set();
460
- e.lb !== -Infinity && t.add(e.lb), e.ub !== Infinity && t.add(e.ub), t.add(0);
461
- for (let n of o) if (n.lhs.terms && n.lhs.terms.has(e)) {
462
- let r = n.lhs.terms.get(e) || 1, i = (n.rhs - (n.lhs.constant || 0)) / r;
463
- t.add(i), t.add(i - 1), t.add(i + 1);
464
- }
465
- for (let n of s) {
466
- let r = n.expr || n, a = (n) => {
467
- if (n instanceof d) {
468
- if (n.lhs.terms && n.lhs.terms.has(e)) {
469
- let r = n.lhs.terms.get(e) || 1, i = (n.rhs - (n.lhs.constant || 0)) / r;
470
- t.add(i), t.add(i - 1), t.add(i + 1);
471
- }
472
- } else n instanceof i && n.children.forEach(a);
473
- };
474
- a(r);
475
- }
476
- if ((e.type === "Integer" || e.type === "INTEGER") && e.lb >= 0 && e.ub <= 25) for (let n = e.lb; n <= e.ub; n++) t.add(n);
477
- f.set(e.name, Array.from(t).filter((t) => t >= (e.lb ?? -Infinity) && t <= (e.ub ?? Infinity)));
478
- }
479
- function p(e, t) {
480
- let r = a.map((e) => e.name), i = 1 << r.length, o = n.map((e) => e.name), s = [/* @__PURE__ */ new Map()];
481
- for (let e of o) {
482
- let t = f.get(e) || [0], n = [];
483
- for (let r of s) for (let i of t) {
484
- let t = new Map(r);
485
- t.set(e, i), n.push(t);
486
- }
487
- s = n.slice(0, 500);
488
- }
489
- for (let n = 0; n < i; n++) {
490
- let i = /* @__PURE__ */ new Map();
491
- for (let e = 0; e < r.length; e++) i.set(r[e], !!(n & 1 << e));
492
- for (let n of s) if (e.every((e) => l(e, n)) && t.every((e) => u(e.expr, i, n))) return {
493
- isSat: !0,
494
- boolMap: i,
495
- numMap: n
496
- };
497
- }
498
- return { isSat: !1 };
499
- }
500
- let m = s.map((e, t) => ({
501
- name: e?.name || `lc_${t + 1}`,
502
- expr: e?.expr || e
503
- })), h = p(o, m), g = (performance.now() - t) / 1e3;
504
- if (h.isSat && h.boolMap && h.numMap) {
505
- let e = {};
506
- for (let [t, n] of h.numMap.entries()) e[t] = n;
507
- for (let [t, n] of h.boolMap.entries()) e[t] = n;
508
- return {
509
- status: "Sat",
510
- values: e,
511
- runTime: g
512
- };
513
- }
514
- let _ = [];
515
- for (let e = 0; e < o.length; e++) p(o.filter((t, n) => n !== e), m).isSat && _.push(o[e].name);
516
- for (let e = 0; e < m.length; e++) p(o, m.filter((t, n) => n !== e)).isSat && _.push(m[e].name);
517
- return {
518
- status: "Unsat",
519
- values: {},
520
- unsatCore: _.length > 0 ? _ : o.map((e) => e.name),
521
- runTime: g
522
- };
523
- }
524
- async solve(e, t, n = {}) {
525
- if (!(e.objective !== null && e.objective !== void 0 && ("terms" in e.objective && e.objective.terms.size > 0 || "quadTerms" in e.objective && e.objective.quadTerms.length > 0 || e.objective.offset && e.objective.offset !== 0))) {
526
- let t = await this.check(e, n), r = {};
527
- for (let [e, n] of Object.entries(t.values)) r[e] = typeof n == "boolean" ? +!!n : n;
528
- return {
529
- status: t.status === "Sat" ? "Optimal" : t.status === "Unsat" ? "Infeasible" : "Error",
530
- objectiveValue: 0,
531
- values: r
532
- };
533
- }
534
- let { Context: r } = await L(), i = new r(`opt_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`), a = new i.Optimize(), o = this.createContextTranslator(i), s = e.variables || e.vars || [], c = e.boolVars || [], l = e.constraints || [], u = e.logicalConstraints || [];
535
- for (let e of s) {
536
- let t = o.getVarAst(e);
537
- e.lb !== -Infinity && a.add(t.ge(e.lb)), e.ub !== Infinity && a.add(t.le(e.ub)), (e.type === "Binary" || e.type === "BINARY") && (a.add(t.ge(0)), a.add(t.le(1)));
538
- }
539
- for (let e of l) {
540
- let t = o.translateConstraint(e);
541
- a.add(t);
542
- }
543
- for (let e of u) {
544
- let t = e && e.expr || e, n = o.translateBoolExpr(t);
545
- a.add(n);
546
- }
547
- let d = e.objective instanceof Object && "quadTerms" in e.objective ? o.translateQuadExpr(e.objective) : o.translateLinExpr(e.objective);
548
- (e.sense || "MINIMIZE").toUpperCase() === "MAXIMIZE" ? a.maximize(d) : a.minimize(d);
549
- let f = (await a.check()).toString();
550
- if (f === "sat") {
551
- let e = a.model(), t = {};
552
- for (let n of s) {
553
- let r = o.getVarAst(n), i = e.eval(r);
554
- t[n.name] = o.parseAstValue(i);
555
- }
556
- for (let n of c) {
557
- let r = o.getBoolVarAst(n), i = e.eval(r);
558
- t[n.name] = +(i.toString() === "true");
559
- }
560
- return {
561
- status: "Optimal",
562
- objectiveValue: o.parseAstValue(e.eval(d)),
563
- values: t
564
- };
565
- }
566
- return f === "unsat" ? {
567
- status: "Infeasible",
568
- objectiveValue: null,
569
- values: {}
570
- } : {
571
- status: "Error",
572
- objectiveValue: null,
573
- values: {}
574
- };
575
- }
576
- };
577
- function z() {
578
- M("z3", () => new R());
579
- }
580
- z();
581
- //#endregion
582
- export { c as C, l as E, a as S, o as T, x as _, M as a, i as b, O as c, b as d, g as f, h as g, y as h, F as i, D as l, v as m, z as n, N as o, _ as p, P as r, k as s, R as t, f as u, d as v, s as w, r as x, n as y };
@@ -1,8 +0,0 @@
1
- /**
2
- * Loader for GLPK (GNU Linear Programming Kit) WebAssembly / JS engine.
3
- * Supports both Node.js (glpk.js/node) and modern browsers (glpk.js worker).
4
- */
5
- type GlpkInstance = any;
6
- export declare function getGlpk(): Promise<GlpkInstance>;
7
- export {};
8
- //# sourceMappingURL=glpk-loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"glpk-loader.d.ts","sourceRoot":"","sources":["../../src/glpk-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,YAAY,GAAG,GAAG,CAAC;AAIxB,wBAAsB,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,CA0BrD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"highs-loader.d.ts","sourceRoot":"","sources":["../../src/highs-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,2BAA2B,+DACsB,CAAC;AAE/D,KAAK,aAAa,GAAG,GAAG,CAAC;AAKzB,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,QAIjD;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAQ5D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgChE;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BjF;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAoCjF;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B3D"}
@@ -1,12 +0,0 @@
1
- import type { SolveOptions } from "./modeler/types.js";
2
- import { type RawHighsSolveResult } from "./highs-loader.js";
3
- /**
4
- * Solve an LP model either in a background Web Worker or on the current thread
5
- */
6
- export declare function solveLp(lpString: string, options?: SolveOptions & {
7
- useWorker?: boolean;
8
- }): Promise<{
9
- result: RawHighsSolveResult;
10
- runTime: number;
11
- }>;
12
- //# sourceMappingURL=highs-worker-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"highs-worker-client.d.ts","sourceRoot":"","sources":["../../src/highs-worker-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAgD3B;;GAEG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,YAAY,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACnD,OAAO,CAAC;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAyB3D"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=highs-worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"highs-worker.d.ts","sourceRoot":"","sources":["../../src/highs-worker.ts"],"names":[],"mappings":""}