@ohtaman/washi 0.1.2 → 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 (91) hide show
  1. package/README.ja.md +76 -2
  2. package/README.md +76 -2
  3. package/README.zh-CN.md +76 -2
  4. package/dist/browser/highs-worker.js +2 -2
  5. package/dist/browser/{highs-loader-T47YOyos.js → loader-CVt4CloI.js} +2 -2
  6. package/dist/browser/solvers/glpk.js +1057 -0
  7. package/dist/browser/solvers/glpk.min.js +1 -0
  8. package/dist/browser/solvers/z3-built.js +8245 -0
  9. package/dist/browser/solvers/z3-built.wasm +4 -0
  10. package/dist/browser/solvers/z3.js +7528 -0
  11. package/dist/browser/solvers/z3.min.js +5 -0
  12. package/dist/browser/washi.js +142 -476
  13. package/dist/browser/washi.min.js +3 -3
  14. package/dist/lib/async-mutex-Duo4jwzn.js +195 -0
  15. package/dist/lib/constraint-XWdn0ID9.js +93 -0
  16. package/dist/lib/highs-worker.js +2 -2
  17. package/dist/lib/{highs-loader-Blb99785.js → loader-Dti0v9yC.js} +1 -1
  18. package/dist/lib/registry-DksqCSjI.js +32 -0
  19. package/dist/lib/solvers/glpk.js +153 -2
  20. package/dist/lib/solvers/z3-assets.js +1 -0
  21. package/dist/lib/solvers/z3-built.js +8245 -0
  22. package/dist/lib/solvers/z3-built.wasm +4 -0
  23. package/dist/lib/solvers/z3.js +451 -2
  24. package/dist/lib/washi.js +400 -91
  25. package/dist/types/index.d.ts +2 -3
  26. package/dist/types/index.d.ts.map +1 -1
  27. package/dist/types/modeler/index.d.ts +1 -1
  28. package/dist/types/modeler/index.d.ts.map +1 -1
  29. package/dist/types/modeler/model.d.ts +1 -1
  30. package/dist/types/modeler/model.d.ts.map +1 -1
  31. package/dist/types/modeler/solvers/glpk/index.d.ts +3 -0
  32. package/dist/types/modeler/solvers/glpk/index.d.ts.map +1 -0
  33. package/dist/types/modeler/solvers/glpk/loader.d.ts +16 -0
  34. package/dist/types/modeler/solvers/glpk/loader.d.ts.map +1 -0
  35. package/dist/types/modeler/solvers/glpk/solver.d.ts +26 -0
  36. package/dist/types/modeler/solvers/glpk/solver.d.ts.map +1 -0
  37. package/dist/types/modeler/solvers/glpk.d.ts +1 -21
  38. package/dist/types/modeler/solvers/glpk.d.ts.map +1 -1
  39. package/dist/types/{highs-assets.d.ts → modeler/solvers/highs/assets.d.ts} +1 -1
  40. package/dist/types/modeler/solvers/highs/assets.d.ts.map +1 -0
  41. package/dist/types/modeler/solvers/highs/browser-runtime.d.ts +2 -0
  42. package/dist/types/modeler/solvers/highs/browser-runtime.d.ts.map +1 -0
  43. package/dist/types/modeler/solvers/highs/index.d.ts +6 -0
  44. package/dist/types/modeler/solvers/highs/index.d.ts.map +1 -0
  45. package/dist/types/{highs-loader.d.ts → modeler/solvers/highs/loader.d.ts} +2 -2
  46. package/dist/types/modeler/solvers/highs/loader.d.ts.map +1 -0
  47. package/dist/types/{highs-node-runtime.d.ts → modeler/solvers/highs/node-runtime.d.ts} +1 -1
  48. package/dist/types/modeler/solvers/highs/node-runtime.d.ts.map +1 -0
  49. package/dist/types/modeler/solvers/highs/solver.d.ts +33 -0
  50. package/dist/types/modeler/solvers/highs/solver.d.ts.map +1 -0
  51. package/dist/types/modeler/solvers/highs/worker-client.d.ts +13 -0
  52. package/dist/types/modeler/solvers/highs/worker-client.d.ts.map +1 -0
  53. package/dist/types/{highs-worker-factory.d.ts → modeler/solvers/highs/worker-factory.d.ts} +1 -1
  54. package/dist/types/modeler/solvers/highs/worker-factory.d.ts.map +1 -0
  55. package/dist/types/modeler/solvers/highs/worker.d.ts +2 -0
  56. package/dist/types/modeler/solvers/highs/worker.d.ts.map +1 -0
  57. package/dist/types/modeler/solvers/highs.d.ts +1 -31
  58. package/dist/types/modeler/solvers/highs.d.ts.map +1 -1
  59. package/dist/types/modeler/solvers/index.d.ts +0 -2
  60. package/dist/types/modeler/solvers/index.d.ts.map +1 -1
  61. package/dist/types/modeler/solvers/mock.d.ts +1 -0
  62. package/dist/types/modeler/solvers/mock.d.ts.map +1 -1
  63. package/dist/types/modeler/solvers/registry.d.ts +1 -2
  64. package/dist/types/modeler/solvers/registry.d.ts.map +1 -1
  65. package/dist/types/modeler/solvers/z3/assets.d.ts +11 -0
  66. package/dist/types/modeler/solvers/z3/assets.d.ts.map +1 -0
  67. package/dist/types/modeler/solvers/z3/index.d.ts +3 -0
  68. package/dist/types/modeler/solvers/z3/index.d.ts.map +1 -0
  69. package/dist/types/modeler/solvers/z3/loader.d.ts +44 -0
  70. package/dist/types/modeler/solvers/z3/loader.d.ts.map +1 -0
  71. package/dist/types/modeler/solvers/z3/solver.d.ts +34 -0
  72. package/dist/types/modeler/solvers/z3/solver.d.ts.map +1 -0
  73. package/dist/types/modeler/solvers/z3.d.ts +1 -35
  74. package/dist/types/modeler/solvers/z3.d.ts.map +1 -1
  75. package/package.json +19 -5
  76. package/dist/browser/_washi-optional-engine-282Ug7Gw.js +0 -7
  77. package/dist/lib/glpk-5cUpjyb9.js +0 -135
  78. package/dist/lib/z3-C6GeIicJ.js +0 -509
  79. package/dist/types/glpk-loader.d.ts +0 -8
  80. package/dist/types/glpk-loader.d.ts.map +0 -1
  81. package/dist/types/highs-assets.d.ts.map +0 -1
  82. package/dist/types/highs-browser-runtime.d.ts +0 -2
  83. package/dist/types/highs-browser-runtime.d.ts.map +0 -1
  84. package/dist/types/highs-loader.d.ts.map +0 -1
  85. package/dist/types/highs-node-runtime.d.ts.map +0 -1
  86. package/dist/types/highs-worker-client.d.ts +0 -12
  87. package/dist/types/highs-worker-client.d.ts.map +0 -1
  88. package/dist/types/highs-worker-factory.d.ts.map +0 -1
  89. package/dist/types/highs-worker.d.ts +0 -2
  90. package/dist/types/highs-worker.d.ts.map +0 -1
  91. /package/dist/browser/{highs-browser-runtime-D13gHOT5.js → browser-runtime-D13gHOT5.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./highs-loader-T47YOyos.js";
1
+ import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./loader-CVt4CloI.js";
2
2
  //#region src/modeler/boolean-expr.ts
3
3
  var l = 0, u = class {
4
4
  and(e) {
@@ -56,7 +56,7 @@ function _(...e) {
56
56
  }
57
57
  //#endregion
58
58
  //#region src/modeler/constraint.ts
59
- var v = 0, y = class {
59
+ var ee = 0, v = class {
60
60
  id;
61
61
  lhs;
62
62
  sense;
@@ -65,7 +65,7 @@ var v = 0, y = class {
65
65
  slack = null;
66
66
  dual = null;
67
67
  constructor(e, t, n, r) {
68
- this.id = ++v, this.lhs = e, this.sense = t, this.rhs = n, this.name = r || `c_${this.id}`;
68
+ this.id = ++ee, this.lhs = e, this.sense = t, this.rhs = n, this.name = r || `c_${this.id}`;
69
69
  }
70
70
  get pi() {
71
71
  return this.dual;
@@ -92,11 +92,11 @@ var v = 0, y = class {
92
92
  };
93
93
  //#endregion
94
94
  //#region src/modeler/quad-expr.ts
95
- function b(e, t) {
95
+ function y(e, t) {
96
96
  let n = e.id, r = t.id;
97
97
  return n <= r ? `${n}:${r}` : `${r}:${n}`;
98
98
  }
99
- var x = class e {
99
+ var b = class e {
100
100
  linearTerms;
101
101
  quadTerms;
102
102
  constant;
@@ -109,7 +109,7 @@ var x = class e {
109
109
  return new e(this.linearTerms, this.quadTerms, this.constant);
110
110
  }
111
111
  getQuadCoeff(e, t) {
112
- let n = b(e, t), r = this.quadTerms.get(n);
112
+ let n = y(e, t), r = this.quadTerms.get(n);
113
113
  return r ? r.coeff : 0;
114
114
  }
115
115
  add(t) {
@@ -182,14 +182,14 @@ var x = class e {
182
182
  return this.value;
183
183
  }
184
184
  static fromProduct(t, n, r = 1) {
185
- let i = new e(), a = b(t, n);
185
+ let i = new e(), a = y(t, n);
186
186
  return i.quadTerms.set(a, {
187
187
  var1: t.id <= n.id ? t : n,
188
188
  var2: t.id <= n.id ? n : t,
189
189
  coeff: r
190
190
  }), i;
191
191
  }
192
- }, S = class e {
192
+ }, x = class e {
193
193
  terms;
194
194
  constant;
195
195
  constructor(e = /* @__PURE__ */ new Map(), t = 0) {
@@ -199,7 +199,7 @@ var x = class e {
199
199
  return new e(this.terms, this.constant);
200
200
  }
201
201
  add(e) {
202
- if (e instanceof x) return e.add(this);
202
+ if (e instanceof b) return e.add(this);
203
203
  let t = this.clone();
204
204
  if (typeof e == "number") t.constant += e;
205
205
  else if ("terms" in e) {
@@ -215,7 +215,7 @@ var x = class e {
215
215
  return t;
216
216
  }
217
217
  sub(e) {
218
- return e instanceof x ? e.neg().add(this) : typeof e == "number" ? this.add(-e) : ("terms" in e, this.add(e.mul(-1)));
218
+ return e instanceof b ? e.neg().add(this) : typeof e == "number" ? this.add(-e) : ("terms" in e, this.add(e.mul(-1)));
219
219
  }
220
220
  mul(t) {
221
221
  if (typeof t == "number") {
@@ -226,9 +226,9 @@ var x = class e {
226
226
  }
227
227
  return n;
228
228
  }
229
- let n = new x();
229
+ let n = new b();
230
230
  Math.abs(this.constant) >= 1e-12 && n.linearTerms.set(t, this.constant);
231
- for (let [e, r] of this.terms) n = n.add(x.fromProduct(e, t, r));
231
+ for (let [e, r] of this.terms) n = n.add(b.fromProduct(e, t, r));
232
232
  return n;
233
233
  }
234
234
  div(e) {
@@ -271,7 +271,7 @@ var x = class e {
271
271
  let i = this.clone(), a = 0;
272
272
  typeof n == "number" ? a = n : "terms" in n ? (i = i.sub(new e(n.terms, 0)), a = n.constant) : i = i.sub(n);
273
273
  let o = a - i.constant;
274
- return i.constant = 0, new y(i, t, o, r);
274
+ return i.constant = 0, new v(i, t, o, r);
275
275
  }
276
276
  toString() {
277
277
  let e = [], t = !0;
@@ -286,7 +286,7 @@ var x = class e {
286
286
  return e.join(" ") || "0";
287
287
  }
288
288
  };
289
- function C(e, t) {
289
+ function S(e, t) {
290
290
  let n = /* @__PURE__ */ new Map(), r = 0, i = 0;
291
291
  for (let a of e) {
292
292
  let e = t ? t(a, i++) : a;
@@ -304,9 +304,9 @@ function C(e, t) {
304
304
  }
305
305
  }
306
306
  for (let [e, t] of n) Math.abs(t) < 1e-12 && n.delete(e);
307
- return new S(n, r);
307
+ return new x(n, r);
308
308
  }
309
- var w = C, T = C, E = 0, D = class e {
309
+ var C = S, w = S, T = 0, E = class e {
310
310
  id;
311
311
  name;
312
312
  type;
@@ -315,7 +315,7 @@ var w = C, T = C, E = 0, D = class e {
315
315
  value = null;
316
316
  reducedCost = null;
317
317
  constructor(e = {}) {
318
- this.id = ++E, this.name = e.name || `x_${this.id}`, this.type = e.type || "Continuous", this.type === "Binary" ? (this.lb = 0, this.ub = 1) : (this.lb = e.lb === void 0 ? 0 : e.lb, this.ub = e.ub === void 0 ? Infinity : e.ub);
318
+ this.id = ++T, this.name = e.name || `x_${this.id}`, this.type = e.type || "Continuous", this.type === "Binary" ? (this.lb = 0, this.ub = 1) : (this.lb = e.lb === void 0 ? 0 : e.lb, this.ub = e.ub === void 0 ? Infinity : e.ub);
319
319
  }
320
320
  get x() {
321
321
  return this.value;
@@ -324,39 +324,39 @@ var w = C, T = C, E = 0, D = class e {
324
324
  return this.value;
325
325
  }
326
326
  mul(t) {
327
- if (typeof t == "number") return new S(/* @__PURE__ */ new Map([[this, t]]), 0);
328
- if (t instanceof e) return x.fromProduct(this, t, 1);
329
- let n = new x();
327
+ if (typeof t == "number") return new x(/* @__PURE__ */ new Map([[this, t]]), 0);
328
+ if (t instanceof e) return b.fromProduct(this, t, 1);
329
+ let n = new b();
330
330
  Math.abs(t.constant) >= 1e-12 && n.linearTerms.set(this, t.constant);
331
331
  for (let [e, r] of t.terms) {
332
- let t = x.fromProduct(this, e, r);
332
+ let t = b.fromProduct(this, e, r);
333
333
  n = n.add(t);
334
334
  }
335
335
  return n;
336
336
  }
337
337
  add(e) {
338
- return e instanceof x ? e.add(this) : new S(/* @__PURE__ */ new Map([[this, 1]]), 0).add(e);
338
+ return e instanceof b ? e.add(this) : new x(/* @__PURE__ */ new Map([[this, 1]]), 0).add(e);
339
339
  }
340
340
  sub(e) {
341
- return e instanceof x ? e.neg().add(this) : new S(/* @__PURE__ */ new Map([[this, 1]]), 0).sub(e);
341
+ return e instanceof b ? e.neg().add(this) : new x(/* @__PURE__ */ new Map([[this, 1]]), 0).sub(e);
342
342
  }
343
343
  neg() {
344
344
  return this.mul(-1);
345
345
  }
346
346
  le(e, t) {
347
- return new S(/* @__PURE__ */ new Map([[this, 1]]), 0).le(e, t);
347
+ return new x(/* @__PURE__ */ new Map([[this, 1]]), 0).le(e, t);
348
348
  }
349
349
  lessThanOrEqual(e, t) {
350
350
  return this.le(e, t);
351
351
  }
352
352
  ge(e, t) {
353
- return new S(/* @__PURE__ */ new Map([[this, 1]]), 0).ge(e, t);
353
+ return new x(/* @__PURE__ */ new Map([[this, 1]]), 0).ge(e, t);
354
354
  }
355
355
  greaterThanOrEqual(e, t) {
356
356
  return this.ge(e, t);
357
357
  }
358
358
  eq(e, t) {
359
- return new S(/* @__PURE__ */ new Map([[this, 1]]), 0).eq(e, t);
359
+ return new x(/* @__PURE__ */ new Map([[this, 1]]), 0).eq(e, t);
360
360
  }
361
361
  equalTo(e, t) {
362
362
  return this.eq(e, t);
@@ -367,7 +367,7 @@ var w = C, T = C, E = 0, D = class e {
367
367
  };
368
368
  //#endregion
369
369
  //#region src/modeler/parser.ts
370
- function ee(e) {
370
+ function te(e) {
371
371
  let t = [], n = 0, r = e.length;
372
372
  for (; n < r;) {
373
373
  let i = e[n];
@@ -423,7 +423,7 @@ function ee(e) {
423
423
  }
424
424
  return t;
425
425
  }
426
- var te = class {
426
+ var ne = class {
427
427
  tokens;
428
428
  pos = 0;
429
429
  resolver;
@@ -485,12 +485,12 @@ var te = class {
485
485
  let e = this.consume();
486
486
  return this.resolveVariable(e.value).mul(t);
487
487
  }
488
- return new S(/* @__PURE__ */ new Map(), t);
488
+ return new x(/* @__PURE__ */ new Map(), t);
489
489
  }
490
490
  if (e.type === "IDENT") {
491
491
  this.consume();
492
492
  let t = this.resolveVariable(e.value);
493
- return new S(/* @__PURE__ */ new Map([[t, 1]]), 0);
493
+ return new x(/* @__PURE__ */ new Map([[t, 1]]), 0);
494
494
  }
495
495
  if (e.type === "LPAREN") {
496
496
  this.consume("LPAREN");
@@ -505,10 +505,10 @@ var te = class {
505
505
  return t;
506
506
  }
507
507
  };
508
- function O(e, t) {
509
- return new te(ee(e), t).parseExpression();
508
+ function D(e, t) {
509
+ return new ne(te(e), t).parseExpression();
510
510
  }
511
- function k(e, t, n) {
511
+ function O(e, t, n) {
512
512
  let r = e.match(/(<=|>=|==|=<|=>|=)/);
513
513
  if (!r) throw Error(`Constraint must contain a comparison operator (<=, >=, ==, =): "${e}"`);
514
514
  let i = r[0], a = r.index, o = e.substring(0, a).trim(), s = e.substring(a + i.length).trim(), c;
@@ -516,18 +516,18 @@ function k(e, t, n) {
516
516
  else if (i === ">=" || i === "=>") c = ">=";
517
517
  else if (i === "==" || i === "=") c = "==";
518
518
  else throw Error(`Unsupported operator "${i}"`);
519
- let l = O(o, t), u = O(s, t);
519
+ let l = D(o, t), u = D(s, t);
520
520
  return c === "<=" ? l.le(u, n) : c === ">=" ? l.ge(u, n) : l.eq(u, n);
521
521
  }
522
- function A(e, t) {
522
+ function k(e, t) {
523
523
  let n = /* @__PURE__ */ new Map(), r = "";
524
524
  for (let i = 0; i < e.length; i++) if (r += e[i], i < t.length) {
525
525
  let e = t[i];
526
526
  if (typeof e == "number") r += `(${e})`;
527
- else if (e instanceof D) {
527
+ else if (e instanceof E) {
528
528
  let t = `__v_${i}__`;
529
529
  n.set(t, e), r += t;
530
- } else if (e instanceof S) {
530
+ } else if (e instanceof x) {
531
531
  `${i}`, r += `(${e.toString()})`;
532
532
  for (let [t] of e.terms) n.set(t.name, t);
533
533
  }
@@ -537,42 +537,42 @@ function A(e, t) {
537
537
  resolver: (e) => n.get(e)
538
538
  };
539
539
  }
540
- function ne(e, ...t) {
541
- let { fullText: n, resolver: r } = A(e, t);
542
- return k(n, r);
543
- }
544
540
  function re(e, ...t) {
545
- let { fullText: n, resolver: r } = A(e, t);
546
- return /(<=|>=|==|=<|=>|=)/.test(n) ? k(n, r) : O(n, r);
541
+ let { fullText: n, resolver: r } = k(e, t);
542
+ return O(n, r);
543
+ }
544
+ function ie(e, ...t) {
545
+ let { fullText: n, resolver: r } = k(e, t);
546
+ return /(<=|>=|==|=<|=>|=)/.test(n) ? O(n, r) : D(n, r);
547
547
  }
548
548
  //#endregion
549
549
  //#region src/modeler/lp-writer.ts
550
- function j(e, t, n) {
550
+ function A(e, t, n) {
551
551
  let r = e.replace(/[^a-zA-Z0-9_]/g, "_");
552
552
  return /^[0-9]/.test(r) && (r = `${t}_${r}`), (!r || r.length === 0) && (r = `${t}_${n}`), r;
553
553
  }
554
- function M(e) {
554
+ function j(e) {
555
555
  let { sense: t, objective: n, constraints: r, variables: i } = e, a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Set();
556
556
  for (let e of i) {
557
- let t = j(e.name, "x", e.id), n = t, r = 1;
557
+ let t = A(e.name, "x", e.id), n = t, r = 1;
558
558
  for (; c.has(n);) n = `${t}_${r++}`;
559
559
  c.add(n), o.set(e, n), a.set(n, e);
560
560
  }
561
561
  let l = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Map();
562
562
  for (let e of r) {
563
- let t = j(e.name, "c", e.id), n = t, r = 1;
563
+ let t = A(e.name, "c", e.id), n = t, r = 1;
564
564
  for (; l.has(n);) n = `${t}_${r++}`;
565
565
  l.add(n), u.set(e, n), s.set(n, e);
566
566
  }
567
567
  let d = [];
568
568
  d.push(t === "Maximize" ? "Maximize" : "Minimize");
569
- let f = [], p = !0, m = n instanceof x ? n.linearTerms : n.terms;
569
+ let f = [], p = !0, m = n instanceof b ? n.linearTerms : n.terms;
570
570
  if (m) for (let [e, t] of m) {
571
571
  if (Math.abs(t) < 1e-12) continue;
572
572
  let n = o.get(e), r = t >= 0 ? p ? "" : "+ " : "- ", i = Math.abs(t), a = i === 1 ? "" : `${i} `;
573
573
  f.push(`${r}${a}${n}`), p = !1;
574
574
  }
575
- if (n instanceof x && n.quadTerms.size > 0) {
575
+ if (n instanceof b && n.quadTerms.size > 0) {
576
576
  let e = [], t = !0;
577
577
  for (let r of n.quadTerms.values()) {
578
578
  if (Math.abs(r.coeff) < 1e-12) continue;
@@ -623,8 +623,39 @@ function M(e) {
623
623
  };
624
624
  }
625
625
  //#endregion
626
+ //#region src/modeler/solvers/registry.ts
627
+ var M = Symbol.for("washi.solverRegistry"), N = Symbol.for("washi.defaultSolverFactory"), P = globalThis;
628
+ P[M] || (P[M] = /* @__PURE__ */ new Map());
629
+ var F = P[M];
630
+ function I(e, t) {
631
+ F.set(e.toLowerCase(), t);
632
+ }
633
+ function L(e) {
634
+ if (typeof e == "string") {
635
+ let t = F.get(e.toLowerCase());
636
+ if (!t) throw Error(`Solver '${e}' is not registered.`);
637
+ P[N] = t;
638
+ } else P[N] = typeof e == "function" ? e : () => e;
639
+ }
640
+ function R(e, t) {
641
+ if (!e) {
642
+ let e = P[N] || F.get("highs");
643
+ if (!e) throw Error(`No default solver available. Available solvers: ${z().join(", ")}`);
644
+ return e(t);
645
+ }
646
+ if (typeof e == "string") {
647
+ let n = e.toLowerCase(), r = F.get(n);
648
+ if (!r) throw Error(n === "glpk" ? `Solver 'glpk' not found. Available solvers: ${z().join(", ")}. Please import '@ohtaman/washi/solvers/glpk' before selecting this solver.` : n === "z3" ? `Solver 'z3' not found. Available solvers: ${z().join(", ")}. Please import '@ohtaman/washi/solvers/z3' before selecting this solver.` : `Solver '${e}' not found. Available solvers: ${z().join(", ")}`);
649
+ return r(t);
650
+ }
651
+ return e;
652
+ }
653
+ function z() {
654
+ return Array.from(F.keys());
655
+ }
656
+ //#endregion
626
657
  //#region \0washi-browser-worker-factory
627
- function ie() {
658
+ function ae() {
628
659
  let e = r("highs-worker.js");
629
660
  if (new URL(e).origin === window.location.origin) return new Worker(e, { type: "module" });
630
661
  let t = URL.createObjectURL(new Blob(["import " + JSON.stringify(e) + ";"], { type: "text/javascript" }));
@@ -636,42 +667,42 @@ function ie() {
636
667
  }
637
668
  }
638
669
  //#endregion
639
- //#region src/highs-worker-client.ts
640
- var N = null, ae = 0, P = /* @__PURE__ */ new Map();
641
- function oe() {
670
+ //#region src/modeler/solvers/highs/worker-client.ts
671
+ var B = null, V = 0, H = /* @__PURE__ */ new Map();
672
+ function U() {
642
673
  if (typeof window > "u" || typeof Worker > "u") return null;
643
- if (!N) try {
644
- N = ie();
645
- let e = N;
646
- N.onmessage = (e) => {
647
- let { type: t, id: n, result: r, runTime: i, error: a } = e.data, o = P.get(n);
648
- o && (P.delete(n), t === "SOLVE_SUCCESS" ? o.resolve({
674
+ if (!B) try {
675
+ B = ae();
676
+ let e = B;
677
+ B.onmessage = (e) => {
678
+ let { type: t, id: n, result: r, runTime: i, error: a } = e.data, o = H.get(n);
679
+ o && (H.delete(n), t === "SOLVE_SUCCESS" ? o.resolve({
649
680
  result: r,
650
681
  runTime: i
651
682
  }) : o.reject(Error(a || "Worker solve failed")));
652
683
  };
653
684
  let t = (t) => {
654
- if (N === e) {
655
- N = null, e.terminate();
656
- for (let e of P.values()) e.reject(t);
657
- P.clear();
685
+ if (B === e) {
686
+ B = null, e.terminate();
687
+ for (let e of H.values()) e.reject(t);
688
+ H.clear();
658
689
  }
659
690
  };
660
- N.onerror = (e) => t(/* @__PURE__ */ Error(`[WaSHI] HiGHS Worker failed to load or execute. Check Worker assets, CORS and CSP. ${e.message || ""}`)), N.onmessageerror = () => t(/* @__PURE__ */ Error("[WaSHI] Could not deserialize the HiGHS Worker response."));
661
- } catch (e) {
662
- console.warn("Could not instantiate Web Worker, falling back to main thread:", e), N = null;
691
+ B.onerror = (e) => t(/* @__PURE__ */ Error(`[WaSHI] HiGHS Worker failed to load or execute. Check Worker assets, CORS and CSP. ${e?.message || ""}`)), B.onmessageerror = () => t(/* @__PURE__ */ Error("[WaSHI] Could not deserialize the HiGHS Worker response."));
692
+ } catch {
693
+ B = null;
663
694
  }
664
- return N;
695
+ return B;
665
696
  }
666
- async function se(e, n = {}) {
667
- let r = await a(n.wasmUrl), i = n.useWorker ?? typeof window < "u" ? oe() : null;
697
+ async function W(e, n = {}) {
698
+ let r = await a(n.wasmUrl), i = n.useWorker ?? typeof window < "u" ? U() : null;
668
699
  if (!i) return t(e, n);
669
700
  let o = {
670
701
  ...n,
671
702
  wasmUrl: r
672
- }, s = `req_${++ae}`;
703
+ }, s = `req_${++V}`;
673
704
  return new Promise((t, n) => {
674
- P.set(s, {
705
+ H.set(s, {
675
706
  resolve: t,
676
707
  reject: n
677
708
  });
@@ -683,13 +714,13 @@ async function se(e, n = {}) {
683
714
  options: o
684
715
  });
685
716
  } catch (e) {
686
- P.delete(s), n(e);
717
+ H.delete(s), n(e);
687
718
  }
688
719
  });
689
720
  }
690
721
  //#endregion
691
- //#region src/modeler/solvers/highs.ts
692
- function ce(e) {
722
+ //#region src/modeler/solvers/highs/solver.ts
723
+ function G(e) {
693
724
  if (typeof e != "string") return "Unknown";
694
725
  let t = e.trim();
695
726
  if (!t) return "Unknown";
@@ -718,7 +749,7 @@ function ce(e) {
718
749
  let n = t.toLowerCase();
719
750
  return n.includes("infeasible") && n.includes("unbounded") ? "Unknown" : n.includes("infeasible") ? "Infeasible" : n.includes("unbounded") ? "Unbounded" : n.includes("time limit") || n.includes("timelimit") ? "TimeLimit" : n.includes("iteration limit") || n.includes("iterationlimit") ? "IterationLimit" : n.includes("error") ? "Error" : n === "optimal" ? "Optimal" : "Unknown";
720
751
  }
721
- var F = class e {
752
+ var K = class e {
722
753
  static capabilities = {
723
754
  supportsMIP: !0,
724
755
  supportsQP: !0
@@ -734,7 +765,7 @@ var F = class e {
734
765
  let r = {
735
766
  ...this.options,
736
767
  ...n
737
- }, { lpString: i, nameToVar: a, nameToConstraint: o } = t, { result: s, runTime: c } = await se(i, r), l = ce(s?.Status), u = s.ObjectiveValue, d = typeof u == "number" ? u + e.objective.constant : null, f = {}, p = {}, m = {}, h = {};
768
+ }, { lpString: i, nameToVar: a, nameToConstraint: o } = t, { result: s, runTime: c } = await W(i, r), l = G(s?.Status), u = s.ObjectiveValue, d = typeof u == "number" ? u + e.objective.constant : null, f = {}, p = {}, m = {}, h = {};
738
769
  if (s.Columns) for (let [e, t] of Object.entries(s.Columns)) {
739
770
  let n = a.get(e);
740
771
  if (n) {
@@ -763,129 +794,14 @@ var F = class e {
763
794
  raw: s
764
795
  };
765
796
  }
766
- }, le = F, I = null;
767
- async function L() {
768
- return I || (I = (async () => {
769
- try {
770
- let e = await import("./_washi-optional-engine-282Ug7Gw.js");
771
- return await (e.default || e)();
772
- } catch (e) {
773
- throw Error("[WaSHI] Could not load GLPK. Install the optional glpk.js dependency before selecting this solver.", { cause: e });
774
- }
775
- })(), I);
797
+ }, q = K;
798
+ function oe() {
799
+ I("highs", (e) => new K(e)), L((e) => new K(e));
776
800
  }
801
+ oe();
777
802
  //#endregion
778
- //#region src/modeler/solvers/glpk.ts
779
- var R = class e {
780
- static capabilities = {
781
- supportsMIP: !0,
782
- supportsQP: !1
783
- };
784
- name = "GLPK";
785
- version = "5.0.0";
786
- capabilities = e.capabilities;
787
- options;
788
- constructor(e = {}) {
789
- this.options = e;
790
- }
791
- async solve(e, t, n = {}) {
792
- let r = {
793
- ...this.options,
794
- ...n
795
- }, i = await L(), { nameToVar: a, nameToConstraint: o } = t, s = /* @__PURE__ */ new Map();
796
- for (let [e, t] of a.entries()) s.set(t, e);
797
- let c = /* @__PURE__ */ new Map();
798
- for (let [e, t] of o.entries()) c.set(t, e);
799
- let l = [], u = "linearTerms" in e.objective ? e.objective.linearTerms : e.objective.terms;
800
- if (u) for (let [e, t] of u) {
801
- if (Math.abs(t) < 1e-12) continue;
802
- let n = s.get(e) || e.name;
803
- l.push({
804
- name: n,
805
- coef: Number(t)
806
- });
807
- }
808
- let d = [];
809
- for (let t of e.constraints) {
810
- let e = c.get(t) || t.name || `c_${d.length + 1}`, n = [];
811
- for (let [e, r] of t.lhs.terms) {
812
- if (Math.abs(r) < 1e-12) continue;
813
- let t = s.get(e) || e.name;
814
- n.push({
815
- name: t,
816
- coef: Number(r)
817
- });
818
- }
819
- let r;
820
- r = t.sense === "==" ? {
821
- type: i.GLP_FX,
822
- lb: t.rhs,
823
- ub: t.rhs
824
- } : t.sense === "<=" ? {
825
- type: i.GLP_UP,
826
- lb: -Infinity,
827
- ub: t.rhs
828
- } : {
829
- type: i.GLP_LO,
830
- lb: t.rhs,
831
- ub: Infinity
832
- }, d.push({
833
- name: e,
834
- vars: n,
835
- bnds: r
836
- });
837
- }
838
- let f = [], p = [], m = [];
839
- for (let t of e.variables) {
840
- let e = s.get(t) || t.name;
841
- t.type === "Binary" ? f.push(e) : t.type === "Integer" && p.push(e);
842
- let n = t.lb, r = t.ub, a;
843
- a = n === -Infinity && r === Infinity ? i.GLP_FR : n !== -Infinity && r === Infinity ? i.GLP_LO : n === -Infinity && r !== Infinity ? i.GLP_UP : n === r ? i.GLP_FX : i.GLP_DB, m.push({
844
- name: e,
845
- type: a,
846
- lb: n === -Infinity ? 0 : n,
847
- ub: r === Infinity ? 0 : r
848
- });
849
- }
850
- let h = {
851
- name: e.name || "GLPK_Model",
852
- objective: {
853
- direction: e.sense === "Maximize" ? i.GLP_MAX : i.GLP_MIN,
854
- name: "obj",
855
- vars: l
856
- },
857
- subjectTo: d
858
- };
859
- m.length > 0 && (h.bounds = m), f.length > 0 && (h.binaries = f), p.length > 0 && (h.generals = p);
860
- let g = {
861
- msglev: r.verbose ? i.GLP_MSG_ALL : i.GLP_MSG_OFF,
862
- presol: r.presolve !== "off"
863
- };
864
- typeof r.timeLimit == "number" && (g.tmlim = r.timeLimit), typeof r.mipGap == "number" && (g.mipgap = r.mipGap);
865
- let _ = performance.now(), v = await i.solve(h, g), y = (performance.now() - _) / 1e3, b = v?.result?.status, x;
866
- x = b === i.GLP_OPT ? "Optimal" : b === i.GLP_FEAS ? "Feasible" : b === i.GLP_INFEAS || b === i.GLP_NOFEAS ? "Infeasible" : b === i.GLP_UNBND ? "Unbounded" : "Optimal";
867
- let S = v?.result?.z, C = typeof S == "number" ? S + e.objective.constant : null, w = {}, T = v?.result?.vars || {};
868
- for (let [e, t] of Object.entries(T)) {
869
- let n = a.get(e), r = n ? n.name : e;
870
- w[r] = typeof t == "number" ? Math.abs(t) < 1e-9 ? 0 : t : 0;
871
- }
872
- for (let t of e.variables) w[t.name] === void 0 && (w[t.name] = 0);
873
- let E = {};
874
- if (v?.result?.dual) for (let [e, t] of Object.entries(v.result.dual)) {
875
- let n = o.get(e), r = n ? n.name : e;
876
- E[r] = Number(t);
877
- }
878
- return {
879
- status: x,
880
- objectiveValue: C,
881
- values: w,
882
- duals: E,
883
- runTime: v?.time || y,
884
- logs: [`GLPK solved in ${(v?.time || y) * 1e3} ms.`],
885
- raw: v
886
- };
887
- }
888
- }, z = class {
803
+ //#region src/modeler/solvers/mock.ts
804
+ var J = class {
889
805
  name;
890
806
  capabilities;
891
807
  options;
@@ -911,265 +827,11 @@ var R = class e {
911
827
  raw: { mock: !0 }
912
828
  };
913
829
  }
914
- }, B = /* @__PURE__ */ new Map();
915
- B.set("highs", (e) => new F(e)), B.set("glpk", (e) => new R(e)), B.set("mock", (e) => new z(e));
916
- var V = (e) => new F(e);
917
- function H(e, t) {
918
- B.set(e.toLowerCase(), t);
919
- }
920
- function ue(e) {
921
- if (typeof e == "string") {
922
- let t = B.get(e.toLowerCase());
923
- if (!t) throw Error(`Solver '${e}' is not registered.`);
924
- V = t;
925
- } else V = typeof e == "function" ? e : () => e;
926
- }
927
- function U(e, t) {
928
- if (!e) return V(t);
929
- if (typeof e == "string") {
930
- let n = B.get(e.toLowerCase());
931
- if (!n) throw Error(`Solver '${e}' not found. Available solvers: ${W().join(", ")}`);
932
- return n(t);
933
- }
934
- return e;
935
- }
936
- function W() {
937
- return Array.from(B.keys());
938
- }
939
- //#endregion
940
- //#region src/modeler/solvers/z3.ts
941
- var G = null;
942
- async function K() {
943
- if (!G) {
944
- let e = (async () => {
945
- try {
946
- return await (await import("./_washi-optional-engine-282Ug7Gw.js")).init();
947
- } catch (e) {
948
- throw Error(`[WaSHI] Failed to load z3-solver. Ensure the optional dependency is installed (npm install z3-solver) and supported in this environment. Error: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
949
- }
950
- })();
951
- e.catch(() => {
952
- G === e && (G = null);
953
- }), G = e;
954
- }
955
- return G;
956
- }
957
- var q = class {
958
- name = "z3";
959
- capabilities = {
960
- supportsMIP: !0,
961
- supportsQP: !1,
962
- supportsSMT: !0,
963
- supportsUnsatCore: !0
964
- };
965
- createContextTranslator(e) {
966
- let t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
967
- function r(n) {
968
- if (!t.has(n.name)) {
969
- let r = n.type === "Continuous" || n.type === "CONTINUOUS" ? e.Real.const(n.name) : e.Int.const(n.name);
970
- t.set(n.name, r);
971
- }
972
- return t.get(n.name);
973
- }
974
- function i(t) {
975
- if (!n.has(t.name)) {
976
- let r = e.Bool.const(t.name);
977
- n.set(t.name, r);
978
- }
979
- return n.get(t.name);
980
- }
981
- function a(t) {
982
- return typeof e.isInt == "function" && e.isInt(t) ? e.ToReal(t) : t;
983
- }
984
- function o(t, n) {
985
- let r = typeof e.isInt == "function" && e.isInt(t), i = typeof e.isInt == "function" && e.isInt(n);
986
- return r && i ? t.add(n) : a(t).add(a(n));
987
- }
988
- function s(t, n) {
989
- return typeof e.isInt == "function" && e.isInt(t) && Number.isInteger(n) ? t.mul(e.Int.val(n)) : a(t).mul(e.Real.val(n));
990
- }
991
- function c(t, n) {
992
- let r = typeof e.isInt == "function" && e.isInt(t), i = typeof e.isInt == "function" && e.isInt(n);
993
- return r && i ? t.mul(n) : a(t).mul(a(n));
994
- }
995
- function l(t, n) {
996
- return n && Number.isInteger(t) ? e.Int.val(t) : e.Real.val(t);
997
- }
998
- function u(t, n, r) {
999
- let i = typeof e.isInt == "function" && e.isInt(t) && Number.isInteger(r), o = i ? t : a(t), s = i ? e.Int.val(r) : e.Real.val(r);
1000
- return n === "<=" ? o.le(s) : n === ">=" ? o.ge(s) : o.eq(s);
1001
- }
1002
- function p(t) {
1003
- let n = null;
1004
- if (t && t.terms) for (let [e, i] of t.terms.entries()) {
1005
- let t = s(r(e), i);
1006
- n = n === null ? t : o(n, t);
1007
- }
1008
- let i = t && typeof t.constant == "number" ? t.constant : 0;
1009
- if (i !== 0 || n === null) {
1010
- let t = l(i, n === null || typeof e.isInt == "function" && e.isInt(n));
1011
- n = n === null ? t : o(n, t);
1012
- }
1013
- return n;
1014
- }
1015
- function m(t) {
1016
- let n = null;
1017
- if (t.linearTerms) for (let [e, i] of t.linearTerms.entries()) {
1018
- let t = s(r(e), i);
1019
- n = n === null ? t : o(n, t);
1020
- }
1021
- if (t.quadTerms) for (let e of t.quadTerms.values()) {
1022
- let t = s(c(r(e.var1), r(e.var2)), e.coeff);
1023
- n = n === null ? t : o(n, t);
1024
- }
1025
- let i = t && typeof t.constant == "number" ? t.constant : 0;
1026
- if (i !== 0 || n === null) {
1027
- let t = l(i, n === null || typeof e.isInt == "function" && e.isInt(n));
1028
- n = n === null ? t : o(n, t);
1029
- }
1030
- return n;
1031
- }
1032
- function h(e) {
1033
- let t = e.lhs instanceof Object && "quadTerms" in e.lhs ? m(e.lhs) : p(e.lhs), n = typeof e.rhs == "number" ? e.rhs : 0;
1034
- return u(t, e.sense, n);
1035
- }
1036
- function g(t) {
1037
- if (t instanceof d) return i(t);
1038
- if (t instanceof y) return h(t);
1039
- if (t instanceof f) switch (t.op) {
1040
- case "and": return e.And(...t.children.map(g));
1041
- case "or": return e.Or(...t.children.map(g));
1042
- case "not": return e.Not(g(t.children[0]));
1043
- case "implies": return e.Implies(g(t.children[0]), g(t.children[1]));
1044
- case "xor": return e.Xor(g(t.children[0]), g(t.children[1]));
1045
- default: throw Error(`Unsupported boolean operation: ${t.op}`);
1046
- }
1047
- throw Error(`Unknown logic element: ${String(t)}`);
1048
- }
1049
- function _(e) {
1050
- if (!e) return 0;
1051
- if (typeof e.asNumber == "function") return e.asNumber();
1052
- let t = e.toString();
1053
- if (t.startsWith("(/ ")) {
1054
- let e = t.slice(3, -1).trim().split(/\s+/);
1055
- if (e.length === 2) return Number(e[0]) / Number(e[1]);
1056
- }
1057
- return Number(t);
1058
- }
1059
- return {
1060
- getVarAst: r,
1061
- getBoolVarAst: i,
1062
- compareAstWithNumber: u,
1063
- translateLinExpr: p,
1064
- translateQuadExpr: m,
1065
- translateConstraint: h,
1066
- translateBoolExpr: g,
1067
- parseAstValue: _,
1068
- varAstMap: t,
1069
- boolVarAstMap: n
1070
- };
1071
- }
1072
- async check(e, t = {}) {
1073
- let { Context: n } = await K(), r = new n(`check_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`), i = new r.Solver(), a = this.createContextTranslator(r), o = e.variables || e.vars || [], s = e.boolVars || [], c = e.constraints || [], l = e.logicalConstraints || [];
1074
- for (let e of o) {
1075
- let t = a.getVarAst(e);
1076
- e.lb !== -Infinity && i.add(a.compareAstWithNumber(t, ">=", e.lb)), e.ub !== Infinity && i.add(a.compareAstWithNumber(t, "<=", e.ub)), (e.type === "Binary" || e.type === "BINARY") && (i.add(a.compareAstWithNumber(t, ">=", 0)), i.add(a.compareAstWithNumber(t, "<=", 1)));
1077
- }
1078
- for (let e of c) {
1079
- let t = a.translateConstraint(e), n = r.Bool.const(e.name);
1080
- i.addAndTrack(t, n);
1081
- }
1082
- for (let e = 0; e < l.length; e++) {
1083
- let t = l[e], n = t && t.name || `lc_${e + 1}`, o = t && t.expr || t, s = a.translateBoolExpr(o), c = r.Bool.const(n);
1084
- i.addAndTrack(s, c);
1085
- }
1086
- let u = (await i.check()).toString();
1087
- if (u === "sat") {
1088
- let e = i.model(), t = {};
1089
- for (let n of o) {
1090
- let r = a.getVarAst(n), i = e.eval(r);
1091
- t[n.name] = a.parseAstValue(i);
1092
- }
1093
- for (let n of s) {
1094
- let r = a.getBoolVarAst(n), i = e.eval(r);
1095
- t[n.name] = i.toString() === "true";
1096
- }
1097
- return {
1098
- status: "Sat",
1099
- values: t
1100
- };
1101
- }
1102
- if (u === "unsat") {
1103
- let e = i.unsatCore(), t = [], n = typeof e.length == "function" ? e.length() : e.length;
1104
- for (let r = 0; r < n; r++) t.push(e.get(r).toString());
1105
- return {
1106
- status: "Unsat",
1107
- values: {},
1108
- unsatCore: t
1109
- };
1110
- }
1111
- return {
1112
- status: "Unknown",
1113
- values: {}
1114
- };
1115
- }
1116
- async solve(e, t, n = {}) {
1117
- 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))) {
1118
- let t = await this.check(e, n), r = {};
1119
- for (let [e, n] of Object.entries(t.values)) r[e] = typeof n == "boolean" ? +!!n : n;
1120
- return {
1121
- status: t.status === "Sat" ? "Optimal" : t.status === "Unsat" ? "Infeasible" : "Error",
1122
- objectiveValue: 0,
1123
- values: r
1124
- };
1125
- }
1126
- let { Context: r } = await K(), 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 || [];
1127
- for (let e of s) {
1128
- let t = o.getVarAst(e);
1129
- e.lb !== -Infinity && a.add(o.compareAstWithNumber(t, ">=", e.lb)), e.ub !== Infinity && a.add(o.compareAstWithNumber(t, "<=", e.ub)), (e.type === "Binary" || e.type === "BINARY") && (a.add(o.compareAstWithNumber(t, ">=", 0)), a.add(o.compareAstWithNumber(t, "<=", 1)));
1130
- }
1131
- for (let e of l) {
1132
- let t = o.translateConstraint(e);
1133
- a.add(t);
1134
- }
1135
- for (let e of u) {
1136
- let t = e && e.expr || e, n = o.translateBoolExpr(t);
1137
- a.add(n);
1138
- }
1139
- let d = e.objective instanceof Object && "quadTerms" in e.objective ? o.translateQuadExpr(e.objective) : o.translateLinExpr(e.objective);
1140
- (e.sense || "MINIMIZE").toUpperCase() === "MAXIMIZE" ? a.maximize(d) : a.minimize(d);
1141
- let f = (await a.check()).toString();
1142
- if (f === "sat") {
1143
- let e = a.model(), t = {};
1144
- for (let n of s) {
1145
- let r = o.getVarAst(n), i = e.eval(r);
1146
- t[n.name] = o.parseAstValue(i);
1147
- }
1148
- for (let n of c) {
1149
- let r = o.getBoolVarAst(n), i = e.eval(r);
1150
- t[n.name] = +(i.toString() === "true");
1151
- }
1152
- return {
1153
- status: "Optimal",
1154
- objectiveValue: o.parseAstValue(e.eval(d)),
1155
- values: t
1156
- };
1157
- }
1158
- return f === "unsat" ? {
1159
- status: "Infeasible",
1160
- objectiveValue: null,
1161
- values: {}
1162
- } : {
1163
- status: "Error",
1164
- objectiveValue: null,
1165
- values: {}
1166
- };
1167
- }
1168
830
  };
1169
- function J() {
1170
- H("z3", () => new q());
831
+ function se() {
832
+ I("mock", (e) => new J(e));
1171
833
  }
1172
- J();
834
+ se();
1173
835
  //#endregion
1174
836
  //#region src/modeler/model.ts
1175
837
  var Y = class {
@@ -1189,8 +851,12 @@ var Y = class {
1189
851
  runTime = 0;
1190
852
  solution = null;
1191
853
  solver = null;
1192
- constructor(e = {}) {
1193
- this.name = e.name || "OptimizationModel", this.sense = e.sense || "Minimize", this.objective = new S(), e.solver && (this.solver = U(e.solver));
854
+ constructor(e = {}, t) {
855
+ let n;
856
+ n = typeof e == "string" ? {
857
+ ...t,
858
+ name: e
859
+ } : e, this.name = n.name || "OptimizationModel", this.sense = n.sense || "Minimize", this.objective = new x(), n.solver && (this.solver = R(n.solver));
1194
860
  }
1195
861
  get vars() {
1196
862
  return this.variables;
@@ -1212,7 +878,7 @@ var Y = class {
1212
878
  lb: n,
1213
879
  ub: r
1214
880
  } : e || {};
1215
- let a = new D(i);
881
+ let a = new E(i);
1216
882
  if (this.varMapByName.has(a.name)) throw Error(`Variable with name '${a.name}' already exists in model`);
1217
883
  return this.variables.push(a), this.varMapByName.set(a.name, a), a;
1218
884
  }
@@ -1267,7 +933,7 @@ var Y = class {
1267
933
  return this.constrMapByName.get(e);
1268
934
  }
1269
935
  setObjective(e, t) {
1270
- t && (this.sense = t), this.objective = typeof e == "string" ? O(e, (e) => this.getVarByName(e)) : typeof e == "number" ? new S(/* @__PURE__ */ new Map(), e) : e instanceof x || "terms" in e ? e.clone() : new S(/* @__PURE__ */ new Map([[e, 1]]), 0);
936
+ t && (this.sense = t), this.objective = typeof e == "string" ? D(e, (e) => this.getVarByName(e)) : typeof e == "number" ? new x(/* @__PURE__ */ new Map(), e) : e instanceof b || "terms" in e ? e.clone() : new x(/* @__PURE__ */ new Map([[e, 1]]), 0);
1271
937
  }
1272
938
  maximize(e) {
1273
939
  this.setObjective(e, "Maximize");
@@ -1288,7 +954,7 @@ var Y = class {
1288
954
  }), e;
1289
955
  }
1290
956
  let n;
1291
- if (typeof e == "string" ? n = k(e, (e) => this.getVarByName(e), t) : (n = e, t && (n.name = t)), this.constrMapByName.has(n.name)) throw Error(`Constraint with name '${n.name}' already exists in model`);
957
+ if (typeof e == "string" ? n = O(e, (e) => this.getVarByName(e), t) : (n = e, t && (n.name = t)), this.constrMapByName.has(n.name)) throw Error(`Constraint with name '${n.name}' already exists in model`);
1292
958
  return this.constraints.push(n), this.constrMapByName.set(n.name, n), n;
1293
959
  }
1294
960
  addConstr(e, t) {
@@ -1302,7 +968,7 @@ var Y = class {
1302
968
  for (let t of e) this.add(t);
1303
969
  return this;
1304
970
  }
1305
- return e instanceof D ? (this.varMapByName.has(e.name) || (this.variables.push(e), this.varMapByName.set(e.name, e)), this) : (this.addConstraint(e, t), this);
971
+ return e instanceof E ? (this.varMapByName.has(e.name) || (this.variables.push(e), this.varMapByName.set(e.name, e)), this) : (this.addConstraint(e, t), this);
1306
972
  }
1307
973
  addIndicator(e, t, n = {}) {
1308
974
  let r = n.activeValue === void 0 ? 1 : n.activeValue, i = n.M === void 0 ? 1e5 : n.M, a = n.name || `ind_${e.name}_${t.name}`, o = [], { lhs: s, sense: c, rhs: l } = t;
@@ -1328,7 +994,7 @@ var Y = class {
1328
994
  return o;
1329
995
  }
1330
996
  toLpString() {
1331
- let { lpString: e } = M({
997
+ let { lpString: e } = j({
1332
998
  name: this.name,
1333
999
  sense: this.sense,
1334
1000
  objective: this.objective,
@@ -1339,7 +1005,7 @@ var Y = class {
1339
1005
  }
1340
1006
  async optimize(e, t) {
1341
1007
  let n, r;
1342
- if (e && typeof e == "object" && "solve" in e && typeof e.solve == "function" ? (n = e, r = t || {}) : typeof e == "function" ? (n = new e(t), r = t || {}) : typeof e == "string" ? (n = U(e, t), r = t || {}) : (r = { ...e }, r.solver ? (n = U(r.solver, r), delete r.solver) : n = this.solver || U()), this.objective instanceof x && this.objective.quadTerms.size > 0 && n.capabilities?.supportsQP === !1) throw Error(`Solver "${n.name}" does not support quadratic objectives (QP). Please use a QP-capable solver such as HiGHS or Clarabel.`);
1008
+ if (e && typeof e == "object" && "solve" in e && typeof e.solve == "function" ? (n = e, r = t || {}) : typeof e == "function" ? (n = new e(t), r = t || {}) : typeof e == "string" ? (n = R(e, t), r = t || {}) : (r = { ...e }, r.solver ? (n = R(r.solver, r), delete r.solver) : n = this.solver || R()), this.objective instanceof b && this.objective.quadTerms.size > 0 && n.capabilities?.supportsQP === !1) throw Error(`Solver "${n.name}" does not support quadratic objectives (QP). Please use a QP-capable solver such as HiGHS or Clarabel.`);
1343
1009
  let i = {
1344
1010
  name: this.name,
1345
1011
  sense: this.sense,
@@ -1348,7 +1014,7 @@ var Y = class {
1348
1014
  variables: this.variables,
1349
1015
  logicalConstraints: this.logicalConstraints,
1350
1016
  boolVars: this.boolVars
1351
- }, a = M(i), o = await n.solve(i, a, r);
1017
+ }, a = j(i), o = await n.solve(i, a, r);
1352
1018
  this.runTime = o.runTime ?? 0, this.status = o.status, this.objectiveValue = o.objectiveValue ?? null;
1353
1019
  let s = {}, c = {}, l = {}, u = {};
1354
1020
  if (this.values.clear(), o.values) for (let [e, t] of Object.entries(o.values)) {
@@ -1384,7 +1050,7 @@ var Y = class {
1384
1050
  }
1385
1051
  async check(e, t) {
1386
1052
  let n, r;
1387
- if (e && typeof e == "object" && "solve" in e && typeof e.solve == "function" ? (n = e, r = t || {}) : typeof e == "function" ? (n = new e(t), r = t || {}) : typeof e == "string" ? (n = U(e, t), r = t || {}) : (r = { ...e }, r.solver ? (n = U(r.solver, r), delete r.solver) : n = this.solver || U()), this.logicalConstraints.length > 0 && n.capabilities?.supportsSMT !== !0) throw Error(`Solver "${n.name}" does not support SMT / logical constraints (or, implies, not, xor). Please use an SMT-capable solver such as Z3.`);
1053
+ if (e && typeof e == "object" && "solve" in e && typeof e.solve == "function" ? (n = e, r = t || {}) : typeof e == "function" ? (n = new e(t), r = t || {}) : typeof e == "string" ? (n = R(e, t), r = t || {}) : (r = { ...e }, r.solver ? (n = R(r.solver, r), delete r.solver) : n = this.solver || R()), this.logicalConstraints.length > 0 && n.capabilities?.supportsSMT !== !0) throw Error(`Solver "${n.name}" does not support SMT / logical constraints (or, implies, not, xor). Please use an SMT-capable solver such as Z3.`);
1388
1054
  if (typeof n.check == "function") {
1389
1055
  let e = await n.check({
1390
1056
  name: this.name,
@@ -1405,7 +1071,7 @@ var Y = class {
1405
1071
  }
1406
1072
  let i = this.objective, a = this.sense;
1407
1073
  try {
1408
- this.objective = new S(), this.sense = "Minimize";
1074
+ this.objective = new x(), this.sense = "Minimize";
1409
1075
  let e = await this.optimize(n, r), t = e === "Optimal" || e === "Feasible", i = e === "Infeasible", a = {};
1410
1076
  for (let e of this.variables) a[e.name] = e.value ?? 0;
1411
1077
  return {
@@ -1417,7 +1083,7 @@ var Y = class {
1417
1083
  this.objective = i, this.sense = a;
1418
1084
  }
1419
1085
  }
1420
- }, X = "Minimize", de = "Maximize", fe = "Continuous", pe = "Integer", me = "Binary", he = {
1086
+ }, X = "Minimize", ce = "Maximize", le = "Continuous", ue = "Integer", de = "Binary", Z = {
1421
1087
  Optimal: "Optimal",
1422
1088
  Feasible: "Feasible",
1423
1089
  Infeasible: "Infeasible",
@@ -1429,7 +1095,7 @@ var Y = class {
1429
1095
  Sat: "Sat",
1430
1096
  Unsat: "Unsat",
1431
1097
  Unknown: "Unknown"
1432
- }, ge = class e extends D {
1098
+ }, fe = class e extends E {
1433
1099
  constructor(e, t, n, r = "Continuous") {
1434
1100
  super({
1435
1101
  name: e,
@@ -1447,10 +1113,10 @@ var Y = class {
1447
1113
  return o;
1448
1114
  }
1449
1115
  };
1450
- function _e(e) {
1116
+ function pe(e) {
1451
1117
  return e == null ? null : typeof e == "number" ? e : e.value;
1452
1118
  }
1453
- var Z = class {
1119
+ var me = class {
1454
1120
  model;
1455
1121
  constructor(e = "NoName", t = X) {
1456
1122
  this.model = new Y({
@@ -1488,7 +1154,7 @@ var Z = class {
1488
1154
  setObjective(e) {
1489
1155
  if (typeof e == "object" && e) {
1490
1156
  if ("terms" in e) for (let [t] of e.terms) this.addVariable(t);
1491
- else e instanceof D && this.addVariable(e);
1157
+ else e instanceof E && this.addVariable(e);
1492
1158
  }
1493
1159
  this.model.setObjective(e);
1494
1160
  }
@@ -1497,7 +1163,7 @@ var Z = class {
1497
1163
  return this.model.addConstraint(e, t);
1498
1164
  }
1499
1165
  add(e, t) {
1500
- typeof e == "string" ? /(<=|>=|==|=<|=>|=)/.test(e) ? this.addConstraint(e, t) : this.setObjective(e) : e instanceof y ? this.addConstraint(e, t) : this.setObjective(e);
1166
+ typeof e == "string" ? /(<=|>=|==|=<|=>|=)/.test(e) ? this.addConstraint(e, t) : this.setObjective(e) : e instanceof v ? this.addConstraint(e, t) : this.setObjective(e);
1501
1167
  }
1502
1168
  async solve(e, t) {
1503
1169
  return this.model.optimize(e, t);
@@ -1505,20 +1171,20 @@ var Z = class {
1505
1171
  toLpString() {
1506
1172
  return this.model.toLpString();
1507
1173
  }
1508
- }, Q = "Minimize", $ = "Maximize", ve = "Binary", ye = "Integer", be = "Continuous";
1509
- function xe(e) {
1174
+ }, Q = "Minimize", $ = "Maximize", he = "Binary", ge = "Integer", _e = "Continuous";
1175
+ function ve(e) {
1510
1176
  return {
1511
1177
  expr: e,
1512
1178
  sense: $
1513
1179
  };
1514
1180
  }
1515
- function Se(e) {
1181
+ function ye(e) {
1516
1182
  return {
1517
1183
  expr: e,
1518
1184
  sense: Q
1519
1185
  };
1520
1186
  }
1521
- var Ce = class extends Y {
1187
+ var be = class extends Y {
1522
1188
  constructor(e = "MipModel", t = Q) {
1523
1189
  super({
1524
1190
  name: e,
@@ -1544,4 +1210,4 @@ var Ce = class extends Y {
1544
1210
  }
1545
1211
  };
1546
1212
  //#endregion
1547
- export { ve as BINARY, u as BoolExpr, f as BoolOp, d as BoolVar, be as CONTINUOUS, y as Constraint, R as GLPKSolver, le as HiGHS, F as HighsSolver, ye as INTEGER, S as LinExpr, me as LpBinary, fe as LpContinuous, pe as LpInteger, de as LpMaximize, X as LpMinimize, Z as LpProblem, he as LpStatus, ge as LpVariable, $ as MAXIMIZE, Q as MINIMIZE, Ce as MipModel, z as MockSolver, Y as Model, c as OFFICIAL_HIGHS_CDN_WASM_URL, x as QuadExpr, D as Var, q as Z3Solver, p as and, ne as c, re as expr, M as generateLpString, L as getGlpk, i as getHighs, o as getHighsWasmUrl, U as getSolver, g as implies, n as isValidWasmHeader, W as listAvailableSolvers, T as lpSum, xe as maximize, Se as minimize, h as not, m as or, k as parseConstraint, O as parseExpr, e as probeWasmUrl, H as registerSolver, J as registerZ3Solver, a as resolveBrowserWasmUrl, ue as setDefaultSolver, s as setHighsWasmUrl, t as solveLpWithHighs, C as sum, _e as value, _ as xor, w as xsum };
1213
+ export { he as BINARY, u as BoolExpr, f as BoolOp, d as BoolVar, _e as CONTINUOUS, v as Constraint, q as HiGHS, K as HighsSolver, ge as INTEGER, x as LinExpr, de as LpBinary, le as LpContinuous, ue as LpInteger, ce as LpMaximize, X as LpMinimize, me as LpProblem, Z as LpStatus, fe as LpVariable, $ as MAXIMIZE, Q as MINIMIZE, be as MipModel, J as MockSolver, Y as Model, c as OFFICIAL_HIGHS_CDN_WASM_URL, b as QuadExpr, E as Var, p as and, re as c, ie as expr, j as generateLpString, i as getHighs, o as getHighsWasmUrl, R as getSolver, g as implies, n as isValidWasmHeader, z as listAvailableSolvers, w as lpSum, ve as maximize, ye as minimize, h as not, m as or, O as parseConstraint, D as parseExpr, e as probeWasmUrl, I as registerSolver, a as resolveBrowserWasmUrl, L as setDefaultSolver, s as setHighsWasmUrl, t as solveLpWithHighs, S as sum, pe as value, _ as xor, C as xsum };