@cortex-js/compute-engine 0.25.1 → 0.26.2

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 (153) hide show
  1. package/README.md +5 -8
  2. package/dist/compute-engine.esm.js +26338 -22472
  3. package/dist/compute-engine.js +26348 -22470
  4. package/dist/compute-engine.min.esm.js +89 -23
  5. package/dist/compute-engine.min.js +89 -23
  6. package/dist/math-json.esm.js +22 -139
  7. package/dist/math-json.js +22 -139
  8. package/dist/math-json.min.esm.js +22 -139
  9. package/dist/math-json.min.js +2 -2
  10. package/dist/types/common/ansi-codes.d.ts +30 -4
  11. package/dist/types/common/buffer.d.ts +9 -0
  12. package/dist/types/common/grapheme-splitter.d.ts +1 -1
  13. package/dist/types/common/one-of.d.ts +9 -0
  14. package/dist/types/common/signals.d.ts +1 -1
  15. package/dist/types/common/styled-text.d.ts +28 -0
  16. package/dist/types/common/suggest.d.ts +1 -0
  17. package/dist/types/common/syntax-highlighter.d.ts +40 -0
  18. package/dist/types/common/terminal.d.ts +19 -0
  19. package/dist/types/common/type/parse.d.ts +4 -0
  20. package/dist/types/common/type/primitive.d.ts +8 -0
  21. package/dist/types/common/type/serialize.d.ts +2 -0
  22. package/dist/types/common/type/subtype.d.ts +6 -0
  23. package/dist/types/common/type/types.d.ts +249 -0
  24. package/dist/types/common/type/utils.d.ts +39 -0
  25. package/dist/types/common/utils.d.ts +2 -1
  26. package/dist/types/compute-engine/assume.d.ts +13 -13
  27. package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +71 -47
  28. package/dist/types/compute-engine/boxed-expression/apply.d.ts +5 -0
  29. package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +15 -0
  30. package/dist/types/compute-engine/boxed-expression/arithmetic-divide.d.ts +12 -0
  31. package/dist/types/compute-engine/boxed-expression/arithmetic-multiply.d.ts +16 -0
  32. package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +20 -0
  33. package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +11 -0
  34. package/dist/types/compute-engine/boxed-expression/box.d.ts +13 -71
  35. package/dist/types/compute-engine/boxed-expression/boxed-function-definition.d.ts +31 -13
  36. package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +66 -45
  37. package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +42 -37
  38. package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +2 -2
  39. package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +13 -9
  40. package/dist/types/compute-engine/boxed-expression/boxed-symbol-definition.d.ts +34 -66
  41. package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +63 -41
  42. package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +44 -27
  43. package/dist/types/compute-engine/boxed-expression/cache.d.ts +6 -0
  44. package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
  45. package/dist/types/compute-engine/boxed-expression/compare.d.ts +13 -0
  46. package/dist/types/compute-engine/boxed-expression/expand.d.ts +20 -0
  47. package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
  48. package/dist/types/compute-engine/boxed-expression/factor.d.ts +7 -6
  49. package/dist/types/compute-engine/boxed-expression/flatten.d.ts +25 -0
  50. package/dist/types/compute-engine/boxed-expression/hold.d.ts +9 -0
  51. package/dist/types/compute-engine/boxed-expression/match.d.ts +2 -4
  52. package/dist/types/compute-engine/{symbolic → boxed-expression}/negate.d.ts +4 -4
  53. package/dist/types/compute-engine/boxed-expression/numerics.d.ts +5 -39
  54. package/dist/types/compute-engine/boxed-expression/order.d.ts +26 -14
  55. package/dist/types/compute-engine/{symbolic → boxed-expression}/polynomials.d.ts +11 -15
  56. package/dist/types/compute-engine/{symbolic → boxed-expression}/product.d.ts +18 -24
  57. package/dist/types/compute-engine/boxed-expression/public.d.ts +911 -634
  58. package/dist/types/compute-engine/boxed-expression/rules.d.ts +129 -0
  59. package/dist/types/compute-engine/boxed-expression/serialize.d.ts +2 -2
  60. package/dist/types/compute-engine/boxed-expression/sgn.d.ts +6 -0
  61. package/dist/types/compute-engine/boxed-expression/simplify.d.ts +6 -0
  62. package/dist/types/compute-engine/{solve.d.ts → boxed-expression/solve.d.ts} +5 -5
  63. package/dist/types/compute-engine/{symbolic → boxed-expression}/tensor-fields.d.ts +3 -3
  64. package/dist/types/compute-engine/boxed-expression/terms.d.ts +10 -0
  65. package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +10 -0
  66. package/dist/types/compute-engine/boxed-expression/utils.d.ts +22 -16
  67. package/dist/types/compute-engine/boxed-expression/validate.d.ts +10 -7
  68. package/dist/types/compute-engine/collection-utils.d.ts +24 -2
  69. package/dist/types/compute-engine/compile.d.ts +3 -3
  70. package/dist/types/compute-engine/compute-engine.d.ts +132 -165
  71. package/dist/types/compute-engine/cost-function.d.ts +11 -1
  72. package/dist/types/compute-engine/function-utils.d.ts +5 -5
  73. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
  74. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
  75. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
  76. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
  77. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
  78. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
  79. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
  80. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
  81. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
  82. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
  83. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
  84. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
  85. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
  86. package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
  87. package/dist/types/compute-engine/latex-syntax/parse-identifier.d.ts +2 -2
  88. package/dist/types/compute-engine/latex-syntax/parse.d.ts +26 -31
  89. package/dist/types/compute-engine/latex-syntax/public.d.ts +24 -18
  90. package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +2 -2
  91. package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
  92. package/dist/types/compute-engine/latex-syntax/serializer.d.ts +5 -8
  93. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  94. package/dist/types/compute-engine/library/arithmetic.d.ts +4 -2
  95. package/dist/types/compute-engine/library/calculus.d.ts +1 -1
  96. package/dist/types/compute-engine/library/collections.d.ts +24 -1
  97. package/dist/types/compute-engine/library/complex.d.ts +1 -1
  98. package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
  99. package/dist/types/compute-engine/library/core.d.ts +1 -3
  100. package/dist/types/compute-engine/library/invisible-operator.d.ts +4 -0
  101. package/dist/types/compute-engine/library/library.d.ts +2 -4
  102. package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
  103. package/dist/types/compute-engine/library/logic.d.ts +5 -1
  104. package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
  105. package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
  106. package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
  107. package/dist/types/compute-engine/library/sets.d.ts +1 -1
  108. package/dist/types/compute-engine/library/statistics.d.ts +1 -1
  109. package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
  110. package/dist/types/compute-engine/library/utils.d.ts +46 -40
  111. package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +59 -0
  112. package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +77 -0
  113. package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +58 -0
  114. package/dist/types/compute-engine/numeric-value/public.d.ts +110 -0
  115. package/dist/types/compute-engine/numerics/bigint.d.ts +2 -0
  116. package/dist/types/compute-engine/numerics/bignum.d.ts +12 -0
  117. package/dist/types/compute-engine/numerics/expression.d.ts +4 -0
  118. package/dist/types/compute-engine/numerics/interval.d.ts +12 -0
  119. package/dist/types/compute-engine/numerics/monte-carlo.d.ts +19 -0
  120. package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +4 -14
  121. package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +6 -9
  122. package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
  123. package/dist/types/compute-engine/numerics/numeric.d.ts +9 -59
  124. package/dist/types/compute-engine/numerics/primes.d.ts +3 -3
  125. package/dist/types/compute-engine/numerics/rationals.d.ts +29 -13
  126. package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
  127. package/dist/types/compute-engine/numerics/special-functions.d.ts +28 -0
  128. package/dist/types/compute-engine/numerics/strings.d.ts +2 -0
  129. package/dist/types/compute-engine/public.d.ts +8 -4
  130. package/dist/types/compute-engine/symbolic/derivative.d.ts +2 -2
  131. package/dist/types/compute-engine/symbolic/distribute.d.ts +5 -0
  132. package/dist/types/compute-engine/{simplify-rules.d.ts → symbolic/simplify-rules.d.ts} +1 -1
  133. package/dist/types/compute-engine/{symbolic → tensor}/tensors.d.ts +3 -3
  134. package/dist/types/compute-engine.d.ts +4 -2
  135. package/dist/types/math-json/identifiers.d.ts +11 -0
  136. package/dist/types/math-json/{math-json-format.d.ts → types.d.ts} +4 -9
  137. package/dist/types/math-json/utils.d.ts +15 -23
  138. package/dist/types/math-json.d.ts +3 -3
  139. package/package.json +3 -3
  140. package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +0 -48
  141. package/dist/types/compute-engine/boxed-expression/boxed-domain.d.ts +0 -40
  142. package/dist/types/compute-engine/boxed-expression/coefficient-field.d.ts +0 -56
  143. package/dist/types/compute-engine/domain-utils.d.ts +0 -19
  144. package/dist/types/compute-engine/library/arithmetic-add.d.ts +0 -21
  145. package/dist/types/compute-engine/library/arithmetic-divide.d.ts +0 -16
  146. package/dist/types/compute-engine/library/arithmetic-multiply.d.ts +0 -16
  147. package/dist/types/compute-engine/library/arithmetic-power.d.ts +0 -11
  148. package/dist/types/compute-engine/library/domains.d.ts +0 -16
  149. package/dist/types/compute-engine/numerics/terms.d.ts +0 -17
  150. package/dist/types/compute-engine/rules.d.ts +0 -20
  151. package/dist/types/compute-engine/symbolic/expand.d.ts +0 -23
  152. package/dist/types/compute-engine/symbolic/flatten.d.ts +0 -9
  153. package/dist/types/compute-engine/symbolic/utils.d.ts +0 -22
