From 8104aedb45fc4681114b4e448a911c3673d572d9 Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Mon, 7 Apr 2025 08:25:21 +0000 Subject: [PATCH 01/11] feat: add base algorithm --- .../@stdlib/lapack/base/dppequ/lib/base.js | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js new file mode 100644 index 000000000000..acacba60715b --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js @@ -0,0 +1,126 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var sqrt = require( '@stdlib/math/base/special/sqrt' ); +var max = require( '@stdlib/math/base/special/max' ); +var min = require( '@stdlib/math/base/special/min' ); + + +// MAIN // + +/** +* Computes the row and column scalings intended to equilibrate a symmetric positive definite matrix `A` in packed storage and reduce it's condition number (with respect to the two-norm). +* +* @param {string} order - specifies whether `AP` is packed in row-major or column-major order +* @param {string} uplo - 'Upper' or 'Lower' triangle of `A` is stored +* @param {NonNegativeInteger} N - order of the matrix `A` +* @param {Float64Array} AP - array containing the upper or lower triangle of `A` in packed form +* @param {integer} strideAP - stride length for `AP` +* @param {integer} offsetAP - starting index for `AP` +* @param {Float64Array} S - array to store the scale factors of `A` +* @param {integer} strideS - stride length for `S` +* @param {integer} offsetS - starting index for `S` +* @param {Float64Array} out - array to store the output +* @param {integer} strideOut - stride length for `out` +* @param {integer} offsetOut - starting index for `out` +* @returns {integer} status code +*/ +function dppequ( order, uplo, N, AP, strideAP, offsetAP, S, strideS, offsetS, out, strideOut, offsetOut ) { // eslint-disable-line max-len, max-params + var info; + var smin; + var amax; + var jj; + var i; + + if ( N === 0 ) { + out[ offsetOut ] = 1.0; // scond + out[ offsetOut + strideOut ] = 0.0; // amax + return 0; // info + } + + S[ offsetAP ] = AP[ offsetAP ]; + smin = S[ offsetAP ]; + amax = S[ offsetAP ]; + + if ( order === 'row-major' ) { + if ( uplo === 'U' ) { // uplo === 'U' + jj = 0; + for ( i = 1; i < N; i++ ) { + jj += N - i + 1; + S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; + smin = min( smin, S[ offsetS + (i * strideS) ] ); + amax = max( amax, S[ offsetS + (i * strideS) ] ); + } + } else { // uplo === 'L' + jj = 0; + for ( i = 1; i < N; i++ ) { + jj += i + 1; + S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; + smin = min( smin, S[ offsetS + (i * strideS) ] ); + amax = max( amax, S[ offsetS + (i * strideS) ] ); + } + } + } else { // order === 'col-major' + if ( uplo === 'U' ) { // uplo === 'U' + jj = 0; + for ( i = 1; i < N; i++ ) { + jj += i + 1; + S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; + smin = min( smin, S[ offsetS + (i * strideS) ] ); + amax = max( amax, S[ offsetS + (i * strideS) ] ); + } + } else { // uplo === 'L' + jj = 0; + for ( i = 1; i < N; i++ ) { + jj += N - i + 1; + S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; + smin = min( smin, S[ offsetS + (i * strideS) ] ); + amax = max( amax, S[ offsetS + (i * strideS) ] ); + } + } + } + + if ( smin <= 0.0 ) { + for ( i = 0; i < N; i++ ) { + if ( S[ offsetS + (i * strideS) ] <= 0.0 ) { + out[ offsetOut ] = 0.0; // scond + out[ offsetOut + strideOut ] = amax; // amax + info = i; + return info; + } + } + } else { + for ( i = 0; i < N; i++ ) { + S[ offsetS + (i * strideS) ] = 1.0 / sqrt( S[ offsetS + (i * strideS) ] ); // eslint-disable-line max-len + } + } + + out[ offsetOut ] = sqrt( smin ) / sqrt( amax ); // scond + out[ offsetOut + strideOut ] = amax; // amax + info = 0; + return info; +} + + +// EXPORTS // + +module.exports = dppequ; From b5618f14d4ee1e4d69a1757f259a763f480d5e9b Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Mon, 7 Apr 2025 09:39:01 +0000 Subject: [PATCH 02/11] feat: add exports --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/lapack/base/dppequ/lib/base.js | 43 +++++++----- .../@stdlib/lapack/base/dppequ/lib/dppequ.js | 63 +++++++++++++++++ .../@stdlib/lapack/base/dppequ/lib/main.js | 35 ++++++++++ .../@stdlib/lapack/base/dppequ/lib/ndarray.js | 69 +++++++++++++++++++ 4 files changed, 193 insertions(+), 17 deletions(-) create mode 100644 lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dppequ/lib/main.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js index acacba60715b..1959f700cb4a 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js @@ -43,6 +43,17 @@ var min = require( '@stdlib/math/base/special/min' ); * @param {integer} strideOut - stride length for `out` * @param {integer} offsetOut - starting index for `out` * @returns {integer} status code +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* var AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); +* var S = new Float64Array( 3 ); +* var out = new Float64Array( 2 ); +* +* dppequ( 'row-major', 'L', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); +* // S => [ 1, ~0.58, ~0.33 ] +* // out => [ ~0.33, 9 ] */ function dppequ( order, uplo, N, AP, strideAP, offsetAP, S, strideS, offsetS, out, strideOut, offsetOut ) { // eslint-disable-line max-len, max-params var info; @@ -79,23 +90,21 @@ function dppequ( order, uplo, N, AP, strideAP, offsetAP, S, strideS, offsetS, ou amax = max( amax, S[ offsetS + (i * strideS) ] ); } } - } else { // order === 'col-major' - if ( uplo === 'U' ) { // uplo === 'U' - jj = 0; - for ( i = 1; i < N; i++ ) { - jj += i + 1; - S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; - smin = min( smin, S[ offsetS + (i * strideS) ] ); - amax = max( amax, S[ offsetS + (i * strideS) ] ); - } - } else { // uplo === 'L' - jj = 0; - for ( i = 1; i < N; i++ ) { - jj += N - i + 1; - S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; - smin = min( smin, S[ offsetS + (i * strideS) ] ); - amax = max( amax, S[ offsetS + (i * strideS) ] ); - } + } else if ( uplo === 'U' ) { // order === 'col-major' + jj = 0; + for ( i = 1; i < N; i++ ) { + jj += i + 1; + S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; + smin = min( smin, S[ offsetS + (i * strideS) ] ); + amax = max( amax, S[ offsetS + (i * strideS) ] ); + } + } else { // uplo === 'L', order === 'col-major' + jj = 0; + for ( i = 1; i < N; i++ ) { + jj += N - i + 1; + S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; + smin = min( smin, S[ offsetS + (i * strideS) ] ); + amax = max( amax, S[ offsetS + (i * strideS) ] ); } } diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js new file mode 100644 index 000000000000..6cf26fb0f45e --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js @@ -0,0 +1,63 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var isLayout = require( '@stdlib/blas/base/assert/is-layout' ); +var format = require( '@stdlib/string/format' ); +var base = require( './base.js' ); + + +// MAIN // + +/** +* Computes the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage and reduce it's condition number (with respect to the two-norm). +* +* @param {string} order - specifies whether `AP` is packed in row-major or column-major order +* @param {string} uplo - 'Upper' or 'Lower' triangle of `A` is stored +* @param {NonNegativeInteger} N - order of the matrix `A` +* @param {Float64Array} AP - array containing the upper or lower triangle of `A` in packed form +* @param {Float64Array} S - array to store the scale factors of `A` +* @param {Float64Array} out - array to store the output +* @throws {TypeError} first argument must be a valid order +* @returns {integer} status code +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* var AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); +* var S = new Float64Array( 3 ); +* var out = new Float64Array( 2 ); +* +* dppequ( 'row-major', 'L', 3, AP, S, out ); +* // S => [ 1, ~0.58, ~0.33 ] +* // out => [ ~0.33, 9 ] +*/ +function dppequ( order, uplo, N, AP, S, out ) { + if ( !isLayout( order ) ) { + throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) ); + } + return base( order, uplo, N, AP, 1, 0, S, 1, 0, out, 1, 0 ); +} + + +// EXPORTS // + +module.exports = dppequ; diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/main.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/main.js new file mode 100644 index 000000000000..d40caa8fc3f4 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/main.js @@ -0,0 +1,35 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); +var dppequ = require( './dppequ.js' ); +var ndarray = require( './ndarray.js' ); + + +// MAIN // + +setReadOnly( dppequ, 'ndarray', ndarray ); + + +// EXPORTS // + +module.exports = dppequ; diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js new file mode 100644 index 000000000000..f8f6486b3470 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js @@ -0,0 +1,69 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var isLayout = require( '@stdlib/blas/base/assert/is-layout' ); +var format = require( '@stdlib/string/format' ); +var base = require( './base.js' ); + + +// MAIN // + +/** +* Computes the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage and reduce it's condition number (with respect to the two-norm). +* +* @param {string} order - specifies whether `AP` is packed in row-major or column-major order +* @param {string} uplo - 'Upper' or 'Lower' triangle of `A` is stored +* @param {NonNegativeInteger} N - order of the matrix `A` +* @param {Float64Array} AP - array containing the upper or lower triangle of `A` in packed form +* @param {integer} strideAP - stride length for `AP` +* @param {integer} offsetAP - starting index for `AP` +* @param {Float64Array} S - array to store the scale factors of `A` +* @param {integer} strideS - stride length for `S` +* @param {integer} offsetS - starting index for `S` +* @param {Float64Array} out - array to store the output +* @param {integer} strideOut - stride length for `out` +* @param {integer} offsetOut - starting index for `out` +* @throws {TypeError} first argument must be a valid order +* @returns {integer} status code +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* var AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); +* var S = new Float64Array( 3 ); +* var out = new Float64Array( 2 ); +* +* dppequ( 'row-major', 'L', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); +* // S => [ 1, ~0.58, ~0.33 ] +* // out => [ ~0.33, 9 ] +*/ +function dppequ( order, uplo, N, AP, strideAP, offsetAP, S, strideS, offsetS, out, strideOut, offsetOut ) { // eslint-disable-line max-len, max-params + if ( !isLayout( order ) ) { + throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) ); + } + return base( order, uplo, N, AP, strideAP, offsetAP, S, strideS, offsetS, out, strideOut, offsetOut ); // eslint-disable-line max-len +} + + +// EXPORTS // + +module.exports = dppequ; From b7e80ebf8668773d0f820d8c8af4171dda632a95 Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Mon, 7 Apr 2025 09:46:14 +0000 Subject: [PATCH 03/11] feat: merge loops --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/lapack/base/dppequ/lib/base.js | 34 +++++++------------ 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js index 1959f700cb4a..63a8e19ec4d7 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js @@ -28,7 +28,7 @@ var min = require( '@stdlib/math/base/special/min' ); // MAIN // /** -* Computes the row and column scalings intended to equilibrate a symmetric positive definite matrix `A` in packed storage and reduce it's condition number (with respect to the two-norm). +* Computes the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage and reduce it's condition number (with respect to the two-norm). * * @param {string} order - specifies whether `AP` is packed in row-major or column-major order * @param {string} uplo - 'Upper' or 'Lower' triangle of `A` is stored @@ -72,36 +72,26 @@ function dppequ( order, uplo, N, AP, strideAP, offsetAP, S, strideS, offsetS, ou smin = S[ offsetAP ]; amax = S[ offsetAP ]; - if ( order === 'row-major' ) { - if ( uplo === 'U' ) { // uplo === 'U' - jj = 0; - for ( i = 1; i < N; i++ ) { + if ( uplo === 'U' ) { // uplo === 'U' + jj = 0; + for ( i = 1; i < N; i++ ) { + if ( order === 'row-major' ) { jj += N - i + 1; - S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; - smin = min( smin, S[ offsetS + (i * strideS) ] ); - amax = max( amax, S[ offsetS + (i * strideS) ] ); - } - } else { // uplo === 'L' - jj = 0; - for ( i = 1; i < N; i++ ) { + } else { // order === 'column-major' jj += i + 1; - S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; - smin = min( smin, S[ offsetS + (i * strideS) ] ); - amax = max( amax, S[ offsetS + (i * strideS) ] ); } - } - } else if ( uplo === 'U' ) { // order === 'col-major' - jj = 0; - for ( i = 1; i < N; i++ ) { - jj += i + 1; S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; smin = min( smin, S[ offsetS + (i * strideS) ] ); amax = max( amax, S[ offsetS + (i * strideS) ] ); } - } else { // uplo === 'L', order === 'col-major' + } else { // uplo === 'L' jj = 0; for ( i = 1; i < N; i++ ) { - jj += N - i + 1; + if ( order === 'row-major' ) { + jj += i + 1; + } else { // order === 'column-major' + jj += N - i + 1; + } S[ offsetS + (i * strideS) ] = AP[ offsetAP + (jj * strideAP) ]; smin = min( smin, S[ offsetS + (i * strideS) ] ); amax = max( amax, S[ offsetS + (i * strideS) ] ); From 9bb5c3897a7135c15581792eaf218f8a6cdec575 Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Mon, 7 Apr 2025 09:50:37 +0000 Subject: [PATCH 04/11] feat: add main export --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/lapack/base/dppequ/lib/base.js | 2 +- .../@stdlib/lapack/base/dppequ/lib/dppequ.js | 2 +- .../@stdlib/lapack/base/dppequ/lib/index.js | 72 +++++++++++++++++++ .../@stdlib/lapack/base/dppequ/lib/main.js | 2 +- .../@stdlib/lapack/base/dppequ/lib/ndarray.js | 4 +- 5 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 lib/node_modules/@stdlib/lapack/base/dppequ/lib/index.js diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js index 63a8e19ec4d7..ff622f664b59 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2024 The Stdlib Authors. +* Copyright (c) 2025 The Stdlib Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js index 6cf26fb0f45e..6859e71eaa25 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2024 The Stdlib Authors. +* Copyright (c) 2025 The Stdlib Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/index.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/index.js new file mode 100644 index 000000000000..40790ac7c266 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/index.js @@ -0,0 +1,72 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +/** +* LAPACK routine to compute the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage and reduce it's condition number (with respect to the two-norm). +* +* @module @stdlib/lapack/base/dppequ +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var dppequ = require( '@stdlib/lapack/base/dppequ' ); +* +* var AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); +* var S = new Float64Array( 3 ); +* var out = new Float64Array( 2 ); +* +* dppequ( 'row-major', 'L', 3, AP, S, out ); +* // S => [ 1, ~0.58, ~0.33 ] +* // out => [ ~0.33, 9 ] +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var dppequ = require( '@stdlib/lapack/base/dppequ' ); +* +* var AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); +* var S = new Float64Array( 3 ); +* var out = new Float64Array( 2 ); +* +* dppequ.ndarray( 'row-major', 'L', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); +* // S => [ 1, ~0.58, ~0.33 ] +* // out => [ ~0.33, 9 ] +*/ + +// MODULES // + +var join = require( 'path' ).join; +var tryRequire = require( '@stdlib/utils/try-require' ); +var isError = require( '@stdlib/assert/is-error' ); +var main = require( './main.js' ); + + +// MAIN // + +var dppequ; +var tmp = tryRequire( join( __dirname, './native.js' ) ); +if ( isError( tmp ) ) { + dppequ = main; +} else { + dppequ = tmp; +} + + +// EXPORTS // + +module.exports = dppequ; diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/main.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/main.js index d40caa8fc3f4..7b6ee1e50424 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/main.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/main.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2024 The Stdlib Authors. +* Copyright (c) 2025 The Stdlib Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js index f8f6486b3470..44f98b80b569 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2024 The Stdlib Authors. +* Copyright (c) 2025 The Stdlib Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ var base = require( './base.js' ); // MAIN // /** -* Computes the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage and reduce it's condition number (with respect to the two-norm). +* Computes the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage and reduce it's condition number (with respect to the two-norm) using alternative indexing semantics. * * @param {string} order - specifies whether `AP` is packed in row-major or column-major order * @param {string} uplo - 'Upper' or 'Lower' triangle of `A` is stored From fab8873dea994afefe5a08b27595bbf6702c32f3 Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Wed, 16 Apr 2025 18:15:54 +0000 Subject: [PATCH 05/11] test: add initial tests --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/lapack/base/dppequ/lib/dppequ.js | 4 + .../lapack/base/dppequ/test/test.dppequ.js | 109 ++++++++++++++++++ .../@stdlib/lapack/base/dppequ/test/test.js | 82 +++++++++++++ 3 files changed, 195 insertions(+) create mode 100644 lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js create mode 100644 lib/node_modules/@stdlib/lapack/base/dppequ/test/test.js diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js index 6859e71eaa25..947507c94276 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/dppequ.js @@ -37,6 +37,7 @@ var base = require( './base.js' ); * @param {Float64Array} S - array to store the scale factors of `A` * @param {Float64Array} out - array to store the output * @throws {TypeError} first argument must be a valid order +* @throws {RangeError} third argument must be a nonnegative integer * @returns {integer} status code * * @example @@ -54,6 +55,9 @@ function dppequ( order, uplo, N, AP, S, out ) { if ( !isLayout( order ) ) { throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) ); } + if ( N < 0 ) { + throw new RangeError( format( 'invalid argument. First argument must be a nonnegative integer. Value: `%d`.', N ) ); + } return base( order, uplo, N, AP, 1, 0, S, 1, 0, out, 1, 0 ); } diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js new file mode 100644 index 000000000000..61737e4d2de4 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js @@ -0,0 +1,109 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Float64Array = require( '@stdlib/array/float64' ); +var dppequ = require( './../lib/dppequ.js' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof dppequ, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 6', function test( t ) { + t.strictEqual( dppequ.length, 6, 'returns expected value' ); + t.end(); +}); + +tape( 'the function throws an error if provided an invalid third argument', function test( t ) { + var values; + var out; + var AP; + var S; + var i; + + values = [ + -1, + -2, + -3, + -4, + -5 + ]; + + AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + dppequ( 'row-major', 'L', value, AP, S, out ); + }; + } +}); + +tape( 'the function throws an error if provided a first argument which is not a valid order', function test( t ) { + var values; + var out; + var AP; + var S; + var i; + + values = [ + 'foo', + 'bar', + 'beep', + 'boop', + -5, + NaN, + true, + false, + null, + void 0, + [], + {}, + function noop() {} + ]; + + AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), TypeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + dppequ( value, 'L', 3, AP, S, out ); + }; + } +}); diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.js b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.js new file mode 100644 index 000000000000..96853273fab0 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.js @@ -0,0 +1,82 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var proxyquire = require( 'proxyquire' ); +var IS_BROWSER = require( '@stdlib/assert/is-browser' ); +var dppequ = require( './../lib' ); + + +// VARIABLES // + +var opts = { + 'skip': IS_BROWSER +}; + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof dppequ, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'attached to the main export is a method providing an ndarray interface', function test( t ) { + t.strictEqual( typeof dppequ.ndarray, 'function', 'method is a function' ); + t.end(); +}); + +tape( 'if a native implementation is available, the main export is the native implementation', opts, function test( t ) { + var dppequ = proxyquire( './../lib', { + '@stdlib/utils/try-require': tryRequire + }); + + t.strictEqual( dppequ, mock, 'returns expected value' ); + t.end(); + + function tryRequire() { + return mock; + } + + function mock() { + // Mock... + } +}); + +tape( 'if a native implementation is not available, the main export is a JavaScript implementation', opts, function test( t ) { + var dppequ; + var main; + + main = require( './../lib/dppequ.js' ); + + dppequ = proxyquire( './../lib', { + '@stdlib/utils/try-require': tryRequire + }); + + t.strictEqual( dppequ, main, 'returns expected value' ); + t.end(); + + function tryRequire() { + return new Error( 'Cannot find module' ); + } +}); From 51ad33f0297c29ecc236750e33127d68c0922b03 Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Wed, 16 Apr 2025 18:23:51 +0000 Subject: [PATCH 06/11] test: add initial ndarray tests --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/lapack/base/dppequ/lib/ndarray.js | 4 + .../lapack/base/dppequ/test/test.ndarray.js | 109 ++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js index 44f98b80b569..8c264abd01f4 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/ndarray.js @@ -43,6 +43,7 @@ var base = require( './base.js' ); * @param {integer} strideOut - stride length for `out` * @param {integer} offsetOut - starting index for `out` * @throws {TypeError} first argument must be a valid order +* @throws {RangeError} third argument must be a nonnegative integer * @returns {integer} status code * * @example @@ -60,6 +61,9 @@ function dppequ( order, uplo, N, AP, strideAP, offsetAP, S, strideS, offsetS, ou if ( !isLayout( order ) ) { throw new TypeError( format( 'invalid argument. First argument must be a valid order. Value: `%s`.', order ) ); } + if ( N < 0 ) { + throw new RangeError( format( 'invalid argument. First argument must be a nonnegative integer. Value: `%d`.', N ) ); + } return base( order, uplo, N, AP, strideAP, offsetAP, S, strideS, offsetS, out, strideOut, offsetOut ); // eslint-disable-line max-len } diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js new file mode 100644 index 000000000000..acdac90d5b17 --- /dev/null +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js @@ -0,0 +1,109 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Float64Array = require( '@stdlib/array/float64' ); +var dppequ = require( './../lib/ndarray.js' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof dppequ, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 12', function test( t ) { + t.strictEqual( dppequ.length, 12, 'returns expected value' ); + t.end(); +}); + +tape( 'the function throws an error if provided an invalid third argument', function test( t ) { + var values; + var out; + var AP; + var S; + var i; + + values = [ + -1, + -2, + -3, + -4, + -5 + ]; + + AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), RangeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + dppequ( 'row-major', 'L', value, AP, 1, 0, S, 1, 0, out, 1, 0 ); + }; + } +}); + +tape( 'the function throws an error if provided a first argument which is not a valid order', function test( t ) { + var values; + var out; + var AP; + var S; + var i; + + values = [ + 'foo', + 'bar', + 'beep', + 'boop', + -5, + NaN, + true, + false, + null, + void 0, + [], + {}, + function noop() {} + ]; + + AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[ i ] ), TypeError, 'throws an error when provided ' + values[ i ] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + dppequ( value, 'L', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); + }; + } +}); From ccda72f9235a6bada4603ab69136db4d66546723 Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Wed, 16 Apr 2025 18:24:44 +0000 Subject: [PATCH 07/11] test: add initial ndarray tests --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js | 2 +- .../@stdlib/lapack/base/dppequ/test/test.ndarray.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js index 61737e4d2de4..7cfe9d30c9e9 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2024 The Stdlib Authors. +* Copyright (c) 2025 The Stdlib Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js index acdac90d5b17..3bce838fa53d 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2024 The Stdlib Authors. +* Copyright (c) 2025 The Stdlib Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From dc0dfd0793a65bc3708fcdc8ee1676fa184da600 Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Fri, 18 Apr 2025 13:08:17 +0000 Subject: [PATCH 08/11] test: add tests --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../lapack/base/dppequ/test/test.dppequ.js | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js index 7cfe9d30c9e9..83f3b97d6447 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js @@ -18,6 +18,8 @@ 'use strict'; +/* eslint-disable max-len */ + // MODULES // var tape = require( 'tape' ); @@ -107,3 +109,87 @@ tape( 'the function throws an error if provided a first argument which is not a }; } }); + +tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (lower-triangular) (row-major)', function test( t ) { + var expectedOut; + var expectedS; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + dppequ( 'row-major', 'L', 3, AP, S, out ); + + expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.57735026918962584, 0.33333333333333331 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (lower-triangular) (column-major)', function test( t ) { + var expectedOut; + var expectedS; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 2.0, 5.0, 3.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + dppequ( 'column-major', 'L', 3, AP, S, out ); + + expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.57735026918962584, 0.33333333333333331 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (upper-triangular) (row-major)', function test( t ) { + var expectedOut; + var expectedS; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + dppequ( 'row-major', 'U', 3, AP, S, out ); + + expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.44721359549995793, 0.33333333333333331 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (upper-triangular) (column-major)', function test( t ) { + var expectedOut; + var expectedS; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 2.0, 5.0, 3.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + dppequ( 'column-major', 'U', 3, AP, S, out ); + + expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.44721359549995793, 0.33333333333333331 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + + t.end(); +}); From 7ac07fd5f14ff7c20e50b13974db31860680d945 Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Fri, 18 Apr 2025 13:37:09 +0000 Subject: [PATCH 09/11] test: add N=0 case --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../lapack/base/dppequ/test/test.dppequ.js | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js index 83f3b97d6447..70231f398d9d 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js @@ -110,9 +110,33 @@ tape( 'the function throws an error if provided a first argument which is not a } }); +tape( 'the function leaves the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage unchanged if N is equal to 0', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'row-major', 'L', 0, AP, S, out ); + + expectedOut = new Float64Array( [ 1.0, 0.0 ] ); + expectedS = new Float64Array( 3 ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 0, 'returns expected value' ); + + t.end(); +}); + tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (lower-triangular) (row-major)', function test( t ) { var expectedOut; var expectedS; + var info; var out; var AP; var S; @@ -121,12 +145,13 @@ tape( 'the function calculates the row and column scaling factors intended to eq S = new Float64Array( 3 ); out = new Float64Array( 2 ); - dppequ( 'row-major', 'L', 3, AP, S, out ); + info = dppequ( 'row-major', 'L', 3, AP, S, out ); expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); expectedS = new Float64Array( [ 1.0, 0.57735026918962584, 0.33333333333333331 ] ); t.deepEqual( S, expectedS, 'returns expected value' ); t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 0, 'returns expected value' ); t.end(); }); @@ -134,6 +159,7 @@ tape( 'the function calculates the row and column scaling factors intended to eq tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (lower-triangular) (column-major)', function test( t ) { var expectedOut; var expectedS; + var info; var out; var AP; var S; @@ -142,12 +168,13 @@ tape( 'the function calculates the row and column scaling factors intended to eq S = new Float64Array( 3 ); out = new Float64Array( 2 ); - dppequ( 'column-major', 'L', 3, AP, S, out ); + info = dppequ( 'column-major', 'L', 3, AP, S, out ); expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); expectedS = new Float64Array( [ 1.0, 0.57735026918962584, 0.33333333333333331 ] ); t.deepEqual( S, expectedS, 'returns expected value' ); t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 0, 'returns expected value' ); t.end(); }); @@ -155,6 +182,7 @@ tape( 'the function calculates the row and column scaling factors intended to eq tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (upper-triangular) (row-major)', function test( t ) { var expectedOut; var expectedS; + var info; var out; var AP; var S; @@ -163,12 +191,13 @@ tape( 'the function calculates the row and column scaling factors intended to eq S = new Float64Array( 3 ); out = new Float64Array( 2 ); - dppequ( 'row-major', 'U', 3, AP, S, out ); + info = dppequ( 'row-major', 'U', 3, AP, S, out ); expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); expectedS = new Float64Array( [ 1.0, 0.44721359549995793, 0.33333333333333331 ] ); t.deepEqual( S, expectedS, 'returns expected value' ); t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 0, 'returns expected value' ); t.end(); }); @@ -176,6 +205,7 @@ tape( 'the function calculates the row and column scaling factors intended to eq tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (upper-triangular) (column-major)', function test( t ) { var expectedOut; var expectedS; + var info; var out; var AP; var S; @@ -184,12 +214,13 @@ tape( 'the function calculates the row and column scaling factors intended to eq S = new Float64Array( 3 ); out = new Float64Array( 2 ); - dppequ( 'column-major', 'U', 3, AP, S, out ); + info = dppequ( 'column-major', 'U', 3, AP, S, out ); expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); expectedS = new Float64Array( [ 1.0, 0.44721359549995793, 0.33333333333333331 ] ); t.deepEqual( S, expectedS, 'returns expected value' ); t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 0, 'returns expected value' ); t.end(); }); From 7ff79c80c46ba27deaeb696daa79aa74f849b4a1 Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Sat, 19 Apr 2025 08:10:30 +0000 Subject: [PATCH 10/11] test: add non positive diagonal element tests --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/lapack/base/dppequ/lib/base.js | 4 +- .../lapack/base/dppequ/test/test.dppequ.js | 92 +++++++++++++++++++ 2 files changed, 94 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js index ff622f664b59..3eb0daec7511 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/lib/base.js @@ -72,7 +72,7 @@ function dppequ( order, uplo, N, AP, strideAP, offsetAP, S, strideS, offsetS, ou smin = S[ offsetAP ]; amax = S[ offsetAP ]; - if ( uplo === 'U' ) { // uplo === 'U' + if ( uplo === 'U' ) { jj = 0; for ( i = 1; i < N; i++ ) { if ( order === 'row-major' ) { @@ -101,7 +101,7 @@ function dppequ( order, uplo, N, AP, strideAP, offsetAP, S, strideS, offsetS, ou if ( smin <= 0.0 ) { for ( i = 0; i < N; i++ ) { if ( S[ offsetS + (i * strideS) ] <= 0.0 ) { - out[ offsetOut ] = 0.0; // scond + // Leave first element of `out` unchanged out[ offsetOut + strideOut ] = amax; // amax info = i; return info; diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js index 70231f398d9d..8476e0085adc 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.dppequ.js @@ -224,3 +224,95 @@ tape( 'the function calculates the row and column scaling factors intended to eq t.end(); }); + +tape( 'the function finds the first non-positive diagonal element and returns (upper-triangular) (column-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 0.0, -1.0, 0.0, 0.0, 1.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'column-major', 'U', 3, AP, S, out ); + + expectedOut = new Float64Array( [ 0.0, 1.0 ] ); + expectedS = new Float64Array( [ 1.0, -1.0, 1.0 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 1, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function finds the first non-positive diagonal element and returns (upper-triangular) (row-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 0.0, 0.0, -1.0, 0.0, 1.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'row-major', 'U', 3, AP, S, out ); + + expectedOut = new Float64Array( [ 0.0, 1.0 ] ); + expectedS = new Float64Array( [ 1.0, -1.0, 1.0 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 1, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function finds the first non-positive diagonal element and returns (lower-triangular) (column-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 0.0, -1.0, 0.0, 0.0, 1.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'column-major', 'L', 3, AP, S, out ); + + expectedOut = new Float64Array( [ 0.0, 1.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.0, 1.0 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 1, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function finds the first non-positive diagonal element and returns (lower-triangular) (row-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 0.0, 0.0, -1.0, 0.0, 1.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'row-major', 'L', 3, AP, S, out ); + + expectedOut = new Float64Array( [ 0.0, 1.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.0, 1.0 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 1, 'returns expected value' ); + + t.end(); +}); From 9de21b0cced56231c785c0a9bbd997624ba0d026 Mon Sep 17 00:00:00 2001 From: Aayush Khanna Date: Sat, 19 Apr 2025 08:16:26 +0000 Subject: [PATCH 11/11] test: add ndarray tests --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../lapack/base/dppequ/test/test.ndarray.js | 209 ++++++++++++++++++ 1 file changed, 209 insertions(+) diff --git a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js index 3bce838fa53d..9baeb9f25394 100644 --- a/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/lapack/base/dppequ/test/test.ndarray.js @@ -18,6 +18,8 @@ 'use strict'; +/* eslint-disable max-len */ + // MODULES // var tape = require( 'tape' ); @@ -107,3 +109,210 @@ tape( 'the function throws an error if provided a first argument which is not a }; } }); + +tape( 'the function leaves the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage unchanged if N is equal to 0', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'row-major', 'L', 0, AP, 1, 0, S, 1, 0, out, 1, 0 ); + + expectedOut = new Float64Array( [ 1.0, 0.0 ] ); + expectedS = new Float64Array( 3 ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (lower-triangular) (row-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'row-major', 'L', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); + + expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.57735026918962584, 0.33333333333333331 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (lower-triangular) (column-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 2.0, 5.0, 3.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'column-major', 'L', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); + + expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.57735026918962584, 0.33333333333333331 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (upper-triangular) (row-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 2.0, 3.0, 5.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'row-major', 'U', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); + + expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.44721359549995793, 0.33333333333333331 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function calculates the row and column scaling factors intended to equilibrate a symmetric positive definite matrix `A` in packed storage (upper-triangular) (column-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 2.0, 5.0, 3.0, 6.0, 9.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'column-major', 'U', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); + + expectedOut = new Float64Array( [ 0.33333333333333331, 9.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.44721359549995793, 0.33333333333333331 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function finds the first non-positive diagonal element and returns (upper-triangular) (column-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 0.0, -1.0, 0.0, 0.0, 1.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'column-major', 'U', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); + + expectedOut = new Float64Array( [ 0.0, 1.0 ] ); + expectedS = new Float64Array( [ 1.0, -1.0, 1.0 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 1, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function finds the first non-positive diagonal element and returns (upper-triangular) (row-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 0.0, 0.0, -1.0, 0.0, 1.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'row-major', 'U', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); + + expectedOut = new Float64Array( [ 0.0, 1.0 ] ); + expectedS = new Float64Array( [ 1.0, -1.0, 1.0 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 1, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function finds the first non-positive diagonal element and returns (lower-triangular) (column-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 0.0, -1.0, 0.0, 0.0, 1.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'column-major', 'L', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); + + expectedOut = new Float64Array( [ 0.0, 1.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.0, 1.0 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 1, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function finds the first non-positive diagonal element and returns (lower-triangular) (row-major)', function test( t ) { + var expectedOut; + var expectedS; + var info; + var out; + var AP; + var S; + + AP = new Float64Array( [ 1.0, 0.0, 0.0, -1.0, 0.0, 1.0 ] ); + S = new Float64Array( 3 ); + out = new Float64Array( 2 ); + + info = dppequ( 'row-major', 'L', 3, AP, 1, 0, S, 1, 0, out, 1, 0 ); + + expectedOut = new Float64Array( [ 0.0, 1.0 ] ); + expectedS = new Float64Array( [ 1.0, 0.0, 1.0 ] ); + t.deepEqual( S, expectedS, 'returns expected value' ); + t.deepEqual( out, expectedOut, 'returns expected value' ); + t.deepEqual( info, 1, 'returns expected value' ); + + t.end(); +});