@pawells/math-extended 1.0.1

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 (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +319 -0
  3. package/build/angles.d.ts +31 -0
  4. package/build/angles.d.ts.map +1 -0
  5. package/build/angles.js +85 -0
  6. package/build/angles.js.map +1 -0
  7. package/build/angles.spec.d.ts +2 -0
  8. package/build/angles.spec.d.ts.map +1 -0
  9. package/build/angles.spec.js +147 -0
  10. package/build/angles.spec.js.map +1 -0
  11. package/build/clamp.d.ts +17 -0
  12. package/build/clamp.d.ts.map +1 -0
  13. package/build/clamp.js +19 -0
  14. package/build/clamp.js.map +1 -0
  15. package/build/clamp.spec.d.ts +2 -0
  16. package/build/clamp.spec.d.ts.map +1 -0
  17. package/build/clamp.spec.js +19 -0
  18. package/build/clamp.spec.js.map +1 -0
  19. package/build/documentation-validation.spec.d.ts +11 -0
  20. package/build/documentation-validation.spec.d.ts.map +1 -0
  21. package/build/documentation-validation.spec.js +401 -0
  22. package/build/documentation-validation.spec.js.map +1 -0
  23. package/build/index.d.ts +8 -0
  24. package/build/index.d.ts.map +1 -0
  25. package/build/index.js +8 -0
  26. package/build/index.js.map +1 -0
  27. package/build/interpolation.d.ts +175 -0
  28. package/build/interpolation.d.ts.map +1 -0
  29. package/build/interpolation.js +369 -0
  30. package/build/interpolation.js.map +1 -0
  31. package/build/interpolation.spec.d.ts +2 -0
  32. package/build/interpolation.spec.d.ts.map +1 -0
  33. package/build/interpolation.spec.js +480 -0
  34. package/build/interpolation.spec.js.map +1 -0
  35. package/build/matrices/arithmetic.d.ts +411 -0
  36. package/build/matrices/arithmetic.d.ts.map +1 -0
  37. package/build/matrices/arithmetic.js +954 -0
  38. package/build/matrices/arithmetic.js.map +1 -0
  39. package/build/matrices/arithmetic.spec.d.ts +2 -0
  40. package/build/matrices/arithmetic.spec.d.ts.map +1 -0
  41. package/build/matrices/arithmetic.spec.js +915 -0
  42. package/build/matrices/arithmetic.spec.js.map +1 -0
  43. package/build/matrices/asserts.d.ts +306 -0
  44. package/build/matrices/asserts.d.ts.map +1 -0
  45. package/build/matrices/asserts.js +396 -0
  46. package/build/matrices/asserts.js.map +1 -0
  47. package/build/matrices/asserts.spec.d.ts +2 -0
  48. package/build/matrices/asserts.spec.d.ts.map +1 -0
  49. package/build/matrices/asserts.spec.js +565 -0
  50. package/build/matrices/asserts.spec.js.map +1 -0
  51. package/build/matrices/core.d.ts +168 -0
  52. package/build/matrices/core.d.ts.map +1 -0
  53. package/build/matrices/core.js +457 -0
  54. package/build/matrices/core.js.map +1 -0
  55. package/build/matrices/core.spec.d.ts +2 -0
  56. package/build/matrices/core.spec.d.ts.map +1 -0
  57. package/build/matrices/core.spec.js +634 -0
  58. package/build/matrices/core.spec.js.map +1 -0
  59. package/build/matrices/decompositions.d.ts +326 -0
  60. package/build/matrices/decompositions.d.ts.map +1 -0
  61. package/build/matrices/decompositions.js +816 -0
  62. package/build/matrices/decompositions.js.map +1 -0
  63. package/build/matrices/decompositions.spec.d.ts +2 -0
  64. package/build/matrices/decompositions.spec.d.ts.map +1 -0
  65. package/build/matrices/decompositions.spec.js +195 -0
  66. package/build/matrices/decompositions.spec.js.map +1 -0
  67. package/build/matrices/index.d.ts +9 -0
  68. package/build/matrices/index.d.ts.map +1 -0
  69. package/build/matrices/index.js +9 -0
  70. package/build/matrices/index.js.map +1 -0
  71. package/build/matrices/linear-algebra.d.ts +64 -0
  72. package/build/matrices/linear-algebra.d.ts.map +1 -0
  73. package/build/matrices/linear-algebra.js +253 -0
  74. package/build/matrices/linear-algebra.js.map +1 -0
  75. package/build/matrices/linear-algebra.spec.d.ts +2 -0
  76. package/build/matrices/linear-algebra.spec.d.ts.map +1 -0
  77. package/build/matrices/linear-algebra.spec.js +355 -0
  78. package/build/matrices/linear-algebra.spec.js.map +1 -0
  79. package/build/matrices/normalization.d.ts +62 -0
  80. package/build/matrices/normalization.d.ts.map +1 -0
  81. package/build/matrices/normalization.js +167 -0
  82. package/build/matrices/normalization.js.map +1 -0
  83. package/build/matrices/normalization.spec.d.ts +2 -0
  84. package/build/matrices/normalization.spec.d.ts.map +1 -0
  85. package/build/matrices/normalization.spec.js +335 -0
  86. package/build/matrices/normalization.spec.js.map +1 -0
  87. package/build/matrices/transformations.d.ts +484 -0
  88. package/build/matrices/transformations.d.ts.map +1 -0
  89. package/build/matrices/transformations.js +592 -0
  90. package/build/matrices/transformations.js.map +1 -0
  91. package/build/matrices/transformations.spec.d.ts +2 -0
  92. package/build/matrices/transformations.spec.d.ts.map +1 -0
  93. package/build/matrices/transformations.spec.js +755 -0
  94. package/build/matrices/transformations.spec.js.map +1 -0
  95. package/build/matrices/types.d.ts +134 -0
  96. package/build/matrices/types.d.ts.map +1 -0
  97. package/build/matrices/types.js +6 -0
  98. package/build/matrices/types.js.map +1 -0
  99. package/build/quaternions/asserts.d.ts +77 -0
  100. package/build/quaternions/asserts.d.ts.map +1 -0
  101. package/build/quaternions/asserts.js +175 -0
  102. package/build/quaternions/asserts.js.map +1 -0
  103. package/build/quaternions/asserts.spec.d.ts +2 -0
  104. package/build/quaternions/asserts.spec.d.ts.map +1 -0
  105. package/build/quaternions/asserts.spec.js +320 -0
  106. package/build/quaternions/asserts.spec.js.map +1 -0
  107. package/build/quaternions/conversions.d.ts +73 -0
  108. package/build/quaternions/conversions.d.ts.map +1 -0
  109. package/build/quaternions/conversions.js +179 -0
  110. package/build/quaternions/conversions.js.map +1 -0
  111. package/build/quaternions/conversions.spec.d.ts +2 -0
  112. package/build/quaternions/conversions.spec.d.ts.map +1 -0
  113. package/build/quaternions/conversions.spec.js +344 -0
  114. package/build/quaternions/conversions.spec.js.map +1 -0
  115. package/build/quaternions/core.d.ts +203 -0
  116. package/build/quaternions/core.d.ts.map +1 -0
  117. package/build/quaternions/core.js +374 -0
  118. package/build/quaternions/core.js.map +1 -0
  119. package/build/quaternions/core.spec.d.ts +2 -0
  120. package/build/quaternions/core.spec.d.ts.map +1 -0
  121. package/build/quaternions/core.spec.js +294 -0
  122. package/build/quaternions/core.spec.js.map +1 -0
  123. package/build/quaternions/index.d.ts +7 -0
  124. package/build/quaternions/index.d.ts.map +1 -0
  125. package/build/quaternions/index.js +7 -0
  126. package/build/quaternions/index.js.map +1 -0
  127. package/build/quaternions/interpolation.d.ts +54 -0
  128. package/build/quaternions/interpolation.d.ts.map +1 -0
  129. package/build/quaternions/interpolation.js +201 -0
  130. package/build/quaternions/interpolation.js.map +1 -0
  131. package/build/quaternions/interpolation.spec.d.ts +2 -0
  132. package/build/quaternions/interpolation.spec.d.ts.map +1 -0
  133. package/build/quaternions/interpolation.spec.js +64 -0
  134. package/build/quaternions/interpolation.spec.js.map +1 -0
  135. package/build/quaternions/predefined.d.ts +36 -0
  136. package/build/quaternions/predefined.d.ts.map +1 -0
  137. package/build/quaternions/predefined.js +42 -0
  138. package/build/quaternions/predefined.js.map +1 -0
  139. package/build/quaternions/predefined.spec.d.ts +2 -0
  140. package/build/quaternions/predefined.spec.d.ts.map +1 -0
  141. package/build/quaternions/predefined.spec.js +35 -0
  142. package/build/quaternions/predefined.spec.js.map +1 -0
  143. package/build/quaternions/types.d.ts +55 -0
  144. package/build/quaternions/types.d.ts.map +1 -0
  145. package/build/quaternions/types.js +7 -0
  146. package/build/quaternions/types.js.map +1 -0
  147. package/build/random.d.ts +66 -0
  148. package/build/random.d.ts.map +1 -0
  149. package/build/random.js +115 -0
  150. package/build/random.js.map +1 -0
  151. package/build/random.spec.d.ts +2 -0
  152. package/build/random.spec.d.ts.map +1 -0
  153. package/build/random.spec.js +267 -0
  154. package/build/random.spec.js.map +1 -0
  155. package/build/vectors/asserts.d.ts +182 -0
  156. package/build/vectors/asserts.d.ts.map +1 -0
  157. package/build/vectors/asserts.js +285 -0
  158. package/build/vectors/asserts.js.map +1 -0
  159. package/build/vectors/asserts.spec.d.ts +2 -0
  160. package/build/vectors/asserts.spec.d.ts.map +1 -0
  161. package/build/vectors/asserts.spec.js +260 -0
  162. package/build/vectors/asserts.spec.js.map +1 -0
  163. package/build/vectors/core.d.ts +507 -0
  164. package/build/vectors/core.d.ts.map +1 -0
  165. package/build/vectors/core.js +825 -0
  166. package/build/vectors/core.js.map +1 -0
  167. package/build/vectors/core.spec.d.ts +2 -0
  168. package/build/vectors/core.spec.d.ts.map +1 -0
  169. package/build/vectors/core.spec.js +343 -0
  170. package/build/vectors/core.spec.js.map +1 -0
  171. package/build/vectors/index.d.ts +6 -0
  172. package/build/vectors/index.d.ts.map +1 -0
  173. package/build/vectors/index.js +6 -0
  174. package/build/vectors/index.js.map +1 -0
  175. package/build/vectors/interpolation.d.ts +404 -0
  176. package/build/vectors/interpolation.d.ts.map +1 -0
  177. package/build/vectors/interpolation.js +585 -0
  178. package/build/vectors/interpolation.js.map +1 -0
  179. package/build/vectors/interpolation.spec.d.ts +2 -0
  180. package/build/vectors/interpolation.spec.d.ts.map +1 -0
  181. package/build/vectors/interpolation.spec.js +378 -0
  182. package/build/vectors/interpolation.spec.js.map +1 -0
  183. package/build/vectors/predefined.d.ts +191 -0
  184. package/build/vectors/predefined.d.ts.map +1 -0
  185. package/build/vectors/predefined.js +191 -0
  186. package/build/vectors/predefined.js.map +1 -0
  187. package/build/vectors/predefined.spec.d.ts +2 -0
  188. package/build/vectors/predefined.spec.d.ts.map +1 -0
  189. package/build/vectors/predefined.spec.js +333 -0
  190. package/build/vectors/predefined.spec.js.map +1 -0
  191. package/build/vectors/types.d.ts +62 -0
  192. package/build/vectors/types.d.ts.map +1 -0
  193. package/build/vectors/types.js +6 -0
  194. package/build/vectors/types.js.map +1 -0
  195. package/package.json +75 -0
@@ -0,0 +1,168 @@
1
+ import { IMatrix, IMatrix1, IMatrix2, IMatrix3, IMatrix4, TMatrixResult } from './types.js';
2
+ export declare function MatrixCreate(): IMatrix1;
3
+ export declare function MatrixCreate(size: 1): IMatrix1;
4
+ export declare function MatrixCreate(size: 2): IMatrix2;
5
+ export declare function MatrixCreate(size: 3): IMatrix3;
6
+ export declare function MatrixCreate(size: 4): IMatrix4;
7
+ export declare function MatrixCreate(size: number): IMatrix;
8
+ export declare function MatrixCreate(rows: number, cols: number): IMatrix;
9
+ /**
10
+ * Returns the dimensions of a matrix as [rows, columns].
11
+ * @param matrix - The matrix to measure
12
+ * @returns {[number, number]} Tuple [rows, columns]. Returns [0, 0] for empty matrices.
13
+ * @throws {Error} If the input is not a valid matrix
14
+ * @example MatrixSize([[1, 2, 3], [4, 5, 6]]) // [2, 3]
15
+ */
16
+ export declare function MatrixSize(matrix: IMatrix): [number, number];
17
+ /**
18
+ * Returns the size of a square matrix (number of rows/columns).
19
+ * @param matrix - The square matrix to measure
20
+ * @returns {number} The size (n for an n×n matrix)
21
+ * @throws {Error} If the matrix is not square
22
+ * @example MatrixSizeSquare([[1, 2], [3, 4]]) // 2
23
+ */
24
+ export declare function MatrixSizeSquare(matrix: IMatrix): number;
25
+ /**
26
+ * Validates that the input is a well-formed matrix.
27
+ * @param matrix - The value to validate as a matrix
28
+ * @returns {boolean} True if the input is a valid matrix, false otherwise
29
+ * @example MatrixIsValid([[1, 2], [3, 4]]) // true
30
+ * @example MatrixIsValid([[1, 'invalid'], [3, 4]]) // false
31
+ */
32
+ export declare function MatrixIsValid(matrix: unknown): boolean;
33
+ /**
34
+ * Checks if a matrix is square (equal number of rows and columns).
35
+ * @param matrix - The matrix to check
36
+ * @returns {boolean} True if the matrix is square, false otherwise
37
+ * @example MatrixIsSquare([[1, 2], [3, 4]]) // true (2×2)
38
+ * @example MatrixIsSquare([[1, 2, 3], [4, 5, 6]]) // false (3×2)
39
+ */
40
+ export declare function MatrixIsSquare(matrix: IMatrix): boolean;
41
+ /**
42
+ * Checks if a matrix is a zero matrix (all elements are zero within tolerance).
43
+ * @param matrix - The matrix to check
44
+ * @param threshold - Tolerance for considering values as zero (default: 1e-14)
45
+ * @returns {boolean} True if all matrix elements are within threshold of zero
46
+ * @throws {Error} If the input is not a valid matrix
47
+ * @example MatrixIsZero([[0, 0], [0, 0]]) // true
48
+ * @example MatrixIsZero([[1e-15, 0], [0, 0]]) // true (within default threshold)
49
+ * @example MatrixIsZero([[0.1, 0], [0, 0]]) // false
50
+ */
51
+ export declare function MatrixIsZero(matrix: IMatrix, threshold?: number): boolean;
52
+ /**
53
+ * Checks if a matrix is an identity matrix (1s on the main diagonal, 0s elsewhere).
54
+ * @param matrix - The matrix to check
55
+ * @param threshold - Tolerance for floating-point comparisons (default: 1e-14)
56
+ * @returns {boolean} True if the matrix is an identity matrix within tolerance
57
+ * @throws {Error} If the input is not a valid matrix
58
+ * @example MatrixIsIdentity([[1, 0], [0, 1]]) // true
59
+ * @example MatrixIsIdentity([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) // true
60
+ * @example MatrixIsIdentity([[1, 1], [0, 1]]) // false
61
+ */
62
+ export declare function MatrixIsIdentity(matrix: IMatrix, threshold?: number): boolean;
63
+ /**
64
+ * Checks if a matrix is symmetric (A = Aᵀ, i.e. A[i][j] === A[j][i] for all i, j).
65
+ * @param matrix - The matrix to check (must be square)
66
+ * @param threshold - Tolerance for floating-point comparisons (default: 1e-14)
67
+ * @returns {boolean} True if the matrix is symmetric within tolerance
68
+ * @throws {Error} If the input is not a valid matrix
69
+ * @example MatrixIsSymmetric([[1, 2], [2, 1]]) // true
70
+ * @example MatrixIsSymmetric([[1, 2], [3, 4]]) // false
71
+ * @example MatrixIsSymmetric([[1, 2, 3], [2, 5, 4], [3, 4, 6]]) // true
72
+ */
73
+ export declare function MatrixIsSymmetric(matrix: IMatrix, threshold?: number): boolean;
74
+ /**
75
+ * Checks if a matrix is diagonal (all off-diagonal elements are zero within tolerance).
76
+ * A diagonal matrix has non-zero values only on its main diagonal.
77
+ * @param matrix - The matrix to check (must be square)
78
+ * @param threshold - Tolerance for considering values as zero (default: 1e-14)
79
+ * @returns {boolean} True if the matrix is diagonal within tolerance
80
+ * @throws {Error} If the input is not a valid matrix
81
+ * @example MatrixIsDiagonal([[3, 0], [0, 7]]) // true
82
+ * @example MatrixIsDiagonal([[1, 0, 0], [0, 5, 0], [0, 0, 2]]) // true
83
+ * @example MatrixIsDiagonal([[1, 2], [0, 1]]) // false
84
+ */
85
+ export declare function MatrixIsDiagonal(matrix: IMatrix, threshold?: number): boolean;
86
+ /**
87
+ * Creates an identity matrix of the specified size.
88
+ * @param size - The dimensions of the square identity matrix (must be non-negative integer)
89
+ * @returns {IMatrix} A square identity matrix of size n×n
90
+ * @throws {Error} If size is negative or not an integer
91
+ * @example MatrixIdentity(2) // [[1, 0], [0, 1]]
92
+ * @example MatrixIdentity(3) // [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
93
+ */
94
+ export declare function MatrixIdentity(size: 0): IMatrix;
95
+ export declare function MatrixIdentity(size: 1): IMatrix1;
96
+ export declare function MatrixIdentity(size: 2): IMatrix2;
97
+ export declare function MatrixIdentity(size: 3): IMatrix3;
98
+ export declare function MatrixIdentity(size: 4): IMatrix4;
99
+ export declare function MatrixIdentity(size: number): IMatrix;
100
+ /**
101
+ * Creates a deep copy of the given matrix.
102
+ * @param matrix - The matrix to clone (supports both IMatrix and IMatrixFlat formats)
103
+ * @returns {IMatrix | IMatrixFlat} A new matrix with identical values but independent memory allocation
104
+ * @throws {Error} If the input is not a valid matrix
105
+ * @example MatrixClone([[1, 2], [3, 4]]) // [[1, 2], [3, 4]] (independent copy)
106
+ * @example MatrixClone({data: Float64Array[1,2,3,4], rows: 2, columns: 2}) // New IMatrixFlat with copied data
107
+ */
108
+ export declare function MatrixClone<T extends IMatrix>(matrix: T): TMatrixResult<T>;
109
+ /**
110
+ * Checks if two matrices are equal within a specified tolerance.
111
+ * @param a - First matrix to compare (supports both IMatrix and IMatrixFlat formats)
112
+ * @param b - Second matrix to compare (supports both IMatrix and IMatrixFlat formats)
113
+ * @param tolerance - Maximum allowed difference between corresponding elements (default: 1e-8)
114
+ * @returns {boolean} True if matrices are equal within tolerance, false otherwise
115
+ * @throws {Error} If either input is not a valid matrix or if matrix data is corrupted
116
+ * @example MatrixEquals([[1, 2]], [[1.0001, 2]], 0.001) // true
117
+ * @example MatrixEquals([[1, 2]], [[1, 3]]) // false
118
+ */
119
+ export declare function MatrixEquals(a: IMatrix, b: IMatrix, tolerance?: number): boolean;
120
+ /**
121
+ * Converts a matrix to a formatted string representation.
122
+ * @param matrix - The matrix to convert to string (supports both IMatrix and IMatrixFlat formats)
123
+ * @param precision - Number of decimal places for formatting (default: 2)
124
+ * @returns {string} A formatted string representation of the matrix
125
+ * @throws {Error} If the input is not a valid matrix
126
+ * @example MatrixToString([[1.23, 2.7]]) // "[ 1.23, 2.70 ]"
127
+ * @example MatrixToString([[1, 2], [3, 4]], 0) // "[ 1, 2 ]\n[ 3, 4 ]"
128
+ */
129
+ export declare function MatrixToString(matrix: IMatrix, precision?: number): string;
130
+ /**
131
+ * Computes the rank of a matrix using Gaussian elimination.
132
+ * @param matrix - The input matrix (any dimensions, supports both IMatrix and IMatrixFlat formats)
133
+ * @param tolerance - Numerical tolerance for zero detection (default: 1e-10)
134
+ * @returns {number} The rank of the matrix (0 ≤ rank ≤ min(rows, columns))
135
+ * @throws {Error} If the matrix contains invalid values
136
+ * @example MatrixRank([[1, 2], [2, 4]]) // 1 (second row = 2 × first row)
137
+ * @example MatrixRank([[1, 0], [0, 1]]) // 2 (full rank)
138
+ */
139
+ export declare function MatrixRank(matrix: IMatrix, tolerance?: number): number;
140
+ /**
141
+ * Computes the trace of a matrix (sum of main diagonal elements).
142
+ * @param matrix - The input matrix (can be square or rectangular, supports both IMatrix and IMatrixFlat formats)
143
+ * @returns {number} The trace value (sum of diagonal elements)
144
+ * @throws {Error} If the matrix contains invalid values
145
+ * @example MatrixTrace([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) // 15 (1 + 5 + 9)
146
+ * @example MatrixTrace([[1, 2], [3, 4], [5, 6]]) // 5 (1 + 4, rectangular matrix)
147
+ */
148
+ export declare function MatrixTrace(matrix: IMatrix): number;
149
+ /**
150
+ * Returns the transpose of a matrix (rows become columns and vice versa).
151
+ * @param matrix - The matrix to transpose (can be any m×n matrix, supports both IMatrix and IMatrixFlat formats)
152
+ * @returns {IMatrix | IMatrixFlat} The transposed matrix with dimensions n×m (same format as input)
153
+ * @throws {Error} If the input is not a valid matrix
154
+ * @example MatrixTranspose([[1, 2, 3], [4, 5, 6]]) // [[1, 4], [2, 5], [3, 6]]
155
+ * @example MatrixTranspose([[1, 2], [3, 4]]) // [[1, 3], [2, 4]]
156
+ */
157
+ export declare function MatrixTranspose<T extends IMatrix>(matrix: T): TMatrixResult<T>;
158
+ /**
159
+ * Applies a transformation function to each element of the matrix.
160
+ * @param matrix - The input matrix to transform (supports both IMatrix and IMatrixFlat formats)
161
+ * @param fn - Transformation function: (value, row, col) => transformedValue
162
+ * @returns {IMatrix | IMatrixFlat} A new matrix with transformed values (same dimensions and format as input)
163
+ * @throws {Error} If the input matrix is invalid or transformation function throws
164
+ * @example MatrixMap([[1, 2], [3, 4]], (value) => value * value) // [[1, 4], [9, 16]]
165
+ * @example MatrixMap([[1, 2], [3, 4]], (value, row, col) => value + row + col) // [[1, 3], [4, 6]]
166
+ */
167
+ export declare function MatrixMap<T extends IMatrix>(matrix: T, fn: (value: number, row: number, col: number) => number): TMatrixResult<T>;
168
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/matrices/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,457 @@
1
+ import { AssertNumber } from '@pawells/typescript-common';
2
+ import { AssertMatrix, AssertMatrixRow, AssertMatrixValue } from './asserts.js';
3
+ /**
4
+ * Creates a matrix with specified dimensions, initialized with zeros.
5
+ * @param rows - Number of rows (non-negative integer). If only this parameter is provided, creates a square matrix.
6
+ * @param cols - Number of columns (non-negative integer). Optional for square matrices.
7
+ * @returns {IMatrix | IMatrix1 | IMatrix2 | IMatrix3 | IMatrix4} Zero-filled matrix with specified dimensions
8
+ * @throws {Error} If rows or cols are negative or not integers
9
+ * @example MatrixCreate() // [[0]] (1x1 matrix)
10
+ * @example MatrixCreate(2) // [[0, 0], [0, 0]] (2x2 matrix)
11
+ * @example MatrixCreate(2, 3) // [[0, 0, 0], [0, 0, 0]] (2x3 matrix)
12
+ */
13
+ export function MatrixCreate(rows, cols) {
14
+ // Handle no parameters - default to 1x1
15
+ if (rows === undefined) {
16
+ return [[0]];
17
+ }
18
+ // Handle single parameter - create square matrix
19
+ if (cols === undefined) {
20
+ // Return specific types for common square matrices
21
+ switch (rows) {
22
+ case 1:
23
+ return [[0]];
24
+ case 2:
25
+ return [
26
+ [0, 0],
27
+ [0, 0],
28
+ ];
29
+ case 3:
30
+ return [
31
+ [0, 0, 0],
32
+ [0, 0, 0],
33
+ [0, 0, 0],
34
+ ];
35
+ case 4:
36
+ return [
37
+ [0, 0, 0, 0],
38
+ [0, 0, 0, 0],
39
+ [0, 0, 0, 0],
40
+ [0, 0, 0, 0],
41
+ ];
42
+ }
43
+ }
44
+ // Validate parameters
45
+ const effectiveCols = cols ?? rows;
46
+ AssertNumber(rows, { integer: true, gte: 0 }, { message: 'Rows must be a non-negative integer' });
47
+ AssertNumber(effectiveCols, { integer: true, gte: 0 }, { message: 'Columns must be a non-negative integer' });
48
+ const result = [];
49
+ // Create each row filled with zeros
50
+ for (let i = 0; i < rows; i++) {
51
+ result.push(new Array(effectiveCols).fill(0));
52
+ }
53
+ return result;
54
+ }
55
+ /**
56
+ * Returns the dimensions of a matrix as [rows, columns].
57
+ * @param matrix - The matrix to measure
58
+ * @returns {[number, number]} Tuple [rows, columns]. Returns [0, 0] for empty matrices.
59
+ * @throws {Error} If the input is not a valid matrix
60
+ * @example MatrixSize([[1, 2, 3], [4, 5, 6]]) // [2, 3]
61
+ */
62
+ export function MatrixSize(matrix) {
63
+ // Basic validation without calling AssertMatrix to avoid circular dependency
64
+ if (!Array.isArray(matrix)) {
65
+ throw new Error('Input must be an array');
66
+ }
67
+ // Handle empty matrix or matrix with no columns
68
+ if (matrix.length === 0 || !Array.isArray(matrix[0]))
69
+ return [0, 0];
70
+ return [matrix.length, matrix[0]?.length ?? 0];
71
+ }
72
+ /**
73
+ * Returns the size of a square matrix (number of rows/columns).
74
+ * @param matrix - The square matrix to measure
75
+ * @returns {number} The size (n for an n×n matrix)
76
+ * @throws {Error} If the matrix is not square
77
+ * @example MatrixSizeSquare([[1, 2], [3, 4]]) // 2
78
+ */
79
+ export function MatrixSizeSquare(matrix) {
80
+ AssertMatrix(matrix, { square: true });
81
+ const [rows] = MatrixSize(matrix);
82
+ return rows;
83
+ }
84
+ /**
85
+ * Validates that the input is a well-formed matrix.
86
+ * @param matrix - The value to validate as a matrix
87
+ * @returns {boolean} True if the input is a valid matrix, false otherwise
88
+ * @example MatrixIsValid([[1, 2], [3, 4]]) // true
89
+ * @example MatrixIsValid([[1, 'invalid'], [3, 4]]) // false
90
+ */
91
+ export function MatrixIsValid(matrix) {
92
+ try {
93
+ AssertMatrix(matrix);
94
+ return true;
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * Checks if a matrix is square (equal number of rows and columns).
102
+ * @param matrix - The matrix to check
103
+ * @returns {boolean} True if the matrix is square, false otherwise
104
+ * @example MatrixIsSquare([[1, 2], [3, 4]]) // true (2×2)
105
+ * @example MatrixIsSquare([[1, 2, 3], [4, 5, 6]]) // false (3×2)
106
+ */
107
+ export function MatrixIsSquare(matrix) {
108
+ try {
109
+ MatrixSizeSquare(matrix);
110
+ return true;
111
+ }
112
+ catch {
113
+ return false;
114
+ }
115
+ }
116
+ /**
117
+ * Checks if a matrix is a zero matrix (all elements are zero within tolerance).
118
+ * @param matrix - The matrix to check
119
+ * @param threshold - Tolerance for considering values as zero (default: 1e-14)
120
+ * @returns {boolean} True if all matrix elements are within threshold of zero
121
+ * @throws {Error} If the input is not a valid matrix
122
+ * @example MatrixIsZero([[0, 0], [0, 0]]) // true
123
+ * @example MatrixIsZero([[1e-15, 0], [0, 0]]) // true (within default threshold)
124
+ * @example MatrixIsZero([[0.1, 0], [0, 0]]) // false
125
+ */
126
+ export function MatrixIsZero(matrix, threshold = 1e-14) {
127
+ AssertMatrix(matrix);
128
+ const [rows, cols] = MatrixSize(matrix);
129
+ if (rows === 0 || cols === 0)
130
+ return true; // Empty matrix is considered zero
131
+ for (let row = 0; row < rows; row++) {
132
+ const matrixRow = matrix[row];
133
+ AssertMatrixRow(matrixRow, { rowIndex: row });
134
+ for (let col = 0; col < cols; col++) {
135
+ const value = matrixRow[col];
136
+ AssertMatrixValue(value, { rowIndex: row, columnIndex: col });
137
+ if (Math.abs(value) > threshold) {
138
+ return false; // Found a non-zero value
139
+ }
140
+ }
141
+ }
142
+ return true; // All values are within the threshold
143
+ }
144
+ /**
145
+ * Checks if a matrix is an identity matrix (1s on the main diagonal, 0s elsewhere).
146
+ * @param matrix - The matrix to check
147
+ * @param threshold - Tolerance for floating-point comparisons (default: 1e-14)
148
+ * @returns {boolean} True if the matrix is an identity matrix within tolerance
149
+ * @throws {Error} If the input is not a valid matrix
150
+ * @example MatrixIsIdentity([[1, 0], [0, 1]]) // true
151
+ * @example MatrixIsIdentity([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) // true
152
+ * @example MatrixIsIdentity([[1, 1], [0, 1]]) // false
153
+ */
154
+ export function MatrixIsIdentity(matrix, threshold = 1e-14) {
155
+ AssertMatrix(matrix);
156
+ const [rows, cols] = MatrixSize(matrix);
157
+ if (rows !== cols)
158
+ return false; // Identity must be square
159
+ for (let row = 0; row < rows; row++) {
160
+ const matrixRow = matrix[row];
161
+ AssertMatrixRow(matrixRow, { rowIndex: row });
162
+ for (let col = 0; col < cols; col++) {
163
+ const value = matrixRow[col];
164
+ AssertMatrixValue(value, { rowIndex: row, columnIndex: col });
165
+ const expected = row === col ? 1 : 0;
166
+ if (Math.abs(value - expected) > threshold)
167
+ return false;
168
+ }
169
+ }
170
+ return true;
171
+ }
172
+ /**
173
+ * Checks if a matrix is symmetric (A = Aᵀ, i.e. A[i][j] === A[j][i] for all i, j).
174
+ * @param matrix - The matrix to check (must be square)
175
+ * @param threshold - Tolerance for floating-point comparisons (default: 1e-14)
176
+ * @returns {boolean} True if the matrix is symmetric within tolerance
177
+ * @throws {Error} If the input is not a valid matrix
178
+ * @example MatrixIsSymmetric([[1, 2], [2, 1]]) // true
179
+ * @example MatrixIsSymmetric([[1, 2], [3, 4]]) // false
180
+ * @example MatrixIsSymmetric([[1, 2, 3], [2, 5, 4], [3, 4, 6]]) // true
181
+ */
182
+ export function MatrixIsSymmetric(matrix, threshold = 1e-14) {
183
+ AssertMatrix(matrix);
184
+ const [rows, cols] = MatrixSize(matrix);
185
+ if (rows !== cols)
186
+ return false; // Symmetry requires a square matrix
187
+ for (let row = 0; row < rows; row++) {
188
+ const matrixRow = matrix[row];
189
+ AssertMatrixRow(matrixRow, { rowIndex: row });
190
+ for (let col = row + 1; col < cols; col++) {
191
+ const upper = matrixRow[col];
192
+ AssertMatrixValue(upper, { rowIndex: row, columnIndex: col });
193
+ const lowerRow = matrix[col];
194
+ AssertMatrixRow(lowerRow, { rowIndex: col });
195
+ const lower = lowerRow[row];
196
+ AssertMatrixValue(lower, { rowIndex: col, columnIndex: row });
197
+ if (Math.abs(upper - lower) > threshold)
198
+ return false;
199
+ }
200
+ }
201
+ return true;
202
+ }
203
+ /**
204
+ * Checks if a matrix is diagonal (all off-diagonal elements are zero within tolerance).
205
+ * A diagonal matrix has non-zero values only on its main diagonal.
206
+ * @param matrix - The matrix to check (must be square)
207
+ * @param threshold - Tolerance for considering values as zero (default: 1e-14)
208
+ * @returns {boolean} True if the matrix is diagonal within tolerance
209
+ * @throws {Error} If the input is not a valid matrix
210
+ * @example MatrixIsDiagonal([[3, 0], [0, 7]]) // true
211
+ * @example MatrixIsDiagonal([[1, 0, 0], [0, 5, 0], [0, 0, 2]]) // true
212
+ * @example MatrixIsDiagonal([[1, 2], [0, 1]]) // false
213
+ */
214
+ export function MatrixIsDiagonal(matrix, threshold = 1e-14) {
215
+ AssertMatrix(matrix);
216
+ const [rows, cols] = MatrixSize(matrix);
217
+ if (rows !== cols)
218
+ return false; // Diagonality requires a square matrix
219
+ for (let row = 0; row < rows; row++) {
220
+ const matrixRow = matrix[row];
221
+ AssertMatrixRow(matrixRow, { rowIndex: row });
222
+ for (let col = 0; col < cols; col++) {
223
+ if (row === col)
224
+ continue; // Skip diagonal elements
225
+ const value = matrixRow[col];
226
+ AssertMatrixValue(value, { rowIndex: row, columnIndex: col });
227
+ if (Math.abs(value) > threshold)
228
+ return false;
229
+ }
230
+ }
231
+ return true;
232
+ }
233
+ export function MatrixIdentity(size) {
234
+ AssertNumber(size, { integer: true, gte: 0 }, { message: 'Size must be a non-negative integer' });
235
+ const result = MatrixCreate(size, size);
236
+ // Set diagonal elements to 1
237
+ for (let i = 0; i < size; i++) {
238
+ const row = result[i];
239
+ AssertMatrixRow(row, { rowIndex: i });
240
+ row[i] = 1;
241
+ }
242
+ return result;
243
+ }
244
+ /**
245
+ * Creates a deep copy of the given matrix.
246
+ * @param matrix - The matrix to clone (supports both IMatrix and IMatrixFlat formats)
247
+ * @returns {IMatrix | IMatrixFlat} A new matrix with identical values but independent memory allocation
248
+ * @throws {Error} If the input is not a valid matrix
249
+ * @example MatrixClone([[1, 2], [3, 4]]) // [[1, 2], [3, 4]] (independent copy)
250
+ * @example MatrixClone({data: Float64Array[1,2,3,4], rows: 2, columns: 2}) // New IMatrixFlat with copied data
251
+ */
252
+ export function MatrixClone(matrix) {
253
+ AssertMatrix(matrix);
254
+ // Create a deep copy by mapping each row to a new array
255
+ return matrix.map((row) => [...row]);
256
+ }
257
+ /**
258
+ * Checks if two matrices are equal within a specified tolerance.
259
+ * @param a - First matrix to compare (supports both IMatrix and IMatrixFlat formats)
260
+ * @param b - Second matrix to compare (supports both IMatrix and IMatrixFlat formats)
261
+ * @param tolerance - Maximum allowed difference between corresponding elements (default: 1e-8)
262
+ * @returns {boolean} True if matrices are equal within tolerance, false otherwise
263
+ * @throws {Error} If either input is not a valid matrix or if matrix data is corrupted
264
+ * @example MatrixEquals([[1, 2]], [[1.0001, 2]], 0.001) // true
265
+ * @example MatrixEquals([[1, 2]], [[1, 3]]) // false
266
+ */
267
+ export function MatrixEquals(a, b, tolerance = 1e-8) {
268
+ AssertMatrix(a);
269
+ AssertMatrix(b);
270
+ AssertNumber(tolerance, { gte: 0 }, { message: 'Tolerance must be a non-negative number' });
271
+ const [rowsA, colsA] = MatrixSize(a);
272
+ const [rowsB, colsB] = MatrixSize(b);
273
+ if (rowsA !== rowsB || colsA !== colsB) {
274
+ return false;
275
+ }
276
+ for (let row = 0; row < rowsA; row++) {
277
+ const rowA = a[row];
278
+ const rowB = b[row];
279
+ AssertMatrixRow(rowA, { rowIndex: row });
280
+ AssertMatrixRow(rowB, { rowIndex: row });
281
+ for (let col = 0; col < colsA; col++) {
282
+ const valA = rowA[col];
283
+ const valB = rowB[col];
284
+ AssertMatrixValue(valA, { rowIndex: row, columnIndex: col });
285
+ AssertMatrixValue(valB, { rowIndex: row, columnIndex: col });
286
+ if (Math.abs(valA - valB) > tolerance) {
287
+ return false;
288
+ }
289
+ }
290
+ }
291
+ return true;
292
+ }
293
+ /**
294
+ * Converts a matrix to a formatted string representation.
295
+ * @param matrix - The matrix to convert to string (supports both IMatrix and IMatrixFlat formats)
296
+ * @param precision - Number of decimal places for formatting (default: 2)
297
+ * @returns {string} A formatted string representation of the matrix
298
+ * @throws {Error} If the input is not a valid matrix
299
+ * @example MatrixToString([[1.23, 2.7]]) // "[ 1.23, 2.70 ]"
300
+ * @example MatrixToString([[1, 2], [3, 4]], 0) // "[ 1, 2 ]\n[ 3, 4 ]"
301
+ */
302
+ export function MatrixToString(matrix, precision = 2) {
303
+ AssertMatrix(matrix);
304
+ AssertNumber(precision, { integer: true, gte: 0 }, { message: 'Precision must be a non-negative integer' });
305
+ return matrix
306
+ .map((row) => '[ ' + row
307
+ .map((val) => {
308
+ return typeof val === 'number' ? val.toFixed(precision) : String(val);
309
+ })
310
+ .join(', ') + ' ]')
311
+ .join('\n');
312
+ }
313
+ /**
314
+ * Computes the rank of a matrix using Gaussian elimination.
315
+ * @param matrix - The input matrix (any dimensions, supports both IMatrix and IMatrixFlat formats)
316
+ * @param tolerance - Numerical tolerance for zero detection (default: 1e-10)
317
+ * @returns {number} The rank of the matrix (0 ≤ rank ≤ min(rows, columns))
318
+ * @throws {Error} If the matrix contains invalid values
319
+ * @example MatrixRank([[1, 2], [2, 4]]) // 1 (second row = 2 × first row)
320
+ * @example MatrixRank([[1, 0], [0, 1]]) // 2 (full rank)
321
+ */
322
+ export function MatrixRank(matrix, tolerance = 1e-10) {
323
+ AssertMatrix(matrix);
324
+ AssertNumber(tolerance, { gte: 0 }, { message: 'Tolerance must be a non-negative number' });
325
+ const [rows, cols] = MatrixSize(matrix);
326
+ if (rows === 0 || cols === 0)
327
+ return 0;
328
+ // Make a deep copy to avoid mutating the input
329
+ const mat = matrix.map((row) => [...row]);
330
+ let rank = 0;
331
+ const rowUsed = new Array(rows).fill(false);
332
+ for (let col = 0; col < cols; col++) {
333
+ let pivotRow = -1;
334
+ for (let row = 0; row < rows; row++) {
335
+ const matrixRow = mat[row];
336
+ AssertMatrixRow(matrixRow, { rowIndex: row });
337
+ const value = matrixRow[col];
338
+ AssertMatrixValue(value, { rowIndex: row, columnIndex: col });
339
+ if (!rowUsed[row] && Math.abs(value) > tolerance) {
340
+ pivotRow = row;
341
+ break;
342
+ }
343
+ }
344
+ if (pivotRow === -1)
345
+ continue;
346
+ rowUsed[pivotRow] = true;
347
+ rank++;
348
+ // Eliminate this column in all other rows
349
+ for (let row = 0; row < rows; row++) {
350
+ if (row !== pivotRow) {
351
+ const currentRow = mat[row];
352
+ const pivotRowData = mat[pivotRow];
353
+ AssertMatrixRow(currentRow, { rowIndex: row });
354
+ AssertMatrixRow(pivotRowData, { rowIndex: pivotRow });
355
+ const pivotValue = pivotRowData[col];
356
+ const currentValue = currentRow[col];
357
+ AssertMatrixValue(pivotValue, { rowIndex: pivotRow, columnIndex: col });
358
+ AssertMatrixValue(currentValue, { rowIndex: row, columnIndex: col });
359
+ const factor = currentValue / pivotValue;
360
+ for (let k = col; k < cols; k++) {
361
+ const pivotK = pivotRowData[k];
362
+ const currentK = currentRow[k];
363
+ AssertMatrixValue(pivotK, { rowIndex: pivotRow, columnIndex: k });
364
+ AssertMatrixValue(currentK, { rowIndex: row, columnIndex: k });
365
+ currentRow[k] = currentK - (factor * pivotK);
366
+ const updatedValue = currentRow[k];
367
+ AssertMatrixValue(updatedValue, { rowIndex: row, columnIndex: k });
368
+ if (Math.abs(updatedValue) < tolerance) {
369
+ currentRow[k] = 0;
370
+ }
371
+ }
372
+ }
373
+ }
374
+ }
375
+ return rank;
376
+ }
377
+ /**
378
+ * Computes the trace of a matrix (sum of main diagonal elements).
379
+ * @param matrix - The input matrix (can be square or rectangular, supports both IMatrix and IMatrixFlat formats)
380
+ * @returns {number} The trace value (sum of diagonal elements)
381
+ * @throws {Error} If the matrix contains invalid values
382
+ * @example MatrixTrace([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) // 15 (1 + 5 + 9)
383
+ * @example MatrixTrace([[1, 2], [3, 4], [5, 6]]) // 5 (1 + 4, rectangular matrix)
384
+ */
385
+ export function MatrixTrace(matrix) {
386
+ AssertMatrix(matrix);
387
+ const [rows, cols] = MatrixSize(matrix);
388
+ let trace = 0;
389
+ // The trace is the sum of the diagonal elements (i.e., elements where row === col)
390
+ const n = Math.min(rows, cols);
391
+ for (let i = 0; i < n; i++) {
392
+ const row = matrix[i];
393
+ AssertMatrixRow(row, { rowIndex: i });
394
+ const val = row[i];
395
+ AssertMatrixValue(val, { rowIndex: i, columnIndex: i });
396
+ trace += val;
397
+ }
398
+ return trace;
399
+ }
400
+ /**
401
+ * Returns the transpose of a matrix (rows become columns and vice versa).
402
+ * @param matrix - The matrix to transpose (can be any m×n matrix, supports both IMatrix and IMatrixFlat formats)
403
+ * @returns {IMatrix | IMatrixFlat} The transposed matrix with dimensions n×m (same format as input)
404
+ * @throws {Error} If the input is not a valid matrix
405
+ * @example MatrixTranspose([[1, 2, 3], [4, 5, 6]]) // [[1, 4], [2, 5], [3, 6]]
406
+ * @example MatrixTranspose([[1, 2], [3, 4]]) // [[1, 3], [2, 4]]
407
+ */
408
+ export function MatrixTranspose(matrix) {
409
+ AssertMatrix(matrix);
410
+ const [rows, cols] = MatrixSize(matrix);
411
+ // Note: result dimensions are swapped (columns become rows)
412
+ const result = [];
413
+ // Initialize result matrix with swapped dimensions
414
+ for (let i = 0; i < cols; i++) {
415
+ result.push(new Array(rows).fill(0));
416
+ }
417
+ for (let row = 0; row < rows; row++) {
418
+ const matrixRow = matrix[row];
419
+ AssertMatrixRow(matrixRow, { rowIndex: row });
420
+ for (let col = 0; col < cols; col++) {
421
+ const val = matrixRow[col];
422
+ AssertMatrixValue(val, { rowIndex: row, columnIndex: col });
423
+ // Swap row and column indices in the result
424
+ const resultCol = result[col];
425
+ AssertMatrixRow(resultCol, { rowIndex: col });
426
+ resultCol[row] = val;
427
+ }
428
+ }
429
+ return result;
430
+ }
431
+ /**
432
+ * Applies a transformation function to each element of the matrix.
433
+ * @param matrix - The input matrix to transform (supports both IMatrix and IMatrixFlat formats)
434
+ * @param fn - Transformation function: (value, row, col) => transformedValue
435
+ * @returns {IMatrix | IMatrixFlat} A new matrix with transformed values (same dimensions and format as input)
436
+ * @throws {Error} If the input matrix is invalid or transformation function throws
437
+ * @example MatrixMap([[1, 2], [3, 4]], (value) => value * value) // [[1, 4], [9, 16]]
438
+ * @example MatrixMap([[1, 2], [3, 4]], (value, row, col) => value + row + col) // [[1, 3], [4, 6]]
439
+ */
440
+ export function MatrixMap(matrix, fn) {
441
+ AssertMatrix(matrix);
442
+ const [rows, cols] = MatrixSize(matrix);
443
+ const result = [];
444
+ for (let row = 0; row < rows; row++) {
445
+ const matrixRow = matrix[row];
446
+ AssertMatrixRow(matrixRow, { rowIndex: row });
447
+ const newRow = [];
448
+ for (let col = 0; col < cols; col++) {
449
+ const val = matrixRow[col];
450
+ AssertMatrixValue(val, { rowIndex: row, columnIndex: col });
451
+ newRow.push(fn(val, row, col));
452
+ }
453
+ result.push(newRow);
454
+ }
455
+ return result;
456
+ }
457
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/matrices/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=core.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.spec.d.ts","sourceRoot":"","sources":["../../src/matrices/core.spec.ts"],"names":[],"mappings":""}