@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,396 @@
1
+ import { AssertArray2D, AssertNumber, SetExceptionClass, SetExceptionMessage, ThrowException } from '@pawells/typescript-common';
2
+ import { MatrixSize } from './core.js';
3
+ /**
4
+ * Custom error class for matrix-related validation failures.
5
+ *
6
+ * This error class provides a specific error type for matrix validation
7
+ * failures, making it easier to catch and handle matrix-specific errors
8
+ * separately from other types of errors in your application.
9
+ *
10
+ * @class MatrixError
11
+ * @extends Error
12
+ * @example
13
+ * ```typescript
14
+ * try {
15
+ * AssertMatrix(invalidMatrix);
16
+ * } catch (error) {
17
+ * if (error instanceof MatrixError) {
18
+ * console.log('Matrix validation failed:', error.message);
19
+ * }
20
+ * }
21
+ * ```
22
+ */
23
+ export class MatrixError extends Error {
24
+ /**
25
+ * Creates a new MatrixError instance.
26
+ *
27
+ * @param message - Optional error message describing the validation failure
28
+ */
29
+ constructor(message) {
30
+ super(message);
31
+ this.name = 'MatrixError';
32
+ // Maintains proper prototype chain for instanceof checks
33
+ Object.setPrototypeOf(this, new.target.prototype);
34
+ }
35
+ }
36
+ /**
37
+ * Validates that an unknown value is a valid matrix conforming to the IMatrix interface.
38
+ *
39
+ * This function performs comprehensive validation of matrix structure including:
40
+ * - Type checking to ensure the value is a proper matrix
41
+ * - Dimensional constraints (min/max/exact rows and columns)
42
+ * - Square matrix validation if required
43
+ * - Size validation against specified dimensions
44
+ *
45
+ * @param matrix - The value to validate as a matrix
46
+ * @param args - Validation configuration options
47
+ * @param exception - Custom exception details if validation fails
48
+ * @throws {IAssertException} When the matrix doesn't meet the specified criteria
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * // Validate a 3x3 square matrix
53
+ * AssertMatrix(someValue, { square: true, size: 3 });
54
+ *
55
+ * // Validate minimum dimensions
56
+ * AssertMatrix(someValue, { minRows: 2, minColumns: 3 });
57
+ *
58
+ * // Validate exact dimensions
59
+ * AssertMatrix(someValue, { rows: 4, columns: 5 });
60
+ * ```
61
+ */
62
+ export function AssertMatrix(matrix, args = {}, exception = {}) {
63
+ // Initialize the exception with the default MatrixError class if not provided
64
+ SetExceptionClass(exception, MatrixError);
65
+ // First validation: ensure the input is a valid 2D array structure
66
+ AssertArray2D(matrix, {}, exception);
67
+ // Second validation: verify all elements are numeric values
68
+ // Note: We check both type and NaN since NaN has type 'number' but isn't a valid matrix element
69
+ for (let i = 0; i < matrix.length; i++) {
70
+ const row = matrix[i];
71
+ if (row) {
72
+ for (let j = 0; j < row.length; j++) {
73
+ if (typeof row[j] !== 'number' || Number.isNaN(row[j])) {
74
+ SetExceptionMessage(exception, `Matrix[${i}][${j}] Not a Number`);
75
+ ThrowException(exception);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ // Extract matrix dimensions for constraint validation
81
+ const [rows, columns] = MatrixSize(matrix);
82
+ // Reject empty matrices (zero rows or zero columns)
83
+ if (rows === 0 || columns === 0) {
84
+ SetExceptionMessage(exception, 'Matrix must have at least one row and one column');
85
+ ThrowException(exception);
86
+ }
87
+ // Validate exact size constraint when specified as [rows, columns] tuple
88
+ if (Array.isArray(args.size)) {
89
+ const [expectedRows, expectedColumns] = args.size;
90
+ if (rows !== expectedRows) {
91
+ SetExceptionMessage(exception, `Matrix has ${rows} rows, expected exactly ${expectedRows}`);
92
+ ThrowException(exception);
93
+ }
94
+ if (columns !== expectedColumns) {
95
+ SetExceptionMessage(exception, `Matrix has ${columns} columns, expected exactly ${expectedColumns}`);
96
+ ThrowException(exception);
97
+ }
98
+ }
99
+ else if (typeof args.size === 'number') {
100
+ // Validate exact size constraint when specified as single number (assumes square matrix)
101
+ if (rows !== args.size) {
102
+ SetExceptionMessage(exception, `Square matrix has ${rows} rows, expected exactly ${args.size}`);
103
+ ThrowException(exception);
104
+ }
105
+ if (columns !== args.size) {
106
+ SetExceptionMessage(exception, `Square matrix has ${columns} columns, expected exactly ${args.size}`);
107
+ ThrowException(exception);
108
+ }
109
+ }
110
+ // Validate exact row count constraint when explicitly specified
111
+ if (args.rows !== undefined && rows !== args.rows) {
112
+ SetExceptionMessage(exception, `Matrix has ${rows} rows, expected exactly ${args.rows}`);
113
+ ThrowException(exception);
114
+ }
115
+ // Validate exact column count constraint when explicitly specified
116
+ if (args.columns !== undefined && columns !== args.columns) {
117
+ SetExceptionMessage(exception, `Matrix has ${columns} columns, expected exactly ${args.columns}`);
118
+ ThrowException(exception);
119
+ }
120
+ // Validate minimum row count constraint (useful for operations requiring minimum dimensions)
121
+ if (args.minRows !== undefined && rows < args.minRows) {
122
+ SetExceptionMessage(exception, `Matrix has ${rows} rows, minimum required is ${args.minRows}`);
123
+ ThrowException(exception);
124
+ }
125
+ // Validate maximum row count constraint (useful for memory or performance limits)
126
+ if (args.maxRows !== undefined && rows > args.maxRows) {
127
+ SetExceptionMessage(exception, `Matrix has ${rows} rows, maximum allowed is ${args.maxRows}`);
128
+ ThrowException(exception);
129
+ }
130
+ // Validate minimum column count constraint (useful for operations requiring minimum dimensions)
131
+ if (args.minColumns !== undefined && columns < args.minColumns) {
132
+ SetExceptionMessage(exception, `Matrix has ${columns} columns, minimum required is ${args.minColumns}`);
133
+ ThrowException(exception);
134
+ }
135
+ // Validate maximum column count constraint (useful for memory or performance limits)
136
+ if (args.maxColumns !== undefined && columns > args.maxColumns) {
137
+ SetExceptionMessage(exception, `Matrix has ${columns} columns, maximum allowed is ${args.maxColumns}`);
138
+ ThrowException(exception);
139
+ }
140
+ // Validate square matrix constraint (required for operations like determinant, inverse, etc.)
141
+ if (args.square === true && rows !== columns) {
142
+ SetExceptionMessage(exception, `Matrix must be square but has ${rows} rows and ${columns} columns`);
143
+ ThrowException(exception);
144
+ }
145
+ }
146
+ /**
147
+ * Validates that an unknown value is a valid matrix row (array of numbers).
148
+ *
149
+ * This function ensures that the provided value is a proper matrix row,
150
+ * which should be an array containing only numeric values.
151
+ *
152
+ * @param row - The value to validate as a matrix row
153
+ * @param exception - Custom exception details if validation fails
154
+ * @param rowIndex - Optional row index for more descriptive error messages
155
+ * @throws {IAssertException} When the row is not a valid array of numbers
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * // Validate a matrix row
160
+ * AssertMatrixRow([1, 2, 3, 4]);
161
+ *
162
+ * // Validate with row index for better error messages
163
+ * AssertMatrixRow([1, 2, 3, 4], {}, 0);
164
+ *
165
+ * // This would throw an exception
166
+ * AssertMatrixRow([1, "2", 3]); // Contains non-numeric value
167
+ * ```
168
+ */
169
+ export function AssertMatrixRow(row, exception = {}) {
170
+ // Initialize the exception with the default MatrixError class if not provided
171
+ SetExceptionClass(exception, MatrixError);
172
+ // First validation: ensure the input is an array
173
+ if (!Array.isArray(row)) {
174
+ const rowInfo = exception.rowIndex !== undefined ? ` at row ${exception.rowIndex}` : '';
175
+ SetExceptionMessage(exception, `Matrix row${rowInfo} must be an array`);
176
+ ThrowException(exception);
177
+ }
178
+ // Safe cast to array since we've verified it's an array
179
+ const rowArray = row;
180
+ // Second validation: ensure all elements are finite numbers
181
+ // This excludes NaN, Infinity, and -Infinity which are technically numbers but invalid for matrices
182
+ for (let i = 0; i < rowArray.length; i++) {
183
+ if (typeof rowArray[i] !== 'number' || !isFinite(rowArray[i])) {
184
+ const rowInfo = exception.rowIndex !== undefined ? ` at row ${exception.rowIndex}` : '';
185
+ SetExceptionMessage(exception, `Matrix row${rowInfo} element at index ${i} is not a finite number`);
186
+ ThrowException(exception);
187
+ }
188
+ }
189
+ }
190
+ /**
191
+ * Validates that an unknown value is a valid matrix element (finite number).
192
+ *
193
+ * This function ensures that the provided value is a proper matrix element,
194
+ * which should be a finite number (not NaN, Infinity, or -Infinity).
195
+ *
196
+ * @param value - The value to validate as a matrix element
197
+ * @param exception - Custom exception details if validation fails
198
+ * @param rowIndex - Optional row index for more descriptive error messages
199
+ * @param columnIndex - Optional column index for more descriptive error messages
200
+ * @throws {IAssertException} When the value is not a finite number
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * // Validate a matrix element
205
+ * AssertMatrixValue(42);
206
+ *
207
+ * // Validate with position information for better error messages
208
+ * AssertMatrixValue(3.14, {}, 0, 1);
209
+ *
210
+ * // This would throw an exception
211
+ * AssertMatrixValue(NaN); // Not a finite number
212
+ * AssertMatrixValue(Infinity); // Not a finite number
213
+ * AssertMatrixValue("5"); // Not a number
214
+ * ```
215
+ */
216
+ export function AssertMatrixValue(value, exception = {}) {
217
+ // Initialize the exception with the default MatrixError class if not provided
218
+ SetExceptionClass(exception, MatrixError);
219
+ // Build position information for error messages when row and column indices are available
220
+ // This provides more context about where the validation failure occurred
221
+ const position = exception.rowIndex !== undefined && exception.columnIndex !== undefined ? ` at row ${exception.rowIndex}, column ${exception.columnIndex}` : '';
222
+ SetExceptionMessage(exception, `Matrix value${position} must be a finite number`);
223
+ // Delegate to the general number assertion which handles finite number validation
224
+ AssertNumber(value, { finite: true }, exception);
225
+ }
226
+ /**
227
+ * Validates compatibility between two matrices for mathematical operations.
228
+ *
229
+ * This function checks that two matrices are compatible for operations like
230
+ * multiplication, addition, or other matrix operations that require specific
231
+ * dimensional relationships.
232
+ *
233
+ * @param a - The first matrix to validate
234
+ * @param b - The second matrix to validate
235
+ * @param args - Validation configuration options
236
+ * @param exception - Custom exception details if validation fails
237
+ * @throws {IAssertException} When the matrices are not compatible
238
+ *
239
+ * @example
240
+ * ```typescript
241
+ * // Validate matrices for multiplication (A columns must equal B rows)
242
+ * AssertMatrices(matrixA, matrixB);
243
+ *
244
+ * // Allow transposed compatibility
245
+ * AssertMatrices(matrixA, matrixB, { transposition: true });
246
+ * ```
247
+ */
248
+ export function AssertMatrices(a, b, args = {}, exception = {}) {
249
+ // Initialize the exception with the default MatrixError class if not provided
250
+ SetExceptionClass(exception, MatrixError);
251
+ // First validation: ensure both inputs are valid matrices
252
+ AssertMatrix(a, {}, exception);
253
+ AssertMatrix(b, {}, exception);
254
+ // Safe cast to IMatrix since we've validated both inputs
255
+ const matrixA = a;
256
+ const matrixB = b;
257
+ // Extract dimensions from both matrices for compatibility checking
258
+ const rowsA = matrixA.length;
259
+ const columnsA = rowsA > 0 && matrixA[0] ? matrixA[0].length : 0;
260
+ const rowsB = matrixB.length;
261
+ const columnsB = rowsB > 0 && matrixB[0] ? matrixB[0].length : 0;
262
+ // Check compatibility based on whether transposition is allowed
263
+ if (args.transposition === true) {
264
+ // With transposition allowed, check all possible multiplication combinations:
265
+ // - A × B (standard): columns of A must equal rows of B
266
+ // - A × B^T (B transposed): columns of A must equal columns of B
267
+ // - A^T × B (A transposed): rows of A must equal rows of B
268
+ // - A^T × B^T (both transposed): rows of A must equal columns of B
269
+ const canMultiplyAB = columnsA === rowsB;
270
+ const canMultiplyABT = columnsA === columnsB;
271
+ const canMultiplyATB = rowsA === rowsB;
272
+ const canMultiplyATBT = rowsA === columnsB;
273
+ if (!canMultiplyAB && !canMultiplyABT && !canMultiplyATB && !canMultiplyATBT) {
274
+ SetExceptionMessage(exception, `Matrices are not compatible for multiplication even with transposition. Matrix A is ${rowsA}×${columnsA}, Matrix B is ${rowsB}×${columnsB}`);
275
+ ThrowException(exception);
276
+ }
277
+ }
278
+ else {
279
+ // Without transposition: matrices must have identical dimensions
280
+ // This is required for element-wise operations like addition and subtraction
281
+ if (rowsA !== rowsB || columnsA !== columnsB) {
282
+ SetExceptionMessage(exception, `Matrices must have identical dimensions for addition/subtraction. Matrix A is ${rowsA}×${columnsA}, Matrix B is ${rowsB}×${columnsB}`);
283
+ ThrowException(exception);
284
+ }
285
+ }
286
+ }
287
+ /**
288
+ * Validates that an unknown value is a valid 1x1 matrix.
289
+ *
290
+ * This function ensures that the provided value is a proper 1x1 matrix,
291
+ * which should be a 2D array with exactly 1 row and 1 column containing a number.
292
+ *
293
+ * @param matrix - The value to validate as a 1x1 matrix
294
+ * @param exception - Custom exception details if validation fails
295
+ * @throws {IAssertException} When the matrix is not a valid 1x1 matrix
296
+ *
297
+ * @example
298
+ * ```typescript
299
+ * // Validate a 1x1 matrix
300
+ * AssertMatrix1([[5]]);
301
+ *
302
+ * // This would throw an exception
303
+ * AssertMatrix1([[1, 2]]); // Too many columns
304
+ * ```
305
+ */
306
+ export function AssertMatrix1(matrix, exception = {}) {
307
+ // Initialize the exception with the default MatrixError class if not provided
308
+ SetExceptionClass(exception, MatrixError);
309
+ // Delegate to the general matrix assertion with 1x1 square matrix constraints
310
+ // This ensures the matrix is exactly 1 row by 1 column
311
+ AssertMatrix(matrix, { square: true, size: 1 }, exception);
312
+ }
313
+ /**
314
+ * Validates that an unknown value is a valid 2x2 matrix.
315
+ *
316
+ * This function ensures that the provided value is a proper 2x2 matrix,
317
+ * which should be a 2D array with exactly 2 rows and 2 columns containing numbers.
318
+ *
319
+ * @param matrix - The value to validate as a 2x2 matrix
320
+ * @param exception - Custom exception details if validation fails
321
+ * @throws {IAssertException} When the matrix is not a valid 2x2 matrix
322
+ *
323
+ * @example
324
+ * ```typescript
325
+ * // Validate a 2x2 matrix
326
+ * AssertMatrix2([[1, 2], [3, 4]]);
327
+ *
328
+ * // This would throw an exception
329
+ * AssertMatrix2([[1, 2, 3], [4, 5, 6]]); // Too many columns
330
+ * ```
331
+ */
332
+ export function AssertMatrix2(matrix, exception = {}) {
333
+ // Initialize the exception with the default MatrixError class if not provided
334
+ SetExceptionClass(exception, MatrixError);
335
+ // Delegate to the general matrix assertion with 2x2 square matrix constraints
336
+ // This ensures the matrix is exactly 2 rows by 2 columns
337
+ AssertMatrix(matrix, { square: true, size: 2 }, exception);
338
+ }
339
+ /**
340
+ * Validates that an unknown value is a valid 3x3 matrix.
341
+ *
342
+ * This function ensures that the provided value is a proper 3x3 matrix,
343
+ * which should be a 2D array with exactly 3 rows and 3 columns containing numbers.
344
+ *
345
+ * @param matrix - The value to validate as a 3x3 matrix
346
+ * @param exception - Custom exception details if validation fails
347
+ * @throws {IAssertException} When the matrix is not a valid 3x3 matrix
348
+ *
349
+ * @example
350
+ * ```typescript
351
+ * // Validate a 3x3 matrix
352
+ * AssertMatrix3([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
353
+ *
354
+ * // This would throw an exception
355
+ * AssertMatrix3([[1, 2], [3, 4]]); // Too few rows and columns
356
+ * ```
357
+ */
358
+ export function AssertMatrix3(matrix, exception = {}) {
359
+ // Initialize the exception with the default MatrixError class if not provided
360
+ SetExceptionClass(exception, MatrixError);
361
+ // Delegate to the general matrix assertion with 3x3 square matrix constraints
362
+ // This ensures the matrix is exactly 3 rows by 3 columns
363
+ AssertMatrix(matrix, { square: true, size: 3 }, exception);
364
+ }
365
+ /**
366
+ * Validates that an unknown value is a valid 4x4 matrix.
367
+ *
368
+ * This function ensures that the provided value is a proper 4x4 matrix,
369
+ * which should be a 2D array with exactly 4 rows and 4 columns containing numbers.
370
+ *
371
+ * @param matrix - The value to validate as a 4x4 matrix
372
+ * @param exception - Custom exception details if validation fails
373
+ * @throws {IAssertException} When the matrix is not a valid 4x4 matrix
374
+ *
375
+ * @example
376
+ * ```typescript
377
+ * // Validate a 4x4 matrix
378
+ * AssertMatrix4([
379
+ * [1, 2, 3, 4],
380
+ * [5, 6, 7, 8],
381
+ * [9, 10, 11, 12],
382
+ * [13, 14, 15, 16]
383
+ * ]);
384
+ *
385
+ * // This would throw an exception
386
+ * AssertMatrix4([[1, 2], [3, 4]]); // Too few rows and columns
387
+ * ```
388
+ */
389
+ export function AssertMatrix4(matrix, exception = {}) {
390
+ // Initialize the exception with the default MatrixError class if not provided
391
+ SetExceptionClass(exception, MatrixError);
392
+ // Delegate to the general matrix assertion with 4x4 square matrix constraints
393
+ // This ensures the matrix is exactly 4 rows by 4 columns
394
+ AssertMatrix(matrix, { square: true, size: 4 }, exception);
395
+ }
396
+ //# sourceMappingURL=asserts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asserts.js","sourceRoot":"","sources":["../../src/matrices/asserts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=asserts.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asserts.spec.d.ts","sourceRoot":"","sources":["../../src/matrices/asserts.spec.ts"],"names":[],"mappings":""}