curvy 1.0.7 → 1.0.9

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 (109) hide show
  1. package/dist/curve/cubic2d.d.mts +80 -2
  2. package/dist/curve/cubic2d.d.ts +80 -2
  3. package/dist/curve/cubic2d.mjs +9 -26
  4. package/dist/curve/cubic2d.mjs.map +1 -0
  5. package/dist/curve/linear2d.d.mts +68 -2
  6. package/dist/curve/linear2d.d.ts +68 -2
  7. package/dist/curve/linear2d.mjs +11 -14
  8. package/dist/curve/linear2d.mjs.map +1 -0
  9. package/dist/curve/quadratic2d.d.mts +86 -2
  10. package/dist/curve/quadratic2d.d.ts +86 -2
  11. package/dist/curve/quadratic2d.mjs +10 -15
  12. package/dist/curve/quadratic2d.mjs.map +1 -0
  13. package/dist/interval.d.mts +195 -2
  14. package/dist/interval.d.ts +195 -2
  15. package/dist/interval.mjs +9 -12
  16. package/dist/interval.mjs.map +1 -0
  17. package/dist/matrix/matrix2x2.d.mts +273 -2
  18. package/dist/matrix/matrix2x2.d.ts +273 -2
  19. package/dist/matrix/matrix2x2.mjs +5 -4
  20. package/dist/matrix/matrix2x2.mjs.map +1 -0
  21. package/dist/matrix/matrix3x3.d.mts +308 -1
  22. package/dist/matrix/matrix3x3.d.ts +308 -1
  23. package/dist/matrix/matrix3x3.mjs +5 -4
  24. package/dist/matrix/matrix3x3.mjs.map +1 -0
  25. package/dist/matrix/matrix4x4.d.mts +310 -1
  26. package/dist/matrix/matrix4x4.d.ts +310 -1
  27. package/dist/matrix/matrix4x4.mjs +24 -61
  28. package/dist/matrix/matrix4x4.mjs.map +1 -0
  29. package/dist/path/cubic2d.d.mts +68 -2
  30. package/dist/path/cubic2d.d.ts +68 -2
  31. package/dist/path/cubic2d.mjs +10 -12
  32. package/dist/path/cubic2d.mjs.map +1 -0
  33. package/dist/path/linear2d.d.mts +68 -2
  34. package/dist/path/linear2d.d.ts +68 -2
  35. package/dist/path/linear2d.mjs +7 -9
  36. package/dist/path/linear2d.mjs.map +1 -0
  37. package/dist/path/quadratic2d.d.mts +67 -2
  38. package/dist/path/quadratic2d.d.ts +67 -2
  39. package/dist/path/quadratic2d.mjs +9 -13
  40. package/dist/path/quadratic2d.mjs.map +1 -0
  41. package/dist/pipe.mjs +1 -0
  42. package/dist/pipe.mjs.map +1 -0
  43. package/dist/polynomial/cubic.d.mts +1 -1
  44. package/dist/polynomial/cubic.d.ts +1 -1
  45. package/dist/polynomial/cubic.mjs +13 -28
  46. package/dist/polynomial/cubic.mjs.map +1 -0
  47. package/dist/polynomial/linear.d.mts +1 -1
  48. package/dist/polynomial/linear.d.ts +1 -1
  49. package/dist/polynomial/linear.mjs +2 -1
  50. package/dist/polynomial/linear.mjs.map +1 -0
  51. package/dist/polynomial/quadratic.d.mts +2 -2
  52. package/dist/polynomial/quadratic.d.ts +2 -2
  53. package/dist/polynomial/quadratic.mjs +5 -2
  54. package/dist/polynomial/quadratic.mjs.map +1 -0
  55. package/dist/shared/{curvy.Cps2R_RU.mjs → curvy.BkkW8Tx9.mjs} +11 -29
  56. package/dist/shared/curvy.BkkW8Tx9.mjs.map +1 -0
  57. package/dist/shared/{curvy.BzVmUIKm.mjs → curvy.BxdGW9he.mjs} +17 -32
  58. package/dist/shared/curvy.BxdGW9he.mjs.map +1 -0
  59. package/dist/shared/{curvy.C2XGH0R0.mjs → curvy.C_sCeg9J.mjs} +15 -24
  60. package/dist/shared/curvy.C_sCeg9J.mjs.map +1 -0
  61. package/dist/shared/curvy.Cg8lZVUz.d.ts +688 -0
  62. package/dist/shared/{curvy.CE4X6_Is.mjs → curvy.DCt1gGII.mjs} +11 -45
  63. package/dist/shared/curvy.DCt1gGII.mjs.map +1 -0
  64. package/dist/shared/{curvy.BZ_mTkJe.mjs → curvy.DJ4xO0al.mjs} +9 -6
  65. package/dist/shared/curvy.DJ4xO0al.mjs.map +1 -0
  66. package/dist/shared/curvy.DmVFTi0N.mjs +1 -0
  67. package/dist/shared/curvy.DmVFTi0N.mjs.map +1 -0
  68. package/dist/shared/curvy.FDaj5rlj.d.mts +688 -0
  69. package/dist/shared/{curvy.NLeFCr-9.mjs → curvy.lktriTpx.mjs} +19 -42
  70. package/dist/shared/curvy.lktriTpx.mjs.map +1 -0
  71. package/dist/shared/{curvy.Ck0of1PI.mjs → curvy.mLFprrGm.mjs} +26 -22
  72. package/dist/shared/curvy.mLFprrGm.mjs.map +1 -0
  73. package/dist/shared/{curvy.BDhiZ7He.mjs → curvy.r6f1j287.mjs} +8 -12
  74. package/dist/shared/curvy.r6f1j287.mjs.map +1 -0
  75. package/dist/splines/basis2d.d.mts +94 -2
  76. package/dist/splines/basis2d.d.ts +94 -2
  77. package/dist/splines/basis2d.mjs +13 -12
  78. package/dist/splines/basis2d.mjs.map +1 -0
  79. package/dist/splines/bezier2d.d.mts +136 -2
  80. package/dist/splines/bezier2d.d.ts +136 -2
  81. package/dist/splines/bezier2d.mjs +10 -9
  82. package/dist/splines/bezier2d.mjs.map +1 -0
  83. package/dist/splines/cardinal2d.d.mts +131 -2
  84. package/dist/splines/cardinal2d.d.ts +131 -2
  85. package/dist/splines/cardinal2d.mjs +15 -24
  86. package/dist/splines/cardinal2d.mjs.map +1 -0
  87. package/dist/splines/hermite2d.d.mts +94 -3
  88. package/dist/splines/hermite2d.d.ts +94 -3
  89. package/dist/splines/hermite2d.mjs +22 -36
  90. package/dist/splines/hermite2d.mjs.map +1 -0
  91. package/dist/utils.d.mts +179 -1
  92. package/dist/utils.d.ts +179 -1
  93. package/dist/utils.mjs +16 -7
  94. package/dist/utils.mjs.map +1 -0
  95. package/dist/vector/vector2.d.mts +259 -1
  96. package/dist/vector/vector2.d.ts +259 -1
  97. package/dist/vector/vector2.mjs +4 -2
  98. package/dist/vector/vector2.mjs.map +1 -0
  99. package/dist/vector/vector3.d.mts +345 -1
  100. package/dist/vector/vector3.d.ts +345 -1
  101. package/dist/vector/vector3.mjs +9 -2
  102. package/dist/vector/vector3.mjs.map +1 -0
  103. package/dist/vector/vector4.d.mts +163 -1
  104. package/dist/vector/vector4.d.ts +163 -1
  105. package/dist/vector/vector4.mjs +4 -2
  106. package/dist/vector/vector4.mjs.map +1 -0
  107. package/package.json +4 -4
  108. package/dist/shared/curvy.BsHoYJNv.d.ts +0 -155
  109. package/dist/shared/curvy.NsmY7zcr.d.mts +0 -155
