From 8b47c41e961eb5fe550e385f9bd06930433f2d8a Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 18 May 2026 12:37:14 +0000 Subject: [PATCH 1/2] fix: correct `beta` scaling and `LDA` validation in `blas/base/cgemv` When `beta` is zero, `c_cgemv_ndarray` filled `Y` with `alpha` instead of `zero`, so callers passing `beta = 0` received `alpha + alpha*A*X` rather than `alpha*A*X`. The `c_cgemv` leading dimension check also compared `LDA` against `v` instead of `vala` (`max(1,v)`), so an invalid `LDA` went unreported when `M`/`N` is zero. Both defects were introduced in 2a0b1a1. https://claude.ai/code/session_01TSEHKgS4iExWRieEZUJTbw --- lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv.c | 2 +- lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv_ndarray.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv.c b/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv.c index 718295d2ad03..0f3d131aa47b 100644 --- a/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv.c +++ b/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv.c @@ -88,7 +88,7 @@ void API_SUFFIX(c_cgemv)( const CBLAS_LAYOUT layout, const CBLAS_TRANSPOSE trans } else { vala = v; } - if ( LDA < v ) { + if ( LDA < vala ) { c_xerbla( 7, "c_cgemv", "Error: invalid argument. Seventh argument must be greater than or equal to max(1,%d). Value: `%d`.", vala, LDA ); return; } diff --git a/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv_ndarray.c b/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv_ndarray.c index 36483901dc4b..1548369afa4e 100644 --- a/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv_ndarray.c +++ b/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv_ndarray.c @@ -113,7 +113,7 @@ void API_SUFFIX(c_cgemv_ndarray)( const CBLAS_TRANSPOSE trans, const CBLAS_INT M } // Y = beta * Y if ( stdlib_base_complex64_is_equal( beta, zero ) ) { - API_SUFFIX(stdlib_strided_cfill_ndarray)( ylen, alpha, Y, strideY, offsetY ); + API_SUFFIX(stdlib_strided_cfill_ndarray)( ylen, zero, Y, strideY, offsetY ); } else if ( !stdlib_base_complex64_is_equal( beta, one ) ) { API_SUFFIX(c_cscal_ndarray)( ylen, beta, Y, strideY, offsetY ); } From 2dbfbfcfe6406a85d8551e1a76e2d01697ce08a6 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 18 May 2026 12:37:40 +0000 Subject: [PATCH 2/2] docs: fix typos in `blas/base/cgemv` Correct a duplicated `@param strideA1` doc-comment entry that should be `strideA2`, drop the spurious article in four "must be a nonzero" error messages, and fix transposed wording in the `c_cgemv_ndarray` README description ("indexing alternative" -> "alternative indexing"). Typos introduced in 2a0b1a1. https://claude.ai/code/session_01TSEHKgS4iExWRieEZUJTbw --- lib/node_modules/@stdlib/blas/base/cgemv/README.md | 2 +- lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv.c | 4 ++-- .../@stdlib/blas/base/cgemv/src/cgemv_ndarray.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/cgemv/README.md b/lib/node_modules/@stdlib/blas/base/cgemv/README.md index 04dd85e9bccd..036e42ba0d8a 100644 --- a/lib/node_modules/@stdlib/blas/base/cgemv/README.md +++ b/lib/node_modules/@stdlib/blas/base/cgemv/README.md @@ -292,7 +292,7 @@ void c_cgemv( const CBLAS_LAYOUT layout, const CBLAS_TRANSPOSE trans, const CBLA #### c_cgemv_ndarray( trans, M, N, alpha, \*A, sa1, sa2, oa, \*X, sx, ox, beta, \*Y, sy, oy ) -Performs one of the matrix-vector operations `Y = α*A*X + β*Y` or `Y = α*A^T*X + β*Y` or `Y = α*A^H*X + β*Y` using indexing alternative semantics and where `α` and `β` are scalars, `X` and `Y` are vectors, and `A` is an `M` by `N` matrix. +Performs one of the matrix-vector operations `Y = α*A*X + β*Y` or `Y = α*A^T*X + β*Y` or `Y = α*A^H*X + β*Y` using alternative indexing semantics and where `α` and `β` are scalars, `X` and `Y` are vectors, and `A` is an `M` by `N` matrix. ```c #include "stdlib/blas/base/shared.h" diff --git a/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv.c b/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv.c index 0f3d131aa47b..032b0359cda5 100644 --- a/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv.c +++ b/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv.c @@ -70,11 +70,11 @@ void API_SUFFIX(c_cgemv)( const CBLAS_LAYOUT layout, const CBLAS_TRANSPOSE trans return; } if ( strideX == 0 ) { - c_xerbla( 9, "c_cgemv", "Error: invalid argument. Ninth argument must be a nonzero. Value: `%d`.", strideX ); + c_xerbla( 9, "c_cgemv", "Error: invalid argument. Ninth argument must be nonzero. Value: `%d`.", strideX ); return; } if ( strideY == 0 ) { - c_xerbla( 12, "c_cgemv", "Error: invalid argument. Twelfth argument must be a nonzero. Value: `%d`.", strideY ); + c_xerbla( 12, "c_cgemv", "Error: invalid argument. Twelfth argument must be nonzero. Value: `%d`.", strideY ); return; } if ( layout == CblasColMajor ) { diff --git a/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv_ndarray.c b/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv_ndarray.c index 1548369afa4e..a52a7a9fd850 100644 --- a/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv_ndarray.c +++ b/lib/node_modules/@stdlib/blas/base/cgemv/src/cgemv_ndarray.c @@ -37,7 +37,7 @@ * @param alpha scalar constant * @param A input matrix * @param strideA1 stride of the first dimension of `A` -* @param strideA1 stride of the second dimension of `A` +* @param strideA2 stride of the second dimension of `A` * @param offsetA starting index for `A` * @param X first input vector * @param strideX `X` stride length @@ -84,11 +84,11 @@ void API_SUFFIX(c_cgemv_ndarray)( const CBLAS_TRANSPOSE trans, const CBLAS_INT M return; } if ( strideX == 0 ) { - c_xerbla( 10, "c_cgemv_ndarray", "Error: invalid argument. Tenth argument must be a nonzero. Value: `%d`.", strideX ); + c_xerbla( 10, "c_cgemv_ndarray", "Error: invalid argument. Tenth argument must be nonzero. Value: `%d`.", strideX ); return; } if ( strideY == 0 ) { - c_xerbla( 14, "c_cgemv_ndarray", "Error: invalid argument. Fourteenth argument must be a nonzero. Value: `%d`.", strideY ); + c_xerbla( 14, "c_cgemv_ndarray", "Error: invalid argument. Fourteenth argument must be nonzero. Value: `%d`.", strideY ); return; } ap = (stdlib_complex64_t *)A;