Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
d6b630d
feat: chbmv base set up
DivitJain26 Mar 21, 2026
27255cf
branch 1
DivitJain26 Mar 22, 2026
be378cf
feat: base implementaion added
DivitJain26 Mar 22, 2026
c760434
test: basic fixtures added
DivitJain26 Mar 22, 2026
705b23b
feat: main added
DivitJain26 Mar 22, 2026
b1e9f2f
feat: main added
DivitJain26 Mar 22, 2026
416624b
test: test files added
DivitJain26 Mar 23, 2026
95db3e7
chore: minnor fixes
DivitJain26 Mar 23, 2026
f022e34
test: y unchanged and scaling fixtures added
DivitJain26 Mar 23, 2026
a69da97
test: specific input vectors stride fixtures added
DivitJain26 Mar 23, 2026
c7538ce
test: offset for A fixtures added
DivitJain26 Mar 23, 2026
3f263fc
test: specifing strides for A fixtures added
DivitJain26 Mar 23, 2026
f8854b2
test: complex access fixtures added
DivitJain26 Mar 23, 2026
81637b6
chore: tests corrected
DivitJain26 Mar 23, 2026
7ed2998
chore: tests corrected
DivitJain26 Mar 23, 2026
4ab7019
docs: types added
DivitJain26 Mar 24, 2026
e74e977
docs: types tests added
DivitJain26 Mar 24, 2026
594ac20
docs: repl.txt added
DivitJain26 Mar 24, 2026
c233b63
docs: example added
DivitJain26 Mar 24, 2026
e5b1963
bench: benchmark added
DivitJain26 Mar 24, 2026
9ccf017
chore: typos fixed
DivitJain26 Mar 24, 2026
bd612ec
chore: typo fixed
DivitJain26 Mar 24, 2026
eaf4a76
docs: readme added
DivitJain26 Mar 24, 2026
207603f
feat: cache locality imporved
DivitJain26 Apr 1, 2026
1395e8c
chore: oa3 variable added
DivitJain26 Apr 1, 2026
b159f4b
Merge branch 'develop' into blas/base/chbmv
DivitJain26 Apr 9, 2026
bf51472
docs: update link tp chbmv
DivitJain26 Apr 9, 2026
fc8ca65
test: cover zero-beta branch in ndarray
DivitJain26 Apr 9, 2026
eb547e9
test: remove strideA1 and strideA2 validations and tests
DivitJain26 Apr 15, 2026
4b1bb93
refactor: improve float32 precision for addition assignment
DivitJain26 Apr 15, 2026
58d128c
refactor: update index recalculation to stride addition
DivitJain26 Apr 15, 2026
a4a8638
refactor: update branch 1 poniters
DivitJain26 Apr 15, 2026
fe98043
refactor: update branch 2 poniters
DivitJain26 Apr 15, 2026
4d484d2
refactor: update branch 2 poniters
DivitJain26 Apr 15, 2026
0233b3c
refactor: update branch 2 poniters
DivitJain26 Apr 15, 2026
b7dd47d
refactor: update branch 2 poniters
DivitJain26 Apr 15, 2026
4b26d07
chore: clean up in benchmark
DivitJain26 Apr 18, 2026
28675da
chore: clean up in docs
DivitJain26 Apr 18, 2026
da76f70
chore: clean up
DivitJain26 Apr 18, 2026
30a3ae3
chore: clean up
DivitJain26 Apr 18, 2026
71a2ad0
chore: clean up in readme
DivitJain26 Apr 18, 2026
8488a44
chore: clean up
DivitJain26 Apr 21, 2026
ac97c3e
chore: fix test message
DivitJain26 Apr 21, 2026
4457088
docs: update js example
DivitJain26 Apr 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
314 changes: 314 additions & 0 deletions lib/node_modules/@stdlib/blas/base/chbmv/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,314 @@
<!--

@license Apache-2.0

Copyright (c) 2026 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.

-->

# chbmv

> Performs the matrix-vector operation `y = α*A*x + β*y`.

<section class="usage">

## Usage

```javascript
var chbmv = require( '@stdlib/blas/base/chbmv' );
```

#### chbmv( order, uplo, N, K, α, A, LDA, x, sx, β, y, sy )

Performs the matrix-vector operation `y = α*A*x + β*y`, where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `N` by `N` Hermitian band matrix with `K` super-diagonals.

<!-- eslint-disable max-len -->

