@ohtaman/washi 0.5.0 → 0.7.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 (107) hide show
  1. package/README.ja.md +103 -386
  2. package/README.md +104 -387
  3. package/README.zh-CN.md +103 -386
  4. package/THIRD_PARTY_LICENSES.md +5 -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 +1 -1
  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 +3 -3
  12. package/dist/browser/solvers/glpk.min.js +1 -1
  13. package/dist/browser/solvers/z3.js +7 -1
  14. package/dist/browser/solvers/z3.min.js +1 -1
  15. package/dist/browser/washi.js +1708 -540
  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 +1 -1
  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-BEfvpZW3.js → registry-D7TZ3Wh_.js} +142 -59
  26. package/dist/lib/solvers/glpk.js +4 -4
  27. package/dist/lib/solvers/z3.js +1 -1
  28. package/dist/lib/washi.js +1576 -465
  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 +4 -3
  38. package/dist/types/index.d.ts.map +1 -1
  39. package/dist/types/modeler/boolean-expr.d.ts.map +1 -1
  40. package/dist/types/modeler/constraint.d.ts +11 -0
  41. package/dist/types/modeler/constraint.d.ts.map +1 -1
  42. package/dist/types/modeler/expression.d.ts +57 -26
  43. package/dist/types/modeler/expression.d.ts.map +1 -1
  44. package/dist/types/modeler/index.d.ts +4 -3
  45. package/dist/types/modeler/index.d.ts.map +1 -1
  46. package/dist/types/modeler/linearizer.d.ts +15 -0
  47. package/dist/types/modeler/linearizer.d.ts.map +1 -0
  48. package/dist/types/modeler/lp-writer.d.ts +3 -1
  49. package/dist/types/modeler/lp-writer.d.ts.map +1 -1
  50. package/dist/types/modeler/model.d.ts +159 -8
  51. package/dist/types/modeler/model.d.ts.map +1 -1
  52. package/dist/types/modeler/parser.d.ts +25 -5
  53. package/dist/types/modeler/parser.d.ts.map +1 -1
  54. package/dist/types/modeler/solvers/glpk/solver.d.ts.map +1 -1
  55. package/dist/types/modeler/solvers/highs/browser-runtime.d.ts +2 -1
  56. package/dist/types/modeler/solvers/highs/browser-runtime.d.ts.map +1 -1
  57. package/dist/types/modeler/solvers/highs/driver.d.ts +232 -0
  58. package/dist/types/modeler/solvers/highs/driver.d.ts.map +1 -0
  59. package/dist/types/modeler/solvers/highs/index.d.ts +1 -0
  60. package/dist/types/modeler/solvers/highs/index.d.ts.map +1 -1
  61. package/dist/types/modeler/solvers/highs/loader.d.ts +4 -4
  62. package/dist/types/modeler/solvers/highs/loader.d.ts.map +1 -1
  63. package/dist/types/modeler/solvers/highs/node-runtime.d.ts +2 -1
  64. package/dist/types/modeler/solvers/highs/node-runtime.d.ts.map +1 -1
  65. package/dist/types/modeler/solvers/highs/solver.d.ts +1 -1
  66. package/dist/types/modeler/solvers/highs/solver.d.ts.map +1 -1
  67. package/dist/types/modeler/solvers/highs/worker-client.d.ts.map +1 -1
  68. package/dist/types/modeler/solvers/types.d.ts +4 -0
  69. package/dist/types/modeler/solvers/types.d.ts.map +1 -1
  70. package/dist/types/modeler/types.d.ts +27 -0
  71. package/dist/types/modeler/types.d.ts.map +1 -1
  72. package/docs/examples/diet-sensitivity.md +15 -14
  73. package/docs/examples/ecommerce-coupons.md +15 -22
  74. package/docs/examples/index.md +18 -12
  75. package/docs/examples/knapsack.md +8 -7
  76. package/docs/examples/portfolio-qp.md +11 -4
  77. package/docs/examples/production.md +4 -4
  78. package/docs/examples/shift-scheduling.md +20 -7
  79. package/docs/examples/smt-security.md +16 -4
  80. package/docs/examples/transportation.md +46 -19
  81. package/docs/examples/traveling-salesperson.md +157 -0
  82. package/docs/examples/unsat-core.md +15 -5
  83. package/docs/examples/vehicle-routing.md +208 -0
  84. package/docs/getting-started/ai-agents.md +33 -18
  85. package/docs/getting-started/cross-origin.md +56 -28
  86. package/docs/getting-started/index.md +40 -69
  87. package/docs/getting-started/runtimes.md +66 -61
  88. package/docs/guide/constraints.md +47 -41
  89. package/docs/guide/decomposition.md +267 -0
  90. package/docs/guide/expressions.md +90 -39
  91. package/docs/guide/formulation-tips.md +212 -0
  92. package/docs/guide/objectives.md +7 -4
  93. package/docs/guide/unsat-core.md +28 -9
  94. package/docs/guide/variables.md +33 -38
  95. package/docs/ja/getting-started/ai-agents.md +32 -18
  96. package/docs/solvers/custom-solver.md +1 -1
  97. package/docs/solvers/highs.md +48 -5
  98. package/docs/solvers/index.md +4 -4
  99. package/docs/solvers/z3.md +3 -0
  100. package/docs/zh/getting-started/ai-agents.md +32 -18
  101. package/llms-full.txt +1536 -478
  102. package/llms.txt +28 -22
  103. package/package.json +19 -16
  104. package/skills/washi/SKILL.md +21 -17
  105. package/dist/browser/browser-runtime-D13gHOT5.js +0 -4189
  106. package/dist/browser/loader-CtaDHef_.js +0 -273
  107. package/dist/lib/loader-DmNC_UNk.js +0 -279