@@ -1,6 +1,6 @@
1
1
  import { invariant, round } from '../utils.mjs';
2
2
  import { dual, Pipeable } from '../pipe.mjs';
3
- import { m as make$1, d as dot } from './curvy.BZ_mTkJe.mjs';
3
+ import { m as make$1, d as dot } from './curvy.DJ4xO0al.mjs';
4
4
 
5
5
  function toIndex(input) {
6
6
  if (typeof input === "number") {
@@ -25,21 +25,18 @@ const toTwoDimensionalIndex = toIndex;
25
25
  const toThreeDimensionalIndex = toIndex;
26
26
  const toFourDimensionalIndex = toIndex;
27
27
 
28
+ var _a;
28
29
  const Matrix2x2TypeId = Symbol.for("curvy/matrix2x2");
29
30
  class Matrix2x2Impl extends Pipeable {
30
- [Matrix2x2TypeId] = Matrix2x2TypeId;
31
- m00;
32
- m01;
33
- m10;
34
- m11;
35
31
  constructor(m00 = 0, m01 = 0, m10 = 0, m11 = 0) {
36
32
  super();
33
+ this[_a] = Matrix2x2TypeId;
37
34
  this.m00 = round(m00);
38
35
  this.m01 = round(m01);
39
36
  this.m10 = round(m10);
40
37
  this.m11 = round(m11);
41
38
  }
42
- get [Symbol.toStringTag]() {
39
+ get [(_a = Matrix2x2TypeId, Symbol.toStringTag)]() {
43
40
  return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`;
44
41
  }
45
42
  get [Symbol.for("nodejs.util.inspect.custom")]() {
@@ -55,30 +52,20 @@ const fromRows = (v0, v1) => new Matrix2x2Impl(v0.x, v0.y, v1.x, v1.y);
55
52
  const fromColumns = (v0, v1) => new Matrix2x2Impl(v0.x, v1.x, v0.y, v1.y);
56
53
  const setRow = dual(
57
54
  3,
58
- (m, row, v) => fromRows(
59
- ...toRows(m).with(toTwoDimensionalIndex(row), v)
60
- )
55
+ (m, row, v) => fromRows(...toRows(m).with(toTwoDimensionalIndex(row), v))
61
56
  );
62
57
  const setColumn = dual(
63
58
  3,
64
- (m, column, v) => fromColumns(
65
- ...toColumns(m).with(toTwoDimensionalIndex(column), v)
66
- )
59
+ (m, column, v) => fromColumns(...toColumns(m).with(toTwoDimensionalIndex(column), v))
67
60
  );
68
61
  const determinant = (m) => round(m.m00 * m.m11 - m.m01 * m.m10);
69
62
  const vectorProductLeft = dual(
70
63
  2,
71
- (m, v) => make$1(
72
- dot(rowVector(m, 0), v),
73
- dot(rowVector(m, 1), v)
74
- )
64
+ (m, v) => make$1(dot(rowVector(m, 0), v), dot(rowVector(m, 1), v))
75
65
  );
76
66
  const vectorProductRight = dual(
77
67
  2,
78
- (m, v) => make$1(
79
- dot(columnVector(m, 0), v),
80
- dot(columnVector(m, 1), v)
81
- )
68
+ (m, v) => make$1(dot(columnVector(m, 0), v), dot(columnVector(m, 1), v))
82
69
  );
83
70
  const solveSystem = dual(2, (m, v) => {
84
71
  const inverseDeterminant = 1 / determinant(m);
@@ -99,14 +86,8 @@ const toColumns = (m) => [
99
86
  make$1(m.m00, m.m10),
100
87
  make$1(m.m01, m.m11)
101
88
  ];
102
- const rowVector = dual(
103
- 2,
104
- (m, row) => toRows(m)[toTwoDimensionalIndex(row)]
105
- );
106
- const columnVector = dual(
107
- 2,
108
- (m, column) => toColumns(m)[toTwoDimensionalIndex(column)]
109
- );
89
+ const rowVector = dual(2, (m, row) => toRows(m)[toTwoDimensionalIndex(row)]);
90
+ const columnVector = dual(2, (m, column) => toColumns(m)[toTwoDimensionalIndex(column)]);
110
91
  const transpose = (m) => fromColumns(...toRows(m));
111
92
  const reverseRows = (m) => {
112
93
  const [r0, r1] = toRows(m);
@@ -118,3 +99,4 @@ const reverseColumns = (m) => {
118
99
  };
119
100
 
120
101
  export { fromColumns as a, setColumn as b, vectorProductRight as c, determinant as d, solveSystem as e, fromRows as f, toColumns as g, columnVector as h, isMatrix2x2 as i, transpose as j, reverseRows as k, reverseColumns as l, make as m, toFourDimensionalIndex as n, toThreeDimensionalIndex as o, rowVector as r, setRow as s, toRows as t, vectorProductLeft as v };
102
+ //# sourceMappingURL=curvy.BkkW8Tx9.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curvy.BkkW8Tx9.mjs","sources":["../../src/dimensions.ts","../../src/matrix/matrix2x2.internal.ts"],"sourcesContent":["import { invariant } from './utils'\n\nexport type TwoDimensionalIndex = 0 | 1\nexport type TwoDimensionalComponent = 'x' | 'y'\n\nexport interface TwoDimensional<T> {\n readonly x: T\n readonly y: T\n\n readonly 0: T\n readonly 1: T\n}\n\nexport type ThreeDimensionalIndex = TwoDimensionalIndex | 2\nexport type ThreeDimensionalComponent = TwoDimensionalComponent | 'z'\n\nexport interface ThreeDimensional<T> extends TwoDimensional<T> {\n readonly z: T\n readonly 2: T\n}\n\nexport type FourDimensionalIndex = ThreeDimensionalIndex | 3\nexport type FourDimensionalComponent = ThreeDimensionalComponent | 'w'\n\nexport interface FourDimensional<T> extends ThreeDimensional<T> {\n readonly w: T\n readonly 3: T\n}\n\nfunction toIndex(input: string | number): number {\n if (typeof input === 'number') {\n invariant(input >= 0 && input <= 3, 'Index out of bounds')\n\n return input\n }\n\n if (input === 'x') {\n return 0\n }\n\n if (input === 'y') {\n return 1\n }\n\n if (input === 'z') {\n return 2\n }\n\n if (input === 'w') {\n return 3\n }\n\n invariant(false, 'Invalid component')\n}\n\nexport const toTwoDimensionalIndex = toIndex as (\n input: TwoDimensionalIndex | TwoDimensionalComponent,\n) => TwoDimensionalIndex\nexport const toThreeDimensionalIndex = toIndex as (\n input: ThreeDimensionalIndex | ThreeDimensionalComponent,\n) => ThreeDimensionalIndex\nexport const toFourDimensionalIndex = toIndex as (\n input: FourDimensionalIndex | FourDimensionalComponent,\n) => FourDimensionalIndex\n","import { toTwoDimensionalIndex } from '../dimensions'\nimport { Pipeable } from '../pipe'\nimport { dual } from '../pipe'\nimport { invariant, round } from '../utils'\nimport type { Vector2 } from '../vector/vector2'\nimport * as vector2 from '../vector/vector2.internal'\nimport type { Matrix2x2, Matrix2x2Coordinate } from './matrix2x2'\n\nexport const Matrix2x2TypeId: unique symbol = Symbol.for('curvy/matrix2x2')\nexport type Matrix2x2TypeId = typeof Matrix2x2TypeId\n\nclass Matrix2x2Impl extends Pipeable implements Matrix2x2 {\n readonly [Matrix2x2TypeId]: Matrix2x2TypeId = Matrix2x2TypeId\n\n readonly m00: number\n readonly m01: number\n\n readonly m10: number\n readonly m11: number\n\n constructor(m00 = 0, m01 = 0, m10 = 0, m11 = 0) {\n super()\n this.m00 = round(m00)\n this.m01 = round(m01)\n this.m10 = round(m10)\n this.m11 = round(m11)\n }\n\n get [Symbol.toStringTag]() {\n return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`\n }\n\n get [Symbol.for('nodejs.util.inspect.custom')]() {\n return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`\n }\n\n [Symbol.hasInstance](m: unknown): m is Matrix2x2 {\n return isMatrix2x2(m)\n }\n}\n\nexport const isMatrix2x2 = (m: unknown): m is Matrix2x2 =>\n typeof m === 'object' && m !== null && Matrix2x2TypeId in m\n\nexport const make = (m00 = 0, m01 = m00, m10 = m01, m11 = m10) =>\n new Matrix2x2Impl(m00, m01, m10, m11)\n\nexport const fromRows = (v0: Vector2, v1: Vector2) => new Matrix2x2Impl(v0.x, v0.y, v1.x, v1.y)\n\nexport const fromColumns = (v0: Vector2, v1: Vector2) => new Matrix2x2Impl(v0.x, v1.x, v0.y, v1.y)\n\nexport const setRow = dual<\n (row: Matrix2x2Coordinate, v: Vector2) => (m: Matrix2x2) => Matrix2x2,\n (m: Matrix2x2, row: Matrix2x2Coordinate, v: Vector2) => Matrix2x2\n>(3, (m: Matrix2x2, row: Matrix2x2Coordinate, v: Vector2) =>\n fromRows(...(toRows(m).with(toTwoDimensionalIndex(row), v) as [Vector2, Vector2])),\n)\n\nexport const setColumn = dual<\n (column: Matrix2x2Coordinate, v: Vector2) => (m: Matrix2x2) => Matrix2x2,\n (m: Matrix2x2, column: Matrix2x2Coordinate, v: Vector2) => Matrix2x2\n>(3, (m: Matrix2x2, column: Matrix2x2Coordinate, v: Vector2) =>\n fromColumns(...(toColumns(m).with(toTwoDimensionalIndex(column), v) as [Vector2, Vector2])),\n)\n\nexport const determinant = (m: Matrix2x2): number => round(m.m00 * m.m11 - m.m01 * m.m10)\n\n// (a: Vector2, b: Vector2) => a.x * b.x + a.y * b.y\n\n/*\n * {\n * x: first row dot v -> fr.x\n * y: second row dot v\n * }\n * */\n\nexport const vectorProductLeft = dual<\n (v: Vector2) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, v: Vector2) => Vector2\n>(2, (m: Matrix2x2, v: Vector2) =>\n vector2.make(vector2.dot(rowVector(m, 0), v), vector2.dot(rowVector(m, 1), v)),\n)\n\nexport const vectorProductRight = dual<\n (v: Vector2) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, v: Vector2) => Vector2\n>(2, (m: Matrix2x2, v: Vector2) =>\n vector2.make(vector2.dot(columnVector(m, 0), v), vector2.dot(columnVector(m, 1), v)),\n)\n\nexport const solveSystem = dual<\n (v: Vector2) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, v: Vector2) => Vector2\n>(2, (m: Matrix2x2, v: Vector2) => {\n const inverseDeterminant = 1 / determinant(m)\n\n invariant(\n Number.isFinite(inverseDeterminant),\n 'cannot solve system when coefficient matrix determinant is zero',\n )\n\n return vector2.make(\n determinant(setColumn(m, 0, v)) * inverseDeterminant,\n determinant(setColumn(m, 1, v)) * inverseDeterminant,\n )\n})\n\nexport const toRows = (m: Matrix2x2): [Vector2, Vector2] => [\n vector2.make(m.m00, m.m01),\n vector2.make(m.m10, m.m11),\n]\n\nexport const toColumns = (m: Matrix2x2): [Vector2, Vector2] => [\n vector2.make(m.m00, m.m10),\n vector2.make(m.m01, m.m11),\n]\n\nexport const rowVector = dual<\n (row: Matrix2x2Coordinate) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, row: Matrix2x2Coordinate) => Vector2\n>(2, (m: Matrix2x2, row: Matrix2x2Coordinate) => toRows(m)[toTwoDimensionalIndex(row)])\n\nexport const columnVector = dual<\n (column: Matrix2x2Coordinate) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, column: Matrix2x2Coordinate) => Vector2\n>(2, (m: Matrix2x2, column: Matrix2x2Coordinate) => toColumns(m)[toTwoDimensionalIndex(column)])\n\nexport const transpose = (m: Matrix2x2) => fromColumns(...toRows(m))\n\nexport const reverseRows = (m: Matrix2x2) => {\n const [r0, r1] = toRows(m)\n return fromRows(r1, r0)\n}\n\nexport const reverseColumns = (m: Matrix2x2) => {\n const [c0, c1] = toColumns(m)\n return fromColumns(c1, c0)\n}\n"],"names":["vector2.make","vector2.dot"],"mappings":"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"}
@@ -1,19 +1,15 @@
1
1
  import { size, contains, fromMinMax } from '../interval.mjs';
2
2
  import { Pipeable, dual } from '../pipe.mjs';
3
3
  import { round } from '../utils.mjs';
4
- import { Q as QuadraticPolynomialImpl, b as QuadraticPolynomialTypeId, a as make$1, c as solveInverse$1, m as monotonicity$1, r as range$1, l as length$1, s as solve$1 } from './curvy.BDhiZ7He.mjs';
4
+ import { make as make$2 } from '../vector/vector2.mjs';
5
+ import { Q as QuadraticPolynomialImpl, a as make$1, b as QuadraticPolynomialTypeId, c as solveInverse$1, m as monotonicity$1, r as range$1, l as length$1, s as solve$1 } from './curvy.r6f1j287.mjs';
5
6
 
6
- const CubicPolynomialTypeId = Symbol.for(
7
- "curvy/polynomial/cubic"
8
- );
9
- class CubicPolynomialImpl extends Pipeable {
10
- [CubicPolynomialTypeId] = CubicPolynomialTypeId;
11
- c0;
12
- c1;
13
- c2;
14
- c3;
7
+ var _a, _b;
8
+ const CubicPolynomialTypeId = Symbol.for("curvy/polynomial/cubic");
9
+ class CubicPolynomialImpl extends (_b = Pipeable, _a = CubicPolynomialTypeId, _b) {
15
10
  constructor(c0 = 0, c1 = 0, c2 = 0, c3 = 0) {
16
11
  super();
12
+ this[_a] = CubicPolynomialTypeId;
17
13
  this.c0 = round(c0);
18
14
  this.c1 = round(c1);
19
15
  this.c2 = round(c2);
@@ -34,10 +30,7 @@ function guaranteedMonotonicityFromComparison(s0, s1) {
34
30
  const make = (c0 = 0, c1 = 0, c2 = 0) => new QuadraticPolynomialImpl(c0, c1, c2);
35
31
  const isQuadraticPolynomial = (v) => typeof v === "object" && v !== null && QuadraticPolynomialTypeId in v;
36
32
  const fromVector = (v) => new QuadraticPolynomialImpl(v.x, v.y, v.z);
37
- const solve = dual(
38
- 2,
39
- (p, x) => round(p.c0 + x * p.c1 + x ** 2 * p.c2)
40
- );
33
+ const solve = dual(2, (p, x) => round(p.c0 + x * p.c1 + x ** 2 * p.c2));
41
34
  const toSolver = (p) => (x) => solve(p, x);
42
35
  const solveInverse = dual(2, (p, y) => {
43
36
  const discriminant = p.c1 ** 2 - 4 * p.c2 * (p.c0 - y);
@@ -56,7 +49,10 @@ const solveInverse = dual(2, (p, y) => {
56
49
  const toInverseSolver = (p) => (y) => solveInverse(p, y);
57
50
  const derivative = (p) => make$1(p.c1, p.c2 * 2);
58
51
  const roots = (p) => solveInverse(p, 0);
59
- const extreme = (p) => derivative(p).pipe(solveInverse$1(0)) ?? (p.c2 === 0 ? null : 0);
52
+ const extreme = (p) => {
53
+ const result = derivative(p).pipe(solveInverse$1(0)) ?? (p.c2 === 0 ? null : 0);
54
+ return result === null ? null : make$2(result, solve(p, result));
55
+ };
60
56
  const monotonicity = dual(
61
57
  (args) => isQuadraticPolynomial(args[0]),
62
58
  (p, i) => {
@@ -70,13 +66,10 @@ const monotonicity = dual(
70
66
  if (i && size(i) === 0) {
71
67
  return "constant";
72
68
  }
73
- if (i === void 0 || contains(i, e, { includeStart: false, includeEnd: false })) {
69
+ if (i === void 0 || contains(i, e.x, { includeStart: false, includeEnd: false })) {
74
70
  return "none";
75
71
  }
76
- return guaranteedMonotonicityFromComparison(
77
- solve(p, i.start),
78
- solve(p, i.end)
79
- );
72
+ return guaranteedMonotonicityFromComparison(solve(p, i.start), solve(p, i.end));
80
73
  }
81
74
  );
82
75
  const antiderivative = dual(
@@ -89,21 +82,14 @@ const domain = dual(2, (p, range2) => {
89
82
  if (start.length === 0 && end.length === 0) {
90
83
  return null;
91
84
  }
92
- return fromMinMax(
93
- ...solveInverse(p, range2.start),
94
- ...solveInverse(p, range2.end)
95
- );
85
+ return fromMinMax(...solveInverse(p, range2.start), ...solveInverse(p, range2.end));
96
86
  });
97
87
  const range = dual(2, (p, domain2) => {
98
88
  if (p.c2 === 0) {
99
89
  return range$1(make$1(p.c0, p.c1), domain2);
100
90
  }
101
91
  const e = extreme(p);
102
- return e !== null && contains(domain2, e) ? fromMinMax(
103
- solve(p, domain2.start),
104
- solve(p, domain2.end),
105
- solve(p, e)
106
- ) : fromMinMax(solve(p, domain2.start), solve(p, domain2.end));
92
+ return e !== null && contains(domain2, e.x) ? fromMinMax(solve(p, domain2.start), solve(p, domain2.end), e.y) : fromMinMax(solve(p, domain2.start), solve(p, domain2.end));
107
93
  });
108
94
  const length = dual(2, (p, domain2) => {
109
95
  if (size(domain2) === 0) {
@@ -123,9 +109,8 @@ const length = dual(2, (p, domain2) => {
123
109
  });
124
110
  const curvature = dual(
125
111
  2,
126
- (p, x) => round(
127
- Math.abs(2 * p.c2) / (1 + (solve$1(derivative(p), x) ** 2) ** 1.5)
128
- )
112
+ (p, x) => round(Math.abs(2 * p.c2) / (1 + (solve$1(derivative(p), x) ** 2) ** 1.5))
129
113
  );
130
114
 
131
115
  export { CubicPolynomialImpl as C, CubicPolynomialTypeId as a, monotonicity as b, solve as c, derivative as d, toInverseSolver as e, fromVector as f, guaranteedMonotonicityFromComparison as g, extreme as h, isQuadraticPolynomial as i, antiderivative as j, domain as k, length as l, make as m, range as n, curvature as o, roots as r, solveInverse as s, toSolver as t };
116
+ //# sourceMappingURL=curvy.BxdGW9he.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curvy.BxdGW9he.mjs","sources":["../../src/polynomial/cubic.internal.circular.ts","../../src/polynomial/monotonicity.ts","../../src/polynomial/quadratic.internal.ts"],"sourcesContent":["import { Pipeable } from '../pipe'\nimport { round } from '../utils'\nimport type { CubicPolynomial } from './cubic'\n\nexport const CubicPolynomialTypeId: unique symbol = Symbol.for('curvy/polynomial/cubic')\nexport type CubicPolynomialTypeId = typeof CubicPolynomialTypeId\n\nexport class CubicPolynomialImpl extends Pipeable implements CubicPolynomial {\n readonly [CubicPolynomialTypeId]: CubicPolynomialTypeId = CubicPolynomialTypeId\n\n readonly c0: number\n readonly c1: number\n readonly c2: number\n readonly c3: number\n\n constructor(c0 = 0, c1 = 0, c2 = 0, c3 = 0) {\n super()\n\n this.c0 = round(c0)\n this.c1 = round(c1)\n this.c2 = round(c2)\n this.c3 = round(c3)\n }\n}\n","export type Monotonicity = 'none' | 'increasing' | 'decreasing' | 'constant'\nexport type GuaranteedMonotonicity = 'increasing' | 'decreasing' | 'constant'\n\nexport function guaranteedMonotonicityFromComparison(\n s0: number,\n s1: number,\n): GuaranteedMonotonicity {\n if (s0 < s1) {\n return 'increasing'\n }\n\n if (s0 > s1) {\n return 'decreasing'\n }\n\n return 'constant'\n}\n","import * as Interval from '../interval'\nimport { dual } from '../pipe'\nimport { round } from '../utils'\nimport * as Vector2 from '../vector/vector2'\nimport type { Vector3 } from '../vector/vector3'\nimport type { CubicPolynomial } from './cubic'\nimport { CubicPolynomialImpl } from './cubic.internal.circular'\nimport * as Linear from './linear.internal'\nimport { type Monotonicity, guaranteedMonotonicityFromComparison } from './monotonicity'\nimport type { QuadraticPolynomial } from './quadratic'\nimport { QuadraticPolynomialImpl, QuadraticPolynomialTypeId } from './quadratic.internal.circular'\nimport type { ZeroToTwo } from './types'\n\nexport const make = (c0 = 0, c1 = 0, c2 = 0): QuadraticPolynomial =>\n new QuadraticPolynomialImpl(c0, c1, c2)\n\nexport const isQuadraticPolynomial = (v: unknown): v is QuadraticPolynomial =>\n typeof v === 'object' && v !== null && QuadraticPolynomialTypeId in v\n\nexport const fromVector = (v: Vector3) => new QuadraticPolynomialImpl(v.x, v.y, v.z)\n\nexport const solve = dual<\n (x: number) => (p: QuadraticPolynomial) => number,\n (p: QuadraticPolynomial, x: number) => number\n>(2, (p: QuadraticPolynomial, x: number) => round(p.c0 + x * p.c1 + x ** 2 * p.c2))\n\nexport const toSolver = (p: QuadraticPolynomial) => (x: number) => solve(p, x)\n\nexport const solveInverse: {\n (p: QuadraticPolynomial, y: number): ZeroToTwo\n (y: number): (p: QuadraticPolynomial) => ZeroToTwo\n} = dual<\n (y: number) => (p: QuadraticPolynomial) => ZeroToTwo,\n (p: QuadraticPolynomial, y: number) => ZeroToTwo\n>(2, (p: QuadraticPolynomial, y: number) => {\n const discriminant = p.c1 ** 2 - 4 * p.c2 * (p.c0 - y)\n\n if (discriminant < 0) {\n return [] as ZeroToTwo\n }\n\n if (discriminant === 0) {\n return [round(-p.c1 / (2 * p.c2))] as ZeroToTwo\n }\n\n const sqrtDiscriminant = Math.sqrt(discriminant)\n\n return [\n round((-p.c1 + sqrtDiscriminant) / (2 * p.c2)),\n round((-p.c1 - sqrtDiscriminant) / (2 * p.c2)),\n ].toSorted((a, b) => a - b) as unknown as ZeroToTwo\n})\n\nexport const toInverseSolver =\n (p: QuadraticPolynomial) =>\n (y: number): ZeroToTwo =>\n solveInverse(p, y)\n\nexport const derivative = (p: QuadraticPolynomial) => Linear.make(p.c1, p.c2 * 2)\n\nexport const roots = (p: QuadraticPolynomial) => solveInverse(p, 0)\n\nexport const extreme = (p: QuadraticPolynomial) => {\n const result = derivative(p).pipe(Linear.solveInverse(0)) ?? (p.c2 === 0 ? null : 0)\n\n return result === null ? null : Vector2.make(result, solve(p, result))\n}\n\nexport const monotonicity = dual<\n (i: Interval.Interval) => (p: QuadraticPolynomial) => Monotonicity,\n (p: QuadraticPolynomial, i?: Interval.Interval) => Monotonicity\n>(\n (args) => isQuadraticPolynomial(args[0]),\n (p: QuadraticPolynomial, i?: Interval.Interval) => {\n if (p.c2 === 0 && p.c1 === 0) {\n return 'constant'\n }\n\n if (p.c2 === 0) {\n return Linear.monotonicity(Linear.make(p.c0, p.c1))\n }\n\n // c2 is non-zero, so the extreme is guaranteed to be non-null\n const e = extreme(p) as Vector2.Vector2\n\n // if the interval is a single point, the monotonicity is constant\n if (i && Interval.size(i) === 0) {\n return 'constant'\n }\n\n // if there is no interval, or the extreme is within the interval,\n // the monotonicity is none\n if (i === undefined || Interval.contains(i, e.x, { includeStart: false, includeEnd: false })) {\n return 'none'\n }\n\n return guaranteedMonotonicityFromComparison(solve(p, i.start), solve(p, i.end))\n },\n)\n\nexport const antiderivative = dual<\n (integrationConstant: number) => (p: QuadraticPolynomial) => CubicPolynomial,\n (p: QuadraticPolynomial, integrationConstant?: number) => CubicPolynomial\n>(\n 2,\n (p: QuadraticPolynomial, integrationConstant = 0) =>\n new CubicPolynomialImpl(integrationConstant, p.c0, p.c1 / 2, p.c2 / 3),\n)\n\nexport const domain = dual<\n (range: Interval.Interval) => (p: QuadraticPolynomial) => Interval.Interval | null,\n (p: QuadraticPolynomial, range: Interval.Interval) => Interval.Interval | null\n>(2, (p: QuadraticPolynomial, range: Interval.Interval) => {\n const start = solveInverse(p, range.start)\n const end = solveInverse(p, range.end)\n\n if (start.length === 0 && end.length === 0) {\n return null\n }\n\n return Interval.fromMinMax(...solveInverse(p, range.start), ...solveInverse(p, range.end))\n})\n\nexport const range = dual<\n (domain: Interval.Interval) => (p: QuadraticPolynomial) => Interval.Interval,\n (p: QuadraticPolynomial, domain: Interval.Interval) => Interval.Interval\n>(2, (p: QuadraticPolynomial, domain: Interval.Interval) => {\n if (p.c2 === 0) {\n return Linear.range(Linear.make(p.c0, p.c1), domain)\n }\n\n const e = extreme(p)\n\n return e !== null && Interval.contains(domain, e.x)\n ? Interval.fromMinMax(solve(p, domain.start), solve(p, domain.end), e.y)\n : Interval.fromMinMax(solve(p, domain.start), solve(p, domain.end))\n})\n\nexport const length = dual<\n (domain: Interval.Interval) => (p: QuadraticPolynomial) => number,\n (p: QuadraticPolynomial, domain: Interval.Interval) => number\n>(2, (p: QuadraticPolynomial, domain: Interval.Interval) => {\n if (Interval.size(domain) === 0) {\n return 0\n }\n\n if (p.c2 === 0) {\n return Linear.length(Linear.make(p.c0, p.c1), domain)\n }\n\n const d = derivative(p)\n\n const derivativeStart = Linear.solve(d, domain.start)\n const sqrtStart = Math.sqrt(1 + derivativeStart ** 2)\n const evalStart =\n (derivativeStart * sqrtStart + Math.log(Math.abs(derivativeStart + sqrtStart))) / (4 * p.c2)\n\n const derivativeEnd = Linear.solve(d, domain.end)\n const sqrtEnd = Math.sqrt(1 + derivativeEnd ** 2)\n const evalEnd =\n (derivativeEnd * sqrtEnd + Math.log(Math.abs(derivativeEnd + sqrtEnd))) / (4 * p.c2)\n\n return round(evalEnd - evalStart)\n})\n\nexport const curvature = dual<\n (x: number) => (p: QuadraticPolynomial) => number,\n (p: QuadraticPolynomial, x: number) => number\n>(2, (p: QuadraticPolynomial, x: number) =>\n round(Math.abs(2 * p.c2) / (1 + (Linear.solve(derivative(p), x) ** 2) ** 1.5)),\n)\n"],"names":["Linear.make","Linear.solveInverse","Vector2.make","Linear.monotonicity","Interval.size","Interval.contains","range","Interval.fromMinMax","domain","Linear.range","Linear.length","Linear.solve"],"mappings":"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"}
@@ -1,15 +1,12 @@
1
- import { dual, Pipeable } from '../pipe.mjs';
1
+ import { Pipeable, dual } from '../pipe.mjs';
2
2
  import { round } from '../utils.mjs';
3
3
 
4
+ var _a;
4
5
  const Vector4TypeId = Symbol.for("curvy/vector4");
5
6
  class Vector4Impl extends Pipeable {
6
- [Vector4TypeId] = Vector4TypeId;
7
- x;
8
- y;
9
- z;
10
- w;
11
7
  constructor(v0 = 0, v1 = 0, v2 = 0, v3 = 0) {
12
8
  super();
9
+ this[_a] = Vector4TypeId;
13
10
  this.x = round(v0);
14
11
  this.y = round(v1);
15
12
  this.z = round(v2);
@@ -27,7 +24,7 @@ class Vector4Impl extends Pipeable {
27
24
  get [3]() {
28
25
  return this.w;
29
26
  }
30
- get [Symbol.toStringTag]() {
27
+ get [(_a = Vector4TypeId, Symbol.toStringTag)]() {
31
28
  return `Vector4(${this.x}, ${this.y}, ${this.z}, ${this.w})`;
32
29
  }
33
30
  get [Symbol.for("nodejs.util.inspect.custom")]() {
@@ -45,7 +42,12 @@ const dot = dual(
45
42
  2,
46
43
  (a, b) => round(a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w)
47
44
  );
48
- const components = (v) => [v.x, v.y, v.z, v.w];
45
+ const components = (v) => [
46
+ v.x,
47
+ v.y,
48
+ v.z,
49
+ v.w
50
+ ];
49
51
  const softmax = (v) => {
50
52
  const max = Math.max(v.x, v.y, v.z, v.w);
51
53
  const v0 = Math.exp(v.x - max);
@@ -55,21 +57,10 @@ const softmax = (v) => {
55
57
  const sum = v0 + v1 + v2 + v3;
56
58
  return make(v0 / sum, v1 / sum, v2 / sum, v3 / sum);
57
59
  };
58
- const add = dual(
59
- 2,
60
- (a, b) => make(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w)
61
- );
62
- const subtract = dual(
63
- 2,
64
- (a, b) => make(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w)
65
- );
66
- const hadamard = dual(
67
- 2,
68
- (a, b) => make(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w)
69
- );
70
- const scale = dual(
71
- 2,
72
- (v, s) => s === 1 ? v : make(v.x * s, v.y * s, v.z * s, v.w * s)
73
- );
60
+ const add = dual(2, (a, b) => make(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w));
61
+ const subtract = dual(2, (a, b) => make(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w));
62
+ const hadamard = dual(2, (a, b) => make(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w));
63
+ const scale = dual(2, (v, s) => s === 1 ? v : make(v.x * s, v.y * s, v.z * s, v.w * s));
74
64
 
75
65
  export { magnitude as a, add as b, components as c, dot as d, subtract as e, scale as f, hadamard as h, isVector4 as i, make as m, normalize as n, softmax as s };
66
+ //# sourceMappingURL=curvy.C_sCeg9J.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curvy.C_sCeg9J.mjs","sources":["../../src/vector/vector4.internal.ts"],"sourcesContent":["import { Pipeable } from '../pipe'\nimport { dual } from '../pipe'\nimport { round } from '../utils'\nimport type { Vector4 } from './vector4'\n\nexport const Vector4TypeId: unique symbol = Symbol.for('curvy/vector4')\nexport type Vector4TypeId = typeof Vector4TypeId\n\nclass Vector4Impl extends Pipeable implements Vector4 {\n readonly [Vector4TypeId]: Vector4TypeId = Vector4TypeId\n\n readonly x: number\n readonly y: number\n readonly z: number\n readonly w: number\n\n constructor(v0 = 0, v1 = 0, v2 = 0, v3 = 0) {\n super()\n\n this.x = round(v0)\n this.y = round(v1)\n this.z = round(v2)\n this.w = round(v3)\n }\n\n get [0]() {\n return this.x\n }\n\n get [1]() {\n return this.y\n }\n\n get [2]() {\n return this.z\n }\n\n get [3]() {\n return this.w\n }\n\n get [Symbol.toStringTag]() {\n return `Vector4(${this.x}, ${this.y}, ${this.z}, ${this.w})`\n }\n\n get [Symbol.for('nodejs.util.inspect.custom')]() {\n return this[Symbol.toStringTag]\n }\n}\n\nexport const isVector4 = (v: unknown): v is Vector4 =>\n typeof v === 'object' && v !== null && Vector4TypeId in v\n\nexport const make = (v0: number, v1 = v0, v2 = v1, v3 = v2): Vector4 =>\n new Vector4Impl(v0, v1, v2, v3)\n\nexport const magnitude: (vector: Vector4) => number = (vector: Vector4) =>\n round(Math.hypot(vector.x, vector.y, vector.z, vector.w))\n\nexport const normalize: (vector: Vector4) => Vector4 = (vector: Vector4) => {\n const m = magnitude(vector)\n\n return make(vector.x / m, vector.y / m, vector.z / m, vector.w / m)\n}\n\nexport const dot = dual<(b: Vector4) => (a: Vector4) => number, (a: Vector4, b: Vector4) => number>(\n 2,\n (a: Vector4, b: Vector4) => round(a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w),\n)\n\nexport const components: (v: Vector4) => [number, number, number, number] = (v: Vector4) => [\n v.x,\n v.y,\n v.z,\n v.w,\n]\n\nexport const softmax: (v: Vector4) => Vector4 = (v: Vector4) => {\n const max = Math.max(v.x, v.y, v.z, v.w)\n\n const v0 = Math.exp(v.x - max)\n const v1 = Math.exp(v.y - max)\n const v2 = Math.exp(v.z - max)\n const v3 = Math.exp(v.w - max)\n\n const sum = v0 + v1 + v2 + v3\n\n return make(v0 / sum, v1 / sum, v2 / sum, v3 / sum)\n}\n\nexport const add = dual<\n (b: Vector4) => (a: Vector4) => Vector4,\n (a: Vector4, b: Vector4) => Vector4\n>(2, (a: Vector4, b: Vector4) => make(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w))\n\nexport const subtract = dual<\n (b: Vector4) => (a: Vector4) => Vector4,\n (a: Vector4, b: Vector4) => Vector4\n>(2, (a: Vector4, b: Vector4) => make(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w))\n\nexport const hadamard = dual<\n (b: Vector4) => (a: Vector4) => Vector4,\n (a: Vector4, b: Vector4) => Vector4\n>(2, (a: Vector4, b: Vector4) => make(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w))\nexport const scale = dual<\n (s: number) => (v: Vector4) => Vector4,\n (v: Vector4, s: number) => Vector4\n>(2, (v: Vector4, s: number) => (s === 1 ? v : make(v.x * s, v.y * s, v.z * s, v.w * s)))\n"],"names":[],"mappings":"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"}