Skip to content

Commit f12a2af

Browse files
refactor: major updates to tests, benchmarks and README file
--- 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: passed - task: lint_package_json status: passed - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - 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: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed ---
1 parent 691c1a9 commit f12a2af

41 files changed

Lines changed: 1189 additions & 246 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

lib/node_modules/@stdlib/lapack/base/dlasv2/README.md

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,37 @@ limitations under the License.
2020

2121
# dlasv2
2222

23-
> Compute singular value decomposition of a 2x2 triangular matrix.
23+
> Compute the singular value decomposition of a 2x2 upper triangular matrix.
24+
25+
<section class="intro">
26+
27+
The singular value decomposition of a 2x2 upper triangular matrix $ \begin{bmatrix} F & G \\ 0 & H \end{bmatrix}$ is given by -
28+
29+
<!-- <equation class="equation" label="eq:dlasv2_svd" align="center" raw="\left[\begin{array}{rr} \mathrm{CSL} & \mathrm{SNL} \\ -\mathrm{SNL} & \mathrm{CSL} \end{array}\right] \left[\begin{array}{rr} F & G \\ 0 & H \end{array}\right] \left[\begin{array}{rr} \mathrm{CSR} & -\mathrm{SNR} \\ \mathrm{SNR} & \mathrm{CSR} \end{array}\right] = \left[\begin{array}{rr} \mathrm{SSMAX} & 0 \\ 0 & \mathrm{SSMIN} \end{array}\right]" alt="Singular value decomposition of a 2x2 upper triangular matrix."> -->
30+
31+
```math
32+
\left[\begin{array}{rr}\mathrm{CSL} & \mathrm{SNL} \\
33+
-\mathrm{SNL} & \mathrm{CSL}\end{array}\right]
34+
35+
\left[\begin{array}{rr}F & G \\
36+
0 & H\end{array}\right]
37+
38+
\left[\begin{array}{rr}\mathrm{CSR} & -\mathrm{SNR} \\
39+
\mathrm{SNR} & \mathrm{CSR}\end{array}\right]
40+
41+
=
42+
43+
\left[\begin{array}{rr}\mathrm{SSMAX} & 0 \\
44+
0 & \mathrm{SSMIN}\end{array}\right]
45+
```
46+
47+
<!-- </equation> -->
48+
49+
where `CSL`,`SNL`,`CSR`,`SNR` define orthogonal rotations and $\mathrm{SSMAX}^2, \mathrm{SSMIN}^2$ are the eigenvalues of $A^{T}A$.
50+
51+
</section>
52+
53+
<!-- /.intro -->
2454

2555
<section class="usage">
2656

@@ -32,22 +62,27 @@ var dlasv2 = require( '@stdlib/lapack/base/dlasv2' );
3262

3363
#### dlasv2( F, G, H, out )
3464

35-
Computes singular value decomposition of a 2x2 triangular matrix.
65+
Computes the singular value decomposition of a 2x2 upper triangular matrix.
3666

3767
```javascript
3868
var Float64Array = require( '@stdlib/array/float64' );
3969
var out = new Float64Array( 6 );
4070

41-
out = dlasv2( 2.0, 3.0, 4.0, out );
42-
// out => <Float64Array>[ 1.5513263285176897, 5.1568776039816795, 0.9664996487646696, 0.25666793515702424, 0.7496781758158659, 0.6618025632357402 ]
71+
var v = dlasv2( 2.0, 3.0, 4.0, out );
72+
// returns <Float64Array>[ ~1.5513, ~5.1569, ~0.9665, ~0.2567, ~0.7497, ~0.6618 ]
73+
74+
var bool = ( v === out );
75+
// returns true
4376
```
4477

4578
The function has the following parameters:
4679

4780
- **F**: the (0,0) element of matrix.
4881
- **G**: the (0,1) element of matrix.
4982
- **H**: the (1,1) element of matrix.
50-
- **out**: [`Float64Array`][mdn-float64array] output array containing `SSMIN`, `SSMAX`, `SNR`, `CSR`, `SNL`, and `CSL` respectively.
83+
- **out**: [`Float64Array`][@stdlib/array/float64] output array containing `SSMIN`, `SSMAX`, `SNR`, `CSR`, `SNL`, and `CSL` respectively.
84+
85+
On return, `abs(SSMAX)` is the larger singular value, `abs(SSMIN)` is the smaller singular value, and (`CSL`,`SNL`) and (`CSR`,`SNR`) are the left and right singular vectors for `abs(SSMAX)` as described in the decomposition.
5186

5287
Note that indexing is relative to the first index. To introduce an offset, use [`typed array`][mdn-typed-array] views.
5388

