From e3375560e687e263867b5b79dc95869ff9b32beb Mon Sep 17 00:00:00 2001 From: raghavgujjar Date: Sun, 16 Jun 2024 00:19:28 -0700 Subject: [PATCH 1/2] Adding generate functionality --- README.md | 11 +++++++++++ lib/generate.js | 43 +++++++++++++++++++++++++++++++++++++++++++ lib/index.js | 6 ++++-- package-lock.json | 4 ++-- package.json | 2 +- test/index.js | 8 ++++++++ 6 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 lib/generate.js diff --git a/README.md b/README.md index d735daa..fba9f04 100644 --- a/README.md +++ b/README.md @@ -132,3 +132,14 @@ B = matrix([[3,4], [1,2]]); A.equals(B); // returns false ``` + +#### 19. Generate +Generates a matrix with the value passed across the entire matrix or just the diagonal. +```javascript +matrix.gen(4).size(2,3); // returns [[4,4,4],[4,4,4]] +matrix.gen(2).size(2); // returns [[2,2],[2,2]] +matrix.gen(1).diag(3); // return [[1,0,0],[0,1,0],[0,0,1]], identity matrix +// Rectangular matrices' diagonal elements are filled with the remaining rows and columns as zero. But diagonal matrices are normally square. +matrix.gen(1).diag(3,2); // returns [[1,0],[0,1],[0,0]] +matrix.gen(2).diag(3,4); // returns [[2,0,0,0],[0,2,0,0],[0,0,2,0] +``` \ No newline at end of file diff --git a/lib/generate.js b/lib/generate.js new file mode 100644 index 0000000..65bcc6f --- /dev/null +++ b/lib/generate.js @@ -0,0 +1,43 @@ +'use strict'; + +function generate(val) { + return { + size: (row, col) => size(val, row, col), + diag: (row, col) => diag(val, row, col) + } +} + +function size(val, row, col) { + if (!col) { + col = row; + } + let rows = []; + for (let i = 0; i < row; i++) { + let cols = []; + for (let j = 0; j < col; j++) { + cols[j] = val; + } + rows[i] = cols; + } + return rows; +} + +function diag(val, row, col) { + if (!col) { + col = row; + } + let rows = []; + for (let i = 0; i < row; i++) { + let cols = []; + for (let j = 0; j < col; j++) { + cols[j] = 0; + } + rows[i] = cols; + if (i < col || row == col) { + rows[i][i] = val; + } + } + return rows; +} + +module.exports = generate; diff --git a/lib/index.js b/lib/index.js index 33b795b..bb7a9df 100644 --- a/lib/index.js +++ b/lib/index.js @@ -2,6 +2,7 @@ const rational = require('./rational'); const merge = require('./merge'); +const generate = require('./generate'); /** * Pass a 2-dimensional array that will return a function accepting indices to access the matrix @@ -20,6 +21,7 @@ function matrix(mat) { return Object.assign(_matrix, _mat(mat)); } +matrix.gen = generate; /** * Private function that returns an object containing methods @@ -511,7 +513,7 @@ function derationalize(mat) { * @param val specified value * @returns square matrix */ -function generate(size, val) { +function _generate(size, val) { let dim = 2; while (dim > 0) { var arr = []; @@ -535,7 +537,7 @@ function generate(size, val) { * @returns identity matrix */ function identity(size) { - let result = generate(size, 0); + let result = _generate(size, 0); result.forEach((row, index) => { row[index] = 1; }); diff --git a/package-lock.json b/package-lock.json index 4529ebd..2f9d1b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "matrix-js", - "version": "1.6.1", + "version": "1.7.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "matrix-js", - "version": "1.6.1", + "version": "1.7.0", "devDependencies": { "mocha": "^9" } diff --git a/package.json b/package.json index 0d547c7..fb40b73 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-js", - "version": "1.6.1", + "version": "1.7.0", "description": "A Javascript Library to perform basic matrix operations using the functional nature of Javascript", "main": "lib", "directories": { diff --git a/test/index.js b/test/index.js index 397ab53..537d7ff 100644 --- a/test/index.js +++ b/test/index.js @@ -153,4 +153,12 @@ describe('Matrix operations', () => { assert.equal(A.equals(B), false); assert.equal(C.equals(C), true); }); + + it('should generate a matrix', () => { + assert.deepEqual(matrix.gen(4).size(2,3), [[4,4,4],[4,4,4]]); + assert.deepEqual(matrix.gen(2).size(2), [[2,2],[2,2]]); + assert.deepEqual(matrix.gen(1).diag(3,2), [[1,0],[0,1],[0,0]]); + assert.deepEqual(matrix.gen(2).diag(3,4), [[2,0,0,0],[0,2,0,0],[0,0,2,0]]); + assert.deepEqual(matrix.gen(1).diag(3), [[1,0,0],[0,1,0],[0,0,1]]); + }); }); From 751544f92255a35e1c1807e7134fcfa3734608d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Jun 2024 07:21:04 +0000 Subject: [PATCH 2/2] Bump braces from 3.0.2 to 3.0.3 Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3. - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3) --- updated-dependencies: - dependency-name: braces dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f9d1b4..27ff2a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,12 +95,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -286,9 +286,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -997,12 +997,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browser-stdout": { @@ -1134,9 +1134,9 @@ "dev": true }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1"