@cortex-js/compute-engine 0.7.0 → 0.9.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 (83) hide show
  1. package/dist/compute-engine.esm.js +8291 -7307
  2. package/dist/compute-engine.min.esm.js +2 -2
  3. package/dist/compute-engine.min.js +2 -2
  4. package/dist/math-json.esm.js +41 -88
  5. package/dist/math-json.min.esm.js +2 -2
  6. package/dist/math-json.min.js +2 -2
  7. package/dist/types/common/grapheme-splitter.d.ts +1 -1
  8. package/dist/types/common/signals.d.ts +1 -5
  9. package/dist/types/common/utils.d.ts +1 -0
  10. package/dist/types/compute-engine/assume.d.ts +6 -1
  11. package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +67 -68
  12. package/dist/types/compute-engine/boxed-expression/box.d.ts +74 -16
  13. package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +10 -5
  14. package/dist/types/compute-engine/boxed-expression/boxed-domain.d.ts +3 -4
  15. package/dist/types/compute-engine/boxed-expression/boxed-function-definition.d.ts +1 -1
  16. package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +45 -36
  17. package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +22 -19
  18. package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +8 -7
  19. package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +3 -3
  20. package/dist/types/compute-engine/boxed-expression/boxed-symbol-definition.d.ts +6 -6
  21. package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +21 -15
  22. package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
  23. package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
  24. package/dist/types/compute-engine/boxed-expression/serialize.d.ts +3 -3
  25. package/dist/types/compute-engine/boxed-expression/utils.d.ts +9 -9
  26. package/dist/types/compute-engine/boxed-expression/validate.d.ts +18 -0
  27. package/dist/types/compute-engine/compute-engine.d.ts +65 -35
  28. package/dist/types/compute-engine/cost-function.d.ts +1 -1
  29. package/dist/types/compute-engine/domain-utils.d.ts +2 -8
  30. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
  31. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
  32. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
  33. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
  34. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-inequalities.d.ts +1 -1
  35. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
  36. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
  37. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
  38. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
  39. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
  40. package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
  41. package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
  42. package/dist/types/compute-engine/latex-syntax/parse.d.ts +25 -9
  43. package/dist/types/compute-engine/latex-syntax/public.d.ts +14 -6
  44. package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
  45. package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +2 -2
  46. package/dist/types/compute-engine/latex-syntax/serializer.d.ts +2 -2
  47. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  48. package/dist/types/compute-engine/library/arithmetic-add.d.ts +3 -3
  49. package/dist/types/compute-engine/library/arithmetic-divide.d.ts +1 -1
  50. package/dist/types/compute-engine/library/arithmetic-multiply.d.ts +5 -6
  51. package/dist/types/compute-engine/library/arithmetic-power.d.ts +3 -2
  52. package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
  53. package/dist/types/compute-engine/library/calculus.d.ts +1 -1
  54. package/dist/types/compute-engine/library/collections.d.ts +1 -1
  55. package/dist/types/compute-engine/library/core.d.ts +1 -1
  56. package/dist/types/compute-engine/library/domains.d.ts +1 -1
  57. package/dist/types/compute-engine/library/library.d.ts +1 -1
  58. package/dist/types/compute-engine/library/logic.d.ts +1 -1
  59. package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
  60. package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
  61. package/dist/types/compute-engine/library/sets.d.ts +1 -1
  62. package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
  63. package/dist/types/compute-engine/numerics/{numeric-decimal.d.ts → numeric-bignum.d.ts} +10 -6
  64. package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
  65. package/dist/types/compute-engine/numerics/numeric.d.ts +10 -6
  66. package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
  67. package/dist/types/compute-engine/numerics/rationals.d.ts +56 -0
  68. package/dist/types/compute-engine/public.d.ts +622 -506
  69. package/dist/types/compute-engine/rules.d.ts +7 -1
  70. package/dist/types/compute-engine/simplify-rules.d.ts +1 -1
  71. package/dist/types/compute-engine/solve.d.ts +17 -0
  72. package/dist/types/compute-engine/symbolic/expand.d.ts +1 -1
  73. package/dist/types/compute-engine/symbolic/flatten.d.ts +2 -1
  74. package/dist/types/compute-engine/symbolic/negate.d.ts +1 -1
  75. package/dist/types/compute-engine/symbolic/polynomials.d.ts +1 -1
  76. package/dist/types/compute-engine/symbolic/product.d.ts +30 -12
  77. package/dist/types/compute-engine/symbolic/sum.d.ts +13 -7
  78. package/dist/types/compute-engine/symbolic/utils.d.ts +7 -29
  79. package/dist/types/compute-engine.d.ts +2 -2
  80. package/dist/types/math-json/math-json-format.d.ts +2 -2
  81. package/dist/types/math-json/utils.d.ts +11 -41
  82. package/dist/types/math-json.d.ts +3 -3
  83. package/package.json +1 -1
@@ -1,10 +1,4 @@
1
- /** MathJSON 0.7.0 */
2
- /**
3
- * These constants are the 'primitive' functions and constants that are used
4
- * for some basic manipulations such as parsing, and transforming to canonical
5
- * form.
6
- *
7
- */
1
+ /** MathJSON 0.9.0 */
8
2
  function isSymbolObject(expr) {
9
3
  return expr !== null && typeof expr === 'object' && 'sym' in expr;
10
4
  }