@@ -63,19 +98,19 @@ var OUT0 = new Float64Array( [ 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] );
6398
var OUT1 = new Float64Array( OUT0.buffer, OUT0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
6499

65100
dlasv2( 2.0, 3.0, 4.0, OUT1 );
66-
// OUT0 => <Float64Array>[ 0.0, 1.5513263285176897, 5.1568776039816795, 0.9664996487646696, 0.25666793515702424, 0.7496781758158659, 0.6618025632357402 ]
101+
// OUT0 => <Float64Array>[ 0.0, ~1.5513, ~5.1569, ~0.9665, ~0.2567, ~0.7497, ~0.6618 ]
67102
```
68103

69104
#### dlasv2.ndarray( F, G, H, out, strideOut, offsetOut )
70105

71-
Computes singular value decomposition of a 2x2 triangular matrix using alternative indexing semantics.
106+
Computes the singular value decomposition of a 2x2 upper triangular matrix using alternative indexing semantics.
72107

73108
```javascript
74109
var Float64Array = require( '@stdlib/array/float64' );
75110
var out = new Float64Array( 6 );
76111

77-
out = dlasv2.ndarray( 2.0, 3.0, 4.0, out, 1, 0 );
78-
// out => <Float64Array>[ 1.5513263285176897, 5.1568776039816795, 0.9664996487646696, 0.25666793515702424, 0.7496781758158659, 0.6618025632357402 ]
112+
dlasv2.ndarray( 2.0, 3.0, 4.0, out, 1, 0 );
113+
// out => <Float64Array>[ ~1.5513, ~5.1569, ~0.9665, ~0.2567, ~0.7497, ~0.6618 ]
79114
```
80115

81116
The function has the following additional parameters:
@@ -89,10 +124,10 @@ While [`typed array`][mdn-typed-array] views mandate a view offset based on the
89124

90125
```javascript
91126
var Float64Array = require( '@stdlib/array/float64' );
92-
var out = new Float64Array( [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] );
127+
var out = new Float64Array( [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] );
93128

94-
out = dlasv2.ndarray( 2.0, 3.0, 4.0, out, 1, 1 );
95-
// out => <Float64Array>[ 0.0, 1.5513263285176897, 5.1568776039816795, 0.9664996487646696, 0.25666793515702424, 0.7496781758158659, 0.6618025632357402 ]
129+
dlasv2.ndarray( 2.0, 3.0, 4.0, out, 1, 1 );
130+
// out => <Float64Array>[ 0.0, ~1.5513, ~5.1569, ~0.9665, ~0.2567, ~0.7497, ~0.6618 ]
96131
```
97132

98133
</section>
@@ -121,7 +156,10 @@ var dlasv2 = require( '@stdlib/lapack/base/dlasv2' );
121156

122157
var out = new Float64Array( [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] );
123158

124-
out = dlasv2( 2.0, 3.0, 4.0, out );
159+
dlasv2( 1.0, 1e6, 2.0, out );
160+
console.log( out );
161+
162+
dlasv2.ndarray( 1.0, 1e6, 2.0, out, 1, 0 );
125163
console.log( out );
126164
```
127165

@@ -215,7 +253,7 @@ TODO
215253

216254
[lapack-dlasv2]: https://www.netlib.org/lapack/explore-html/d8/da7/group__lasv2_ga96f9f244300d82921950e2c393b4b20f.html#ga96f9f244300d82921950e2c393b4b20f
217255

218-
[mdn-float64array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array
256+
[@stdlib/array/float64]: https://stdlib.io/docs/api/latest/@stdlib/array/float64
219257

220258
[mdn-typed-array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
221259

lib/node_modules/@stdlib/lapack/base/dlasv2/benchmark/benchmark.js

Lines changed: 24 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -21,72 +21,40 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var uniform = require( '@stdlib/random/array/uniform' );
24+
var uniform = require( '@stdlib/random/base/uniform' );
25+
var Float64Array = require( '@stdlib/array/float64' );
26+
var format = require( '@stdlib/string/format' );
2527
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2628
var pkg = require( './../package.json' ).name;
2729
var dlasv2 = require( './../lib/dlasv2.js' );
2830

2931

30-
// VARIABLES //
32+
// MAIN //
3133

32-
var options = {
33-
'dtype': 'float64'
34-
};
34+
bench( format( '%s', pkg ), function benchmark( b ) {
35+
var out;
36+
var f;
37+
var g;
38+
var h;
39+
var i;
3540

41+
out = new Float64Array( 6 );
3642

37-
// FUNCTIONS //
43+
b.tic();
44+
for ( i = 0; i < b.iterations; i++ ) {
45+
f = uniform( -10.0, 10.0 );
46+
g = uniform( -10.0, 10.0 );
47+
h = uniform( -10.0, 10.0 );
3848

39-
/**
40-
* Creates a benchmark function.
41-
*
42-
* @private
43-
* @returns {Function} benchmark function
44-
*/
45-
function createBenchmark( ) {
46-
var out = uniform( 6, 0.0, 100.0, options );
47-
return benchmark;
48-
49-
function benchmark( b ) {
50-
var d;
51-
var i;
52-
53-
b.tic();
54-
for ( i = 0; i < b.iterations; i++ ) {
55-
d = dlasv2( out[ 0 ], out[ 2 ], out[ 1 ], out );
56-
if ( isnan( d[ i%out.length ] ) ) {
57-
b.fail( 'should not return NaN' );
58-
}
59-
}
60-
b.toc();
61-
if ( isnan( d[ i%out.length ] ) ) {
49+
dlasv2( f, g, h, out );
50+
if ( isnan( out[ i%out.length ] ) ) {
6251
b.fail( 'should not return NaN' );
6352
}
64-
b.pass( 'benchmark finished' );
65-
b.end();
6653
}
67-
}
68-
69-
70-
// MAIN //
71-
72-
/**
73-
* Main execution sequence.
74-
*
75-
* @private
76-
*/
77-
function main() {
78-
var min;
79-
var max;
80-
var f;
81-
var i;
82-
83-
min = 1; // 10^min
84-
max = 6; // 10^max
85-
86-
for ( i = min; i <= max; i++ ) {
87-
f = createBenchmark();
88-
bench( pkg, f );
54+
b.toc();
55+
if ( isnan( out[ i%out.length ] ) ) {
56+
b.fail( 'should not return NaN' );
8957
}
90-
}
91-
92-
main();
58+
b.pass( 'benchmark finished' );
59+
b.end();
60+
});

lib/node_modules/@stdlib/lapack/base/dlasv2/benchmark/benchmark.ndarray.js

Lines changed: 24 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -21,72 +21,40 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var uniform = require( '@stdlib/random/array/uniform' );
24+
var uniform = require( '@stdlib/random/base/uniform' );
25+
var Float64Array = require( '@stdlib/array/float64' );
26+
var format = require( '@stdlib/string/format' );
2527
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2628
var pkg = require( './../package.json' ).name;
2729
var dlasv2 = require( './../lib/ndarray.js' );
2830

2931

30-
// VARIABLES //
32+
// MAIN //
3133

32-
var options = {
33-
'dtype': 'float64'
34-
};
34+
bench( format( '%s', pkg ), function benchmark( b ) {
35+
var out;
36+
var f;
37+
var g;
38+
var h;
39+
var i;
3540

41+
out = new Float64Array( 6 );
3642

37-
// FUNCTIONS //
43+
b.tic();
44+
for ( i = 0; i < b.iterations; i++ ) {
45+
f = uniform( -10.0, 10.0 );
46+
g = uniform( -10.0, 10.0 );
47+
h = uniform( -10.0, 10.0 );
3848

39-
/**
40-
* Creates a benchmark function.
41-
*
42-
* @private
43-
* @returns {Function} benchmark function
44-
*/
45-
function createBenchmark( ) {
46-
var out = uniform( 6, 0.0, 100.0, options );
47-
return benchmark;
48-
49-
function benchmark( b ) {
50-
var d;
51-
var i;
52-
53-
b.tic();
54-
for ( i = 0; i < b.iterations; i++ ) {
55-
d = dlasv2( out[ 0 ], out[ 2 ], out[ 1 ], out, 1, 0 );
56-
if ( isnan( d[ i%out.length ] ) ) {
57-
b.fail( 'should not return NaN' );
58-
}
59-
}
60-
b.toc();
61-
if ( isnan( d[ i%out.length ] ) ) {
49+
dlasv2( f, g, h, out, 1, 0 );
50+
if ( isnan( out[ i%out.length ] ) ) {
6251
b.fail( 'should not return NaN' );
6352
}
64-
b.pass( 'benchmark finished' );
65-
b.end();
6653
}
67-
}
68-
69-
70-
// MAIN //
71-
72-
/**
73-
* Main execution sequence.
74-
*
75-
* @private
76-
*/
77-
function main() {
78-
var min;
79-
var max;
80-
var f;
81-
var i;
82-
83-
min = 1; // 10^min
84-
max = 6; // 10^max
85-
86-
for ( i = min; i <= max; i++ ) {
87-
f = createBenchmark();
88-
bench( pkg+':ndarray', f );
54+
b.toc();
55+
if ( isnan( out[ i%out.length ] ) ) {
56+
b.fail( 'should not return NaN' );
8957
}
90-
}
91-
92-
main();
58+
b.pass( 'benchmark finished' );
59+
b.end();
60+
});

0 commit comments

Comments
 (0)