@cortex-js/compute-engine 0.58.0 → 0.59.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 (270) hide show
  1. package/README.md +4 -0
  2. package/dist/compile.esm.js +1721 -483
  3. package/dist/compile.min.esm.js +122 -74
  4. package/dist/compile.min.umd.cjs +122 -74
  5. package/dist/compile.umd.cjs +1721 -483
  6. package/dist/compute-engine.esm.js +25209 -22883
  7. package/dist/compute-engine.min.esm.js +135 -87
  8. package/dist/compute-engine.min.umd.cjs +135 -87
  9. package/dist/compute-engine.umd.cjs +24952 -22626
  10. package/dist/core.esm.js +25208 -22882
  11. package/dist/core.min.esm.js +134 -86
  12. package/dist/core.min.umd.cjs +134 -86
  13. package/dist/core.umd.cjs +24951 -22625
  14. package/dist/identities.esm.js +1921 -0
  15. package/dist/identities.min.esm.js +2 -0
  16. package/dist/identities.min.umd.cjs +4 -0
  17. package/dist/identities.umd.cjs +1946 -0
  18. package/dist/interval.esm.js +653 -330
  19. package/dist/interval.min.esm.js +8 -8
  20. package/dist/interval.min.umd.cjs +8 -8
  21. package/dist/interval.umd.cjs +653 -330
  22. package/dist/latex-syntax.esm.js +758 -512
  23. package/dist/latex-syntax.min.esm.js +7 -7
  24. package/dist/latex-syntax.min.umd.cjs +7 -7
  25. package/dist/latex-syntax.umd.cjs +758 -512
  26. package/dist/math-json.esm.js +8 -12
  27. package/dist/math-json.min.esm.js +2 -2
  28. package/dist/math-json.min.umd.cjs +2 -2
  29. package/dist/math-json.umd.cjs +8 -12
  30. package/dist/numerics.esm.js +1349 -228
  31. package/dist/numerics.min.esm.js +16 -5
  32. package/dist/numerics.min.umd.cjs +16 -5
  33. package/dist/numerics.umd.cjs +1349 -228
  34. package/dist/types/big-decimal/big-decimal.d.ts +1 -1
  35. package/dist/types/big-decimal/index.d.ts +1 -1
  36. package/dist/types/big-decimal/transcendentals.d.ts +1 -1
  37. package/dist/types/big-decimal/utils.d.ts +1 -1
  38. package/dist/types/common/ansi-codes.d.ts +1 -1
  39. package/dist/types/common/configuration-change.d.ts +1 -1
  40. package/dist/types/common/fuzzy-string-match.d.ts +1 -1
  41. package/dist/types/common/grapheme-splitter.d.ts +1 -1
  42. package/dist/types/common/interruptible.d.ts +1 -1
  43. package/dist/types/common/one-of.d.ts +1 -1
  44. package/dist/types/common/signals.d.ts +1 -1
  45. package/dist/types/common/type/ast-nodes.d.ts +1 -1
  46. package/dist/types/common/type/boxed-type.d.ts +1 -1
  47. package/dist/types/common/type/lexer.d.ts +1 -1
  48. package/dist/types/common/type/parse.d.ts +1 -208
  49. package/dist/types/common/type/parser.d.ts +124 -2
  50. package/dist/types/common/type/primitive.d.ts +5 -1
  51. package/dist/types/common/type/reduce.d.ts +1 -1
  52. package/dist/types/common/type/serialize.d.ts +1 -1
  53. package/dist/types/common/type/subtype.d.ts +18 -1
  54. package/dist/types/common/type/type-builder.d.ts +1 -1
  55. package/dist/types/common/type/types.d.ts +1 -1
  56. package/dist/types/common/type/utils.d.ts +1 -1
  57. package/dist/types/common/utils.d.ts +1 -1
  58. package/dist/types/compile.d.ts +1 -1
  59. package/dist/types/compute-engine/assume.d.ts +13 -6
  60. package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +1 -1
  61. package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
  62. package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
  63. package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
  64. package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
  65. package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
  66. package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
  67. package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
  68. package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +1 -1
  69. package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
  70. package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
  71. package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
  72. package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
  73. package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +3 -3
  74. package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +1 -1
  75. package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +1 -1
  76. package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
  77. package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
  78. package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
  79. package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
  80. package/dist/types/compute-engine/boxed-expression/constants.d.ts +1 -1
  81. package/dist/types/compute-engine/boxed-expression/constraint-subject.d.ts +140 -0
  82. package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
  83. package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
  84. package/dist/types/compute-engine/boxed-expression/factor.d.ts +1 -1
  85. package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
  86. package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
  87. package/dist/types/compute-engine/boxed-expression/inequality-bounds.d.ts +14 -4
  88. package/dist/types/compute-engine/boxed-expression/init-lazy-refs.d.ts +1 -1
  89. package/dist/types/compute-engine/boxed-expression/invisible-operator.d.ts +1 -1
  90. package/dist/types/compute-engine/boxed-expression/match.d.ts +1 -1
  91. package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
  92. package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
  93. package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
  94. package/dist/types/compute-engine/boxed-expression/pattern-utils.d.ts +1 -1
  95. package/dist/types/compute-engine/boxed-expression/polynomial-degree.d.ts +1 -1
  96. package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
  97. package/dist/types/compute-engine/boxed-expression/predicates.d.ts +1 -1
  98. package/dist/types/compute-engine/boxed-expression/rule-index.d.ts +112 -0
  99. package/dist/types/compute-engine/boxed-expression/rules.d.ts +2 -1
  100. package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
  101. package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
  102. package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
  103. package/dist/types/compute-engine/boxed-expression/solve-linear-system.d.ts +1 -1
  104. package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
  105. package/dist/types/compute-engine/boxed-expression/stochastic-equal.d.ts +1 -1
  106. package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -1
  107. package/dist/types/compute-engine/boxed-expression/type-guards.d.ts +1 -1
  108. package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
  109. package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
  110. package/dist/types/compute-engine/collection-utils.d.ts +1 -1
  111. package/dist/types/compute-engine/compilation/base-compiler.d.ts +1 -1
  112. package/dist/types/compute-engine/compilation/compile-expression.d.ts +1 -1
  113. package/dist/types/compute-engine/compilation/constant-folding.d.ts +16 -1
  114. package/dist/types/compute-engine/compilation/glsl-target.d.ts +1 -1
  115. package/dist/types/compute-engine/compilation/gpu-target.d.ts +15 -5
  116. package/dist/types/compute-engine/compilation/interval-javascript-target.d.ts +4 -4
  117. package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
  118. package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
  119. package/dist/types/compute-engine/compilation/types.d.ts +1 -1
  120. package/dist/types/compute-engine/compilation/wgsl-target.d.ts +1 -1
  121. package/dist/types/compute-engine/cost-function.d.ts +1 -1
  122. package/dist/types/compute-engine/engine-assumptions.d.ts +1 -1
  123. package/dist/types/compute-engine/engine-cache.d.ts +1 -1
  124. package/dist/types/compute-engine/engine-common-symbols.d.ts +1 -1
  125. package/dist/types/compute-engine/engine-compilation-targets.d.ts +1 -1
  126. package/dist/types/compute-engine/engine-configuration-lifecycle.d.ts +1 -1
  127. package/dist/types/compute-engine/engine-declarations.d.ts +1 -1
  128. package/dist/types/compute-engine/engine-expression-entrypoints.d.ts +1 -1
  129. package/dist/types/compute-engine/engine-extension-contracts.d.ts +1 -1
  130. package/dist/types/compute-engine/engine-library-bootstrap.d.ts +1 -1
  131. package/dist/types/compute-engine/engine-numeric-configuration.d.ts +1 -1
  132. package/dist/types/compute-engine/engine-runtime-state.d.ts +1 -1
  133. package/dist/types/compute-engine/engine-scope.d.ts +1 -1
  134. package/dist/types/compute-engine/engine-sequences.d.ts +1 -1
  135. package/dist/types/compute-engine/engine-simplification-rules.d.ts +10 -2
  136. package/dist/types/compute-engine/engine-startup-coordinator.d.ts +1 -1
  137. package/dist/types/compute-engine/engine-type-resolver.d.ts +1 -1
  138. package/dist/types/compute-engine/engine-validation-entrypoints.d.ts +1 -1
  139. package/dist/types/compute-engine/free-functions.d.ts +1 -1
  140. package/dist/types/compute-engine/function-utils.d.ts +1 -1
  141. package/dist/types/compute-engine/fungrim/loader.d.ts +13 -0
  142. package/dist/types/compute-engine/fungrim/types.d.ts +160 -0
  143. package/dist/types/compute-engine/global-types.d.ts +1 -1
  144. package/dist/types/compute-engine/index.d.ts +48 -2
  145. package/dist/types/compute-engine/interval/arithmetic.d.ts +1 -1
  146. package/dist/types/compute-engine/interval/comparison.d.ts +1 -1
  147. package/dist/types/compute-engine/interval/elementary.d.ts +10 -2
  148. package/dist/types/compute-engine/interval/index.d.ts +2 -2
  149. package/dist/types/compute-engine/interval/trigonometric.d.ts +1 -1
  150. package/dist/types/compute-engine/interval/types.d.ts +1 -1
  151. package/dist/types/compute-engine/interval/util.d.ts +1 -1
  152. package/dist/types/compute-engine/latex-syntax/dictionary/default-dictionary.d.ts +1 -1
  153. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
  154. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
  155. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
  156. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-colors.d.ts +1 -1
  157. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
  158. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
  159. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
  160. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
  161. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
  162. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
  163. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
  164. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
  165. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
  166. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
  167. package/dist/types/compute-engine/latex-syntax/dictionary/definitions-units.d.ts +1 -1
  168. package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
  169. package/dist/types/compute-engine/latex-syntax/dictionary/indexed-types.d.ts +4 -1
  170. package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
  171. package/dist/types/compute-engine/latex-syntax/parse-number.d.ts +1 -1
  172. package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
  173. package/dist/types/compute-engine/latex-syntax/parse.d.ts +3 -2
  174. package/dist/types/compute-engine/latex-syntax/serialize-dms.d.ts +1 -1
  175. package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -11
  176. package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
  177. package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
  178. package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
  179. package/dist/types/compute-engine/latex-syntax/types.d.ts +1 -1
  180. package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
  181. package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
  182. package/dist/types/compute-engine/library/calculus.d.ts +1 -1
  183. package/dist/types/compute-engine/library/collections.d.ts +1 -1
  184. package/dist/types/compute-engine/library/colors.d.ts +1 -1
  185. package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
  186. package/dist/types/compute-engine/library/complex.d.ts +13 -1
  187. package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
  188. package/dist/types/compute-engine/library/core.d.ts +1 -1
  189. package/dist/types/compute-engine/library/fractals.d.ts +1 -1
  190. package/dist/types/compute-engine/library/library.d.ts +1 -1
  191. package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
  192. package/dist/types/compute-engine/library/logic-analysis.d.ts +1 -1
  193. package/dist/types/compute-engine/library/logic.d.ts +1 -1
  194. package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
  195. package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
  196. package/dist/types/compute-engine/library/quantity-arithmetic.d.ts +1 -1
  197. package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
  198. package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
  199. package/dist/types/compute-engine/library/sets.d.ts +27 -1
  200. package/dist/types/compute-engine/library/statistics.d.ts +1 -1
  201. package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
  202. package/dist/types/compute-engine/library/type-handlers.d.ts +1 -1
  203. package/dist/types/compute-engine/library/unit-data.d.ts +1 -1
  204. package/dist/types/compute-engine/library/units.d.ts +1 -1
  205. package/dist/types/compute-engine/library/utils.d.ts +1 -1
  206. package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
  207. package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +7 -1
  208. package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
  209. package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
  210. package/dist/types/compute-engine/numerics/bernoulli.d.ts +39 -0
  211. package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
  212. package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
  213. package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
  214. package/dist/types/compute-engine/numerics/linear-algebra.d.ts +1 -1
  215. package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
  216. package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
  217. package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
  218. package/dist/types/compute-engine/numerics/numeric-complex.d.ts +12 -1
  219. package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
  220. package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
  221. package/dist/types/compute-engine/numerics/random.d.ts +1 -1
  222. package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
  223. package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
  224. package/dist/types/compute-engine/numerics/special-functions.d.ts +78 -10
  225. package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
  226. package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
  227. package/dist/types/compute-engine/numerics/types.d.ts +1 -1
  228. package/dist/types/compute-engine/numerics/unit-data.d.ts +1 -1
  229. package/dist/types/compute-engine/oeis.d.ts +1 -1
  230. package/dist/types/compute-engine/sequence.d.ts +1 -1
  231. package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
  232. package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
  233. package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
  234. package/dist/types/compute-engine/symbolic/fu-cost.d.ts +1 -1
  235. package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +1 -1
  236. package/dist/types/compute-engine/symbolic/fu.d.ts +1 -1
  237. package/dist/types/compute-engine/symbolic/logic-utils.d.ts +1 -1
  238. package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +1 -1
  239. package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +1 -1
  240. package/dist/types/compute-engine/symbolic/simplify-factorial.d.ts +1 -1
  241. package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +1 -1
  242. package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +1 -1
  243. package/dist/types/compute-engine/symbolic/simplify-log.d.ts +1 -1
  244. package/dist/types/compute-engine/symbolic/simplify-logic.d.ts +1 -1
  245. package/dist/types/compute-engine/symbolic/simplify-power.d.ts +1 -1
  246. package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
  247. package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
  248. package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
  249. package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +1 -1
  250. package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
  251. package/dist/types/compute-engine/tensor/tensors.d.ts +3 -3
  252. package/dist/types/compute-engine/types-definitions.d.ts +1 -1
  253. package/dist/types/compute-engine/types-engine.d.ts +19 -3
  254. package/dist/types/compute-engine/types-evaluation.d.ts +1 -1
  255. package/dist/types/compute-engine/types-expression.d.ts +17 -14
  256. package/dist/types/compute-engine/types-kernel-evaluation.d.ts +32 -1
  257. package/dist/types/compute-engine/types-kernel-serialization.d.ts +45 -3
  258. package/dist/types/compute-engine/types-serialization.d.ts +1 -1
  259. package/dist/types/compute-engine/types.d.ts +1 -1
  260. package/dist/types/compute-engine.d.ts +1 -1
  261. package/dist/types/core.d.ts +1 -1
  262. package/dist/types/identities.d.ts +3 -0
  263. package/dist/types/interval.d.ts +1 -1
  264. package/dist/types/latex-syntax.d.ts +2 -2
  265. package/dist/types/math-json/symbols.d.ts +1 -1
  266. package/dist/types/math-json/types.d.ts +1 -1
  267. package/dist/types/math-json/utils.d.ts +1 -1
  268. package/dist/types/math-json.d.ts +2 -2
  269. package/dist/types/numerics.d.ts +1 -1
  270. package/package.json +9 -3
