@ohtaman/washi 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.ja.md +55 -20
  2. package/README.md +55 -20
  3. package/README.zh-CN.md +55 -20
  4. package/THIRD_PARTY_LICENSES.md +3 -4
  5. package/dist/browser/_washi-node-only-BvRk9kiK.js +0 -0
  6. package/dist/browser/browser-runtime-TLCY0hkc.js +1793 -0
  7. package/dist/browser/highs-worker.js +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 +1 -1
  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 +1096 -444
  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-C20sxTwm.js} +54 -41
  26. package/dist/lib/solvers/glpk.js +2 -2
  27. package/dist/lib/solvers/z3.js +1 -1
  28. package/dist/lib/washi.js +973 -305
  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 +10 -0
  43. package/dist/types/modeler/expression.d.ts.map +1 -1
  44. package/dist/types/modeler/index.d.ts +2 -1
  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 +147 -2
  51. package/dist/types/modeler/model.d.ts.map +1 -1
  52. package/dist/types/modeler/solvers/highs/browser-runtime.d.ts +2 -1
  53. package/dist/types/modeler/solvers/highs/browser-runtime.d.ts.map +1 -1
  54. package/dist/types/modeler/solvers/highs/driver.d.ts +232 -0
  55. package/dist/types/modeler/solvers/highs/driver.d.ts.map +1 -0
  56. package/dist/types/modeler/solvers/highs/index.d.ts +1 -0
  57. package/dist/types/modeler/solvers/highs/index.d.ts.map +1 -1
  58. package/dist/types/modeler/solvers/highs/loader.d.ts +4 -4
  59. package/dist/types/modeler/solvers/highs/loader.d.ts.map +1 -1
  60. package/dist/types/modeler/solvers/highs/node-runtime.d.ts +2 -1
  61. package/dist/types/modeler/solvers/highs/node-runtime.d.ts.map +1 -1
  62. package/dist/types/modeler/solvers/highs/solver.d.ts +1 -1
  63. package/dist/types/modeler/solvers/highs/solver.d.ts.map +1 -1
  64. package/dist/types/modeler/solvers/types.d.ts +2 -0
  65. package/dist/types/modeler/solvers/types.d.ts.map +1 -1
  66. package/dist/types/modeler/types.d.ts +27 -0
  67. package/dist/types/modeler/types.d.ts.map +1 -1
  68. package/docs/examples/index.md +4 -0
  69. package/docs/examples/traveling-salesperson.md +173 -0
  70. package/docs/examples/vehicle-routing.md +206 -0
  71. package/docs/getting-started/ai-agents.md +8 -4
  72. package/docs/guide/constraints.md +1 -1
  73. package/docs/guide/decomposition.md +399 -0
  74. package/docs/guide/unsat-core.md +10 -3
  75. package/docs/ja/getting-started/ai-agents.md +8 -4
  76. package/docs/solvers/custom-solver.md +1 -1
  77. package/docs/solvers/highs.md +25 -3
  78. package/docs/solvers/index.md +3 -3
  79. package/docs/zh/getting-started/ai-agents.md +8 -4
  80. package/llms-full.txt +831 -15
  81. package/llms.txt +9 -5
  82. package/package.json +17 -14
  83. package/skills/washi/SKILL.md +8 -8
  84. package/dist/browser/browser-runtime-D13gHOT5.js +0 -4189
  85. package/dist/browser/loader-CtaDHef_.js +0 -273
  86. 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
  }
@@ -839,18 +852,18 @@ function R(e) {
839
852
  varOrder: s
840
853
  };
841
854
  }
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) {
855
+ function z(e, t) {
856
+ 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 = [];
857
+ f.push(n && n.toLowerCase() === "maximize" ? "Maximize" : "Minimize");
858
+ let p = [], h = !0, g = r instanceof m ? r.linearTerms : r.terms;
859
+ if (g) for (let [e, t] of g) {
847
860
  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;
861
+ let n = c.get(e), r = t >= 0 ? h ? "" : "+ " : "- ", i = Math.abs(t), a = i === 1 ? "" : `${i} `;
862
+ p.push(`${r}${a}${n}`), h = !1;
850
863
  }
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 ? [
864
+ if (r instanceof m && r.quadTerms.size > 0) {
865
+ let e = [], t = !0, n = Array.from(r.quadTerms.values()).filter((e) => e.coeff !== 0).map((e) => {
866
+ let t = d.get(e.var1) ?? e.var1.id, n = d.get(e.var2) ?? e.var2.id, [r, i, a, o] = t <= n ? [
854
867
  e.var1,
855
868
  e.var2,
856
869
  t,
@@ -869,51 +882,51 @@ function z(e) {
869
882
  coeff: e.coeff
870
883
  };
871
884
  }).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;
885
+ for (let r of n) {
886
+ 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);
887
+ r.firstVar === r.secondVar ? e.push(`${i}${o}${s} ^ 2`) : e.push(`${i}${o}${s} * ${l}`), t = !1;
875
888
  }
876
889
  if (e.length > 0) {
877
890
  let t = `[ ${e.join(" ")} ] / 2`;
878
- d.length > 0 ? d.push("+", t) : d.push(t);
891
+ p.length > 0 ? p.push("+", t) : p.push(t);
879
892
  }
880
893
  }
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;
894
+ let _ = p.length > 0 ? p.join(" ") : "0";
895
+ f.push(` obj: ${_}`), f.push("Subject To");
896
+ for (let e of i) {
897
+ let t = u.get(e), n = [], r = !0;
885
898
  for (let [t, i] of e.lhs.terms) {
886
899
  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;
900
+ let e = c.get(t), a = i >= 0 ? r ? "" : "+ " : "- ", o = Math.abs(i), s = o === 1 ? "" : `${o} `;
901
+ n.push(`${a}${s}${e}`), r = !1;
889
902
  }
890
903
  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);
904
+ f.push(` ${t}: ${i} ${a} ${e.rhs}`);
905
+ }
906
+ f.push("Bounds");
907
+ let v = [], y = [];
908
+ for (let e of a) {
909
+ let t = c.get(e);
910
+ if (!o && e.type === "Binary") {
911
+ y.push(t);
899
912
  continue;
900
913
  }
901
- e.type === "Integer" && g.push(t);
914
+ !o && e.type === "Integer" && v.push(t);
902
915
  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}`);
916
+ 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
917
  }
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(" "));
918
+ if (v.length > 0) {
919
+ f.push("Generals");
920
+ for (let e = 0; e < v.length; e += 10) f.push(" " + v.slice(e, e + 10).join(" "));
908
921
  }
909
- if (_.length > 0) {
910
- u.push("Binary");
911
- for (let e = 0; e < _.length; e += 10) u.push(" " + _.slice(e, e + 10).join(" "));
922
+ if (y.length > 0) {
923
+ f.push("Binary");
924
+ for (let e = 0; e < y.length; e += 10) f.push(" " + y.slice(e, e + 10).join(" "));
912
925
  }
913
- return u.push("End"), {
914
- lpString: u.join("\n") + "\n",
915
- nameToVar: a,
916
- nameToConstraint: s
926
+ return f.push("End"), {
927
+ lpString: f.join("\n") + "\n",
928
+ nameToVar: s,
929
+ nameToConstraint: l
917
930
  };
918
931
  }
919
932
  //#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-C20sxTwm.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,
@@ -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-C20sxTwm.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();