@@ -17,14 +11,12 @@ function isFunctionObject(expr) {
17
11
  function isDictionaryObject(expr) {
18
12
  return expr !== null && typeof expr === 'object' && 'dict' in expr;
19
13
  }
20
- /**
21
- * True if the expression is a number, a symbol or a string
22
- * (i.e. not a function and not a dictionary)
23
- */
24
- function isAtomic(expr) {
25
- return (expr === null ||
26
- (!Array.isArray(expr) &&
27
- (typeof expr !== 'object' || !('fn' in expr || 'dic' in expr))));
14
+ function isValidIdentifier(s) {
15
+ // An identifier must not contain any of these characters
16
+ if (/[\u0000-\u0020\u0022\u0060\ufffe\uffff]/.test(s))
17
+ return false;
18
+ // A symbol name must not start with one these characters
19
+ return !/^[\u0021\u0022\u0024-\u0029\u002e\u003a\u003f\u0040\u005b\u005d\u005e\u007b\u007d\u007e\+\-[0-9]]/.test(s);
28
20
  }
29
21
  /** If expr is a string literal, return it.
30
22
  *
@@ -45,7 +37,7 @@ function stringValue(expr) {
45
37
  return expr.substring(1, expr.length - 1);
46
38
  }
47
39
  /**
48
- * The head of a function can be a string or an expression.
40
+ * The head of a function can be an identifier or an expression.
49
41
  *
50
42
  * Return `null` if the expression is not a function.
51
43
  *
@@ -56,8 +48,11 @@ function stringValue(expr) {
56
48
  function head(expr) {
57
49
  if (expr === null || expr === undefined)
58
50
  return null;
59
- if (Array.isArray(expr))
51
+ if (Array.isArray(expr)) {
52
+ console.assert(expr.length > 0 &&
53
+ (typeof expr[0] !== 'string' || isValidIdentifier(expr[0])));
60
54
  return expr[0];
55
+ }
61
56
  if (isFunctionObject(expr))
62
57
  return expr.fn[0];
63
58
  return null;
@@ -67,15 +62,6 @@ function headName(expr) {
67
62
  const h = head(expr);
68
63
  return typeof h === 'string' ? h : '';
69
64
  }
70
- function op(expr, n) {
71
- if (expr === null || expr === undefined)
72
- return null;
73
- if (Array.isArray(expr))
74
- return expr[n] ?? null;
75
- if (isFunctionObject(expr))
76
- return expr.fn[n] ?? null;
77
- return null;
78
- }
79
65
  /**
80
66
  * Return all the elements but the first one, i.e. the arguments of a
81
67
  * function.
@@ -89,6 +75,22 @@ function ops(expr) {
89
75
  return expr.fn.slice(1);
90
76
  return null;
91
77
  }
78
+ /** Return the nth argument of a function expression */
79
+ function op(expr, n) {
80
+ if (expr === null || expr === undefined)
81
+ return null;
82
+ if (Array.isArray(expr))
83
+ return expr[n] ?? null;
84
+ if (isFunctionObject(expr))
85
+ return expr.fn[n] ?? null;
86
+ return null;
87
+ }
88
+ function op1(expr) {
89
+ return op(expr, 1);
90
+ }
91
+ function op2(expr) {
92
+ return op(expr, 2);
93
+ }
92
94
  function nops(expr) {
93
95
  if (expr === null || expr === undefined)
94
96
  return 0;
@@ -101,21 +103,26 @@ function nops(expr) {
101
103
  function symbol(expr) {
102
104
  if (expr === null || expr === undefined)
103
105
  return null;
106
+ if (typeof expr === 'string') {
107
+ // Is it a number?
108
+ if (/^[+\-\.0-9]/.test(expr))
109
+ return null;
110
+ // Is it a string literal?
111
+ if (expr.length >= 2 && expr[0] === "'" && expr[expr.length - 1] === "'")
112
+ return null;
113
+ }
104
114
  const s = isSymbolObject(expr) ? expr.sym : expr;
105
115
  if (typeof s !== 'string')
106
116
  return null;
107
- // Is it a string literal?
108
- if (s.length >= 2 && s[0] === "'" && s[s.length - 1] === "'")
109
- return null;
110
117
  return s;
111
118
  }
112
119
  function keyValuePair(expr) {
113
120
  const h = head(expr);
114
121
  if (h === 'KeyValuePair' || h === 'Tuple' || h === 'Pair') {
115
- const key = stringValue(op(expr, 1));
122
+ const key = stringValue(op1(expr));
116
123
  if (!key)
117
124
  return null;
118
- return [key, op(expr, 2) ?? 'Nothing'];
125
+ return [key, op2(expr) ?? 'Nothing'];
119
126
  }
120
127
  return null;
121
128
  }
@@ -172,63 +179,9 @@ function mapArgs(expr, fn) {
172
179
  i += 1;
173
180
  }
174
181
  return result;
175
- }
176
- /**
177
- * Return num as a number if it's a valid JSON number (that is
178
- * a valid JavaScript number but not NaN or +/-Infinity) or
179
- * as a string otherwise
180
- */
181
- function asValidJSONNumber(num) {
182
- if (typeof num === 'string') {
183
- const val = Number(num);
184
- if (num[0] === '+')
185
- num = num.slice(1);
186
- if (val.toString() === num) {
187
- // If the number roundtrips, it can be represented by a
188
- // JavaScript number
189
- // However, NaN and Infinity cannot be represented by JSON
190
- if (isNaN(val) || !isFinite(val)) {
191
- return val.toString();
192
- }
193
- return val;
194
- }
195
- }
196
- return num;
197
- }
198
- // function number(
199
- // expr: Expression | null | undefined
200
- // ): number | string | null {
201
- // if (expr === null || expr === undefined) return null;
202
- // if (typeof expr === 'number') return expr;
203
- // if (isNumberObject(expr)) return expr.num;
204
- // return null;
205
- // }
206
- // export function isEqual(lhs: Expression, rhs: Expression): boolean {
207
- // const symbLhs = symbol(lhs);
208
- // if (symbLhs) return symbLhs === symbol(rhs);
209
- // const strLhs = string(lhs);
210
- // if (strLhs) return strLhs === string(rhs);
211
- // if (Array.isArray(lhs) || isFunctionObject(lhs)) {
212
- // if (!(Array.isArray(rhs) || isFunctionObject(rhs))) return false;
213
- // if (nops(lhs) !== nops(rhs)) return false;
214
- // if (!isEqual(head(lhs)!, head(rhs)!)) return false;
215
- // const lhsTail = tail(lhs);
216
- // const rhsTail = tail(rhs);
217
- // for (let i = 0; i <= nops(lhs); i += 1)
218
- // if (!isEqual(lhsTail[i], rhsTail[i])) return false;
219
- // return true;
220
- // }
221
- // if (typeof lhs === 'number' || isNumberObject(lhs)) {
222
- // if (!(typeof rhs === 'number' || isNumberObject(rhs))) return false;
223
- // const mLhs = number(lhs);
224
- // const mRhs = number(rhs);
225
- // if (mLhs !== null) return mLhs === mRhs;
226
- // return false;
227
- // }
228
- // return false;
229
- // }
182
+ }
230
183
 
231
184
  // This is the root of the `math-json` package (i.e. `math-json.js` and
232
- const version = '0.7.0';
185
+ const version = '0.9.0';
233
186
 
234
- export { applyRecursively, asValidJSONNumber, dictionary as getDictionary, stringValue as getStringValue, head, headName, isAtomic, isDictionaryObject, isFunctionObject, isStringObject, isSymbolObject, mapArgs, nops, op, symbol, version };
187
+ export { applyRecursively, dictionary as getDictionary, stringValue as getStringValue, head, headName, isDictionaryObject, isFunctionObject, isStringObject, isSymbolObject, mapArgs, nops, op, symbol, version };
@@ -1,2 +1,2 @@
1
- /** MathJSON 0.7.0 */
2
- function n(n){return null!==n&&"object"==typeof n&&"sym"in n}function t(n){return null!==n&&"object"==typeof n&&"str"in n}function r(n){return null!==n&&"object"==typeof n&&"fn"in n}function u(n){return null!==n&&"object"==typeof n&&"dict"in n}function l(n){return null===n||!Array.isArray(n)&&("object"!=typeof n||!("fn"in n||"dic"in n))}function e(n){return null==n?null:"object"==typeof n&&"str"in n?n.str:"string"!=typeof n||n.length<2||"'"!==n[0]||"'"!==n[n.length-1]?null:n.substring(1,n.length-1)}function i(n){return null==n?null:Array.isArray(n)?n[0]:r(n)?n.fn[0]:null}function o(n){const t=i(n);return"string"==typeof t?t:""}function f(n,t){return null==n?null:Array.isArray(n)?n[t]??null:r(n)?n.fn[t]??null:null}function c(n){return null==n?null:Array.isArray(n)?n.slice(1):r(n)?n.fn.slice(1):null}function s(n){return null==n?0:Array.isArray(n)?Math.max(0,n.length-1):r(n)?Math.max(0,n.fn.length-1):0}function y(t){if(null==t)return null;const r=n(t)?t.sym:t;return"string"!=typeof r||r.length>=2&&"'"===r[0]&&"'"===r[r.length-1]?null:r}function a(n){const t=i(n);if("KeyValuePair"===t||"Tuple"===t||"Pair"===t){const t=e(f(n,1));return t?[t,f(n,2)??"Nothing"]:null}return null}function g(n){if(null===n)return null;if("object"==typeof n&&"dict"in n)return n.dict;const t=a(n);if(t)return{[t[0]]:t[1]};if("Dictionary"===i(n)){const t={};for(let r=1;r<s(n);r++){const u=a(f(n,r));u&&(t[u[0]]=u[1])}return t}return null}function p(n,t){const r=i(n);if(null!==r)return[t(r),...(c(n)??[]).map(t)];const u=g(n);if(null!==u){const n=Object.keys(u),r={};for(const l of n)r[l]=t(u[l]);return{dict:r}}return t(n)}function h(n,t){let u=null;if(Array.isArray(n)&&(u=n),r(n)&&(u=n.fn),null===u)return[];let l=1;const e=[];for(;l<u.length;)e.push(t(u[l])),l+=1;return e}function A(n){if("string"==typeof n){const t=Number(n);if("+"===n[0]&&(n=n.slice(1)),t.toString()===n)return isNaN(t)||!isFinite(t)?t.toString():t}return n}const b="0.7.0";export{p as applyRecursively,A as asValidJSONNumber,g as getDictionary,e as getStringValue,i as head,o as headName,l as isAtomic,u as isDictionaryObject,r as isFunctionObject,t as isStringObject,n as isSymbolObject,h as mapArgs,s as nops,f as op,y as symbol,b as version};
1
+ /** MathJSON 0.9.0 */
2
+ function n(n){return null!==n&&"object"==typeof n&&"sym"in n}function t(n){return null!==n&&"object"==typeof n&&"str"in n}function r(n){return null!==n&&"object"==typeof n&&"fn"in n}function u(n){return null!==n&&"object"==typeof n&&"dict"in n}function l(n){return null==n?null:"object"==typeof n&&"str"in n?n.str:"string"!=typeof n||n.length<2||"'"!==n[0]||"'"!==n[n.length-1]?null:n.substring(1,n.length-1)}function e(n){return null==n?null:Array.isArray(n)?n[0]:r(n)?n.fn[0]:null}function i(n){const t=e(n);return"string"==typeof t?t:""}function o(n){return null==n?null:Array.isArray(n)?n.slice(1):r(n)?n.fn.slice(1):null}function f(n,t){return null==n?null:Array.isArray(n)?n[t]??null:r(n)?n.fn[t]??null:null}function c(n){return f(n,2)}function s(n){return null==n?0:Array.isArray(n)?Math.max(0,n.length-1):r(n)?Math.max(0,n.fn.length-1):0}function y(t){if(null==t)return null;if("string"==typeof t){if(/^[+\-\.0-9]/.test(t))return null;if(t.length>=2&&"'"===t[0]&&"'"===t[t.length-1])return null}const r=n(t)?t.sym:t;return"string"!=typeof r?null:r}function a(n){const t=e(n);if("KeyValuePair"===t||"Tuple"===t||"Pair"===t){const t=l(function(n){return f(n,1)}(n));return t?[t,c(n)??"Nothing"]:null}return null}function g(n){if(null===n)return null;if("object"==typeof n&&"dict"in n)return n.dict;const t=a(n);if(t)return{[t[0]]:t[1]};if("Dictionary"===e(n)){const t={};for(let r=1;r<s(n);r++){const u=a(f(n,r));u&&(t[u[0]]=u[1])}return t}return null}function p(n,t){const r=e(n);if(null!==r)return[t(r),...(o(n)??[]).map(t)];const u=g(n);if(null!==u){const n=Object.keys(u),r={};for(const l of n)r[l]=t(u[l]);return{dict:r}}return t(n)}function h(n,t){let u=null;if(Array.isArray(n)&&(u=n),r(n)&&(u=n.fn),null===u)return[];let l=1;const e=[];for(;l<u.length;)e.push(t(u[l])),l+=1;return e}const A="0.9.0";export{p as applyRecursively,g as getDictionary,l as getStringValue,e as head,i as headName,u as isDictionaryObject,r as isFunctionObject,t as isStringObject,n as isSymbolObject,h as mapArgs,s as nops,f as op,y as symbol,A as version};
@@ -1,2 +1,2 @@
1
- /** MathJSON 0.7.0 */
2
- var global,factory;global=this,factory=function(n){function t(n){return null!==n&&"object"==typeof n&&"sym"in n}function r(n){return null!==n&&"object"==typeof n&&"fn"in n}function l(n){return null==n?null:"object"==typeof n&&"str"in n?n.str:"string"!=typeof n||n.length<2||"'"!==n[0]||"'"!==n[n.length-1]?null:n.substring(1,n.length-1)}function e(n){return null==n?null:Array.isArray(n)?n[0]:r(n)?n.fn[0]:null}function i(n,t){var l,e;return null==n?null:Array.isArray(n)?null!==(l=n[t])&&void 0!==l?l:null:r(n)&&null!==(e=n.fn[t])&&void 0!==e?e:null}function u(n){return null==n?null:Array.isArray(n)?n.slice(1):r(n)?n.fn.slice(1):null}function o(n){return null==n?0:Array.isArray(n)?Math.max(0,n.length-1):r(n)?Math.max(0,n.fn.length-1):0}function f(n){var t;const r=e(n);if("KeyValuePair"===r||"Tuple"===r||"Pair"===r){const r=l(i(n,1));return r?[r,null!==(t=i(n,2))&&void 0!==t?t:"Nothing"]:null}return null}function c(n){if(null===n)return null;if("object"==typeof n&&"dict"in n)return n.dict;const t=f(n);if(t)return{[t[0]]:t[1]};if("Dictionary"===e(n)){const t={};for(let r=1;r<o(n);r++){const l=f(i(n,r));l&&(t[l[0]]=l[1])}return t}return null}n.applyRecursively=function(n,t){var r;const l=e(n);if(null!==l)return[t(l),...(null!==(r=u(n))&&void 0!==r?r:[]).map(t)];const i=c(n);if(null!==i){const n=Object.keys(i),r={};for(const l of n)r[l]=t(i[l]);return{dict:r}}return t(n)},n.asValidJSONNumber=function(n){if("string"==typeof n){const t=Number(n);if("+"===n[0]&&(n=n.slice(1)),t.toString()===n)return isNaN(t)||!isFinite(t)?t.toString():t}return n},n.getDictionary=c,n.getStringValue=l,n.head=e,n.headName=function(n){const t=e(n);return"string"==typeof t?t:""},n.isAtomic=function(n){return null===n||!Array.isArray(n)&&("object"!=typeof n||!("fn"in n||"dic"in n))},n.isDictionaryObject=function(n){return null!==n&&"object"==typeof n&&"dict"in n},n.isFunctionObject=r,n.isStringObject=function(n){return null!==n&&"object"==typeof n&&"str"in n},n.isSymbolObject=t,n.mapArgs=function(n,t){let l=null;if(Array.isArray(n)&&(l=n),r(n)&&(l=n.fn),null===l)return[];let e=1;const i=[];for(;e<l.length;)i.push(t(l[e])),e+=1;return i},n.nops=o,n.op=i,n.symbol=function(n){if(null==n)return null;const r=t(n)?n.sym:n;return"string"!=typeof r||r.length>=2&&"'"===r[0]&&"'"===r[r.length-1]?null:r},n.version="0.7.0",Object.defineProperty(n,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?factory(exports):"function"==typeof define&&define.amd?define(["exports"],factory):factory((global="undefined"!=typeof globalThis?globalThis:global||self).MathJson={});
1
+ /** MathJSON 0.9.0 */
2
+ var global,factory;global=this,factory=function(n){function t(n){return null!==n&&"object"==typeof n&&"sym"in n}function r(n){return null!==n&&"object"==typeof n&&"fn"in n}function l(n){return null==n?null:"object"==typeof n&&"str"in n?n.str:"string"!=typeof n||n.length<2||"'"!==n[0]||"'"!==n[n.length-1]?null:n.substring(1,n.length-1)}function e(n){return null==n?null:Array.isArray(n)?n[0]:r(n)?n.fn[0]:null}function u(n){return null==n?null:Array.isArray(n)?n.slice(1):r(n)?n.fn.slice(1):null}function o(n,t){var l,e;return null==n?null:Array.isArray(n)?null!==(l=n[t])&&void 0!==l?l:null:r(n)&&null!==(e=n.fn[t])&&void 0!==e?e:null}function i(n){return o(n,2)}function f(n){return null==n?0:Array.isArray(n)?Math.max(0,n.length-1):r(n)?Math.max(0,n.fn.length-1):0}function c(n){var t;const r=e(n);if("KeyValuePair"===r||"Tuple"===r||"Pair"===r){const r=l(function(n){return o(n,1)}(n));return r?[r,null!==(t=i(n))&&void 0!==t?t:"Nothing"]:null}return null}function s(n){if(null===n)return null;if("object"==typeof n&&"dict"in n)return n.dict;const t=c(n);if(t)return{[t[0]]:t[1]};if("Dictionary"===e(n)){const t={};for(let r=1;r<f(n);r++){const l=c(o(n,r));l&&(t[l[0]]=l[1])}return t}return null}n.applyRecursively=function(n,t){var r;const l=e(n);if(null!==l)return[t(l),...(null!==(r=u(n))&&void 0!==r?r:[]).map(t)];const o=s(n);if(null!==o){const n=Object.keys(o),r={};for(const l of n)r[l]=t(o[l]);return{dict:r}}return t(n)},n.getDictionary=s,n.getStringValue=l,n.head=e,n.headName=function(n){const t=e(n);return"string"==typeof t?t:""},n.isDictionaryObject=function(n){return null!==n&&"object"==typeof n&&"dict"in n},n.isFunctionObject=r,n.isStringObject=function(n){return null!==n&&"object"==typeof n&&"str"in n},n.isSymbolObject=t,n.mapArgs=function(n,t){let l=null;if(Array.isArray(n)&&(l=n),r(n)&&(l=n.fn),null===l)return[];let e=1;const u=[];for(;e<l.length;)u.push(t(l[e])),e+=1;return u},n.nops=f,n.op=o,n.symbol=function(n){if(null==n)return null;if("string"==typeof n){if(/^[+\-\.0-9]/.test(n))return null;if(n.length>=2&&"'"===n[0]&&"'"===n[n.length-1])return null}const r=t(n)?n.sym:n;return"string"!=typeof r?null:r},n.version="0.9.0",Object.defineProperty(n,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?factory(exports):"function"==typeof define&&define.amd?define(["exports"],factory):factory((global="undefined"!=typeof globalThis?globalThis:global||self).MathJson={});
@@ -1,4 +1,4 @@
1
- /* 0.7.0 */
1
+ /* 0.9.0 */
2
2
  /**
3
3
  * Return a string or an array of graphemes.
4
4
  *
@@ -1,4 +1,4 @@
1
- /* 0.7.0 */
1
+ /* 0.9.0 */
2
2
  export declare type SignalCode = RuntimeSignalCode | ('invalid-name' | 'expected-predicate' | 'expected-symbol' | 'operator-requires-one-operand' | 'postfix-operator-requires-one-operand' | 'prefix-operator-requires-one-operand' | 'unbalanced-symbols' | 'expected-argument' | 'unexpected-command' | 'cyclic-definition' | 'invalid-supersets' | 'expected-supersets' | 'unknown-domain' | 'duplicate-wikidata' | 'invalid-dictionary-entry' | 'syntax-error');
3
3
  export declare type SignalMessage = SignalCode | [SignalCode, ...any[]];
4
4
  export declare type SignalOrigin = {
@@ -25,10 +25,6 @@ export declare type Signal = {
25
25
  export declare type ErrorSignal = Signal & {
26
26
  severity: 'error';
27
27
  };
28
- export declare class CortexError extends Error {
29
- constructor(errorSignal: Signal);
30
- toString(): string;
31
- }
32
28
  export declare type WarningSignal = Signal & {
33
29
  severity: 'warning';
34
30
  };
@@ -0,0 +1 @@
1
+ /* 0.9.0 */
@@ -1,4 +1,4 @@
1
- /* 0.7.0 */
1
+ /* 0.9.0 */
2
2
  /**
3
3
  * Add an assumption, in the form of a predicate, for example:
4
4
  *
@@ -13,6 +13,11 @@
13
13
  * of these are stored directly in the current scope's symbols dictionary
14
14
  * (and an entry for the symbol is created if necessary).
15
15
  *
16
+ * New assumptions can 'refine' previous assumptions, that is they are valid
17
+ * if they don't contradict previous assumptions. To set new assumptions
18
+ * that contradict previous ones, you must first `forget` about any symbols
19
+ * in the new assumption.
20
+ *
16
21
  * Predicates that involve multiple symbols are simplified (for example
17
22
  * `x + y = 5` becomes `x + y - 5 = 0`, then stored in the `assumptions` of the
18
23
  * current context).
@@ -1,58 +1,95 @@
1
- /* 0.7.0 */
2
- import type { Complex } from 'complex.js';
1
+ /* 0.9.0 */
2
+ import { Complex } from 'complex.js';
3
3
  import { Expression } from '../../math-json/math-json-format';
4
- import { BoxedExpression, BoxedFunctionDefinition, BoxedRuleSet, BoxedSymbolDefinition, BoxedDomain, EvaluateOptions, IComputeEngine, LatexString, Metadata, NOptions, PatternMatchOption, SemiBoxedExpression, SimplifyOptions, Substitution, RuntimeScope, DomainCompatibility, DomainLiteral, BoxedBaseDefinition } from '../public';
4
+ import { BoxedExpression, BoxedFunctionDefinition, BoxedRuleSet, BoxedSymbolDefinition, BoxedDomain, EvaluateOptions, IComputeEngine, LatexString, Metadata, NOptions, PatternMatchOptions, SemiBoxedExpression, SimplifyOptions, Substitution, RuntimeScope, DomainCompatibility, DomainLiteral, BoxedBaseDefinition, Rational, BoxedSubstitution } from '../public';
5
5
  /**
6
6
  * AbstractBoxedExpression
7
7
  */
8
8
  export declare abstract class AbstractBoxedExpression implements BoxedExpression {
9
- abstract get json(): Expression;
10
- abstract get head(): BoxedExpression | string;
11
- abstract isSame(rhs: BoxedExpression): boolean;
12
- abstract isEqual(rhs: BoxedExpression): boolean;
9
+ abstract readonly hash: number;
10
+ abstract readonly json: Expression;
11
+ abstract readonly head: BoxedExpression | string;
13
12
  abstract get isCanonical(): boolean;
14
13
  abstract set isCanonical(_val: boolean);
15
- abstract get hash(): number;
16
- abstract match(rhs: BoxedExpression, options?: PatternMatchOption): Substitution | null;
14
+ abstract isSame(rhs: BoxedExpression): boolean;
15
+ abstract isEqual(rhs: BoxedExpression): boolean;
16
+ abstract match(rhs: BoxedExpression, options?: PatternMatchOptions): BoxedSubstitution | null;
17
17
  readonly engine: IComputeEngine;
18
18
  /** Verbatim LaTeX, obtained from a source, i.e. from parsing, not generated
19
19
  * synthetically
20
20
  */
21
21
  protected _latex?: string;
22
- protected _wikidata?: string;
22
+ protected _wikidata: string | undefined;
23
23
  constructor(ce: IComputeEngine, metadata?: Metadata);
24
- /** Object.toJSON(), called by JSON.Stringify */
25
- toJSON(): string;
24
+ /** `Object.valueOf()`: return a primitive value for the object
25
+ *
26
+ */
27
+ valueOf(): number | string | boolean;
26
28
  /** Object.toString() */
27
29
  toString(): string;
28
- /** Object.valueOf(): return a primitive value for the object */
29
- valueOf(): number | string | [number, number];
30
+ [Symbol.toPrimitive](hint: 'number' | 'string' | 'default'): number | string | null;
31
+ /** Called by `JSON.stringify()` when serializing to json */
32
+ toJSON(): Expression;
33
+ get scope(): RuntimeScope | null;
30
34
  /** Object.is() */
31
35
  is(rhs: any): boolean;
32
- isCompatible(_dom: BoxedDomain | DomainLiteral, _kind?: DomainCompatibility): boolean;
33
- has(_v: string | string[]): boolean;
34
- get description(): string[];
35
- get url(): string;
36
- get isPure(): boolean;
37
- /** For a symbol, true if the symbol is a free variable (no value) */
38
- get isFree(): boolean;
39
- /** For a symbol, true if the symbol is a constant (unchangeable value) */
40
- get isConstant(): boolean;
41
- get isLiteral(): boolean;
42
36
  get latex(): LatexString;
43
37
  set latex(val: LatexString);
44
- get wikidata(): string;
45
- set wikidata(val: string);
46
- get complexity(): number;
47
- get symbols(): BoxedExpression[];
38
+ get symbol(): string | null;
39
+ get isNothing(): boolean;
40
+ get string(): string | null;
48
41
  getSubexpressions(head: string): BoxedExpression[];
49
42
  get subexpressions(): BoxedExpression[];
43
+ get symbols(): BoxedExpression[];
50
44
  get errors(): BoxedExpression[];
51
45
  get ops(): null | BoxedExpression[];
52
46
  get nops(): number;
53
47
  get op1(): BoxedExpression;
54
48
  get op2(): BoxedExpression;
55
49
  get op3(): BoxedExpression;
50
+ get isValid(): boolean;
51
+ get isPure(): boolean;
52
+ get isExact(): boolean;
53
+ /** For a symbol, true if the symbol is a free variable (no value) */
54
+ get isFree(): boolean;
55
+ /** For a symbol, true if the symbol is a constant (unchangeable value) */
56
+ get isConstant(): boolean;
57
+ get canonical(): BoxedExpression;
58
+ apply(_fn: (x: BoxedExpression) => SemiBoxedExpression, _head?: string): BoxedExpression;
59
+ subs(_sub: Substitution, options?: {
60
+ canonical: boolean;
61
+ }): BoxedExpression;
62
+ solve(_vars: Iterable<string>): null | BoxedExpression[];
63
+ replace(_rules: BoxedRuleSet): null | BoxedExpression;
64
+ has(_v: string | string[]): boolean;
65
+ get isNaN(): boolean | undefined;
66
+ get isZero(): boolean | undefined;
67
+ get isNotZero(): boolean | undefined;
68
+ get isOne(): boolean | undefined;
69
+ get isNegativeOne(): boolean | undefined;
70
+ get isInfinity(): boolean | undefined;
71
+ get isFinite(): boolean | undefined;
72
+ get isEven(): boolean | undefined;
73
+ get isOdd(): boolean | undefined;
74
+ get isPrime(): boolean | undefined;
75
+ get isComposite(): boolean | undefined;
76
+ get numericValue(): number | Decimal | Complex | Rational | null;
77
+ get sgn(): -1 | 0 | 1 | undefined | null;
78
+ isLess(_rhs: BoxedExpression): boolean | undefined;
79
+ isLessEqual(_rhs: BoxedExpression): boolean | undefined;
80
+ isGreater(_rhs: BoxedExpression): boolean | undefined;
81
+ isGreaterEqual(_rhs: BoxedExpression): boolean | undefined;
82
+ get isPositive(): boolean | undefined;
83
+ get isNonNegative(): boolean | undefined;
84
+ get isNegative(): boolean | undefined;
85
+ get isNonPositive(): boolean | undefined;
86
+ isCompatible(_dom: BoxedDomain | DomainLiteral, _kind?: DomainCompatibility): boolean;
87
+ get description(): string[] | undefined;
88
+ get url(): string | undefined;
89
+ get isLiteral(): boolean;
90
+ get wikidata(): string | undefined;
91
+ set wikidata(val: string | undefined);
92
+ get complexity(): number | undefined;
56
93
  get basedDefinition(): BoxedBaseDefinition | undefined;
57
94
  get symbolDefinition(): BoxedSymbolDefinition | undefined;
58
95
  get functionDefinition(): BoxedFunctionDefinition | undefined;
@@ -62,38 +99,11 @@ export declare abstract class AbstractBoxedExpression implements BoxedExpression
62
99
  get keysCount(): number;
63
100
  getKey(_key: string): BoxedExpression | undefined;
64
101
  hasKey(_key: string): boolean;
65
- get machineValue(): number | null;
66
- get rationalValue(): [numer: number, denom: number] | [null, null];
67
- get decimalValue(): Decimal | null;
68
- get complexValue(): Complex | null;
69
- get asFloat(): number | null;
70
- get asSmallInteger(): number | null;
71
- get asRational(): [number, number] | [null, null];
72
- get sgn(): -1 | 0 | 1 | undefined | null;
73
- get symbol(): string | null;
74
- get isNothing(): boolean;
75
- get isValid(): boolean;
76
102
  get value(): BoxedExpression | undefined;
77
103
  set value(_value: BoxedExpression | number | undefined);
78
- get numericValue(): BoxedExpression | undefined;
79
- isSubdomainOf(_d: BoxedExpression | string): undefined | boolean;
80
104
  get domain(): BoxedDomain;
81
105
  set domain(_domain: BoxedDomain);
82
- get explicitDomain(): BoxedDomain | null;
83
- get string(): string | null;
84
- isLess(_rhs: BoxedExpression): boolean | undefined;
85
- isLessEqual(_rhs: BoxedExpression): boolean | undefined;
86
- isGreater(_rhs: BoxedExpression): boolean | undefined;
87
- isGreaterEqual(_rhs: BoxedExpression): boolean | undefined;
88
- get isZero(): boolean | undefined;
89
- get isNotZero(): boolean | undefined;
90
- get isPositive(): boolean | undefined;
91
- get isNonNegative(): boolean | undefined;
92
- get isNegative(): boolean | undefined;
93
- get isNonPositive(): boolean | undefined;
94
- get isInfinity(): boolean | undefined;
95
- get isNaN(): boolean | undefined;
96
- get isFinite(): boolean | undefined;
106
+ get explicitDomain(): BoxedDomain | undefined;
97
107
  get isNumber(): boolean | undefined;
98
108
  get isInteger(): boolean | undefined;
99
109
  get isRational(): boolean | undefined;
@@ -103,18 +113,7 @@ export declare abstract class AbstractBoxedExpression implements BoxedExpression
103
113
  get isComplex(): boolean | undefined;
104
114
  get isImaginary(): boolean | undefined;
105
115
  get isExtendedComplex(): boolean | undefined;
106
- get isOne(): boolean | undefined;
107
- get isNegativeOne(): boolean | undefined;
108
- get isEven(): boolean | undefined;
109
- get isOdd(): boolean | undefined;
110
- get isPrime(): boolean | undefined;
111
- get isComposite(): boolean | undefined;
112
- get canonical(): BoxedExpression;
113
- apply(_fn: (x: BoxedExpression) => SemiBoxedExpression, _head?: string): BoxedExpression;
114
- evaluate(options?: EvaluateOptions): BoxedExpression;
115
116
  simplify(_options?: SimplifyOptions): BoxedExpression;
117
+ evaluate(options?: EvaluateOptions): BoxedExpression;
116
118
  N(_options?: NOptions): BoxedExpression;
117
- replace(_rules: BoxedRuleSet): null | BoxedExpression;
118
- subs(_sub: Substitution): BoxedExpression;
119
- solve(_vars: Iterable<string>): null | BoxedExpression[];
120
119
  }
@@ -1,7 +1,74 @@
1
- /* 0.7.0 */
1
+ /* 0.9.0 */
2
2
  import { Decimal } from 'decimal.js';
3
- import { IComputeEngine, SemiBoxedExpression, BoxedExpression, Metadata } from '../public';
3
+ import { IComputeEngine, SemiBoxedExpression, BoxedExpression, Metadata, Rational } from '../public';
4
4
  import { MathJsonNumber } from '../../math-json/math-json-format';
5
+ /**
6
+ * **Theory of Operations**
7
+ *
8
+ * 1/ Boxing does not depend on the numeric mode. The numeric mode could be
9
+ * changed later, but the previously boxed numbers could not be retroactively
10
+ * upgraded.
11
+ *
12
+ * The `numericMode` is taken into account only during evaluation.
13
+ *
14
+ * Therefore, a boxed expression may contain a mix of number representations.
15
+ *
16
+ * 2/ The result of boxing is canonical by default.
17
+ *
18
+ * This is the most common need (i.e. as soon as you want to evaluate an
19
+ * expression you need a canonical expression). Creating a boxed expression
20
+ * which is canonical from the start avoid going through an intermediary step
21
+ * with a non-canonical expression.
22
+ *
23
+ * 3/ When implementing an `evaluate()`:
24
+ * - if `bignumPreferred()` all operations should be done in bignum and complex,
25
+ * otherwise, they should all be done in machine numbers and complex.
26
+ * - if not `complexAllowed()`, return `NaN` if a complex value is encountered
27
+ * - if a `Sqrt` (of a rational) is encountered, preserve it
28
+ * - if a `hold` constant is encountered, preserve it
29
+ * - if a rational is encountered, preserve it
30
+ * - if one of the arguments is not exact, return an approximation
31
+ *
32
+ * EXACT
33
+ * - 2 + 5 -> 7
34
+ * - 2 + 5/7 -> 19/7
35
+ * - 2 + √2 -> 2 + √2
36
+ * - 2 + √(5/7) -> 2 + √(5/7)
37
+ * - 5/7 + 9/11 -> 118/77
38
+ * - 5/7 + √2 -> 5/7 + √2
39
+ * - 10/14 + √(18/9) -> 5/7 + √2
40
+ * - √2 + √5 -> √2 + √5
41
+ * - √2 + √2 -> 2√2
42
+ * - sin(2) -> sin(2)
43
+ * - sin(pi/3) -> √3/2
44
+ *
45
+ * APPROXIMATE
46
+ * - 2 + 2.1 -> 4.1
47
+ * - 2 + √2.1 -> 3.44914
48
+ * - 5/7 + √2.1 -> 2.16342
49
+ * - sin(2) + √2.1 -> 2.35844
50
+ */
51
+ /**
52
+ * Return a boxed number representing `num`.
53
+ *
54
+ * Note: `boxNumber()` should only be called from `ce.number()` in order to
55
+ * benefit from number expression caching.
56
+ */
57
+ export declare function boxNumber(ce: IComputeEngine, num: MathJsonNumber | number | string | Complex | Decimal | Rational, options?: {
58
+ metadata?: Metadata;
59
+ canonical?: boolean;
60
+ }): BoxedExpression | null;
61
+ /**
62
+ * Given a head and a set of arguments, return a boxed function expression.
63
+ *
64
+ * If available, preserve LaTeX and wikidata metadata in the boxed expression.
65
+ *
66
+ * Note that `boxFunction()` should only be called from `ce.fn()` or `box()`
67
+ */
68
+ export declare function boxFunction(ce: IComputeEngine, head: string, ops: SemiBoxedExpression[], options: {
69
+ metadata?: Metadata;
70
+ canonical?: boolean;
71
+ }): BoxedExpression;
5
72
  /**
6
73
  * Notes about the boxed form:
7
74
  *
@@ -17,6 +84,7 @@ import { MathJsonNumber } from '../../math-json/math-json-format';
17
84
  * `Add`/`Multiply` expression avoids this ambiguity.
18
85
  *
19
86
  * [3] An expression with a `Rational` head is converted to a rational number.
87
+ * if possible, to a `Divide` otherwise.
20
88
  *
21
89
  * [4] A `Negate` function applied to a number literal is converted to a number.
22
90
  *
@@ -24,19 +92,9 @@ import { MathJsonNumber } from '../../math-json/math-json-format';
24
92
  * Note that `Negate` is only distributed over addition. In practice, having
25
93
  * `Negate` factored on multiply/divide is more useful to detect patterns.
26
94
  *
27
- * Note that the `box()` function should only be called from `ComputeEngine`
28
- *
29
- */
30
- export declare function box(ce: IComputeEngine, expr: Decimal | Complex | [num: number, denom: number] | SemiBoxedExpression): BoxedExpression;
31
- /**
32
- * Return a boxed number representing `num`.
33
- *
34
- * This function tries to avoid creating a boxed number if `num` corresponds
35
- * to a common value for which we have a shared instance (-1, 0, NaN, etc...)
36
- *
37
- *
38
- * Note that `boxNumber()` should only be called from `ComputeEngine`
95
+ * Note that the `box()` function should only be called from `ce.box()`
39
96
  *
40
- * The result may not be canonical
41
97
  */
42
- export declare function boxNumber(ce: IComputeEngine, num: MathJsonNumber | BoxedExpression | number | Complex | Decimal | [numer: number, denom: number], metadata?: Metadata): BoxedExpression | null;
98
+ export declare function box(ce: IComputeEngine, expr: null | undefined | Decimal | Complex | Rational | SemiBoxedExpression, options?: {
99
+ canonical?: boolean;
100
+ }): BoxedExpression;
@@ -1,5 +1,5 @@
1
- /* 0.7.0 */
2
- import { BoxedExpression, IComputeEngine, EvaluateOptions, NOptions, BoxedRuleSet, SemiBoxedExpression, SimplifyOptions, ReplaceOptions, Substitution, Metadata, PatternMatchOption, BoxedDomain } from '../public';
1
+ /* 0.9.0 */
2
+ import { BoxedExpression, IComputeEngine, EvaluateOptions, NOptions, BoxedRuleSet, SemiBoxedExpression, SimplifyOptions, ReplaceOptions, Substitution, Metadata, PatternMatchOptions, BoxedDomain, BoxedSubstitution } from '../public';
3
3
  import { AbstractBoxedExpression } from './abstract-boxed-expression';
4
4
  /**
5
5
  * BoxedDictionary
@@ -9,7 +9,10 @@ export declare class BoxedDictionary extends AbstractBoxedExpression {
9
9
  private _isCanonical;
10
10
  constructor(ce: IComputeEngine, dict: {
11
11
  [key: string]: SemiBoxedExpression;
12
- }, metadata?: Metadata);
12
+ }, options?: {
13
+ canonical?: boolean;
14
+ metadata?: Metadata;
15
+ });
13
16
  unbind(): undefined;
14
17
  get hash(): number;
15
18
  get complexity(): number;
@@ -24,7 +27,7 @@ export declare class BoxedDictionary extends AbstractBoxedExpression {
24
27
  get json(): Expression;
25
28
  /** Structural equality */
26
29
  isSame(rhs: BoxedExpression): boolean;
27
- match(rhs: BoxedExpression, _options?: PatternMatchOption): Substitution | null;
30
+ match(rhs: BoxedExpression, _options?: PatternMatchOptions): BoxedSubstitution | null;
28
31
  /** Mathematical equality */
29
32
  isEqual(rhs: BoxedExpression): boolean;
30
33
  apply(fn: (x: BoxedExpression) => SemiBoxedExpression, head?: string): BoxedExpression;
@@ -35,5 +38,7 @@ export declare class BoxedDictionary extends AbstractBoxedExpression {
35
38
  simplify(options?: SimplifyOptions): BoxedExpression;
36
39
  N(options?: NOptions): BoxedExpression;
37
40
  replace(rules: BoxedRuleSet, options?: ReplaceOptions): null | BoxedExpression;
38
- subs(sub: Substitution): BoxedExpression;
41
+ subs(sub: Substitution, options?: {
42
+ canonical: boolean;
43
+ }): BoxedExpression;
39
44
  }
@@ -1,5 +1,5 @@
1
- /* 0.7.0 */
2
- import { BoxedDomain, BoxedExpression, DomainCompatibility, DomainConstructor, DomainExpression, DomainLiteral, IComputeEngine, Metadata, PatternMatchOption, Substitution } from '../public';
1
+ /* 0.9.0 */
2
+ import { BoxedDomain, BoxedExpression, BoxedSubstitution, DomainCompatibility, DomainConstructor, DomainExpression, DomainLiteral, IComputeEngine, Metadata, PatternMatchOptions } from '../public';
3
3
  import { AbstractBoxedExpression } from './abstract-boxed-expression';
4
4
  /**
5
5
  * A `_BoxedDomain` is a wrapper around a boxed, canonical, domain expression.
@@ -31,7 +31,7 @@ export declare class _BoxedDomain extends AbstractBoxedExpression implements Box
31
31
  isSame(rhs: BoxedExpression): boolean;
32
32
  is(rhs: any): boolean;
33
33
  isCompatible(dom: BoxedDomain | DomainLiteral, compatibility?: DomainCompatibility): boolean;
34
- match(rhs: BoxedExpression, _options?: PatternMatchOption): Substitution | null;
34
+ match(rhs: BoxedExpression, _options?: PatternMatchOptions): BoxedSubstitution | null;
35
35
  get head(): string;
36
36
  get domain(): BoxedDomain;
37
37
  get isNothing(): boolean;
@@ -46,6 +46,5 @@ export declare class _BoxedDomain extends AbstractBoxedExpression implements Box
46
46
  export declare function boxDomain(ce: IComputeEngine, dom: BoxedDomain | DomainExpression, metadata?: Metadata): BoxedDomain;
47
47
  /** Validate that `expr` is a Domain */
48
48
  export declare function isDomain(expr: Expression | BoxedExpression | BoxedDomain | DomainExpression): expr is BoxedDomain | DomainExpression;
49
- export declare function isSubdomainOf(lhs: DomainExpression<BoxedExpression>, rhs: DomainExpression<BoxedExpression>): boolean;
50
49
  /** Return the ancestor domain that is shared by both `a` and `b` */
51
50
  export declare function sharedAncestorDomain(a: BoxedDomain, b: BoxedDomain): BoxedDomain;
@@ -1,2 +1,2 @@
1
- /* 0.7.0 */
1
+ /* 0.9.0 */
2
2
  export declare function makeFunctionDefinition(engine: IComputeEngine, def: FunctionDefinition): BoxedFunctionDefinition;