@@ -2,7 +2,7 @@
2
2
  var e = 0;
3
3
  function t(e, t) {
4
4
  if (e instanceof n || e instanceof d) return e;
5
- throw typeof e == "object" && e && ("terms" in e || "quadTerms" in e) ? Error(`Cannot use an arithmetic expression without a comparison operator (<=, >=, ==) in logical operator "${t}". Use a comparison constraint such as expr\`\${x} <= 10\` or a BoolVar/BoolExpr.`) : Error(`Invalid operand passed to logical operator "${t}": expected a BoolVar, BoolExpr, or Constraint.`);
5
+ throw typeof e == "object" && e && ("terms" in e || "quadTerms" in e) ? Error(`Cannot use an arithmetic expression without a comparison operator (<=, >=, ==) in logical operator "${t}". Use a comparison constraint such as expr\`\${x} <= 10\` or a BoolVar/BoolExpr.`) : typeof e == "object" && e && "id" in e && "name" in e && "lb" in e && "ub" in e && !("sense" in e) ? Error(`Invalid operand passed to logical operator "${t}": expected a BoolVar, BoolExpr, or Constraint, but received numeric variable "${e.name}". Use m.bool() for propositional variables, add a comparison such as expr\`\${x} == 1\`, or use m.indicator(binVar, constraint) for 0-1 Big-M indicator constraints.`) : Error(`Invalid operand passed to logical operator "${t}": expected a BoolVar, BoolExpr, or Constraint.`);
6
6
  }