@@ -1,19 +1,20 @@
1
- /* 0.25.1 */
1
+ /* 0.26.2 */
2
2
  import { Decimal } from 'decimal.js';
3
- import { BoxedExpression, BoxedDomain, IComputeEngine, Metadata, NOptions, PatternMatchOptions, SimplifyOptions, BoxedSubstitution, EvaluateOptions, SemiBoxedExpression } from '../public';
3
+ import type { BoxedExpression, IComputeEngine, Metadata, PatternMatchOptions, BoxedSubstitution, EvaluateOptions, BoxedRuleSet, ReplaceOptions, Rule, Substitution, CanonicalOptions, SimplifyOptions, Sign } from '../public';
4
+ import type { Expression, MathJsonNumber } from '../../math-json';
5
+ import { SmallInteger } from '../numerics/numeric';
4
6
  import { Rational } from '../numerics/rationals';
7
+ import { ExactNumericValueData, NumericValue, NumericValueData } from '../numeric-value/public';
5
8
  import { _BoxedExpression } from './abstract-boxed-expression';
6
- import { Expression } from '../../math-json';
9
+ import { Type } from '../../common/type/types';
7
10
  /**
8
11
  * BoxedNumber
9
12
  *
10
13
  * @noInheritDoc
11
14
  */
12
15
  export declare class BoxedNumber extends _BoxedExpression {
13
- protected readonly _value: number | Decimal | Complex | Rational;
14
- private _domain;
16
+ protected readonly _value: SmallInteger | NumericValue;
15
17
  private _hash;
16
- protected _isCanonical: boolean;
17
18
  /**
18
19
  * By the time the constructor is called, the `value` should have been
19
20
  * screened for cases where it's a well-known value (0, NaN, +Infinity,
@@ -26,33 +27,43 @@ export declare class BoxedNumber extends _BoxedExpression {
26
27
  * We may store as a machine number if a Decimal is passed that is in machine
27
28
  * range
28
29
  */
29
- constructor(ce: IComputeEngine, value: number | Decimal | Complex | Rational, options?: {
30
+ constructor(ce: IComputeEngine, value: SmallInteger | NumericValueData | ExactNumericValueData | NumericValue, options?: {
30
31
  metadata?: Metadata;
31
32
  canonical?: boolean;
32
33
  });
33
34
  get hash(): number;
34
35
  get json(): Expression;
35
- get head(): string;
36
+ get operator(): string;
36
37
  get isPure(): boolean;
37
- get isExact(): boolean;
38
38
  get isCanonical(): boolean;
39
39
  set isCanonical(val: boolean);
40
40
  get complexity(): number;
41
- get numericValue(): number | Decimal | Complex | Rational;
42
- get domain(): BoxedDomain;
43
- get sgn(): -1 | 0 | 1 | undefined | null;
44
- isSame(rhs: BoxedExpression): boolean;
45
- isEqual(rhs: BoxedExpression): boolean;
46
- match(pattern: Decimal | Complex | [num: number, denom: number] | SemiBoxedExpression | BoxedExpression, options?: PatternMatchOptions): BoxedSubstitution | null;
47
- /** Compare this with another BoxedNumber.
48
- * `rhs` must be a BoxedNumber. Use `isEqualWithTolerance(rhs.N())`
49
- * if necessary.
50
- */
51
- isEqualWithTolerance(rhs: BoxedExpression, tolerance: number): boolean;
52
- isLess(rhs: BoxedExpression): boolean | undefined;
53
- isLessEqual(rhs: BoxedExpression): boolean | undefined;
54
- isGreater(rhs: BoxedExpression): boolean | undefined;
55
- isGreaterEqual(rhs: BoxedExpression): boolean | undefined;
41
+ get numericValue(): number | NumericValue;
42
+ get isNumberLiteral(): boolean;
43
+ get re(): number;
44
+ get im(): number;
45
+ get bignumRe(): Decimal | undefined;
46
+ get bignumIm(): Decimal | undefined;
47
+ neg(): BoxedExpression;
48
+ inv(): BoxedExpression;
49
+ abs(): BoxedExpression;
50
+ add(rhs: number | BoxedExpression): BoxedExpression;
51
+ mul(rhs: NumericValue | number | BoxedExpression): BoxedExpression;
52
+ div(rhs: number | BoxedExpression): BoxedExpression;
53
+ pow(exp: number | BoxedExpression): BoxedExpression;
54
+ root(exp: number | BoxedExpression): BoxedExpression;
55
+ sqrt(): BoxedExpression;
56
+ ln(semiBase?: number | BoxedExpression): BoxedExpression;
57
+ get type(): Type;
58
+ get sgn(): Sign | undefined;
59
+ get numerator(): BoxedExpression;
60
+ get denominator(): BoxedExpression;
61
+ get numeratorDenominator(): [BoxedExpression, BoxedExpression];
62
+ subs(sub: Substitution, options?: {
63
+ canonical?: CanonicalOptions;
64
+ }): BoxedExpression;
65
+ replace(rules: BoxedRuleSet | Rule | Rule[], options?: Partial<ReplaceOptions>): BoxedExpression | null;
66
+ match(pattern: BoxedExpression, options?: PatternMatchOptions): BoxedSubstitution | null;
56
67
  /** x > 0, same as `isGreater(0)` */
57
68
  get isPositive(): boolean | undefined;
58
69
  /** x >= 0, same as `isGreaterEqual(0)` */
@@ -61,28 +72,22 @@ export declare class BoxedNumber extends _BoxedExpression {
61
72
  get isNegative(): boolean | undefined;
62
73
  /** x <= 0, same as `isLessEqual(0)` */
63
74
  get isNonPositive(): boolean | undefined;
64
- get isZero(): boolean;
65
- get isNotZero(): boolean;
66
- get isOne(): boolean;
67
- get isNegativeOne(): boolean;
68
75
  get isOdd(): boolean | undefined;
69
76
  get isEven(): boolean | undefined;
70
- get isPrime(): boolean | undefined;
71
- get isComposite(): boolean | undefined;
72
77
  get isInfinity(): boolean;
73
78
  get isNaN(): boolean;
74
79
  get isFinite(): boolean;
75
80
  get isNumber(): true;
76
81
  get isInteger(): boolean;
77
82
  get isRational(): boolean;
78
- get isAlgebraic(): boolean | undefined;
79
83
  get isReal(): boolean;
80
- get isExtendedReal(): boolean;
81
- get isComplex(): boolean | undefined;
82
- get isImaginary(): boolean | undefined;
83
- get isExtendedComplex(): boolean | undefined;
84
+ is(rhs: any): boolean;
84
85
  get canonical(): BoxedExpression;
85
- simplify(_options?: SimplifyOptions): BoxedExpression;
86
+ get isStructural(): boolean;
87
+ get structural(): BoxedExpression;
88
+ toNumericValue(): [NumericValue, BoxedExpression];
89
+ simplify(options?: Partial<SimplifyOptions>): BoxedExpression;
86
90
  evaluate(options?: EvaluateOptions): BoxedExpression;
87
- N(_options?: NOptions): BoxedExpression;
91
+ N(): BoxedExpression;
88
92
  }
93
+ export declare function canonicalNumber(ce: IComputeEngine, value: number | bigint | string | Decimal | Complex | Rational | NumericValue | MathJsonNumber): number | NumericValue;
@@ -1,4 +1,4 @@
1
- /* 0.25.1 */
2
- import { BoxedExpression } from './public';
1
+ /* 0.26.2 */
2
+ import type { BoxedExpression } from './public';
3
3
  export declare function isWildcard(expr: BoxedExpression): expr is BoxedSymbol;
4
4
  export declare function wildcardName(expr: BoxedExpression): string | null;
@@ -1,7 +1,6 @@
1
- /* 0.25.1 */
2
- import { BoxedExpression, BoxedDomain, IComputeEngine, Metadata, PatternMatchOptions, BoxedSubstitution, SemiBoxedExpression } from './public';
3
- import Complex from 'complex.js';
4
- import Decimal from 'decimal.js';
1
+ /* 0.26.2 */
2
+ import { _BoxedExpression } from './abstract-boxed-expression';
3
+ import { Type } from '../../common/type/types';
5
4
  /**
6
5
  * BoxedString
7
6
  *
@@ -12,14 +11,19 @@ export declare class BoxedString extends _BoxedExpression {
12
11
  constructor(ce: IComputeEngine, expr: string, metadata?: Metadata);
13
12
  get json(): string;
14
13
  get hash(): number;
15
- get head(): string;
14
+ get operator(): string;
16
15
  get isPure(): boolean;
17
16
  get isCanonical(): boolean;
18
17
  set isCanonical(_va: boolean);
19
- get domain(): BoxedDomain;
18
+ get type(): Type;
20
19
  get complexity(): number;
21
20
  get string(): string;
22
- isEqual(rhs: BoxedExpression): boolean;
23
- isSame(rhs: BoxedExpression): boolean;
24
- match(pattern: Decimal | Complex | [num: number, denom: number] | SemiBoxedExpression | BoxedExpression, _options?: PatternMatchOptions): BoxedSubstitution | null;
21
+ match(pattern: BoxedExpression, _options?: PatternMatchOptions): BoxedSubstitution | null;
22
+ get isCollection(): boolean;
23
+ contains(rhs: BoxedExpression): boolean;
24
+ get size(): number;
25
+ each(start?: number, count?: number): Iterator<BoxedExpression, undefined>;
26
+ at(index: number): BoxedExpression | undefined;
27
+ get(key: string | BoxedExpression): BoxedExpression | undefined;
28
+ indexOf(expr: BoxedExpression): number;
25
29
  }
@@ -1,21 +1,28 @@
1
- /* 0.25.1 */
1
+ /* 0.26.2 */
2
+ import { Type } from '../../common/type/types';
2
3
  /**
3
4
  * ### THEORY OF OPERATIONS
4
5
  *
5
- * - The value or domain of a constant cannot be changed.
6
+ * - The value or type of a constant cannot be changed.
7
+ *
6
8
  * - If set explicitly, the value is the source of truth: it overrides any
7
- * flags.
8
- * - Once the domain has been set, it can only be changed from a numeric domain
9
- * to another numeric domain (some expressions may have been validated with
10
- * assumptions that the domain was numeric).
11
- * - When the domain is changed, the value is preserved if it is compatible
12
- * with the new domain, otherwise it is reset to no value. Flags are adjusted
13
- * to match the domain (discarded if not a numeric domain).
14
- * - When the value is changed, the domain is unaffected. If the value is not
15
- * compatible with the domain (setting a def with a numeric domain to a value
16
- * of `True` for example), the value is discarded.
9
+ * flags.
10
+ *
11
+ * - Once the type has been set, it can only be changed from a numeric type
12
+ * to another numeric type (some expressions may have been validated with
13
+ * assumptions that the just a number).
14
+ *
15
+ * - When the type is changed, the value is preserved if it is compatible
16
+ * with the new type, otherwise it is reset to no value. Flags are adjusted
17
+ * to match the type (discarded if not a numeric type).
18
+ *
19
+ * - When the value is changed, the type is unaffected. If the value is not
20
+ * compatible with the type (setting a def with a numeric type to a value
21
+ * of `True` for example), the value is discarded.
22
+ *
17
23
  * - When getting a flag, if a value is available, it is the source of truth.
18
- * Otherwise, the stored flags are (the stored flags are also set when the domain is changed)
24
+ * Otherwise, the stored flags are (the stored flags are also set when the
25
+ * type is changed)
19
26
  *
20
27
  */
21
28
  export declare class _BoxedSymbolDefinition implements BoxedSymbolDefinition {
@@ -27,69 +34,30 @@ export declare class _BoxedSymbolDefinition implements BoxedSymbolDefinition {
27
34
  readonly scope: RuntimeScope | undefined;
28
35
  private _defValue?;
29
36
  private _value;
30
- private _domain;
31
- inferredDomain: boolean;
32
- private _flags;
37
+ private _type;
38
+ inferredType: boolean;
33
39
  constant: boolean;
34
- holdUntil: 'never' | 'simplify' | 'evaluate' | 'N';
35
- prototype?: BoxedFunctionDefinition;
36
- self?: unknown;
40
+ holdUntil: 'never' | 'evaluate' | 'N';
41
+ private _flags;
42
+ eq?: (a: BoxedExpression) => boolean | undefined;
43
+ neq?: (a: BoxedExpression) => boolean | undefined;
44
+ cmp?: (a: BoxedExpression) => '=' | '>' | '<' | undefined;
45
+ collection?: Partial<CollectionHandlers>;
37
46
  constructor(ce: IComputeEngine, name: string, def: SymbolDefinition);
47
+ get isFunction(): boolean;
48
+ get isConstant(): boolean;
38
49
  /** The symbol was previously inferred, but now it has a declaration. Update the def accordingly (we can't replace defs, as other expressions may be referencing them) */
39
50
  update(def: SymbolDefinition): void;
40
51
  reset(): void;
41
52
  get value(): BoxedExpression | undefined;
42
53
  set value(val: SemiBoxedExpression | number | undefined);
43
- get domain(): BoxedDomain | undefined;
44
- set domain(domain: BoxedDomain | DomainExpression | undefined);
45
- get number(): boolean | undefined;
46
- set number(val: boolean | undefined);
47
- get integer(): boolean | undefined;
48
- set integer(val: boolean | undefined);
49
- get rational(): boolean | undefined;
50
- set rational(val: boolean | undefined);
51
- get algebraic(): boolean | undefined;
52
- set algebraic(val: boolean | undefined);
53
- get real(): boolean | undefined;
54
- set real(val: boolean | undefined);
55
- get extendedReal(): boolean | undefined;
56
- set extendedReal(val: boolean | undefined);
57
- get complex(): boolean | undefined;
58
- set complex(val: boolean | undefined);
59
- get extendedComplex(): boolean | undefined;
60
- set extendedComplex(val: boolean | undefined);
61
- get imaginary(): boolean | undefined;
62
- set imaginary(val: boolean | undefined);
63
- get positive(): boolean | undefined;
64
- set positive(val: boolean | undefined);
65
- get nonPositive(): boolean | undefined;
66
- set nonPositive(val: boolean | undefined);
67
- get negative(): boolean | undefined;
68
- set negative(val: boolean | undefined);
69
- get nonNegative(): boolean | undefined;
70
- set nonNegative(val: boolean | undefined);
71
- get zero(): boolean | undefined;
72
- set zero(val: boolean | undefined);
73
- get notZero(): boolean | undefined;
74
- set notZero(val: boolean | undefined);
75
- get one(): boolean | undefined;
76
- set one(val: boolean | undefined);
77
- get negativeOne(): boolean | undefined;
78
- set negativeOne(val: boolean | undefined);
79
- get infinity(): boolean | undefined;
80
- set infinity(val: boolean | undefined);
81
- get finite(): boolean | undefined;
82
- set finite(val: boolean | undefined);
83
- get NaN(): boolean | undefined;
84
- set NaN(val: boolean | undefined);
54
+ get type(): Type;
55
+ set type(type: Type);
56
+ get sgn(): Sign | undefined;
57
+ set sgn(val: Sign | undefined);
85
58
  get even(): boolean | undefined;
86
59
  set even(val: boolean | undefined);
87
60
  get odd(): boolean | undefined;
88
61
  set odd(val: boolean | undefined);
89
- get prime(): boolean | undefined;
90
- set prime(val: boolean | undefined);
91
- get composite(): boolean | undefined;
92
- set composite(val: boolean | undefined);
93
62
  updateFlags(flags: Partial<NumericFlags>): void;
94
63
  }
95
- export declare function domainToFlags(dom: BoxedDomain | undefined | null): Partial<NumericFlags>;
@@ -1,8 +1,11 @@
1
- /* 0.25.1 */
2
- import { Decimal } from 'decimal.js';
3
- import { Expression } from '../../math-json/math-json-format';
1
+ /* 0.26.2 */
2
+ import type { Expression } from '../../math-json/types';
3
+ import type { Type, TypeString } from '../../common/type/types';
4
+ import type { BoxedExpression, BoxedRuleSet, BoxedSymbolDefinition, IComputeEngine, EvaluateOptions, ReplaceOptions, SimplifyOptions, Substitution, Metadata, PatternMatchOptions, RuntimeScope, BoxedFunctionDefinition, BoxedBaseDefinition, BoxedSubstitution, Rule, CanonicalOptions, BoxedRule, Sign } from './public';
5
+ import { NumericValue } from '../numeric-value/public';
4
6
  import { _BoxedExpression } from './abstract-boxed-expression';
5
- import { BoxedExpression, BoxedRuleSet, BoxedSymbolDefinition, IComputeEngine, EvaluateOptions, NOptions, ReplaceOptions, SimplifyOptions, Substitution, Metadata, PatternMatchOptions, BoxedDomain, RuntimeScope, BoxedFunctionDefinition, BoxedBaseDefinition, DomainExpression, BoxedSubstitution, Rule, SemiBoxedExpression, CanonicalOptions } from './public';
7
+ import { BigNum } from '../numerics/bignum';
8
+ import type { OneOf } from '../../common/one-of';
6
9
  /**
7
10
  * BoxedSymbol
8
11
  *
@@ -24,16 +27,23 @@ export declare class BoxedSymbol extends _BoxedExpression {
24
27
  protected _id: string;
25
28
  private _hash;
26
29
  private _def;
30
+ private _isStructural;
27
31
  constructor(ce: IComputeEngine, name: string, options?: {
28
32
  metadata?: Metadata;
29
33
  canonical?: CanonicalOptions;
30
- def?: BoxedSymbolDefinition | BoxedFunctionDefinition;
34
+ structural?: boolean;
35
+ def?: OneOf<[BoxedSymbolDefinition, BoxedFunctionDefinition]>;
31
36
  });
32
37
  get json(): Expression;
33
38
  get hash(): number;
34
39
  get isPure(): boolean;
40
+ get isStructural(): boolean;
41
+ get structural(): BoxedExpression;
35
42
  get scope(): RuntimeScope | null;
36
43
  get isConstant(): boolean;
44
+ private _lookupDef;
45
+ /** This method returns the definition associated with the value of this symbol, or associated with the symbol if it has no value. This is the definition to use with most operations on the symbol. Indeed, "x[2]" is accessing the second element of **the value** of "x".*/
46
+ private _getDef;
37
47
  /**
38
48
  * Associate a definition with this symbol
39
49
  */
@@ -41,49 +51,53 @@ export declare class BoxedSymbol extends _BoxedExpression {
41
51
  reset(): void;
42
52
  get isCanonical(): boolean;
43
53
  set isCanonical(val: boolean);
54
+ is(rhs: any): boolean;
44
55
  get canonical(): BoxedExpression;
56
+ toNumericValue(): [NumericValue, BoxedExpression];
57
+ neg(): BoxedExpression;
58
+ inv(): BoxedExpression;
59
+ abs(): BoxedExpression;
60
+ add(rhs: number | BoxedExpression): BoxedExpression;
61
+ mul(rhs: NumericValue | number | BoxedExpression): BoxedExpression;
62
+ div(rhs: number | BoxedExpression): BoxedExpression;
63
+ pow(exp: number | BoxedExpression): BoxedExpression;
64
+ root(n: number | BoxedExpression): BoxedExpression;
65
+ sqrt(): BoxedExpression;
66
+ ln(semiBase?: number | BoxedExpression): BoxedExpression;
45
67
  solve(vars: Iterable<string> | string | BoxedExpression | Iterable<BoxedExpression>): null | ReadonlyArray<BoxedExpression>;
46
68
  get complexity(): number;
47
- get head(): string;
69
+ get operator(): string;
48
70
  get symbol(): string;
49
71
  get baseDefinition(): BoxedBaseDefinition | undefined;
50
72
  get symbolDefinition(): BoxedSymbolDefinition | undefined;
51
73
  get functionDefinition(): BoxedFunctionDefinition | undefined;
52
74
  /**
53
75
  * Subsequence inferences will narrow the domain of the symbol.
54
- * f(:integer), g(:real)
55
- * g(x) => x:real
56
- * f(x) => x:integer narrowed from integer to real
76
+ * f: integer -> real, g: real -> real
77
+ * g(x) => x: real
78
+ * f(x) => x: integer narrowed from integer to real
57
79
  */
58
- infer(domain: BoxedDomain): boolean;
59
- get value(): number | boolean | string | Object | undefined;
60
- set value(value: boolean | string | Decimal | Complex | {
61
- re: number;
62
- im: number;
63
- } | {
64
- num: number;
65
- denom: number;
66
- } | number[] | BoxedExpression | number | undefined);
67
- get domain(): BoxedDomain | undefined;
68
- set domain(inDomain: DomainExpression | BoxedDomain);
69
- get sgn(): -1 | 0 | 1 | undefined | null;
80
+ infer(t: Type): boolean;
81
+ get value(): number | boolean | string | object | undefined;
82
+ set value(value: boolean | string | Decimal | number[] | OneOf<[
83
+ {
84
+ re: number;
85
+ im: number;
86
+ },
87
+ {
88
+ num: number;
89
+ denom: number;
90
+ },
91
+ BoxedExpression
92
+ ]> | number | object | undefined);
93
+ get type(): Type;
94
+ set type(t: Type | TypeString);
95
+ get sgn(): Sign | undefined;
70
96
  has(x: string | string[]): boolean;
71
- isSame(rhs: BoxedExpression): boolean;
72
- match(pattern: Decimal | Complex | [num: number, denom: number] | SemiBoxedExpression | BoxedExpression, options?: PatternMatchOptions): BoxedSubstitution | null;
73
- isEqual(rhs: BoxedExpression): boolean;
74
- isLess(rhs: BoxedExpression): boolean | undefined;
75
- isLessEqual(rhs: BoxedExpression): boolean | undefined;
76
- isGreater(rhs: BoxedExpression): boolean | undefined;
77
- isGreaterEqual(rhs: BoxedExpression): boolean | undefined;
97
+ match(pattern: BoxedExpression, options?: PatternMatchOptions): BoxedSubstitution | null;
78
98
  get isFunction(): boolean | undefined;
79
- get isZero(): boolean | undefined;
80
- get isNotZero(): boolean | undefined;
81
- get isOne(): boolean | undefined;
82
- get isNegativeOne(): boolean | undefined;
83
99
  get isOdd(): boolean | undefined;
84
100
  get isEven(): boolean | undefined;
85
- get isPrime(): boolean | undefined;
86
- get isComposite(): boolean | undefined;
87
101
  get isInfinity(): boolean | undefined;
88
102
  get isNaN(): boolean | undefined;
89
103
  get isPositive(): boolean | undefined;
@@ -93,17 +107,25 @@ export declare class BoxedSymbol extends _BoxedExpression {
93
107
  get isNumber(): boolean | undefined;
94
108
  get isInteger(): boolean | undefined;
95
109
  get isRational(): boolean | undefined;
96
- get isAlgebraic(): boolean | undefined;
97
110
  get isReal(): boolean | undefined;
98
- get isExtendedReal(): boolean | undefined;
99
- get isComplex(): boolean | undefined;
100
- get isImaginary(): boolean | undefined;
101
- simplify(options?: SimplifyOptions): BoxedExpression;
111
+ get re(): number;
112
+ get im(): number;
113
+ get bignumRe(): BigNum | undefined;
114
+ get bignumIm(): BigNum | undefined;
115
+ simplify(options?: Partial<SimplifyOptions>): BoxedExpression;
102
116
  evaluate(options?: EvaluateOptions): BoxedExpression;
103
- N(options?: NOptions): BoxedExpression;
104
- replace(rules: BoxedRuleSet | Rule | Rule[], options?: ReplaceOptions): BoxedExpression | null;
117
+ N(): BoxedExpression;
118
+ replace(rules: Rule | (Rule | BoxedRule)[] | BoxedRuleSet, options?: Partial<ReplaceOptions>): BoxedExpression | null;
105
119
  subs(sub: Substitution, options?: {
106
120
  canonical?: CanonicalOptions;
107
121
  }): BoxedExpression;
122
+ get isCollection(): boolean;
123
+ contains(rhs: BoxedExpression): boolean;
124
+ get size(): number;
125
+ each(start?: number, count?: number): Iterator<BoxedExpression, undefined>;
126
+ at(index: number): BoxedExpression | undefined;
127
+ get(index: BoxedExpression | string): BoxedExpression | undefined;
128
+ indexOf(expr: BoxedExpression): number;
129
+ subsetOf(rhs: BoxedExpression, strict: boolean): boolean;
108
130
  }
109
131
  export declare function makeCanonicalSymbol(ce: IComputeEngine, name: string): BoxedExpression;
@@ -1,37 +1,40 @@
1
- /* 0.25.1 */
2
- import Decimal from 'decimal.js';
3
- import { Expression } from '../../math-json/math-json-format';
4
- import { BoxedExpression, IComputeEngine, EvaluateOptions, NOptions, SimplifyOptions, Metadata, BoxedDomain, BoxedSubstitution, PatternMatchOptions, BoxedBaseDefinition, BoxedFunctionDefinition, SemiBoxedExpression } from '../public';
5
- import { DataTypeMap, TensorDataType } from '../symbolic/tensor-fields';
6
- import { AbstractTensor, TensorData } from '../symbolic/tensors';
1
+ /* 0.26.2 */
2
+ import type { BoxedExpression, IComputeEngine, EvaluateOptions, SimplifyOptions, Metadata, BoxedSubstitution, PatternMatchOptions, BoxedBaseDefinition, BoxedFunctionDefinition } from '../public';
3
+ import { TensorDataType } from './tensor-fields';
4
+ import { NumericValue } from '../numeric-value/public';
7
5
  import { _BoxedExpression } from './abstract-boxed-expression';
6
+ import { AbstractTensor, TensorData } from '../tensor/tensors';
7
+ import { Type } from '../../common/type/types';
8
8
  /**
9
- * A boxed tensor represents an expression that can be
10
- * represented by a tensor. This could be a vector, matrix
11
- * or multi-dimensional array.
9
+ * A boxed tensor represents an expression that can be represented by a tensor.
10
+ * This could be a vector, matrix or multi-dimensional array.
12
11
  *
13
- * The object can be created either from a tensor or from
14
- * an expression that can be represented as a tensor.
12
+ * The object can be created either from a tensor or from an expression that
13
+ * can be represented as a tensor.
15
14
  *
16
- * The counterpart (expression if input is tensor, or tensor
15
+ * The structural counterpart (expression if input is tensor, or tensor
17
16
  * if input is expression) is created lazily.
18
17
  *
19
18
  * @noInheritDoc
20
19
  *
21
20
  */
22
21
  export declare class BoxedTensor extends _BoxedExpression {
22
+ readonly options?: {
23
+ metadata?: Metadata;
24
+ canonical?: boolean;
25
+ };
23
26
  private _tensor;
24
- private readonly _head?;
27
+ private readonly _operator?;
25
28
  private readonly _ops?;
26
29
  private _expression;
27
30
  constructor(ce: IComputeEngine, input: {
28
- head?: string;
31
+ op?: string;
29
32
  ops: ReadonlyArray<BoxedExpression>;
30
33
  } | AbstractTensor<'expression'>, options?: {
31
34
  metadata?: Metadata;
32
35
  canonical?: boolean;
33
36
  });
34
- get expression(): BoxedExpression;
37
+ get structural(): BoxedExpression;
35
38
  /** Create the tensor on demand */
36
39
  get tensor(): AbstractTensor<'expression'>;
37
40
  get baseDefinition(): BoxedBaseDefinition | undefined;
@@ -45,28 +48,42 @@ export declare class BoxedTensor extends _BoxedExpression {
45
48
  get isPure(): boolean;
46
49
  get isValid(): boolean;
47
50
  get complexity(): number;
48
- get head(): string;
51
+ get operator(): string;
49
52
  get nops(): number;
50
53
  get ops(): ReadonlyArray<BoxedExpression>;
51
54
  get op1(): BoxedExpression;
52
55
  get op2(): BoxedExpression;
53
56
  get op3(): BoxedExpression;
57
+ neg(): BoxedExpression;
58
+ inv(): BoxedExpression;
59
+ abs(): BoxedExpression;
60
+ add(rhs: number | BoxedExpression): BoxedExpression;
61
+ sub(rhs: BoxedExpression): BoxedExpression;
62
+ mul(rhs: NumericValue | number | BoxedExpression): BoxedExpression;
63
+ div(rhs: number | BoxedExpression): BoxedExpression;
64
+ pow(exp: number | BoxedExpression): BoxedExpression;
65
+ root(exp: number | BoxedExpression): BoxedExpression;
66
+ sqrt(): BoxedExpression;
54
67
  get shape(): number[];
55
68
  get rank(): number;
56
- get domain(): BoxedDomain | undefined;
69
+ get type(): Type;
57
70
  get json(): Expression;
58
- /** Structural equality */
59
- isSame(rhs: BoxedExpression): boolean;
60
71
  /** Mathematical equality */
61
- isEqual(rhs: BoxedExpression): boolean;
62
- match(pattern: Decimal | Complex | [num: number, denom: number] | SemiBoxedExpression | BoxedExpression, options?: PatternMatchOptions): BoxedSubstitution | null;
72
+ isEqual(rhs: number | BoxedExpression): boolean | undefined;
73
+ get isCollection(): boolean;
74
+ contains(rhs: BoxedExpression): boolean;
75
+ get size(): number;
76
+ each(start?: number, count?: number): Iterator<BoxedExpression, undefined>;
77
+ at(_index: number): BoxedExpression | undefined;
78
+ indexOf(_expr: BoxedExpression): number;
79
+ match(pattern: BoxedExpression, options?: PatternMatchOptions): BoxedSubstitution | null;
63
80
  evaluate(options?: EvaluateOptions): BoxedExpression;
64
- simplify(options?: SimplifyOptions): BoxedExpression;
65
- N(options?: NOptions): BoxedExpression;
81
+ simplify(options?: Partial<SimplifyOptions>): BoxedExpression;
82
+ N(): BoxedExpression;
66
83
  }
67
84
  export declare function isBoxedTensor(val: unknown): val is BoxedTensor;
68
- export declare function expressionTensorInfo(head: string, rows: ReadonlyArray<BoxedExpression>): {
85
+ export declare function expressionTensorInfo(operator: string, rows: ReadonlyArray<BoxedExpression>): {
69
86
  shape: number[];
70
- dtype: keyof DataTypeMap;
71
- };
72
- export declare function expressionAsTensor<T extends TensorDataType>(head: string, rows: ReadonlyArray<BoxedExpression>): TensorData<T> | undefined;
87
+ dtype: TensorDataType | undefined;
88
+ } | undefined;
89
+ export declare function expressionAsTensor<T extends TensorDataType = 'expression'>(operator: string, rows: ReadonlyArray<BoxedExpression>): TensorData<T> | undefined;
@@ -0,0 +1,6 @@
1
+ /* 0.26.2 */
2
+ value: T | null;
3
+ generation: number | undefined;
4
+ };
5
+ /** The cache v will get updated if necessary */
6
+ export declare function cachedValue<T>(v: CachedValue<T>, generation: number | undefined, fn: () => T): T;
@@ -1,2 +1,2 @@
1
- /* 0.25.1 */
1
+ /* 0.26.2 */
2
2
  export declare function canonicalForm(expr: BoxedExpression, forms: CanonicalOptions): BoxedExpression;
@@ -0,0 +1,13 @@
1
+ /* 0.26.2 */
2
+ /**
3
+ * Structural equality of boxed expressions.
4
+ */
5
+ export declare function same(a: BoxedExpression, b: BoxedExpression): boolean;
6
+ /**
7
+ * Mathematically equality of two boxed expressions.
8
+ *
9
+ * In general, it is impossible to always prove equality
10
+ * ([Richardson's theorem](https://en.wikipedia.org/wiki/Richardson%27s_theorem)) but this works often...
11
+ */
12
+ export declare function eq(a: BoxedExpression, b: number | BoxedExpression): boolean | undefined;
13
+ export declare function cmp(a: BoxedExpression, b: number | BoxedExpression): '<' | '=' | '>' | '>=' | '<=' | undefined;
@@ -0,0 +1,20 @@
1
+ /* 0.26.2 */
2
+ export declare function expandProducts(ce: IComputeEngine, ops: ReadonlyArray<BoxedExpression>): BoxedExpression | null;
3
+ export declare function choose(n: number, k: number): number;
4
+ /** Attempt to transform the expression (h, ops) into a sum */
5
+ export declare function expandFunction(ce: IComputeEngine, h: string, ops: ReadonlyArray<BoxedExpression>): BoxedExpression | null;
6
+ /** Apply the distributive law if the expression is a product of sums.
7
+ * For example, a(b + c) = ab + ac
8
+ * Expand the expression if it is a power of a sum.
9
+ * Expand the terms of the expression if it is a sum or negate.
10
+ * If the expression is a fraction, expand the numerator.
11
+ * If the exression is a relational operator, expand the operands.
12
+ * Return null if the expression cannot be expanded.
13
+ */
14
+ export declare function expand(expr: BoxedExpression | undefined): BoxedExpression | null;
15
+ /**
16
+ * Recursive expand of all terms in the expression.
17
+ *
18
+ * `expand()` only expands the top level of the expression.
19
+ */
20
+ export declare function expandAll(expr: BoxedExpression): BoxedExpression | null;
@@ -1,4 +1,4 @@
1
- /* 0.25.1 */
1
+ /* 0.26.2 */
2
2
  export declare class ExpressionMap<U> implements ExpressionMapInterface<U> {
3
3
  readonly _items: Map<BoxedExpression, U>;
4
4
  constructor(source?: ExpressionMapInterface<U> | readonly (readonly [BoxedExpression, U])[]);
@@ -1,11 +1,12 @@
1
- /* 0.25.1 */
2
- import Decimal from 'decimal.js';
3
- import { Rational } from '../numerics/rationals';
4
- import { BoxedExpression } from './public';
5
- export declare function applyCoefficient(value: number | Decimal | Complex | Rational | null, coef: Rational): number | Decimal | Complex | Rational | null;
1
+ /* 0.26.2 */
2
+ import { NumericValue } from '../numeric-value/public';
6
3
  /** Combine rational expressions into a single fraction */
7
4
  export declare function together(op: BoxedExpression): BoxedExpression;
8
5
  /**
9
- * Return a list of expressions that multiply together to form `expr`.
6
+ * Return an expression factored as a product.
7
+ * - 2x + 4 -> 2(x + 2)
8
+ * - 2x < 4 -> x < 2
9
+ * - (2x) * (2y) -> 4xy
10
10
  */
11
11
  export declare function factor(expr: BoxedExpression): BoxedExpression;
12
+ export declare function getPiTerm(expr: BoxedExpression): [k: NumericValue, t: NumericValue];