const { INVALID_MATRIX } = require('../../Error');
/**
* This callback applies on each entry of a Matrix
* @callback entryCallback
* @param {number} entry - Entry of a Matrix
* @returns {number} New entry value
*/
/**
* Applys a function over each entry of a Matrix and returns
* a new copy of the new Matrix.
* @memberof Matrix
* @static
* @param {Matrix} A - Any Matrix
* @param {entryCallback} cb - Callback function which applies on each entry of A
* @returns {Matrix} A copy of new Matrix
*/
function elementwise(A, cb) {
if (!(A instanceof this)) {
throw new Error(INVALID_MATRIX);
}
const [row, col] = A.size();
const matrix = A._matrix;
return this.generate(row, col, (i, j) => cb(matrix[i][j]));
};
module.exports = elementwise;