```javascript
var Complex64Array = require( '@stdlib/array/complex64' );
var Complex64 = require( '@stdlib/complex/float32/ctor' );

var A = new Complex64Array( [ 0.0, 0.0, 1.0, 0.0, 2.0, -2.0, 3.0, 0.0, 4.0, -4.0, 5.0, 0.0 ] );
var x = new Complex64Array( [ 1.0, 1.0, 2.0, 2.0, 3.0, 3.0 ] );
var y = new Complex64Array( [ 3.0, 3.0, 2.0, 2.0, 1.0, 1.0 ] );

var alpha = new Complex64( 0.5, 0.5 );
var beta = new Complex64( 0.5, -0.5 );

chbmv( 'row-major', 'lower', 3, 1, alpha, A, 2, x, 1, beta, y, 1 );
// y => <Complex64Array>[ -1.0, 5.0, -8.0, 20.0, 9.0, 23.0 ]
```

The function has the following parameters:

- **order**: storage layout.
- **uplo**: specifies whether the upper or lower triangular part of the matrix `A` is supplied.
- **N**: specifies number of elements along each dimension of `A`
- **K**: specifies number of super-diagonals or sub-diagonals of matrix `A`.
- **α**: scalar constant.
- **A**: input matrix stored in linear memory as a [`Complex64Array`][@stdlib/array/complex64].
- **LDA**: stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`).
- **x**: input vector [`Complex64Array`][@stdlib/array/complex64].
- **sx**: stride length for `x`.
- **β**: scalar constant.
- **y**: output [`Complex64Array`][@stdlib/array/complex64].
- **sy**: stride length for `y`.

The stride parameters determine how elements are accessed. For example, to iterate over every other element in `x` and `y`,

<!-- eslint-disable max-len -->

```javascript
var Complex64Array = require( '@stdlib/array/complex64' );
var Complex64 = require( '@stdlib/complex/float32/ctor' );

var A = new Complex64Array( [ 0.0, 0.0, 1.0, 0.0, 2.0, -2.0, 3.0, 0.0, 4.0, -4.0, 5.0, 0.0 ] );
var x = new Complex64Array( [ 1.0, 1.0, 0.0, 0.0, 2.0, 2.0, 0.0, 0.0, 3.0, 3.0 ] );
var y = new Complex64Array( [ 3.0, 3.0, 0.0, 0.0, 2.0, 2.0, 0.0, 0.0, 1.0, 1.0 ] );

var alpha = new Complex64( 0.5, 0.5 );
var beta = new Complex64( 0.5, -0.5 );

chbmv( 'row-major', 'lower', 3, 1, alpha, A, 2, x, 2, beta, y, 2 );
// y => <Complex64Array>[ -1.0, 5.0, 0.0, 0.0, -8.0, 20.0, 0.0, 0.0, 9.0, 23.0 ]
```

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

<!-- eslint-disable stdlib/capitalized-comments -->

<!-- eslint-disable max-len -->

```javascript
var Complex64Array = require( '@stdlib/array/complex64' );
var Complex64 = require( '@stdlib/complex/float32/ctor' );

// Initial arrays...
var x0 = new Complex64Array( [ 0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0 ] );
var y0 = new Complex64Array( [ 0.0, 0.0, 3.0, 3.0, 2.0, 2.0, 1.0, 1.0 ] );
var A = new Complex64Array( [ 0.0, 0.0, 1.0, 0.0, 2.0, -2.0, 3.0, 0.0, 4.0, -4.0, 5.0, 0.0 ] );

var alpha = new Complex64( 0.5, 0.5 );
var beta = new Complex64( 0.5, -0.5 );

// Create offset views...
var x1 = new Complex64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd complex element
var y1 = new Complex64Array( y0.buffer, y0.BYTES_PER_ELEMENT*1 ); // start at 2nd complex element

chbmv( 'row-major', 'lower', 3, 1, alpha, A, 2, x1, 1, beta, y1, 1 );
// y1 => <Complex64Array>[ -1.0, 5.0, -8.0, 20.0, 9.0, 23.0 ]
```

<!-- lint disable maximum-heading-length -->

#### chbmv.ndarray( uplo, N, K, α, A, sa1, sa2, oa, x, sx, ox, β, y, sy, oy )

Performs the matrix-vector operation `y = α*A*x + β*y` using alternative indexing semantics, where `α` and `β` are scalars, `x` and `y` are vectors, and `A` is an `N` by `N` Hermitian band matrix with `K` super-diagonals.

<!-- eslint-disable max-len -->

```javascript
var Complex64Array = require( '@stdlib/array/complex64' );
var Complex64 = require( '@stdlib/complex/float32/ctor' );

var A = new Complex64Array( [ 0.0, 0.0, 1.0, 0.0, 2.0, -2.0, 3.0, 0.0, 4.0, -4.0, 5.0, 0.0 ] );
var x = new Complex64Array( [ 1.0, 1.0, 2.0, 2.0, 3.0, 3.0 ] );
var y = new Complex64Array( [ 3.0, 3.0, 2.0, 2.0, 1.0, 1.0 ] );

var alpha = new Complex64( 0.5, 0.5 );
var beta = new Complex64( 0.5, -0.5 );

chbmv.ndarray( 'lower', 3, 1, alpha, A, 2, 1, 0, x, 1, 0, beta, y, 1, 0 );
// y => <Complex64Array>[ -1.0, 5.0, -8.0, 20.0, 9.0, 23.0 ]
```

The function has the following additional parameters:

- **sa1**: stride of the first dimension of `A`.
- **sa2**: stride of the second dimension of `A`.
- **oa**: starting index for `A`.
- **ox**: starting index for `x`.
- **oy**: starting index for `y`.

While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example,

<!-- eslint-disable max-len -->

```javascript
var Complex64Array = require( '@stdlib/array/complex64' );
var Complex64 = require( '@stdlib/complex/float32/ctor' );

var A = new Complex64Array( [ 0.0, 0.0, 1.0, 0.0, 2.0, -2.0, 3.0, 0.0, 4.0, -4.0, 5.0, 0.0 ] );
var x = new Complex64Array( [ 0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0 ] );
var y = new Complex64Array( [ 1.0, 1.0, 0.0, 0.0, 2.0, 2.0, 0.0, 0.0, 3.0, 3.0 ] );

var alpha = new Complex64( 0.5, 0.5 );
var beta = new Complex64( 0.5, -0.5 );

chbmv.ndarray( 'lower', 3, 1, alpha, A, 2, 1, 0, x, 1, 1, beta, y, -2, 4 );
// y => <Complex64Array>[ 9.0, 23.0, 0.0, 0.0, -8.0, 20.0, 0.0, 0.0, -1.0, 5.0 ]
```

</section>

<!-- /.usage -->

<section class="notes">

## Notes

- `chbmv()` corresponds to the [BLAS][blas] level 2 function [`chbmv`][chbmv].

</section>

<!-- /.notes -->

<section class="examples">

## Examples

<!-- eslint no-undef: "error" -->

<!-- eslint-disable max-len -->

```javascript
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var Complex64 = require( '@stdlib/complex/float32/ctor' );
var filledarrayBy = require( '@stdlib/array/filled-by' );
var logEach = require( '@stdlib/console/log-each' );
var chbmv = require( '@stdlib/blas/base/chbmv' );

function rand() {
return new Complex64( discreteUniform( 0, 255 ), discreteUniform( -128, 127 ) );
}

var N = 3;
var K = 1;

var A = filledarrayBy( N*(K+1), 'complex64', rand );
var x = filledarrayBy( N, 'complex64', rand );
var y = filledarrayBy( N, 'complex64', rand );

var alpha = new Complex64( 0.5, 0.5 );
var beta = new Complex64( 0.5, -0.5 );

chbmv( 'row-major', 'lower', N, 1, alpha, A, (K+1), x, 1, beta, y, 1 );

// Print the results:
logEach( '%s', x );

chbmv.ndarray( 'lower', N, 1, alpha, A, (K+1), 1, 0, x, 1, 0, beta, y, 1, 0 );

// Print the results:
logEach( '%s', x );
```

</section>

<!-- /.examples -->

<!-- C interface documentation. -->

* * *

<section class="c">

## C APIs

<!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. -->

<section class="intro">

</section>

<!-- /.intro -->

<!-- C usage documentation. -->

<section class="usage">

### Usage

```c
TODO
```

#### TODO

TODO.

```c
TODO
```

TODO

```c
TODO
```

</section>

<!-- /.usage -->

<!-- C API usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->

<section class="notes">

</section>

<!-- /.notes -->

<!-- C API usage examples. -->

<section class="examples">

### Examples

```c
TODO
```

</section>

<!-- /.examples -->

</section>

<!-- /.c -->

<!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. -->

<section class="related">

</section>

<!-- /.related -->

<!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->

<section class="links">

[blas]: http://www.netlib.org/blas

[chbmv]: https://www.netlib.org/lapack/explore-html/da/dd4/group__hbmv_gaf3753b609f411bbc719b8de9f9606e12.html#gaf3753b609f411bbc719b8de9f9606e12

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

[@stdlib/array/complex64]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/array/complex64

</section>

<!-- /.links -->
Loading