7
7
  var n = class {
8
8
  and(e) {
@@ -71,6 +71,12 @@ var u = 0, d = class e {
71
71
  ownerModel = null;
72
72
  slack = null;
73
73
  dual = null;
74
+ addTerm(e, t) {
75
+ return t === 0 ? this : (this._lhs.addTerm(e, t), this.ownerModel?.notifyMutation?.(), this);
76
+ }
77
+ setTerm(e, t) {
78
+ return this._lhs.setTerm(e, t), this.ownerModel?.notifyMutation?.(), this;
79
+ }
74
80
  constructor(e, t, n, r) {
75
81
  this.id = ++u, this._lhs = e, this._sense = t, this._rhs = n;
76
82
  let i = typeof r == "string" ? r.trim() : void 0;
@@ -360,6 +366,13 @@ var m = class e {
360
366
  constructor(e = /* @__PURE__ */ new Map(), t = 0) {
361
367
  this.terms = new Map(e), this.constant = t;
362
368
  }
369
+ setTerm(e, t) {
370
+ return t === 0 ? this.terms.delete(e) : this.terms.set(e, t), this;
371
+ }
372
+ addTerm(e, t) {
373
+ let n = (this.terms.get(e) ?? 0) + t;
374
+ return n === 0 ? this.terms.delete(e) : this.terms.set(e, n), this;
375
+ }
363
376
  clone() {
364
377
  return new e(this.terms, this.constant);
365
378
  }
@@ -466,37 +479,107 @@ var m = class e {
466
479
  function g(e, t) {
467
480
  let n = /* @__PURE__ */ new Map(), r = 0;
468
481
  function i(e) {
482
+ return e instanceof d || e.kind === "constraint" || "sense" in e && (e.sense === "<=" || e.sense === ">=" || e.sense === "==") && "lhs" in e && "rhs" in e && typeof e.rhs == "number" && typeof e.lhs == "object" && e.lhs !== null && "terms" in e.lhs && e.lhs.terms instanceof Map;
483
+ }
484
+ function a(e) {
485
+ return e instanceof m || "quadTerms" in e && e.quadTerms instanceof Map && "linearTerms" in e && e.linearTerms instanceof Map && typeof e.constant == "number";
486
+ }
487
+ function o(e) {
488
+ return e instanceof h || "terms" in e && e.terms instanceof Map && typeof e.constant == "number";
489
+ }
490
+ function s(e) {
491
+ return e instanceof F || !i(e) && typeof e.id == "number" && typeof e.name == "string" && typeof e.lb == "number" && typeof e.ub == "number" && typeof e.type == "string" && typeof e.mul == "function";
492
+ }
493
+ function c(e) {
494
+ return i(e) || a(e) || o(e) || s(e);
495
+ }
496
+ function l(e) {
497
+ if (typeof e != "object" || !e || Array.isArray(e) || c(e)) return !1;
498
+ let t = Object.getPrototypeOf(e);
499
+ return t === Object.prototype || t === null;
500
+ }
501
+ function u(e) {
469
502
  if (e != null) {
470
- if (typeof e == "number") r += e;
471
- else if (e instanceof d || typeof e == "object" && "sense" in e && "lhs" in e && "rhs" in e) throw Error("Cannot sum a constraint comparison (<=, >=, ==) in sum(): expected a number, Var, or LinExpr.");
472
- else if (e instanceof m || typeof e == "object" && "quadTerms" in e && e.quadTerms instanceof Map) {
503
+ if (typeof e == "number") {
504
+ if (!Number.isFinite(e)) throw Error(`Invalid non-finite number "${e}" in sum().`);
505
+ let t = r + e;
506
+ if (!Number.isFinite(t)) throw Error("Constant accumulation overflows finite floating-point range in sum().");
507
+ r = t;
508
+ } else if (typeof e == "object" && i(e)) throw Error("Cannot sum a constraint comparison (<=, >=, ==) in sum(): expected a number, Var, or LinExpr.");
509
+ else if (typeof e == "object" && a(e)) {
473
510
  let t = e;
474
511
  if (t.quadTerms.size > 0) throw Error("Quadratic expressions are not supported in sum(): sum() produces a linear expression (LinExpr).");
512
+ if (!Number.isFinite(t.constant)) throw Error(`Invalid non-finite constant "${t.constant}" in sum().`);
475
513
  for (let [e, r] of t.linearTerms) {
476
- let t = n.get(e) ?? 0;
477
- n.set(e, t + r);
514
+ if (!Number.isFinite(r)) throw Error(`Invalid non-finite coefficient "${r}" in sum().`);
515
+ let t = (n.get(e) ?? 0) + r;
516
+ if (!Number.isFinite(t)) throw Error("Coefficient accumulation overflows finite floating-point range in sum().");
517
+ n.set(e, t);
478
518
  }
479
- r += t.constant;
480
- } else if (typeof e == "object" && "terms" in e) {
519
+ let i = r + t.constant;
520
+ if (!Number.isFinite(i)) throw Error("Constant accumulation overflows finite floating-point range in sum().");
521
+ r = i;
522
+ } else if (typeof e == "object" && o(e)) {
481
523
  let t = e;
524
+ if (!Number.isFinite(t.constant)) throw Error(`Invalid non-finite constant "${t.constant}" in sum().`);
482
525
  for (let [e, r] of t.terms) {
483
- let t = n.get(e) ?? 0;
484
- n.set(e, t + r);
526
+ if (!Number.isFinite(r)) throw Error(`Invalid non-finite coefficient "${r}" in sum().`);
527
+ let t = (n.get(e) ?? 0) + r;
528
+ if (!Number.isFinite(t)) throw Error("Coefficient accumulation overflows finite floating-point range in sum().");
529
+ n.set(e, t);
485
530
  }
486
- r += t.constant;
487
- } else if (typeof e == "object" && "id" in e && "name" in e && "lb" in e && "ub" in e) {
488
- let t = e, r = n.get(t) ?? 0;
489
- n.set(t, r + 1);
531
+ let i = r + t.constant;
532
+ if (!Number.isFinite(i)) throw Error("Constant accumulation overflows finite floating-point range in sum().");
533
+ r = i;
534
+ } else if (typeof e == "object" && s(e)) {
535
+ let t = e, r = (n.get(t) ?? 0) + 1;
536
+ if (!Number.isFinite(r)) throw Error("Coefficient accumulation overflows finite floating-point range in sum().");
537
+ n.set(t, r);
490
538
  } else throw Error("Unsupported item in sum(): expected a number, Var, or LinExpr.");
491
539
  }
492
540
  }
541
+ function f(e, t = 0) {
542
+ if (e != null) {
543
+ if (typeof e == "number") {
544
+ u(e);
545
+ return;
546
+ }
547
+ if (typeof e == "object") {
548
+ if (c(e)) {
549
+ u(e);
550
+ return;
551
+ }
552
+ if (!(e instanceof String) && !(e instanceof Map) && Symbol.iterator in e && typeof e[Symbol.iterator] == "function") {
553
+ if (t >= 2) throw Error("Nested containers deeper than 2D are not supported in sum().");
554
+ for (let n of e) f(n, t + 1);
555
+ return;
556
+ }
557
+ if (l(e)) {
558
+ if (t >= 2) throw Error("Nested containers deeper than 2D are not supported in sum().");
559
+ if (Object.getOwnPropertySymbols(e).length > 0) throw Error("Symbol keys are not supported in sum().");
560
+ for (let n of Object.keys(e)) f(e[n], t + 1);
561
+ return;
562
+ }
563
+ }
564
+ u(e);
565
+ }
566
+ }
493
567
  if (typeof e == "number") {
494
- let n = e, r = t;
495
- for (let e = 0; e < n; e++) i(r(e, e));
496
- } else {
568
+ if (typeof t != "function") throw Error("sum(count, mapFn) requires a mapping function as the second argument.");
569
+ if (!Number.isInteger(e) || e < 0) throw Error("sum(count, mapFn) requires a non-negative integer count.");
570
+ let n = e;
571
+ for (let e = 0; e < n; e++) f(t(e, e), 0);
572
+ } else if (typeof e == "object" && e && !(e instanceof String) && (!(e instanceof Map) || typeof t == "function") && Symbol.iterator in e && typeof e[Symbol.iterator] == "function") {
497
573
  let n = 0;
498
- for (let r of e) i(t ? t(r, n++) : r);
499
- }
574
+ for (let r of e) t ? f(t(r, n++), 0) : f(r, 1);
575
+ } else if (l(e)) {
576
+ if (Object.getOwnPropertySymbols(e).length > 0) throw Error("Symbol keys are not supported in sum().");
577
+ let n = 0;
578
+ for (let r of Object.keys(e)) {
579
+ let i = e[r];
580
+ t ? f(t(i, n++), 0) : f(i, 1);
581
+ }
582
+ } else throw Error("Unsupported item in sum(): expected an Iterable, Record, or (count, mapFn).");
500
583
  for (let [e, t] of n) t === 0 && n.delete(e);
501
584
  return new h(n, r);
502
585
  }
@@ -839,18 +922,18 @@ function R(e) {
839
922
  varOrder: s
840
923
  };
841
924
  }
842
- function z(e) {
843
- let { sense: t, objective: n, constraints: r, variables: i } = e, { nameToVar: a, varToName: o, nameToConstraint: s, constrToName: c, varOrder: l } = R(e), u = [];
844
- u.push(t && t.toLowerCase() === "maximize" ? "Maximize" : "Minimize");
845
- let d = [], f = !0, p = n instanceof m ? n.linearTerms : n.terms;
846
- if (p) for (let [e, t] of p) {
925
+ function z(e, t) {
926
+ let { sense: n, objective: r, constraints: i, variables: a } = e, o = t?.relax === !0, { nameToVar: s, varToName: c, nameToConstraint: l, constrToName: u, varOrder: d } = R(e), f = [];
927
+ f.push(n && n.toLowerCase() === "maximize" ? "Maximize" : "Minimize");
928
+ let p = [], h = !0, g = r instanceof m ? r.linearTerms : r.terms;
929
+ if (g) for (let [e, t] of g) {
847
930
  if (t === 0) continue;
848
- let n = o.get(e), r = t >= 0 ? f ? "" : "+ " : "- ", i = Math.abs(t), a = i === 1 ? "" : `${i} `;
849
- d.push(`${r}${a}${n}`), f = !1;
931
+ let n = c.get(e), r = t >= 0 ? h ? "" : "+ " : "- ", i = Math.abs(t), a = i === 1 ? "" : `${i} `;
932
+ p.push(`${r}${a}${n}`), h = !1;
850
933
  }
851
- if (n instanceof m && n.quadTerms.size > 0) {
852
- let e = [], t = !0, r = Array.from(n.quadTerms.values()).filter((e) => e.coeff !== 0).map((e) => {
853
- let t = l.get(e.var1) ?? e.var1.id, n = l.get(e.var2) ?? e.var2.id, [r, i, a, o] = t <= n ? [
934
+ if (r instanceof m && r.quadTerms.size > 0) {
935
+ let e = [], t = !0, n = Array.from(r.quadTerms.values()).filter((e) => e.coeff !== 0).map((e) => {
936
+ let t = d.get(e.var1) ?? e.var1.id, n = d.get(e.var2) ?? e.var2.id, [r, i, a, o] = t <= n ? [
854
937
  e.var1,
855
938
  e.var2,
856
939
  t,
@@ -869,51 +952,51 @@ function z(e) {
869
952
  coeff: e.coeff
870
953
  };
871
954
  }).sort((e, t) => e.firstIdx - t.firstIdx || e.secondIdx - t.secondIdx);
872
- for (let n of r) {
873
- let r = 2 * n.coeff, i = r >= 0 ? t ? "" : "+ " : "- ", a = Math.abs(r), s = a === 1 ? "" : `${a} `, c = o.get(n.firstVar), l = o.get(n.secondVar);
874
- n.firstVar === n.secondVar ? e.push(`${i}${s}${c} ^ 2`) : e.push(`${i}${s}${c} * ${l}`), t = !1;
955
+ for (let r of n) {
956
+ let n = 2 * r.coeff, i = n >= 0 ? t ? "" : "+ " : "- ", a = Math.abs(n), o = a === 1 ? "" : `${a} `, s = c.get(r.firstVar), l = c.get(r.secondVar);
957
+ r.firstVar === r.secondVar ? e.push(`${i}${o}${s} ^ 2`) : e.push(`${i}${o}${s} * ${l}`), t = !1;
875
958
  }
876
959
  if (e.length > 0) {
877
960
  let t = `[ ${e.join(" ")} ] / 2`;
878
- d.length > 0 ? d.push("+", t) : d.push(t);
961
+ p.length > 0 ? p.push("+", t) : p.push(t);
879
962
  }
880
963
  }
881
- let h = d.length > 0 ? d.join(" ") : "0";
882
- u.push(` obj: ${h}`), u.push("Subject To");
883
- for (let e of r) {
884
- let t = c.get(e), n = [], r = !0;
964
+ let _ = p.length > 0 ? p.join(" ") : "0";
965
+ f.push(` obj: ${_}`), f.push("Subject To");
966
+ for (let e of i) {
967
+ let t = u.get(e), n = [], r = !0;
885
968
  for (let [t, i] of e.lhs.terms) {
886
969
  if (i === 0) continue;
887
- let e = o.get(t), a = i >= 0 ? r ? "" : "+ " : "- ", s = Math.abs(i), c = s === 1 ? "" : `${s} `;
888
- n.push(`${a}${c}${e}`), r = !1;
970
+ let e = c.get(t), a = i >= 0 ? r ? "" : "+ " : "- ", o = Math.abs(i), s = o === 1 ? "" : `${o} `;
971
+ n.push(`${a}${s}${e}`), r = !1;
889
972
  }
890
973
  let i = n.length > 0 ? n.join(" ") : "0", a = e.sense === "==" ? "=" : e.sense;
891
- u.push(` ${t}: ${i} ${a} ${e.rhs}`);
892
- }
893
- u.push("Bounds");
894
- let g = [], _ = [];
895
- for (let e of i) {
896
- let t = o.get(e);
897
- if (e.type === "Binary") {
898
- _.push(t);
974
+ f.push(` ${t}: ${i} ${a} ${e.rhs}`);
975
+ }
976
+ f.push("Bounds");
977
+ let v = [], y = [];
978
+ for (let e of a) {
979
+ let t = c.get(e);
980
+ if (!o && e.type === "Binary") {
981
+ y.push(t);
899
982
  continue;
900
983
  }
901
- e.type === "Integer" && g.push(t);
984
+ !o && e.type === "Integer" && v.push(t);
902
985
  let n = e.lb === -Infinity, r = e.ub === Infinity;
903
- n && r ? u.push(` ${t} free`) : n && !r ? u.push(` -infinity <= ${t} <= ${e.ub}`) : !n && r ? (e.lb !== 0 || e.initialValue !== void 0) && u.push(` ${t} >= ${e.lb}`) : u.push(` ${e.lb} <= ${t} <= ${e.ub}`);
986
+ n && r ? f.push(` ${t} free`) : n && !r ? f.push(` -infinity <= ${t} <= ${e.ub}`) : !n && r ? (e.lb !== 0 || e.initialValue !== void 0) && f.push(` ${t} >= ${e.lb}`) : f.push(` ${e.lb} <= ${t} <= ${e.ub}`);
904
987
  }
905
- if (g.length > 0) {
906
- u.push("Generals");
907
- for (let e = 0; e < g.length; e += 10) u.push(" " + g.slice(e, e + 10).join(" "));
988
+ if (v.length > 0) {
989
+ f.push("Generals");
990
+ for (let e = 0; e < v.length; e += 10) f.push(" " + v.slice(e, e + 10).join(" "));
908
991
  }
909
- if (_.length > 0) {
910
- u.push("Binary");
911
- for (let e = 0; e < _.length; e += 10) u.push(" " + _.slice(e, e + 10).join(" "));
992
+ if (y.length > 0) {
993
+ f.push("Binary");
994
+ for (let e = 0; e < y.length; e += 10) f.push(" " + y.slice(e, e + 10).join(" "));
912
995
  }
913
- return u.push("End"), {
914
- lpString: u.join("\n") + "\n",
915
- nameToVar: a,
916
- nameToConstraint: s
996
+ return f.push("End"), {
997
+ lpString: f.join("\n") + "\n",
998
+ nameToVar: s,
999
+ nameToConstraint: l
917
1000
  };
918
1001
  }
919
1002
  //#endregion
@@ -1,4 +1,4 @@
1
- import { a as e, r as t, s as n } from "../registry-BEfvpZW3.js";
1
+ import { a as e, r as t, s as n } from "../registry-D7TZ3Wh_.js";
2
2
  //#region src/modeler/solvers/glpk/loader.ts
3
3
  var r = null, i = null;
4
4
  async function a() {
@@ -134,7 +134,7 @@ var l = class t {
134
134
  let y = [], b = [], x = [];
135
135
  for (let e of t.variables) {
136
136
  let t = p.get(e) || e.name;
137
- e.type === "Binary" ? y.push(t) : e.type === "Integer" && b.push(t);
137
+ !l.relax && e.type === "Binary" ? y.push(t) : !l.relax && e.type === "Integer" && b.push(t);
138
138
  let n = e.lb, r = e.ub, i;
139
139
  i = n === -Infinity && r === Infinity ? d.GLP_FR : n !== -Infinity && r === Infinity ? d.GLP_LO : n === -Infinity && r !== Infinity ? d.GLP_UP : n === r ? d.GLP_FX : d.GLP_DB, x.push({
140
140
  name: t,
@@ -211,8 +211,8 @@ var l = class t {
211
211
  B = !1;
212
212
  break;
213
213
  }
214
- let n = f.get(e);
215
- c(z, n ? n.name : e, Math.abs(t) < 1e-9 ? 0 : t);
214
+ let n = f.get(e), r = n ? n.name : e, i = Math.abs(t) < 1e-9 ? 0 : t;
215
+ !l.relax && n && (n.type === "Integer" || n.type === "Binary") && Math.abs(i - Math.round(i)) <= 1e-5 && (i = Math.round(i) + 0), c(z, r, i);
216
216
  }
217
217
  if (B) for (let e of t.variables) {
218
218
  let t = p.get(e) || e.name;
@@ -1,4 +1,4 @@
1
- import { D as e, O as t, T as n, r, s as i } from "../registry-BEfvpZW3.js";
1
+ import { D as e, O as t, T as n, r, s as i } from "../registry-D7TZ3Wh_.js";
2
2
  import { getBundledZ3AssetUrls as a } from "./z3-assets.js";
3
3
  //#region src/modeler/solvers/z3/loader.ts
4
4
  var o = null, s = null, c = null, l = null, u = /* @__PURE__ */ new WeakMap();