@@ -1,4 +1,4 @@
1
- /** Interval 0.58.0 */
1
+ /** Interval 0.59.0 */
2
2
  (function(global,factory){typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'],factory):(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Interval = {}));})(this, (function (exports) { 'use strict';
3
3
  var Interval = (() => {
4
4
  var __defProp = Object.defineProperty;
@@ -236,9 +236,18 @@ var Interval = (() => {
236
236
  return ok({ lo: -xVal.hi, hi: -xVal.lo });
237
237
  }
238
238
  function _mul(a, b) {
239
- const products = [a.lo * b.lo, a.lo * b.hi, a.hi * b.lo, a.hi * b.hi];
239
+ const products = [
240
+ _prod(a.lo, b.lo),
241
+ _prod(a.lo, b.hi),
242
+ _prod(a.hi, b.lo),
243
+ _prod(a.hi, b.hi)
244
+ ];
240
245
  return { lo: Math.min(...products), hi: Math.max(...products) };
241
246
  }
247
+ function _prod(x, y) {
248
+ if (x === 0 || y === 0) return 0;
249
+ return x * y;
250
+ }
242
251
  function mul(a, b) {
243
252
  const unwrapped = unwrapOrPropagate(a, b);
244
253
  if (!Array.isArray(unwrapped)) return unwrapped;
@@ -403,6 +412,7 @@ var Interval = (() => {
403
412
  return sum;
404
413
  }
405
414
  function fpln(x, scale) {
415
+ if (x <= 0n) throw new RangeError("fpln: input must be positive");
406
416
  if (x === scale) return 0n;
407
417
  const xNum = Number(x);
408
418
  const scaleNum = Number(scale);
@@ -1052,9 +1062,11 @@ var Interval = (() => {
1052
1062
  if (Number.isFinite(thisExp) && Number.isFinite(otherExp)) {
1053
1063
  if (other.significand === 0n) return _BigDecimal.NAN;
1054
1064
  if (this.significand === 0n) return fromRaw(0n, 0);
1055
- return this.sub(this.div(other).trunc().mul(other)).toPrecision(
1056
- _BigDecimal.precision
1057
- );
1065
+ const ediff = thisExp - otherExp;
1066
+ const num = ediff >= 0 ? this.significand * pow10(ediff) : this.significand;
1067
+ const den = ediff >= 0 ? other.significand : other.significand * pow10(-ediff);
1068
+ const q = num / den;
1069
+ return this.sub(fromRaw(q, 0).mul(other));
1058
1070
  }
1059
1071
  if (thisExp !== thisExp || otherExp !== otherExp) return _BigDecimal.NAN;
1060
1072
  if (!Number.isFinite(thisExp)) return _BigDecimal.NAN;
@@ -1099,7 +1111,10 @@ var Interval = (() => {
1099
1111
  return this.pow(n.neg()).inv();
1100
1112
  }
1101
1113
  const absSig = this.significand < 0n ? -this.significand : this.significand;
1102
- const thisLog10 = bigintDigits(absSig) + this.exponent;
1114
+ const sigDigits = bigintDigits(absSig);
1115
+ const dropped = sigDigits > 15 ? sigDigits - 15 : 0;
1116
+ const lead = dropped > 0 ? Number(absSig / 10n ** BigInt(dropped)) : Number(absSig);
1117
+ const thisLog10 = Math.log10(lead) + dropped + this.exponent;
1103
1118
  const resultLog10 = Number(expValue) * thisLog10;
1104
1119
  if (resultLog10 > 9e15) {
1105
1120
  return this.significand < 0n && expValue % 2n !== 0n ? _BigDecimal.NEGATIVE_INFINITY : _BigDecimal.POSITIVE_INFINITY;
@@ -1132,7 +1147,19 @@ var Interval = (() => {
1132
1147
  return _BigDecimal.POSITIVE_INFINITY;
1133
1148
  }
1134
1149
  if (this.significand < 0n) return _BigDecimal.NAN;
1135
- return n.mul(this.ln()).exp();
1150
+ const baseSig = this.significand;
1151
+ const decExpBase = this.exponent + bigintDigits(baseSig) - 1;
1152
+ const nSig = n.significand < 0n ? -n.significand : n.significand;
1153
+ const decExpN = n.exponent + bigintDigits(nSig) - 1;
1154
+ const argMag = decExpN + Math.log10(Math.abs(decExpBase) * 2.303 + 3) + 1;
1155
+ const extra = Math.min(20, Math.max(2, Math.ceil(argMag) + 2));
1156
+ const savedPrec = _BigDecimal.precision;
1157
+ _BigDecimal.precision = savedPrec + extra;
1158
+ try {
1159
+ return n.mul(this.ln()).exp().toPrecision(savedPrec);
1160
+ } finally {
1161
+ _BigDecimal.precision = savedPrec;
1162
+ }
1136
1163
  }
1137
1164
  // ---------- Conversion methods ----------
1138
1165
  /** Convert to a JavaScript number. May lose precision for large values. */
@@ -1373,6 +1400,20 @@ var Interval = (() => {
1373
1400
  const sig = negative ? -absFp : absFp;
1374
1401
  return fromRaw(sig, resultExp);
1375
1402
  }
1403
+ function decimalExponent(x) {
1404
+ const sig = x.significand < 0n ? -x.significand : x.significand;
1405
+ return x.exponent + bigintDigits(sig) - 1;
1406
+ }
1407
+ var MAX_SAFE_EXPONENT = BigInt(Number.MAX_SAFE_INTEGER);
1408
+ var _ln10Fp = null;
1409
+ var _ln10Scale = null;
1410
+ function ln10Fixed(scale) {
1411
+ if (_ln10Scale !== scale) {
1412
+ _ln10Fp = fpln(10n * scale, scale);
1413
+ _ln10Scale = scale;
1414
+ }
1415
+ return _ln10Fp;
1416
+ }
1376
1417
  BigDecimal.prototype.sqrt = function() {
1377
1418
  if (this.isNaN()) return BigDecimal.NAN;
1378
1419
  if (this.isZero()) return BigDecimal.ZERO;
@@ -1383,9 +1424,13 @@ var Interval = (() => {
1383
1424
  if (this.significand < 0n) return BigDecimal.NAN;
1384
1425
  const targetPrec = BigDecimal.precision;
1385
1426
  const workingPrec = targetPrec + 10;
1386
- const [fp, scale] = toFixedPoint(this, workingPrec);
1427
+ const e = decimalExponent(this);
1428
+ const k = Math.floor(e / 2);
1429
+ const m = fromRaw(this.significand, this.exponent - 2 * k);
1430
+ const [fp, scale] = toFixedPoint(m, workingPrec);
1387
1431
  const sqrtFp = fpsqrt(fp, scale);
1388
- return fromFixedPoint(sqrtFp, scale, targetPrec);
1432
+ const root = fromFixedPoint(sqrtFp, scale, targetPrec);
1433
+ return fromRaw(root.significand, root.exponent + k);
1389
1434
  };
1390
1435
  BigDecimal.prototype.cbrt = function() {
1391
1436
  if (this.isNaN()) return BigDecimal.NAN;
@@ -1399,10 +1444,13 @@ var Interval = (() => {
1399
1444
  }
1400
1445
  const targetPrec = BigDecimal.precision;
1401
1446
  const workingPrec = targetPrec + 10;
1402
- const [fp, scale] = toFixedPoint(this, workingPrec);
1447
+ const e = decimalExponent(this);
1448
+ const k = Math.floor(e / 3);
1449
+ const m = fromRaw(this.significand, this.exponent - 3 * k);
1450
+ const [fp, scale] = toFixedPoint(m, workingPrec);
1403
1451
  const C = fp * scale * scale;
1404
1452
  let x;
1405
- const numVal = this.toNumber();
1453
+ const numVal = m.toNumber();
1406
1454
  const scaleNum = Number(scale);
1407
1455
  if (Number.isFinite(numVal) && numVal > 0 && Number.isFinite(scaleNum)) {
1408
1456
  const approx = Math.cbrt(numVal);
@@ -1431,7 +1479,8 @@ var Interval = (() => {
1431
1479
  const diffNext = bigintAbs(next * next * next - C);
1432
1480
  if (diffNext < diffX) x = next;
1433
1481
  }
1434
- return fromFixedPoint(x, scale, targetPrec);
1482
+ const root = fromFixedPoint(x, scale, targetPrec);
1483
+ return fromRaw(root.significand, root.exponent + k);
1435
1484
  };
1436
1485
  BigDecimal.sqrt = function(x) {
1437
1486
  return x.sqrt();
@@ -1446,11 +1495,27 @@ var Interval = (() => {
1446
1495
  return BigDecimal.ZERO;
1447
1496
  }
1448
1497
  if (this.isZero()) return BigDecimal.ONE;
1498
+ if (decimalExponent(this) >= 17)
1499
+ return this.significand > 0n ? BigDecimal.POSITIVE_INFINITY : BigDecimal.ZERO;
1449
1500
  const targetPrec = BigDecimal.precision;
1450
- const workingPrec = targetPrec + 15;
1451
- const [fp, scale] = toFixedPoint(this, workingPrec);
1452
- const expFp = fpexp(fp, scale);
1453
- return fromFixedPoint(expFp, scale, targetPrec);
1501
+ const absSig = this.significand < 0n ? -this.significand : this.significand;
1502
+ const magnitude = Math.max(0, this.exponent + bigintDigits(absSig));
1503
+ const workingPrec = targetPrec + 20 + magnitude;
1504
+ const [xFp, scale] = toFixedPoint(this, workingPrec);
1505
+ const l10 = ln10Fixed(scale);
1506
+ let k = xFp / l10;
1507
+ let rFp = xFp - k * l10;
1508
+ if (rFp < 0n) {
1509
+ k -= 1n;
1510
+ rFp += l10;
1511
+ }
1512
+ if (k > MAX_SAFE_EXPONENT || k < -MAX_SAFE_EXPONENT)
1513
+ return k > 0n ? BigDecimal.POSITIVE_INFINITY : BigDecimal.ZERO;
1514
+ const expR = fromFixedPoint(fpexp(rFp, scale), scale, targetPrec);
1515
+ const newExp = expR.exponent + Number(k);
1516
+ if (!Number.isSafeInteger(newExp))
1517
+ return k > 0n ? BigDecimal.POSITIVE_INFINITY : BigDecimal.ZERO;
1518
+ return fromRaw(expR.significand, newExp);
1454
1519
  };
1455
1520
  BigDecimal.prototype.ln = function() {
1456
1521
  if (this.isNaN()) return BigDecimal.NAN;
@@ -1462,10 +1527,16 @@ var Interval = (() => {
1462
1527
  if (this.significand < 0n) return BigDecimal.NAN;
1463
1528
  if (this.eq(1)) return BigDecimal.ZERO;
1464
1529
  const targetPrec = BigDecimal.precision;
1465
- const workingPrec = targetPrec + 15;
1466
- const [fp, scale] = toFixedPoint(this, workingPrec);
1467
- const lnFp = fpln(fp, scale);
1468
- return fromFixedPoint(lnFp, scale, targetPrec);
1530
+ const sig = this.significand;
1531
+ const digits = bigintDigits(sig);
1532
+ const e = this.exponent + digits - 1;
1533
+ const m = fromRaw(sig, -(digits - 1));
1534
+ const eDigits = Math.abs(e).toString().length;
1535
+ const workingPrec = targetPrec + 20 + eDigits;
1536
+ const [mFp, scale] = toFixedPoint(m, workingPrec);
1537
+ const l10 = ln10Fixed(scale);
1538
+ const resultFp = fpln(mFp, scale) + BigInt(e) * l10;
1539
+ return fromFixedPoint(resultFp, scale, targetPrec);
1469
1540
  };
1470
1541
  BigDecimal.prototype.log = function(base) {
1471
1542
  const b = base instanceof BigDecimal ? base : new BigDecimal(base);
@@ -1485,7 +1556,10 @@ var Interval = (() => {
1485
1556
  if (!this.isFinite()) return BigDecimal.NAN;
1486
1557
  if (this.isZero()) return BigDecimal.ZERO;
1487
1558
  const targetPrec = BigDecimal.precision;
1488
- const workingPrec = targetPrec + 15;
1559
+ const e = decimalExponent(this);
1560
+ if (e < 0 && -2 * e >= targetPrec + 4) return this.toPrecision(targetPrec);
1561
+ const workingPrec = targetPrec + 15 + (e < 0 ? -e : 0);
1562
+ if (e > PI_DIGITS.length - workingPrec - 30) return BigDecimal.NAN;
1489
1563
  const [fp, scale] = toFixedPoint(this, workingPrec);
1490
1564
  const [sinFp] = fpsincos(fp, scale);
1491
1565
  return fromFixedPoint(sinFp, scale, targetPrec);
@@ -1496,6 +1570,8 @@ var Interval = (() => {
1496
1570
  if (this.isZero()) return BigDecimal.ONE;
1497
1571
  const targetPrec = BigDecimal.precision;
1498
1572
  const workingPrec = targetPrec + 15;
1573
+ const e = decimalExponent(this);
1574
+ if (e > PI_DIGITS.length - workingPrec - 30) return BigDecimal.NAN;
1499
1575
  const [fp, scale] = toFixedPoint(this, workingPrec);
1500
1576
  const [, cosFp] = fpsincos(fp, scale);
1501
1577
  return fromFixedPoint(cosFp, scale, targetPrec);
@@ -1505,7 +1581,10 @@ var Interval = (() => {
1505
1581
  if (!this.isFinite()) return BigDecimal.NAN;
1506
1582
  if (this.isZero()) return BigDecimal.ZERO;
1507
1583
  const targetPrec = BigDecimal.precision;
1508
- const workingPrec = targetPrec + 15;
1584
+ const e = decimalExponent(this);
1585
+ if (e < 0 && -2 * e >= targetPrec + 4) return this.toPrecision(targetPrec);
1586
+ const workingPrec = targetPrec + 15 + (e < 0 ? -e : 0);
1587
+ if (e > PI_DIGITS.length - workingPrec - 30) return BigDecimal.NAN;
1509
1588
  const [fp, scale] = toFixedPoint(this, workingPrec);
1510
1589
  const [sinFp, cosFp] = fpsincos(fp, scale);
1511
1590
  if (cosFp === 0n) {
@@ -1523,7 +1602,9 @@ var Interval = (() => {
1523
1602
  return piHalf.neg();
1524
1603
  }
1525
1604
  const targetPrec = BigDecimal.precision;
1526
- const workingPrec = targetPrec + 15;
1605
+ const e = decimalExponent(this);
1606
+ if (e < 0 && -2 * e >= targetPrec + 4) return this.toPrecision(targetPrec);
1607
+ const workingPrec = targetPrec + 15 + (e < 0 ? -e : 0);
1527
1608
  const [fp, scale] = toFixedPoint(this, workingPrec);
1528
1609
  const atanFp = fpatan(fp, scale);
1529
1610
  return fromFixedPoint(atanFp, scale, targetPrec);
@@ -1540,7 +1621,9 @@ var Interval = (() => {
1540
1621
  return this.significand > 0n ? piHalf : piHalf.neg();
1541
1622
  }
1542
1623
  const targetPrec = BigDecimal.precision;
1543
- const workingPrec = targetPrec + 20;
1624
+ const e = decimalExponent(this);
1625
+ if (e < 0 && -2 * e >= targetPrec + 4) return this.toPrecision(targetPrec);
1626
+ const workingPrec = targetPrec + 20 + (e < 0 ? -e : 0);
1544
1627
  const [xFp, scale] = toFixedPoint(this, workingPrec);
1545
1628
  const x2 = fpmul(xFp, xFp, scale);
1546
1629
  const oneMinusX2 = scale - x2;
@@ -1603,6 +1686,23 @@ var Interval = (() => {
1603
1686
  if (this.significand > 0n) return BigDecimal.POSITIVE_INFINITY;
1604
1687
  return BigDecimal.NEGATIVE_INFINITY;
1605
1688
  }
1689
+ const targetPrec = BigDecimal.precision;
1690
+ const e = decimalExponent(this);
1691
+ if (e < 0) {
1692
+ if (-2 * e >= targetPrec + 4) return this.toPrecision(targetPrec);
1693
+ const saved = BigDecimal.precision;
1694
+ BigDecimal.precision = targetPrec - e + 5;
1695
+ try {
1696
+ const expX2 = this.exp();
1697
+ return expX2.sub(expX2.inv()).div(BigDecimal.TWO).toPrecision(targetPrec);
1698
+ } finally {
1699
+ BigDecimal.precision = saved;
1700
+ }
1701
+ }
1702
+ if (Math.abs(this.toNumber()) > 1.16 * (targetPrec + 3)) {
1703
+ const h = this.abs().exp().div(BigDecimal.TWO);
1704
+ return this.significand > 0n ? h : h.neg();
1705
+ }
1606
1706
  const expX = this.exp();
1607
1707
  const expNegX = expX.inv();
1608
1708
  return expX.sub(expNegX).div(BigDecimal.TWO);
@@ -1613,6 +1713,9 @@ var Interval = (() => {
1613
1713
  if (!this.isFinite()) {
1614
1714
  return BigDecimal.POSITIVE_INFINITY;
1615
1715
  }
1716
+ const targetPrec = BigDecimal.precision;
1717
+ if (Math.abs(this.toNumber()) > 1.16 * (targetPrec + 3))
1718
+ return this.abs().exp().div(BigDecimal.TWO);
1616
1719
  const expX = this.exp();
1617
1720
  const expNegX = expX.inv();
1618
1721
  return expX.add(expNegX).div(BigDecimal.TWO);
@@ -1624,6 +1727,21 @@ var Interval = (() => {
1624
1727
  if (this.significand > 0n) return BigDecimal.ONE;
1625
1728
  return BigDecimal.NEGATIVE_ONE;
1626
1729
  }
1730
+ const targetPrec = BigDecimal.precision;
1731
+ const e = decimalExponent(this);
1732
+ if (e < 0) {
1733
+ if (-2 * e >= targetPrec + 4) return this.toPrecision(targetPrec);
1734
+ const saved = BigDecimal.precision;
1735
+ BigDecimal.precision = targetPrec - e + 5;
1736
+ try {
1737
+ const exp2x2 = this.mul(BigDecimal.TWO).exp();
1738
+ return exp2x2.sub(BigDecimal.ONE).div(exp2x2.add(BigDecimal.ONE)).toPrecision(targetPrec);
1739
+ } finally {
1740
+ BigDecimal.precision = saved;
1741
+ }
1742
+ }
1743
+ if (Math.abs(this.toNumber()) > 1.16 * (targetPrec + 3))
1744
+ return this.significand > 0n ? BigDecimal.ONE : BigDecimal.NEGATIVE_ONE;
1627
1745
  const exp2x = this.mul(BigDecimal.TWO).exp();
1628
1746
  return exp2x.sub(BigDecimal.ONE).div(exp2x.add(BigDecimal.ONE));
1629
1747
  };
@@ -1669,9 +1787,14 @@ var Interval = (() => {
1669
1787
  ];
1670
1788
  function gammaln(z) {
1671
1789
  if (z < 0) return NaN;
1790
+ let shift = 0;
1791
+ while (z < 10) {
1792
+ shift += Math.log(z);
1793
+ z += 1;
1794
+ }
1672
1795
  const pi = Math.PI;
1673
1796
  const z3 = z * z * z;
1674
- return z * Math.log(z) - z - 0.5 * Math.log(z) + 0.5 * Math.log(2 * pi) + 1 / (12 * z) - 1 / (360 * z3) + 1 / (1260 * z3 * z * z);
1797
+ return z * Math.log(z) - z - 0.5 * Math.log(z) + 0.5 * Math.log(2 * pi) + 1 / (12 * z) - 1 / (360 * z3) + 1 / (1260 * z3 * z * z) - shift;
1675
1798
  }
1676
1799
  function gamma(z) {
1677
1800
  if (z < 0.5) return Math.PI / (Math.sin(Math.PI * z) * gamma(1 - z));
@@ -1683,20 +1806,43 @@ var Interval = (() => {
1683
1806
  return Math.sqrt(2 * Math.PI) * Math.pow(t, z + 0.5) * Math.exp(-t) * x;
1684
1807
  }
1685
1808
  function erfc(x) {
1686
- return 1 - erf(x);
1809
+ if (Number.isNaN(x)) return NaN;
1810
+ if (!Number.isFinite(x)) return x > 0 ? 0 : 2;
1811
+ if (x < 0) return 2 - erfc(-x);
1812
+ if (x < 2) return 1 - erf(x);
1813
+ const tiny = 1e-300;
1814
+ let f = x === 0 ? tiny : x;
1815
+ let c = f;
1816
+ let d = 0;
1817
+ for (let k = 1; k <= 500; k++) {
1818
+ const a = k / 2;
1819
+ d = x + a * d;
1820
+ if (d === 0) d = tiny;
1821
+ d = 1 / d;
1822
+ c = x + a / c;
1823
+ if (c === 0) c = tiny;
1824
+ const delta = c * d;
1825
+ f *= delta;
1826
+ if (Math.abs(delta - 1) < 1e-17) break;
1827
+ }
1828
+ return Math.exp(-x * x) / (Math.sqrt(Math.PI) * f);
1687
1829
  }
1688
1830
  function erf(x) {
1689
- const a1 = 0.254829592;
1690
- const a2 = -0.284496736;
1691
- const a3 = 1.421413741;
1692
- const a4 = -1.453152027;
1693
- const a5 = 1.061405429;
1694
- const p = 0.3275911;
1831
+ if (Number.isNaN(x)) return NaN;
1832
+ if (x === 0) return 0;
1833
+ if (!Number.isFinite(x)) return x > 0 ? 1 : -1;
1695
1834
  const sign2 = x < 0 ? -1 : 1;
1696
- x = Math.abs(x);
1697
- const t = 1 / (1 + p * x);
1698
- const y = ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t;
1699
- return sign2 * (1 - y * Math.exp(-x * x));
1835
+ const ax = Math.abs(x);
1836
+ if (ax >= 6) return sign2;
1837
+ const x2 = ax * ax;
1838
+ let term = ax;
1839
+ let sum = ax;
1840
+ for (let n = 1; n < 200; n++) {
1841
+ term *= 2 * x2 / (2 * n + 1);
1842
+ sum += term;
1843
+ if (term < sum * 1e-18) break;
1844
+ }
1845
+ return sign2 * (2 / Math.sqrt(Math.PI)) * Math.exp(-x2) * sum;
1700
1846
  }
1701
1847
  var BERNOULLI_2K = [
1702
1848
  1 / 6,
@@ -1823,7 +1969,7 @@ var Interval = (() => {
1823
1969
  const t = x2 * x2;
1824
1970
  return sign2 * x * x2 * polevl(t, SN) / polevl(t, SD);
1825
1971
  }
1826
- if (x < 36) {
1972
+ if (x < 36974) {
1827
1973
  const x2 = x * x;
1828
1974
  const t = Math.PI * x2;
1829
1975
  const u = 1 / (t * t);
@@ -1848,7 +1994,7 @@ var Interval = (() => {
1848
1994
  const t = x2 * x2;
1849
1995
  return sign2 * x * polevl(t, CN) / polevl(t, CD);
1850
1996
  }
1851
- if (x < 36) {
1997
+ if (x < 36974) {
1852
1998
  const x2 = x * x;
1853
1999
  const t = Math.PI * x2;
1854
2000
  const u = 1 / (t * t);
@@ -1890,7 +2036,8 @@ var Interval = (() => {
1890
2036
  }
1891
2037
  function lcm(a, b) {
1892
2038
  if (a === 0 || b === 0) return 0;
1893
- const res = BigInt(a) * BigInt(b) / BigInt(gcd(a, b));
2039
+ let res = BigInt(a) * BigInt(b) / BigInt(gcd(a, b));
2040
+ if (res < 0n) res = -res;
1894
2041
  return Number(res);
1895
2042
  }
1896
2043
  function factorial(n) {
@@ -3256,172 +3403,23 @@ var Interval = (() => {
3256
3403
  "error",
3257
3404
  ...EXPRESSION_TYPES
3258
3405
  ];
3406
+ var NUMERIC_TYPES_SET = new Set(
3407
+ NUMERIC_TYPES
3408
+ );
3409
+ var COLLECTION_TYPES_SET = new Set(
3410
+ COLLECTION_TYPES
3411
+ );
3412
+ var SCALAR_TYPES_SET = new Set(
3413
+ SCALAR_TYPES
3414
+ );
3415
+ var PRIMITIVE_TYPES_SET = new Set(
3416
+ PRIMITIVE_TYPES
3417
+ );
3259
3418
  function isValidType(t) {
3260
- if (typeof t === "string")
3261
- return PRIMITIVE_TYPES.includes(t);
3419
+ if (typeof t === "string") return PRIMITIVE_TYPES_SET.has(t);
3262
3420
  if (typeof t !== "object") return false;
3263
3421
  if (!("kind" in t)) return false;
3264
- return t.kind === "signature" || t.kind === "union" || t.kind === "intersection" || t.kind === "negation" || t.kind === "tuple" || t.kind === "list" || t.kind === "record" || t.kind === "dictionary" || t.kind === "set" || t.kind === "function" || t.kind === "collection" || t.kind === "indexed_collection" || t.kind === "reference";
3265
- }
3266
-
3267
- // src/common/type/serialize.ts
3268
- var NEGATION_PRECEDENCE = 3;
3269
- var UNION_PRECEDENCE = 1;
3270
- var INTERSECTION_PRECEDENCE = 2;
3271
- var LIST_PRECEDENCE = 4;
3272
- var RECORD_PRECEDENCE = 5;
3273
- var DICTIONARY_PRECEDENCE = 6;
3274
- var SET_PRECEDENCE = 7;
3275
- var COLLECTION_PRECEDENCE = 8;
3276
- var TUPLE_PRECEDENCE = 9;
3277
- var SIGNATURE_PRECEDENCE = 10;
3278
- var VALUE_PRECEDENCE = 11;
3279
- function typeToString(type, precedence = 0) {
3280
- if (typeof type === "string") return type;
3281
- let result = "";
3282
- switch (type.kind) {
3283
- case "value":
3284
- if (typeof type.value === "string") result = `"${type.value}"`;
3285
- else if (typeof type.value === "boolean")
3286
- result = type.value ? "true" : "false";
3287
- else result = type.value.toString();
3288
- break;
3289
- case "reference":
3290
- result = type.name;
3291
- break;
3292
- case "negation":
3293
- result = `!${typeToString(type.type, NEGATION_PRECEDENCE)}`;
3294
- break;
3295
- case "union":
3296
- result = type.types.map((t) => typeToString(t, UNION_PRECEDENCE)).join(" | ");
3297
- break;
3298
- case "intersection":
3299
- result = type.types.map((t) => typeToString(t, INTERSECTION_PRECEDENCE)).join(" & ");
3300
- break;
3301
- case "expression":
3302
- result = `expression<${symbolName(type.operator)}>`;
3303
- break;
3304
- case "symbol":
3305
- result = `symbol<${symbolName(type.name)}>`;
3306
- break;
3307
- case "numeric":
3308
- if (Number.isFinite(type.lower) && Number.isFinite(type.upper)) {
3309
- result = `${type.type}<${type.lower}..${type.upper}>`;
3310
- } else if (Number.isFinite(type.lower)) {
3311
- result = `${type.type}<${type.lower}..>`;
3312
- } else if (Number.isFinite(type.upper)) {
3313
- result = `${type.type}<..${type.upper}>`;
3314
- } else {
3315
- result = `${type.type}`;
3316
- }
3317
- break;
3318
- case "list":
3319
- if (type.dimensions && typeof type.elements === "string" && NUMERIC_TYPES.includes(type.elements)) {
3320
- if (type.dimensions === void 0) {
3321
- if (type.elements === "number") result = "tensor";
3322
- } else if (type.dimensions.length === 1) {
3323
- if (type.elements === "number") {
3324
- if (type.dimensions[0] < 0) result = "vector";
3325
- else result = `vector<${type.dimensions[0]}>`;
3326
- } else {
3327
- if (type.dimensions[0] < 0)
3328
- result = `vector<${typeToString(type.elements)}>`;
3329
- else
3330
- result = `vector<${typeToString(type.elements)}^${type.dimensions[0]}>`;
3331
- }
3332
- } else if (type.dimensions.length === 2) {
3333
- const dims = type.dimensions;
3334
- if (type.elements === "number") {
3335
- if (dims[0] < 0 && dims[1] < 0) result = "matrix";
3336
- else result = `matrix<${dims[0]}x${dims[1]}>`;
3337
- } else {
3338
- if (dims[0] < 0 && dims[1] < 0)
3339
- result = `matrix<${typeToString(type.elements)}>`;
3340
- else
3341
- result = `matrix<${typeToString(type.elements)}^(${dims[0]}x${dims[1]})>`;
3342
- }
3343
- }
3344
- }
3345
- if (!result) {
3346
- const dimensions = type.dimensions ? type.dimensions.length === 1 ? `^${type.dimensions[0].toString()}` : `^(${type.dimensions.join("x")})` : "";
3347
- result = `list<${typeToString(type.elements)}${dimensions}>`;
3348
- }
3349
- break;
3350
- case "record":
3351
- const elements = Object.entries(type.elements).map(([key, value]) => `${key}: ${typeToString(value)}`).join(", ");
3352
- result = `record<${elements}>`;
3353
- break;
3354
- case "dictionary":
3355
- result = `dictionary<${typeToString(type.values)}>`;
3356
- break;
3357
- case "set":
3358
- result = `set<${typeToString(type.elements)}>`;
3359
- break;
3360
- case "collection":
3361
- result = `collection<${typeToString(type.elements)}>`;
3362
- break;
3363
- case "indexed_collection":
3364
- result = `indexed_collection<${typeToString(type.elements)}>`;
3365
- break;
3366
- case "tuple":
3367
- if (type.elements.length === 0) result = "tuple";
3368
- else if (type.elements.length === 1) {
3369
- const [el] = type.elements;
3370
- result = `tuple<${namedElement(el)}>`;
3371
- } else {
3372
- result = "tuple<" + type.elements.map((el) => namedElement(el)).join(", ") + ">";
3373
- }
3374
- break;
3375
- case "signature":
3376
- const args = type.args ? type.args.map((arg) => namedElement(arg)).join(", ") : "";
3377
- const optArgs = type.optArgs ? type.optArgs.map((arg) => namedElement(arg) + "?").join(", ") : "";
3378
- const varArg = type.variadicArg ? type.variadicMin === 0 ? `${namedElement(type.variadicArg)}*` : `${namedElement(type.variadicArg)}+` : "";
3379
- const argsList = [args, optArgs, varArg].filter((s) => s).join(", ");
3380
- result = `(${argsList}) -> ${typeToString(type.result)}`;
3381
- break;
3382
- default:
3383
- result = "error";
3384
- }
3385
- if (precedence > 0 && precedence > getPrecedence(type.kind))
3386
- return `(${result})`;
3387
- return result;
3388
- }
3389
- function namedElement(el) {
3390
- if (el.name) return `${el.name}: ${typeToString(el.type)}`;
3391
- return typeToString(el.type);
3392
- }
3393
- function symbolName(name) {
3394
- if (/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) return name;
3395
- return `\`${name}\``;
3396
- }
3397
- function getPrecedence(kind) {
3398
- switch (kind) {
3399
- case "negation":
3400
- return NEGATION_PRECEDENCE;
3401
- case "union":
3402
- return UNION_PRECEDENCE;
3403
- case "intersection":
3404
- return INTERSECTION_PRECEDENCE;
3405
- case "list":
3406
- return LIST_PRECEDENCE;
3407
- case "record":
3408
- return RECORD_PRECEDENCE;
3409
- case "dictionary":
3410
- return DICTIONARY_PRECEDENCE;
3411
- case "set":
3412
- return SET_PRECEDENCE;
3413
- case "collection":
3414
- case "indexed_collection":
3415
- return COLLECTION_PRECEDENCE;
3416
- case "tuple":
3417
- return TUPLE_PRECEDENCE;
3418
- case "signature":
3419
- return SIGNATURE_PRECEDENCE;
3420
- case "value":
3421
- return VALUE_PRECEDENCE;
3422
- default:
3423
- return 0;
3424
- }
3422
+ return t.kind === "signature" || t.kind === "union" || t.kind === "intersection" || t.kind === "negation" || t.kind === "value" || t.kind === "tuple" || t.kind === "list" || t.kind === "record" || t.kind === "dictionary" || t.kind === "set" || t.kind === "symbol" || t.kind === "expression" || t.kind === "numeric" || t.kind === "collection" || t.kind === "indexed_collection" || t.kind === "reference";
3425
3423
  }
3426
3424
 
3427
3425
  // src/common/type/lexer.ts
@@ -4131,19 +4129,13 @@ var Interval = (() => {
4131
4129
  );
4132
4130
  let dimensions;
4133
4131
  if (this.match("<")) {
4134
- dimensions = this.parseDimensionWithX();
4135
- if (!dimensions) {
4136
- dimensions = this.parseDimensions();
4137
- }
4132
+ dimensions = this.parseDimensions();
4138
4133
  if (!dimensions) {
4139
4134
  const type = this.parseUnionType();
4140
4135
  if (type) {
4141
4136
  elementType = type;
4142
4137
  if (this.match("^")) {
4143
- dimensions = this.parseDimensionWithX();
4144
- if (!dimensions) {
4145
- dimensions = this.parseDimensions();
4146
- }
4138
+ dimensions = this.parseCaretDimensions();
4147
4139
  }
4148
4140
  }
4149
4141
  }
@@ -4184,19 +4176,13 @@ var Interval = (() => {
4184
4176
  );
4185
4177
  let dimensions;
4186
4178
  if (this.match("<")) {
4187
- dimensions = this.parseDimensionWithX();
4188
- if (!dimensions) {
4189
- dimensions = this.parseDimensions();
4190
- }
4179
+ dimensions = this.parseDimensions();
4191
4180
  if (!dimensions) {
4192
4181
  const type = this.parseUnionType();
4193
4182
  if (type) {
4194
4183
  elementType = type;
4195
4184
  if (this.match("^")) {
4196
- dimensions = this.parseDimensionWithX();
4197
- if (!dimensions) {
4198
- dimensions = this.parseDimensions();
4199
- }
4185
+ dimensions = this.parseCaretDimensions();
4200
4186
  }
4201
4187
  }
4202
4188
  }
@@ -4227,16 +4213,30 @@ var Interval = (() => {
4227
4213
  return this.createNode("tensor", { elementType });
4228
4214
  }
4229
4215
  parseDimensions() {
4230
- const dimensions = [];
4231
4216
  const firstDim = this.parseDimension();
4232
4217
  if (!firstDim) return void 0;
4233
- dimensions.push(firstDim);
4234
- while (this.match("x")) {
4235
- const dim = this.parseDimension();
4236
- if (!dim) {
4237
- this.error("Expected dimension after x");
4218
+ const dimensions = [firstDim];
4219
+ for (; ; ) {
4220
+ const tok = this.current;
4221
+ if (tok.type === "IDENTIFIER" && /^(x\d+)+$/.test(tok.value)) {
4222
+ this.advance();
4223
+ for (const m of tok.value.match(/x(\d+)/g))
4224
+ dimensions.push(
4225
+ this.createNode("dimension", {
4226
+ size: parseInt(m.slice(1))
4227
+ })
4228
+ );
4229
+ } else if (tok.type === "IDENTIFIER" && tok.value === "x") {
4230
+ const next = this.lexer.peekToken();
4231
+ if (next.type !== "NUMBER_LITERAL" && next.type !== "?")
4232
+ this.error(
4233
+ "Expected a positive integer literal or `?` after x. For example: `2x3` or `2x?`"
4234
+ );
4235
+ this.advance();
4236
+ dimensions.push(this.parseDimension());
4237
+ } else {
4238
+ break;
4238
4239
  }
4239
- dimensions.push(dim);
4240
4240
  }
4241
4241
  return dimensions;
4242
4242
  }
@@ -4250,35 +4250,11 @@ var Interval = (() => {
4250
4250
  }
4251
4251
  return void 0;
4252
4252
  }
4253
- parseDimensionWithX() {
4254
- if (this.current.type === "NUMBER_LITERAL") {
4255
- const dimensions = [];
4256
- const firstDim = parseInt(this.advance().value);
4257
- dimensions.push(
4258
- this.createNode("dimension", { size: firstDim })
4259
- );
4260
- if (this.current.type === "IDENTIFIER" && this.current.value.startsWith("x")) {
4261
- const dimString = this.current.value;
4262
- const matches = dimString.match(/x(\d+)/g);
4263
- if (matches && matches.join("") === dimString) {
4264
- this.advance();
4265
- for (const match of matches) {
4266
- const dimValue = parseInt(match.substring(1));
4267
- dimensions.push(
4268
- this.createNode("dimension", { size: dimValue })
4269
- );
4270
- }
4271
- } else if (dimString === "x" || dimString.startsWith("x")) {
4272
- this.error(
4273
- "Expected a positive integer literal or `?` after x. For example: `2x3` or `2x?`"
4274
- );
4275
- }
4276
- }
4277
- if (dimensions.length > 1) {
4278
- return dimensions;
4279
- }
4280
- }
4281
- return void 0;
4253
+ parseCaretDimensions() {
4254
+ const paren = this.match("(");
4255
+ const dimensions = this.parseDimensions();
4256
+ if (paren) this.expect(")");
4257
+ return dimensions;
4282
4258
  }
4283
4259
  parseTupleType() {
4284
4260
  if (this.current.type === "IDENTIFIER" && this.current.value === "tuple") {
@@ -4463,6 +4439,18 @@ var Interval = (() => {
4463
4439
  this.expect("..");
4464
4440
  const upperBound = this.parseValue();
4465
4441
  this.expect(">");
4442
+ const lower = lowerBound?.value ?? -Infinity;
4443
+ const upper = upperBound?.value ?? Infinity;
4444
+ if (Number.isNaN(lower) || Number.isNaN(upper))
4445
+ this.error(
4446
+ "Invalid numeric type",
4447
+ "Lower and upper bounds must be valid numbers"
4448
+ );
4449
+ if (lower > upper)
4450
+ this.error(
4451
+ `Invalid range: ${lower}..${upper}`,
4452
+ "The lower bound must be less than the upper bound"
4453
+ );
4466
4454
  return this.createNode("numeric", {
4467
4455
  baseType,
4468
4456
  lowerBound,
@@ -4477,7 +4465,7 @@ var Interval = (() => {
4477
4465
  parsePrimitiveType() {
4478
4466
  if (this.current.type === "IDENTIFIER") {
4479
4467
  const name = this.current.value;
4480
- if (PRIMITIVE_TYPES.includes(name)) {
4468
+ if (PRIMITIVE_TYPES_SET.has(name)) {
4481
4469
  this.advance();
4482
4470
  return this.createNode("primitive", { name });
4483
4471
  }
@@ -4811,14 +4799,32 @@ var Interval = (() => {
4811
4799
  }
4812
4800
 
4813
4801
  // src/common/type/parse.ts
4802
+ var TYPE_CACHE = /* @__PURE__ */ new Map();
4803
+ var TYPE_CACHE_MAX_SIZE = 2048;
4804
+ function deepFreeze(obj) {
4805
+ if (obj === null || typeof obj !== "object") return obj;
4806
+ if (Object.isFrozen(obj)) return obj;
4807
+ Object.freeze(obj);
4808
+ for (const value of Object.values(obj)) deepFreeze(value);
4809
+ return obj;
4810
+ }
4814
4811
  function parseType(s, typeResolver) {
4815
4812
  if (s === void 0) return void 0;
4816
4813
  if (isValidType(s)) return s;
4817
4814
  if (typeof s !== "string") return void 0;
4815
+ const cacheable = typeResolver === void 0;
4816
+ if (cacheable) {
4817
+ const cached = TYPE_CACHE.get(s);
4818
+ if (cached !== void 0) return cached;
4819
+ }
4818
4820
  try {
4819
4821
  const parser = new Parser(s, { typeResolver });
4820
4822
  const ast = parser.parseType();
4821
4823
  const type = buildTypeFromAST(ast, typeResolver);
4824
+ if (cacheable) {
4825
+ if (TYPE_CACHE.size >= TYPE_CACHE_MAX_SIZE) TYPE_CACHE.clear();
4826
+ TYPE_CACHE.set(s, deepFreeze(type));
4827
+ }
4822
4828
  return type;
4823
4829
  } catch (error) {
4824
4830
  throw new Error(
@@ -4893,19 +4899,36 @@ var Interval = (() => {
4893
4899
  color: [],
4894
4900
  expression: EXPRESSION_TYPES
4895
4901
  };
4902
+ var PRIMITIVE_SUBTYPES_CLOSURE = (() => {
4903
+ const closure = {};
4904
+ const closeOver = (t) => {
4905
+ if (closure[t]) return closure[t];
4906
+ const result = /* @__PURE__ */ new Set([t]);
4907
+ closure[t] = result;
4908
+ for (const sub2 of PRIMITIVE_SUBTYPES[t]) {
4909
+ if (sub2 === t) continue;
4910
+ for (const s of closeOver(sub2)) result.add(s);
4911
+ }
4912
+ return result;
4913
+ };
4914
+ for (const t of Object.keys(PRIMITIVE_SUBTYPES))
4915
+ closeOver(t);
4916
+ return closure;
4917
+ })();
4896
4918
  function isPrimitiveSubtype(lhs, rhs) {
4897
4919
  if (rhs === "any") return true;
4898
4920
  if (lhs === "never") return true;
4899
4921
  if (lhs === "unknown" || rhs === "unknown") return false;
4900
4922
  if (lhs === rhs) return true;
4901
- return PRIMITIVE_SUBTYPES[rhs].includes(lhs);
4923
+ return PRIMITIVE_SUBTYPES_CLOSURE[rhs].has(lhs);
4902
4924
  }
4903
4925
  function isSubtype(lhs, rhs) {
4904
- if (typeof lhs === "string" && !PRIMITIVE_TYPES.includes(lhs))
4926
+ if (typeof lhs === "string" && !PRIMITIVE_TYPES_SET.has(lhs))
4905
4927
  lhs = parseType(lhs);
4906
- if (typeof rhs === "string" && !PRIMITIVE_TYPES.includes(rhs))
4928
+ if (typeof rhs === "string" && !PRIMITIVE_TYPES_SET.has(rhs))
4907
4929
  rhs = parseType(rhs);
4908
4930
  if (rhs === "any") return true;
4931
+ if (lhs === "never") return true;
4909
4932
  if (rhs === "never") return false;
4910
4933
  if (rhs === "error") return lhs === "error";
4911
4934
  if (rhs === "nothing") return lhs === "nothing";
@@ -4920,7 +4943,7 @@ var Interval = (() => {
4920
4943
  if (typeof lhs.value === "number") {
4921
4944
  if (Number.isInteger(lhs.value))
4922
4945
  return isPrimitiveSubtype("integer", rhs);
4923
- return isPrimitiveSubtype("number", rhs);
4946
+ return isPrimitiveSubtype("real", rhs);
4924
4947
  }
4925
4948
  if (typeof lhs.value === "boolean")
4926
4949
  return isPrimitiveSubtype("boolean", rhs);
@@ -5150,7 +5173,7 @@ var Interval = (() => {
5150
5173
  }
5151
5174
  function isNumeric(type) {
5152
5175
  if (typeof type === "string")
5153
- return NUMERIC_TYPES.includes(type);
5176
+ return NUMERIC_TYPES_SET.has(type);
5154
5177
  if (type.kind === "value") return typeof type.value === "number";
5155
5178
  if (type.kind === "numeric") return true;
5156
5179
  return false;
@@ -5158,7 +5181,7 @@ var Interval = (() => {
5158
5181
  function isScalar(type) {
5159
5182
  if (isNumeric(type)) return true;
5160
5183
  if (typeof type === "string")
5161
- return SCALAR_TYPES.includes(type);
5184
+ return SCALAR_TYPES_SET.has(type);
5162
5185
  if (type.kind === "value")
5163
5186
  return ["string", "boolean", "number"].includes(typeof type.value);
5164
5187
  return false;
@@ -5166,7 +5189,7 @@ var Interval = (() => {
5166
5189
  function isCollection(type) {
5167
5190
  if (isIndexedCollection(type)) return true;
5168
5191
  if (typeof type === "string")
5169
- return COLLECTION_TYPES.includes(type);
5192
+ return COLLECTION_TYPES_SET.has(type);
5170
5193
  return ["collection", "set", "record", "dictionary"].includes(type.kind);
5171
5194
  }
5172
5195
  function isIndexedCollection(type) {
@@ -5205,7 +5228,7 @@ var Interval = (() => {
5205
5228
  if (b === "unknown") return a;
5206
5229
  if (isSubtype(a, b)) return a;
5207
5230
  if (isSubtype(b, a)) return b;
5208
- return superType(a, b);
5231
+ return "never";
5209
5232
  }
5210
5233
  function widen2(a, b) {
5211
5234
  if (a === b) return a;
@@ -5239,16 +5262,17 @@ var Interval = (() => {
5239
5262
  ]);
5240
5263
  function unionTypes(a, b) {
5241
5264
  const members = [];
5265
+ const keys = /* @__PURE__ */ new Set();
5242
5266
  const push = (t) => {
5243
5267
  if (typeof t === "object" && t.kind === "union") {
5244
5268
  for (const m of t.types) push(m);
5245
5269
  return;
5246
5270
  }
5247
5271
  const key = typeof t === "string" ? t : JSON.stringify(t);
5248
- if (!members.some(
5249
- (m) => (typeof m === "string" ? m : JSON.stringify(m)) === key
5250
- ))
5272
+ if (!keys.has(key)) {
5273
+ keys.add(key);
5251
5274
  members.push(t);
5275
+ }
5252
5276
  };
5253
5277
  push(a);
5254
5278
  push(b);
@@ -5265,6 +5289,32 @@ var Interval = (() => {
5265
5289
  if (types.length === 1) return types[0];
5266
5290
  return types.reduce((a, b) => widen2(a, b));
5267
5291
  }
5292
+ var SUPERTYPE_PROBE_ORDER = [
5293
+ "non_finite_number",
5294
+ "finite_integer",
5295
+ "integer",
5296
+ "finite_rational",
5297
+ "rational",
5298
+ "finite_real",
5299
+ "real",
5300
+ "imaginary",
5301
+ "finite_complex",
5302
+ "complex",
5303
+ "finite_number",
5304
+ "number",
5305
+ "list",
5306
+ "record",
5307
+ "dictionary",
5308
+ "set",
5309
+ "tuple",
5310
+ "indexed_collection",
5311
+ "collection",
5312
+ "scalar",
5313
+ "value",
5314
+ "function",
5315
+ "expression"
5316
+ ];
5317
+ var PRIMITIVE_SUPERTYPE_CACHE = /* @__PURE__ */ new Map();
5268
5318
  function superType(a, b) {
5269
5319
  if (a === b) return a;
5270
5320
  if (a === "any" || b === "any") return "any";
@@ -5274,34 +5324,185 @@ var Interval = (() => {
5274
5324
  if (b === "unknown") return a;
5275
5325
  if (a === "nothing") return b;
5276
5326
  if (b === "nothing") return a;
5277
- if (commonSupertype(a, b, "non_finite_number")) return "non_finite_number";
5278
- if (commonSupertype(a, b, "finite_integer")) return "finite_integer";
5279
- if (commonSupertype(a, b, "integer")) return "integer";
5280
- if (commonSupertype(a, b, "finite_rational")) return "finite_rational";
5281
- if (commonSupertype(a, b, "rational")) return "rational";
5282
- if (commonSupertype(a, b, "finite_real")) return "finite_real";
5283
- if (commonSupertype(a, b, "real")) return "real";
5284
- if (commonSupertype(a, b, "imaginary")) return "imaginary";
5285
- if (commonSupertype(a, b, "finite_complex")) return "finite_complex";
5286
- if (commonSupertype(a, b, "complex")) return "complex";
5287
- if (commonSupertype(a, b, "finite_number")) return "finite_number";
5288
- if (commonSupertype(a, b, "number")) return "number";
5289
- if (commonSupertype(a, b, "list")) return "list";
5290
- if (commonSupertype(a, b, "record")) return "record";
5291
- if (commonSupertype(a, b, "dictionary")) return "dictionary";
5292
- if (commonSupertype(a, b, "set")) return "set";
5293
- if (commonSupertype(a, b, "tuple")) return "tuple";
5294
- if (commonSupertype(a, b, "indexed_collection")) return "indexed_collection";
5295
- if (commonSupertype(a, b, "collection")) return "collection";
5296
- if (commonSupertype(a, b, "scalar")) return "scalar";
5297
- if (commonSupertype(a, b, "value")) return "value";
5298
- if (commonSupertype(a, b, "function")) return "function";
5299
- if (commonSupertype(a, b, "expression")) return "expression";
5327
+ if (typeof a === "string" && typeof b === "string") {
5328
+ const key = a < b ? `${a}|${b}` : `${b}|${a}`;
5329
+ let result = PRIMITIVE_SUPERTYPE_CACHE.get(key);
5330
+ if (result === void 0) {
5331
+ result = "any";
5332
+ for (const ancestor of SUPERTYPE_PROBE_ORDER) {
5333
+ const subtypes = PRIMITIVE_SUBTYPES_CLOSURE[ancestor];
5334
+ if (subtypes.has(a) && subtypes.has(b)) {
5335
+ result = ancestor;
5336
+ break;
5337
+ }
5338
+ }
5339
+ PRIMITIVE_SUPERTYPE_CACHE.set(key, result);
5340
+ }
5341
+ return result;
5342
+ }
5343
+ for (const ancestor of SUPERTYPE_PROBE_ORDER)
5344
+ if (isSubtype(a, ancestor) && isSubtype(b, ancestor)) return ancestor;
5300
5345
  return "any";
5301
5346
  }
5302
- function commonSupertype(a, b, ancestor) {
5303
- if (isSubtype(a, ancestor) && isSubtype(b, ancestor)) return true;
5304
- return false;
5347
+
5348
+ // src/common/type/serialize.ts
5349
+ var NEGATION_PRECEDENCE = 3;
5350
+ var UNION_PRECEDENCE = 1;
5351
+ var INTERSECTION_PRECEDENCE = 2;
5352
+ var LIST_PRECEDENCE = 4;
5353
+ var RECORD_PRECEDENCE = 5;
5354
+ var DICTIONARY_PRECEDENCE = 6;
5355
+ var SET_PRECEDENCE = 7;
5356
+ var COLLECTION_PRECEDENCE = 8;
5357
+ var TUPLE_PRECEDENCE = 9;
5358
+ var SIGNATURE_PRECEDENCE = 10;
5359
+ var VALUE_PRECEDENCE = 11;
5360
+ function typeToString(type, precedence = 0) {
5361
+ if (typeof type === "string") return type;
5362
+ let result = "";
5363
+ switch (type.kind) {
5364
+ case "value":
5365
+ if (typeof type.value === "string") result = `"${type.value}"`;
5366
+ else if (typeof type.value === "boolean")
5367
+ result = type.value ? "true" : "false";
5368
+ else result = type.value.toString();
5369
+ break;
5370
+ case "reference":
5371
+ result = type.name;
5372
+ break;
5373
+ case "negation":
5374
+ result = `!${typeToString(type.type, NEGATION_PRECEDENCE)}`;
5375
+ break;
5376
+ case "union":
5377
+ result = type.types.map((t) => typeToString(t, UNION_PRECEDENCE)).join(" | ");
5378
+ break;
5379
+ case "intersection":
5380
+ result = type.types.map((t) => typeToString(t, INTERSECTION_PRECEDENCE)).join(" & ");
5381
+ break;
5382
+ case "expression":
5383
+ result = `expression<${symbolName(type.operator)}>`;
5384
+ break;
5385
+ case "symbol":
5386
+ result = `symbol<${symbolName(type.name)}>`;
5387
+ break;
5388
+ case "numeric":
5389
+ if (Number.isFinite(type.lower) && Number.isFinite(type.upper)) {
5390
+ result = `${type.type}<${type.lower}..${type.upper}>`;
5391
+ } else if (Number.isFinite(type.lower)) {
5392
+ result = `${type.type}<${type.lower}..>`;
5393
+ } else if (Number.isFinite(type.upper)) {
5394
+ result = `${type.type}<..${type.upper}>`;
5395
+ } else {
5396
+ result = `${type.type}`;
5397
+ }
5398
+ break;
5399
+ case "list":
5400
+ if (type.dimensions && typeof type.elements === "string" && NUMERIC_TYPES_SET.has(type.elements)) {
5401
+ if (type.dimensions === void 0) {
5402
+ if (type.elements === "number") result = "tensor";
5403
+ } else if (type.dimensions.length === 1) {
5404
+ if (type.elements === "number") {
5405
+ if (type.dimensions[0] < 0) result = "vector";
5406
+ else result = `vector<${type.dimensions[0]}>`;
5407
+ } else {
5408
+ if (type.dimensions[0] < 0)
5409
+ result = `vector<${typeToString(type.elements)}>`;
5410
+ else
5411
+ result = `vector<${typeToString(type.elements)}^${type.dimensions[0]}>`;
5412
+ }
5413
+ } else if (type.dimensions.length === 2) {
5414
+ const dims = type.dimensions;
5415
+ if (type.elements === "number") {
5416
+ if (dims[0] < 0 && dims[1] < 0) result = "matrix";
5417
+ else result = `matrix<${dims[0]}x${dims[1]}>`;
5418
+ } else {
5419
+ if (dims[0] < 0 && dims[1] < 0)
5420
+ result = `matrix<${typeToString(type.elements)}>`;
5421
+ else
5422
+ result = `matrix<${typeToString(type.elements)}^(${dims[0]}x${dims[1]})>`;
5423
+ }
5424
+ }
5425
+ }
5426
+ if (!result) {
5427
+ const dimensions = type.dimensions ? type.dimensions.length === 1 ? `^${type.dimensions[0].toString()}` : `^(${type.dimensions.join("x")})` : "";
5428
+ result = `list<${typeToString(type.elements)}${dimensions}>`;
5429
+ }
5430
+ break;
5431
+ case "record":
5432
+ const elements = Object.entries(type.elements).map(([key, value]) => `${key}: ${typeToString(value)}`).join(", ");
5433
+ result = `record<${elements}>`;
5434
+ break;
5435
+ case "dictionary":
5436
+ result = `dictionary<${typeToString(type.values)}>`;
5437
+ break;
5438
+ case "set":
5439
+ result = `set<${typeToString(type.elements)}>`;
5440
+ break;
5441
+ case "collection":
5442
+ result = `collection<${typeToString(type.elements)}>`;
5443
+ break;
5444
+ case "indexed_collection":
5445
+ result = `indexed_collection<${typeToString(type.elements)}>`;
5446
+ break;
5447
+ case "tuple":
5448
+ if (type.elements.length === 0) result = "tuple";
5449
+ else if (type.elements.length === 1) {
5450
+ const [el] = type.elements;
5451
+ result = `tuple<${namedElement(el)}>`;
5452
+ } else {
5453
+ result = "tuple<" + type.elements.map((el) => namedElement(el)).join(", ") + ">";
5454
+ }
5455
+ break;
5456
+ case "signature":
5457
+ const args = type.args ? type.args.map((arg) => namedElement(arg)).join(", ") : "";
5458
+ const optArgs = type.optArgs ? type.optArgs.map((arg) => namedElement(arg) + "?").join(", ") : "";
5459
+ const varArg = type.variadicArg ? type.variadicMin === 0 ? `${namedElement(type.variadicArg)}*` : `${namedElement(type.variadicArg)}+` : "";
5460
+ const argsList = [args, optArgs, varArg].filter((s) => s).join(", ");
5461
+ result = `(${argsList}) -> ${typeToString(type.result)}`;
5462
+ break;
5463
+ default:
5464
+ result = "error";
5465
+ }
5466
+ if (precedence > 0 && precedence > getPrecedence(type.kind))
5467
+ return `(${result})`;
5468
+ return result;
5469
+ }
5470
+ function namedElement(el) {
5471
+ if (el.name) return `${el.name}: ${typeToString(el.type)}`;
5472
+ return typeToString(el.type);
5473
+ }
5474
+ function symbolName(name) {
5475
+ if (/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) return name;
5476
+ return `\`${name}\``;
5477
+ }
5478
+ function getPrecedence(kind) {
5479
+ switch (kind) {
5480
+ case "negation":
5481
+ return NEGATION_PRECEDENCE;
5482
+ case "union":
5483
+ return UNION_PRECEDENCE;
5484
+ case "intersection":
5485
+ return INTERSECTION_PRECEDENCE;
5486
+ case "list":
5487
+ return LIST_PRECEDENCE;
5488
+ case "record":
5489
+ return RECORD_PRECEDENCE;
5490
+ case "dictionary":
5491
+ return DICTIONARY_PRECEDENCE;
5492
+ case "set":
5493
+ return SET_PRECEDENCE;
5494
+ case "collection":
5495
+ case "indexed_collection":
5496
+ return COLLECTION_PRECEDENCE;
5497
+ case "tuple":
5498
+ return TUPLE_PRECEDENCE;
5499
+ case "signature":
5500
+ return SIGNATURE_PRECEDENCE;
5501
+ case "value":
5502
+ return VALUE_PRECEDENCE;
5503
+ default:
5504
+ return 0;
5505
+ }
5305
5506
  }
5306
5507
 
5307
5508
  // src/common/type/boxed-type.ts
@@ -5361,6 +5562,12 @@ var Interval = (() => {
5361
5562
  }
5362
5563
  };
5363
5564
 
5565
+ // src/compute-engine/boxed-expression/constraint-subject.ts
5566
+ var EMPTY_FACT_INDEX = Object.freeze({
5567
+ bySubject: /* @__PURE__ */ new Map(),
5568
+ membership: /* @__PURE__ */ new Map()
5569
+ });
5570
+
5364
5571
  // src/compute-engine/boxed-expression/stochastic-equal.ts
5365
5572
  var WELL_KNOWN_POINTS = [
5366
5573
  0,
@@ -5466,12 +5673,14 @@ var Interval = (() => {
5466
5673
  if (expr === null) return null;
5467
5674
  if (isDictionaryObject(expr)) return expr;
5468
5675
  const kv = keyValuePair(expr);
5469
- if (kv) return { [kv[0]]: kv[1] };
5676
+ if (kv)
5677
+ return {
5678
+ dict: { [kv[0]]: expressionToDictionaryValue(kv[1]) ?? "Nothing" }
5679
+ };
5470
5680
  if (operator(expr) === "Dictionary") {
5471
5681
  const dict = {};
5472
- const ops = operands(expr);
5473
- for (let i = 1; i < nops(expr); i++) {
5474
- const kv2 = keyValuePair(ops[i]);
5682
+ for (const op of operands(expr)) {
5683
+ const kv2 = keyValuePair(op);
5475
5684
  if (kv2) {
5476
5685
  dict[kv2[0]] = expressionToDictionaryValue(kv2[1]) ?? "Nothing";
5477
5686
  }
@@ -7405,6 +7614,7 @@ var Interval = (() => {
7405
7614
  }
7406
7615
  }
7407
7616
  if (!variable) return null;
7617
+ if (symbol(variable) === null) return null;
7408
7618
  parser.skipSpace();
7409
7619
  const fn = parser.parseExpression({ minPrec: 740 });
7410
7620
  if (!fn) return null;
@@ -7591,7 +7801,7 @@ var Interval = (() => {
7591
7801
  if (runs.length === 1) body = runs[0];
7592
7802
  else {
7593
7803
  if (runs.every((x) => stringValue(x) !== null))
7594
- body = "'" + runs.map((x) => stringValue(x)).join() + "'";
7804
+ body = "'" + runs.map((x) => stringValue(x)).join("") + "'";
7595
7805
  else body = ["Text", ...runs];
7596
7806
  }
7597
7807
  return style ? ["Annotated", body, dictionaryFromEntries(style)] : body;
@@ -9124,6 +9334,8 @@ var Interval = (() => {
9124
9334
  const h = operator(arg);
9125
9335
  if (prevWasNumber && (h === "Divide" || h === "Rational")) {
9126
9336
  result = latexTemplate(serializer.options.multiply, result, term);
9337
+ } else if (/^\d/.test(term)) {
9338
+ result = latexTemplate(serializer.options.multiply, result, term);
9127
9339
  } else if (!serializer.options.invisibleMultiply) {
9128
9340
  result = joinLatex([result, term]);
9129
9341
  } else {
@@ -10569,7 +10781,8 @@ var Interval = (() => {
10569
10781
  minPrec: MULTIPLICATION_PRECEDENCE,
10570
10782
  condition: (parser2) => trigCommands[parser2.peek] || (until?.condition?.(parser2) ?? false)
10571
10783
  });
10572
- const head = fn === "Arctan" && args?.length === 2 ? "Arctan2" : fn;
10784
+ const isTwoArgArctan = args?.length === 2 && (fn === "Arctan" || Array.isArray(fn) && fn[0] === "InverseFunction" && fn[1] === "Tan");
10785
+ const head = isTwoArgArctan ? "Arctan2" : fn;
10573
10786
  const appliedFn = args === null ? fn : typeof head === "string" ? [head, ...args] : ["Apply", head, ...args];
10574
10787
  return sup === null ? appliedFn : ["Power", appliedFn, sup];
10575
10788
  };
@@ -12856,6 +13069,30 @@ var Interval = (() => {
12856
13069
  var SOME_EMOJI = new RegExp(`(?:${POSSIBLE_EMOJI})+`, "u");
12857
13070
  var EMOJIS = new RegExp(`^(?:${POSSIBLE_EMOJI})+$`, "u");
12858
13071
 
13072
+ // src/compute-engine/latex-syntax/parse.ts
13073
+ var PARSE_TOKEN_EXCLUDED = /* @__PURE__ */ new Set([
13074
+ ...'!"#$%&(),/;:?@[]\\`|~'.split(""),
13075
+ "\\left",
13076
+ "\\bigl",
13077
+ "\\mleft"
13078
+ ]);
13079
+ var TEX_UNIT_TOKENS = [
13080
+ "pt",
13081
+ "em",
13082
+ "mu",
13083
+ "ex",
13084
+ "mm",
13085
+ "cm",
13086
+ "in",
13087
+ "bp",
13088
+ "sp",
13089
+ "dd",
13090
+ "cc",
13091
+ "pc",
13092
+ "nc",
13093
+ "nd"
13094
+ ].map((unit) => [...unit]);
13095
+
12859
13096
  // src/compute-engine/boxed-expression/expand.ts
12860
13097
  var binomials = [
12861
13098
  [1],
@@ -13157,6 +13394,7 @@ var Interval = (() => {
13157
13394
  const period = Math.abs(
13158
13395
  bVal.lo === bVal.hi ? bVal.lo : Math.max(Math.abs(bVal.lo), Math.abs(bVal.hi))
13159
13396
  );
13397
+ const divisorNegative = bVal.hi < 0;
13160
13398
  const flo = Math.floor(aVal.lo / period);
13161
13399
  const fhi = Math.floor(aVal.hi / period);
13162
13400
  if (flo !== fhi) {
@@ -13164,6 +13402,11 @@ var Interval = (() => {
13164
13402
  }
13165
13403
  const modLo = aVal.lo - period * flo;
13166
13404
  const modHi = aVal.hi - period * flo;
13405
+ if (divisorNegative) {
13406
+ if (modLo === 0)
13407
+ return { kind: "singular", at: aVal.lo, continuity: "right" };
13408
+ return ok({ lo: modLo - period, hi: modHi - period });
13409
+ }
13167
13410
  return ok({ lo: Math.min(modLo, modHi), hi: Math.max(modLo, modHi) });
13168
13411
  }
13169
13412
  function remainder(a, b) {
@@ -13195,6 +13438,23 @@ var Interval = (() => {
13195
13438
  const [xVal] = unwrapped;
13196
13439
  return _gamma(xVal);
13197
13440
  }
13441
+ var GAMMA_NEG_EXTREMA_X = [
13442
+ -0.504083008264455,
13443
+ -1.573498473162391,
13444
+ -2.610720868444145,
13445
+ -3.635293366436901,
13446
+ -4.653163765628266,
13447
+ -5.667162441556885,
13448
+ -6.678418213073426,
13449
+ -7.687788325031709,
13450
+ -8.695764163640956,
13451
+ -9.702672540001863
13452
+ ];
13453
+ function gammaNegStripExtremum(lo) {
13454
+ const n = Math.floor(lo);
13455
+ const idx = -n - 1;
13456
+ return idx >= 0 && idx < GAMMA_NEG_EXTREMA_X.length ? GAMMA_NEG_EXTREMA_X[idx] : null;
13457
+ }
13198
13458
  function _gamma(x) {
13199
13459
  if (x.hi >= 0 && x.lo <= 0) {
13200
13460
  return { kind: "singular", at: 0 };
@@ -13207,7 +13467,21 @@ var Interval = (() => {
13207
13467
  }
13208
13468
  const gLo = gamma(x.lo);
13209
13469
  const gHi = gamma(x.hi);
13210
- return ok({ lo: Math.min(gLo, gHi), hi: Math.max(gLo, gHi) });
13470
+ let lo = Math.min(gLo, gHi);
13471
+ let hi = Math.max(gLo, gHi);
13472
+ const xStar = gammaNegStripExtremum(x.lo);
13473
+ if (xStar !== null) {
13474
+ if (xStar >= x.lo && xStar <= x.hi) {
13475
+ const g = gamma(xStar);
13476
+ lo = Math.min(lo, g);
13477
+ hi = Math.max(hi, g);
13478
+ }
13479
+ } else {
13480
+ const stripEven = Math.floor(x.lo) % 2 === 0;
13481
+ if (stripEven) lo = Math.min(lo, 0);
13482
+ else hi = Math.max(hi, 0);
13483
+ }
13484
+ return ok({ lo, hi });
13211
13485
  }
13212
13486
  if (x.lo >= GAMMA_MIN_X) {
13213
13487
  return ok({ lo: gamma(x.lo), hi: gamma(x.hi) });
@@ -13238,7 +13512,15 @@ var Interval = (() => {
13238
13512
  }
13239
13513
  const gLo = gammaln(x.lo);
13240
13514
  const gHi = gammaln(x.hi);
13241
- return ok({ lo: Math.min(gLo, gHi), hi: Math.max(gLo, gHi) });
13515
+ let lo = Math.min(gLo, gHi);
13516
+ const hi = Math.max(gLo, gHi);
13517
+ const xStar = gammaNegStripExtremum(x.lo);
13518
+ if (xStar !== null) {
13519
+ if (xStar >= x.lo && xStar <= x.hi) lo = Math.min(lo, gammaln(xStar));
13520
+ } else {
13521
+ lo = -Infinity;
13522
+ }
13523
+ return ok({ lo, hi });
13242
13524
  }
13243
13525
  return ok({ lo: gammaln(x.lo), hi: gammaln(x.hi) });
13244
13526
  }
@@ -13264,6 +13546,33 @@ var Interval = (() => {
13264
13546
  return ok({ lo: Math.min(fLo, fHi), hi: Math.max(fLo, fHi) });
13265
13547
  return ok({ lo: fLo, hi: fHi });
13266
13548
  }
13549
+ var MAX_INT_ENUM_POINTS = 4096;
13550
+ function integerPoints(lo, hi, cap) {
13551
+ const a = Math.round(lo);
13552
+ const b = Math.round(hi);
13553
+ if (!Number.isFinite(a) || !Number.isFinite(b)) return null;
13554
+ if (b - a + 1 > cap) return null;
13555
+ const out = [];
13556
+ for (let i = a; i <= b; i++) out.push(i);
13557
+ return out;
13558
+ }
13559
+ function enumerateInteger2(a, b, f) {
13560
+ const xs = integerPoints(a.lo, a.hi, MAX_INT_ENUM_POINTS);
13561
+ const ys = integerPoints(b.lo, b.hi, MAX_INT_ENUM_POINTS);
13562
+ if (!xs || !ys || xs.length * ys.length > MAX_INT_ENUM_POINTS) return null;
13563
+ let lo = Infinity;
13564
+ let hi = -Infinity;
13565
+ for (const x of xs)
13566
+ for (const y of ys) {
13567
+ const v = f(x, y);
13568
+ if (Number.isFinite(v)) {
13569
+ if (v < lo) lo = v;
13570
+ if (v > hi) hi = v;
13571
+ }
13572
+ }
13573
+ if (lo === Infinity) return null;
13574
+ return ok({ lo, hi });
13575
+ }
13267
13576
  function binomial(n, k) {
13268
13577
  const uN = unwrapOrPropagate(n);
13269
13578
  if (!Array.isArray(uN)) return uN;
@@ -13271,13 +13580,10 @@ var Interval = (() => {
13271
13580
  if (!Array.isArray(uK)) return uK;
13272
13581
  const [nVal] = uN;
13273
13582
  const [kVal] = uK;
13274
- const vals = [
13275
- choose(Math.round(nVal.lo), Math.round(kVal.lo)),
13276
- choose(Math.round(nVal.lo), Math.round(kVal.hi)),
13277
- choose(Math.round(nVal.hi), Math.round(kVal.lo)),
13278
- choose(Math.round(nVal.hi), Math.round(kVal.hi))
13279
- ];
13280
- return ok({ lo: Math.min(...vals), hi: Math.max(...vals) });
13583
+ const enumerated = enumerateInteger2(nVal, kVal, choose);
13584
+ if (enumerated) return enumerated;
13585
+ const nMax = Math.round(nVal.hi);
13586
+ return ok({ lo: 0, hi: choose(nMax, Math.floor(nMax / 2)) });
13281
13587
  }
13282
13588
  function gcd3(a, b) {
13283
13589
  const uA = unwrapOrPropagate(a);
@@ -13286,13 +13592,15 @@ var Interval = (() => {
13286
13592
  if (!Array.isArray(uB)) return uB;
13287
13593
  const [aVal] = uA;
13288
13594
  const [bVal] = uB;
13289
- const vals = [
13290
- gcd(Math.round(aVal.lo), Math.round(bVal.lo)),
13291
- gcd(Math.round(aVal.lo), Math.round(bVal.hi)),
13292
- gcd(Math.round(aVal.hi), Math.round(bVal.lo)),
13293
- gcd(Math.round(aVal.hi), Math.round(bVal.hi))
13294
- ];
13295
- return ok({ lo: Math.min(...vals), hi: Math.max(...vals) });
13595
+ const enumerated = enumerateInteger2(aVal, bVal, gcd);
13596
+ if (enumerated) return enumerated;
13597
+ const m = Math.max(
13598
+ Math.abs(Math.round(aVal.lo)),
13599
+ Math.abs(Math.round(aVal.hi)),
13600
+ Math.abs(Math.round(bVal.lo)),
13601
+ Math.abs(Math.round(bVal.hi))
13602
+ );
13603
+ return ok({ lo: 0, hi: m });
13296
13604
  }
13297
13605
  function lcm3(a, b) {
13298
13606
  const uA = unwrapOrPropagate(a);
@@ -13301,13 +13609,11 @@ var Interval = (() => {
13301
13609
  if (!Array.isArray(uB)) return uB;
13302
13610
  const [aVal] = uA;
13303
13611
  const [bVal] = uB;
13304
- const vals = [
13305
- lcm(Math.round(aVal.lo), Math.round(bVal.lo)),
13306
- lcm(Math.round(aVal.lo), Math.round(bVal.hi)),
13307
- lcm(Math.round(aVal.hi), Math.round(bVal.lo)),
13308
- lcm(Math.round(aVal.hi), Math.round(bVal.hi))
13309
- ];
13310
- return ok({ lo: Math.min(...vals), hi: Math.max(...vals) });
13612
+ const enumerated = enumerateInteger2(aVal, bVal, lcm);
13613
+ if (enumerated) return enumerated;
13614
+ const ma = Math.max(Math.abs(Math.round(aVal.lo)), Math.abs(Math.round(aVal.hi)));
13615
+ const mb = Math.max(Math.abs(Math.round(bVal.lo)), Math.abs(Math.round(bVal.hi)));
13616
+ return ok({ lo: 0, hi: ma * mb });
13311
13617
  }
13312
13618
  function chop2(x) {
13313
13619
  const unwrapped = unwrapOrPropagate(x);
@@ -13699,7 +14005,6 @@ var Interval = (() => {
13699
14005
  29.8116,
13700
14006
  32.95639
13701
14007
  ];
13702
- var SINC_GLOBAL_LO = -0.21724;
13703
14008
  function sinc(x) {
13704
14009
  const unwrapped = unwrapOrPropagate(x);
13705
14010
  if (!Array.isArray(unwrapped)) return unwrapped;
@@ -13720,8 +14025,14 @@ var Interval = (() => {
13720
14025
  if (e >= xVal.lo && e <= xVal.hi) update(sincVal(e));
13721
14026
  if (-e >= xVal.lo && -e <= xVal.hi) update(sincVal(-e));
13722
14027
  }
13723
- if (Math.abs(xVal.lo) > lastExtremum || Math.abs(xVal.hi) > lastExtremum) {
13724
- update(SINC_GLOBAL_LO);
14028
+ let minBeyondAbs = Infinity;
14029
+ if (xVal.hi > lastExtremum)
14030
+ minBeyondAbs = Math.min(minBeyondAbs, Math.max(xVal.lo, lastExtremum));
14031
+ if (xVal.lo < -lastExtremum)
14032
+ minBeyondAbs = Math.min(minBeyondAbs, -Math.min(xVal.hi, -lastExtremum));
14033
+ if (Number.isFinite(minBeyondAbs) && minBeyondAbs > 0) {
14034
+ update(1 / minBeyondAbs);
14035
+ update(-1 / minBeyondAbs);
13725
14036
  }
13726
14037
  return ok({ lo, hi });
13727
14038
  }
@@ -13747,8 +14058,21 @@ var Interval = (() => {
13747
14058
  if (e >= xVal.lo && e <= xVal.hi) update(fresnelS(e));
13748
14059
  if (-e >= xVal.lo && -e <= xVal.hi) update(fresnelS(-e));
13749
14060
  }
14061
+ fresnelConvergenceBound(xVal, FRESNEL_S_EXTREMA, fresnelS, update);
13750
14062
  return ok({ lo, hi });
13751
14063
  }
14064
+ function fresnelConvergenceBound(xVal, extrema, scalar, update) {
14065
+ const lastE = extrema[extrema.length - 1];
14066
+ const amp = Math.abs(scalar(lastE) - 0.5);
14067
+ if (xVal.hi > lastE) {
14068
+ update(0.5 + amp);
14069
+ update(0.5 - amp);
14070
+ }
14071
+ if (xVal.lo < -lastE) {
14072
+ update(-0.5 - amp);
14073
+ update(-0.5 + amp);
14074
+ }
14075
+ }
13752
14076
  function fresnelC2(x) {
13753
14077
  const unwrapped = unwrapOrPropagate(x);
13754
14078
  if (!Array.isArray(unwrapped)) return unwrapped;
@@ -13765,6 +14089,7 @@ var Interval = (() => {
13765
14089
  if (e >= xVal.lo && e <= xVal.hi) update(fresnelC(e));
13766
14090
  if (-e >= xVal.lo && -e <= xVal.hi) update(fresnelC(-e));
13767
14091
  }
14092
+ fresnelConvergenceBound(xVal, FRESNEL_C_EXTREMA, fresnelC, update);
13768
14093
  return ok({ lo, hi });
13769
14094
  }
13770
14095
 
@@ -13872,11 +14197,9 @@ var Interval = (() => {
13872
14197
  const unwrapped = unwrapOrPropagate(x, lo, hi);
13873
14198
  if (!Array.isArray(unwrapped)) return unwrapped;
13874
14199
  const [xVal, loVal, hiVal] = unwrapped;
13875
- const resultLo = Math.max(xVal.lo, loVal.lo);
13876
- const resultHi = Math.min(xVal.hi, hiVal.hi);
13877
- if (resultLo > resultHi) {
13878
- return { kind: "empty" };
13879
- }
14200
+ const lowered = { lo: Math.max(xVal.lo, loVal.lo), hi: Math.max(xVal.hi, loVal.hi) };
14201
+ const resultLo = Math.min(lowered.lo, hiVal.lo);
14202
+ const resultHi = Math.min(lowered.hi, hiVal.hi);
13880
14203
  return { kind: "interval", value: { lo: resultLo, hi: resultHi } };
13881
14204
  }
13882
14205
 
@@ -13982,7 +14305,7 @@ var Interval = (() => {
13982
14305
  };
13983
14306
 
13984
14307
  // src/interval.ts
13985
- var version = "0.58.0";
14308
+ var version = "0.59.0";
13986
14309
  return __toCommonJS(interval_exports);
13987
14310
  })();
13988
14311
  /*! Bundled license information: