const isMatrix = require('./util/isMatrix');
const { INVALID_MATRIX } = require('./Error');
/**
* Creates a new Matrix
* @namespace Matrix
* @class
* @param {number[][]} A - Two dimensional array where
* A[i][j] represents the i-th row and j-th column of a matrix
*/
function Matrix(A) {
if (!isMatrix(A)) {
throw new Error(INVALID_MATRIX);
}
this._matrix = A;
this._digit = 8;
}
module.exports = Matrix;
// structure
Matrix.prototype.isDiagonal = require('./core/structure/isDiagonal');
Matrix.prototype.isSkewSymmetric = require('./core/structure/isSkewSymmetric');
Matrix.prototype.isSquare = require('./core/structure/isSquare');
Matrix.prototype.isSymmetric = require('./core/structure/isSymmetric');
Matrix.prototype.isLowerTriangular = require('./core/structure/isLowerTriangular');
Matrix.prototype.isUpperTriangular = require('./core/structure/isUpperTriangular');
Matrix.prototype.isOrthogonal = require('./core/structure/isOrthogonal');
// property
Matrix.prototype.cond = require('./core/properties/cond');
Matrix.prototype.det = require('./core/properties/det');
Matrix.prototype.eigenvalues = require('./core/properties/eigenvalues');
Matrix.prototype.nullity = require('./core/properties/nullity');
Matrix.prototype.norm = require('./core/properties/norm');
Matrix.prototype.rank = require('./core/properties/rank');
Matrix.prototype.size = require('./core/properties/size');
Matrix.prototype.trace = require('./core/properties/trace');
// operations
Matrix.add = require('./core/operations/add');
Matrix.inverse = require('./core/operations/inverse');
Matrix.multiply = require('./core/operations/multiply');
Matrix.pow = require('./core/operations/pow');
Matrix.subtract = require('./core/operations/subtract');
Matrix.transpose = require('./core/operations/transpose');
// Linear-equations
Matrix.backward = require('./core/linear-equations/backward');
Matrix.forward = require('./core/linear-equations/forward');
Matrix.solve = require('./core/linear-equations/solve');
// decompositions
Matrix.LU = require('./core/decompositions/LU');
Matrix.QR = require('./core/decompositions/QR');
// utils
Matrix.clone = require('./core/utils/clone');
Matrix.column = require('./core/utils/column');
Matrix.diag = require('./core/utils/diag');
Matrix.elementwise = require('./core/utils/elementwise');
Matrix.generate = require('./core/utils/generate');
Matrix.getDiag = require('./core/utils/getDiag');
Matrix.getRandomMatrix = require('./core/utils/getRandomMatrix');
Matrix.identity = require('./core/utils/identity');
Matrix.isEqual = require('./core/utils/isEqual');
Matrix.row = require('./core/utils/row');
Matrix.submatrix = require('./core/utils/submatrix');
Matrix.zero = require('./core/utils/zero');
Matrix.fromArray = require('./core/utils/fromArray');
Matrix.prototype.entry = require('./core/utils/entry');
Matrix.prototype.toString = require('./core/utils/toString');