From 8e6c1fd247ab5dee0efb7c06d5ab4fd3a656544d Mon Sep 17 00:00:00 2001 From: ShabiShett07 Date: Fri, 30 May 2025 18:15:32 +0530 Subject: [PATCH 1/6] refactor: c implementation of blas/base/ssyr --- 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: 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: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: missing_dependencies - 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/blas/base/ssyr/README.md | 10 +- .../@stdlib/blas/base/ssyr/manifest.json | 238 +++++++++++++++--- .../@stdlib/blas/base/ssyr/src/ssyr.c | 80 +----- .../@stdlib/blas/base/ssyr/src/ssyr_cblas.c | 33 +++ .../@stdlib/blas/base/ssyr/src/ssyr_ndarray.c | 98 ++++++++ 5 files changed, 337 insertions(+), 122 deletions(-) create mode 100644 lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_ndarray.c diff --git a/lib/node_modules/@stdlib/blas/base/ssyr/README.md b/lib/node_modules/@stdlib/blas/base/ssyr/README.md index 46f70bb33083..961d2c5581f6 100644 --- a/lib/node_modules/@stdlib/blas/base/ssyr/README.md +++ b/lib/node_modules/@stdlib/blas/base/ssyr/README.md @@ -47,7 +47,7 @@ ssyr( 'row-major', 'upper', 3, 1.0, x, 1, A, 3 ); The function has the following parameters: - **order**: storage layout. -- **uplo**: specifies whether the upper or lower triangular part of the symmetric matrix `A` should be referenced. +- **uplo**: specifies whether the upper or lower triangular part of the symmetric matrix `A` is supplied. - **N**: number of elements along each dimension of `A`. - **α**: scalar constant. - **x**: input [`Float32Array`][mdn-float32array]. @@ -196,13 +196,13 @@ Performs the symmetric rank 1 operation `A = α*x*x^T + A`. float A[] = { 1.0f, 0.0f, 0.0f, 2.0f, 1.0f, 0.0f, 3.0f, 2.0f, 1.0f }; const float x[] = { 1.0f, 2.0f, 3.0f }; -c_ssyr( CblasColMajor, CblasUpper, 3, 1.0f, x, 1, A, 3 ); +c_ssyr( CblasRowMajor, CblasUpper, 3, 1.0f, x, 1, A, 3 ); ``` The function accepts the following arguments: - **order**: `[in] CBLAS_LAYOUT` storage layout. -- **uplo**: `[in] CBLAS_UPLO` specifies whether the upper or lower triangular part of the symmetric matrix `A` should be referenced. +- **uplo**: `[in] CBLAS_UPLO` specifies whether the upper or lower triangular part of the symmetric matrix `A` is supplied. - **N**: `[in] CBLAS_INT` number of elements along each dimension of `A`. - **alpha**: `[in] float` scalar. - **X**: `[in] float*` input array. @@ -229,7 +229,7 @@ c_ssyr_ndarray( CblasUpper, 3, 1.0f, x, 1, 0, A, 3, 1, 0 ); The function accepts the following arguments: -- **uplo**: `[in] CBLAS_UPLO` specifies whether the upper or lower triangular part of the symmetric matrix `A` should be referenced. +- **uplo**: `[in] CBLAS_UPLO` specifies whether the upper or lower triangular part of the symmetric matrix `A` is supplied. - **N**: `[in] CBLAS_INT` number of elements along each dimension of `A`. - **alpha**: `[in] float` scalar. - **X**: `[in] float*` input array. @@ -276,7 +276,7 @@ int main( void ) { const int N = 3; // Perform the symmetric rank 1 operation `A = α*x*x^T + A`: - c_ssyr( CblasColMajor, CblasUpper, N, 1.0f, x, 1, A, N ); + c_ssyr( CblasRowMajor, CblasUpper, N, 1.0f, x, 1, A, N ); // Print the result: for ( int i = 0; i < N*N; i++ ) { diff --git a/lib/node_modules/@stdlib/blas/base/ssyr/manifest.json b/lib/node_modules/@stdlib/blas/base/ssyr/manifest.json index 82ff44ce9dc7..efdf866064cb 100644 --- a/lib/node_modules/@stdlib/blas/base/ssyr/manifest.json +++ b/lib/node_modules/@stdlib/blas/base/ssyr/manifest.json @@ -30,11 +30,80 @@ "confs": [ { "task": "build", - "os": "win", + "os": "linux", + "blas": "", + "wasm": false, + "src": [ + "./src/dsyr.c", + "./src/dsyr_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/base/shared", + "@stdlib/strided/base/stride2offset", + "@stdlib/ndarray/base/assert/is-row-major", + "@stdlib/napi/export", + "@stdlib/napi/argv", + "@stdlib/napi/argv-int64", + "@stdlib/napi/argv-int32", + "@stdlib/napi/argv-float", + "@stdlib/napi/argv-strided-float32array", + "@stdlib/napi/argv-strided-float32array2d" + ] + }, + { + "task": "benchmark", + "os": "linux", + "blas": "", + "wasm": false, + "src": [ + "./src/dsyr.c", + "./src/dsyr_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/base/shared", + "@stdlib/strided/base/stride2offset", + "@stdlib/ndarray/base/assert/is-row-major", + "@stdlib/blas/ext/base/sfill" + ] + }, + { + "task": "examples", + "os": "linux", + "blas": "", + "wasm": false, + "src": [ + "./src/dsyr.c", + "./src/dsyr_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/base/shared", + "@stdlib/strided/base/stride2offset", + "@stdlib/ndarray/base/assert/is-row-major" + ] + }, + + { + "task": "build", + "os": "linux", "blas": "openblas", "wasm": false, "src": [ - "./src/ssyr_cblas.c" + "./src/dsyr_cblas.c" ], "include": [ "./include" @@ -46,22 +115,24 @@ "libpath": [], "dependencies": [ "@stdlib/blas/base/shared", + "@stdlib/strided/base/min-view-buffer-index", + "@stdlib/ndarray/base/min-view-buffer-index", "@stdlib/napi/export", "@stdlib/napi/argv", "@stdlib/napi/argv-int64", "@stdlib/napi/argv-int32", + "@stdlib/napi/argv-float", "@stdlib/napi/argv-strided-float32array", - "@stdlib/napi/argv-strided-float32array2d", - "@stdlib/napi/argv-float" + "@stdlib/napi/argv-strided-float32array2d" ] }, { "task": "benchmark", - "os": "win", + "os": "linux", "blas": "openblas", "wasm": false, "src": [ - "./src/ssyr_cblas.c" + "./src/dsyr_cblas.c" ], "include": [ "./include" @@ -72,16 +143,19 @@ ], "libpath": [], "dependencies": [ - "@stdlib/blas/base/shared" + "@stdlib/blas/base/shared", + "@stdlib/strided/base/min-view-buffer-index", + "@stdlib/ndarray/base/min-view-buffer-index", + "@stdlib/blas/ext/base/sfill" ] }, { "task": "examples", - "os": "win", + "os": "linux", "blas": "openblas", "wasm": false, "src": [ - "./src/ssyr_cblas.c" + "./src/dsyr_cblas.c" ], "include": [ "./include" @@ -92,7 +166,78 @@ ], "libpath": [], "dependencies": [ - "@stdlib/blas/base/shared" + "@stdlib/blas/base/shared", + "@stdlib/strided/base/min-view-buffer-index", + "@stdlib/ndarray/base/min-view-buffer-index" + ] + }, + + { + "task": "build", + "os": "mac", + "blas": "", + "wasm": false, + "src": [ + "./src/dsyr.c", + "./src/dsyr_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/base/shared", + "@stdlib/strided/base/stride2offset", + "@stdlib/ndarray/base/assert/is-row-major", + "@stdlib/napi/export", + "@stdlib/napi/argv", + "@stdlib/napi/argv-int64", + "@stdlib/napi/argv-int32", + "@stdlib/napi/argv-float", + "@stdlib/napi/argv-strided-float32array", + "@stdlib/napi/argv-strided-float32array2d" + ] + }, + { + "task": "benchmark", + "os": "mac", + "blas": "", + "wasm": false, + "src": [ + "./src/dsyr.c", + "./src/dsyr_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/base/shared", + "@stdlib/strided/base/stride2offset", + "@stdlib/ndarray/base/assert/is-row-major", + "@stdlib/blas/ext/base/sfill" + ] + }, + { + "task": "examples", + "os": "mac", + "blas": "", + "wasm": false, + "src": [ + "./src/dsyr.c", + "./src/dsyr_ndarray.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/blas/base/shared", + "@stdlib/strided/base/stride2offset", + "@stdlib/ndarray/base/assert/is-row-major" ] }, @@ -102,7 +247,7 @@ "blas": "apple_accelerate_framework", "wasm": false, "src": [ - "./src/ssyr_cblas.c" + "./src/dsyr_cblas.c" ], "include": [ "./include" @@ -113,13 +258,15 @@ "libpath": [], "dependencies": [ "@stdlib/blas/base/shared", + "@stdlib/strided/base/min-view-buffer-index", + "@stdlib/ndarray/base/min-view-buffer-index", "@stdlib/napi/export", "@stdlib/napi/argv", "@stdlib/napi/argv-int64", "@stdlib/napi/argv-int32", + "@stdlib/napi/argv-float", "@stdlib/napi/argv-strided-float32array", - "@stdlib/napi/argv-strided-float32array2d", - "@stdlib/napi/argv-float" + "@stdlib/napi/argv-strided-float32array2d" ] }, { @@ -128,7 +275,7 @@ "blas": "apple_accelerate_framework", "wasm": false, "src": [ - "./src/ssyr_cblas.c" + "./src/dsyr_cblas.c" ], "include": [ "./include" @@ -138,7 +285,10 @@ ], "libpath": [], "dependencies": [ - "@stdlib/blas/base/shared" + "@stdlib/blas/base/shared", + "@stdlib/strided/base/min-view-buffer-index", + "@stdlib/ndarray/base/min-view-buffer-index", + "@stdlib/blas/ext/base/sfill" ] }, { @@ -147,7 +297,7 @@ "blas": "apple_accelerate_framework", "wasm": false, "src": [ - "./src/ssyr_cblas.c" + "./src/dsyr_cblas.c" ], "include": [ "./include" @@ -157,7 +307,9 @@ ], "libpath": [], "dependencies": [ - "@stdlib/blas/base/shared" + "@stdlib/blas/base/shared", + "@stdlib/strided/base/min-view-buffer-index", + "@stdlib/ndarray/base/min-view-buffer-index" ] }, @@ -167,7 +319,7 @@ "blas": "openblas", "wasm": false, "src": [ - "./src/ssyr_cblas.c" + "./src/dsyr_cblas.c" ], "include": [ "./include" @@ -179,13 +331,15 @@ "libpath": [], "dependencies": [ "@stdlib/blas/base/shared", + "@stdlib/strided/base/min-view-buffer-index", + "@stdlib/ndarray/base/min-view-buffer-index", "@stdlib/napi/export", "@stdlib/napi/argv", "@stdlib/napi/argv-int64", "@stdlib/napi/argv-int32", + "@stdlib/napi/argv-float", "@stdlib/napi/argv-strided-float32array", - "@stdlib/napi/argv-strided-float32array2d", - "@stdlib/napi/argv-float" + "@stdlib/napi/argv-strided-float32array2d" ] }, { @@ -194,7 +348,7 @@ "blas": "openblas", "wasm": false, "src": [ - "./src/ssyr_cblas.c" + "./src/dsyr_cblas.c" ], "include": [ "./include" @@ -205,7 +359,10 @@ ], "libpath": [], "dependencies": [ - "@stdlib/blas/base/shared" + "@stdlib/blas/base/shared", + "@stdlib/strided/base/min-view-buffer-index", + "@stdlib/ndarray/base/min-view-buffer-index", + "@stdlib/blas/ext/base/sfill" ] }, { @@ -214,7 +371,7 @@ "blas": "openblas", "wasm": false, "src": [ - "./src/ssyr_cblas.c" + "./src/dsyr_cblas.c" ], "include": [ "./include" @@ -225,17 +382,20 @@ ], "libpath": [], "dependencies": [ - "@stdlib/blas/base/shared" + "@stdlib/blas/base/shared", + "@stdlib/strided/base/min-view-buffer-index", + "@stdlib/ndarray/base/min-view-buffer-index" ] }, { "task": "build", - "os": "linux", + "os": "win", "blas": "", "wasm": false, "src": [ - "./src/ssyr.c" + "./src/dsyr.c", + "./src/dsyr_ndarray.c" ], "include": [ "./include" @@ -244,24 +404,25 @@ "libpath": [], "dependencies": [ "@stdlib/blas/base/shared", + "@stdlib/strided/base/stride2offset", + "@stdlib/ndarray/base/assert/is-row-major", "@stdlib/napi/export", "@stdlib/napi/argv", "@stdlib/napi/argv-int64", "@stdlib/napi/argv-int32", - "@stdlib/napi/argv-strided-float32array", - "@stdlib/napi/argv-strided-float32array2d", "@stdlib/napi/argv-float", - "@stdlib/strided/base/stride2offset", - "@stdlib/ndarray/base/assert/is-row-major" + "@stdlib/napi/argv-strided-float32array", + "@stdlib/napi/argv-strided-float32array2d" ] }, { "task": "benchmark", - "os": "linux", + "os": "win", "blas": "", "wasm": false, "src": [ - "./src/ssyr.c" + "./src/dsyr.c", + "./src/dsyr_ndarray.c" ], "include": [ "./include" @@ -270,19 +431,19 @@ "libpath": [], "dependencies": [ "@stdlib/blas/base/shared", - "@stdlib/blas/ext/base/sfill", - "@stdlib/math/base/special/floorf", "@stdlib/strided/base/stride2offset", - "@stdlib/ndarray/base/assert/is-row-major" + "@stdlib/ndarray/base/assert/is-row-major", + "@stdlib/blas/ext/base/sfill" ] }, { "task": "examples", - "os": "linux", + "os": "win", "blas": "", "wasm": false, "src": [ - "./src/ssyr.c" + "./src/dsyr.c", + "./src/dsyr_ndarray.c" ], "include": [ "./include" @@ -302,7 +463,8 @@ "blas": "", "wasm": true, "src": [ - "./src/ssyr.c" + "./src/dsyr.c", + "./src/dsyr_ndarray.c" ], "include": [ "./include" diff --git a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c index 67a2bd63d1f2..6fa1e05df690 100644 --- a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c +++ b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c @@ -19,7 +19,6 @@ #include "stdlib/blas/base/ssyr.h" #include "stdlib/blas/base/shared.h" #include "stdlib/strided/base/stride2offset.h" -#include "stdlib/ndarray/base/assert/is_row_major.h" /** * Performs the symmetric rank 1 operation `A = α*x*x^T + A`. @@ -48,84 +47,7 @@ void API_SUFFIX(c_ssyr)( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const sa1 = LDA; sa2 = 1; } - ox = STDLIB_BLAS_BASE_STRIDE2OFFSET( N, strideX ); + ox = stdlib_blas_base_stride2offset( N, strideX ); API_SUFFIX(c_ssyr_ndarray)( uplo, N, alpha, X, strideX, ox, A, sa1, sa2, 0 ); return; } - -/** -* Performs the symmetric rank 1 operation `A = α*x*x^T + A` using alternative indexing semantics. -* -* @param uplo specifies whether the upper or lower triangular part of the symmetric matrix `A` should be referenced -* @param N number of elements along each dimension of `A` -* @param alpha scalar -* @param X input vector -* @param strideX `X` stride length -* @param offsetX starting index of `X` -* @param A input matrix -* @param strideA1 stride of the first dimension of `A` -* @param strideA2 stride of the second dimension of `A` -* @param offsetA starting index of `A` -*/ -void API_SUFFIX(c_ssyr_ndarray)( const CBLAS_UPLO uplo, const CBLAS_INT N, const float alpha, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, float *A, const CBLAS_INT strideA1, const CBLAS_INT strideA2, const CBLAS_INT offsetA ) { - CBLAS_INT isrm; - CBLAS_INT ix0; - CBLAS_INT ix1; - CBLAS_INT sa0; - CBLAS_INT sa1; - CBLAS_INT i0; - CBLAS_INT i1; - CBLAS_INT oa; - CBLAS_INT ox; - float tmp; - - int64_t strides[] = { strideA1, strideA2 }; - if ( N == 0 || alpha == 0.0f ) { - return; - } - isrm = stdlib_ndarray_is_row_major( 2, strides ); - if ( isrm ) { - // For row-major matrices, the last dimension has the fastest changing index... - sa0 = strideA2; // stride for innermost loop - sa1 = strideA1; // stride for outermost loop - } else { // isColMajor - // For column-major matrices, the first dimension has the fastest changing index... - sa0 = strideA1; // stride for innermost loop - sa1 = strideA2; // stride for outermost loop - } - ox = offsetX; - if ( - ( isrm && uplo == CblasLower ) || - ( !isrm && uplo == CblasUpper ) - ) { - ix1 = ox; - for ( i1 = 0; i1 < N; i1++ ) { - if ( X[ ix1 ] != 0.0f ) { - tmp = alpha * X[ ix1 ]; - oa = offsetA + (sa1*i1); - ix0 = ox; - for ( i0 = 0; i0 <= i1; i0++ ) { - A[ oa+(sa0*i0) ] += X[ ix0 ] * tmp; - ix0 += strideX; - } - } - ix1 += strideX; - } - return; - } - // ( isrm && uplo == 'CblasUpper' ) || ( !isrm && uplo === 'CblasLower' ) - ix1 = ox; - for ( i1 = 0; i1 < N; i1++ ) { - if ( X[ ix1 ] != 0.0f ) { - tmp = alpha * X[ ix1 ]; - oa = offsetA + (sa1*i1); - ix0 = ix1; - for ( i0 = i1; i0 < N; i0++ ) { - A[ oa+(sa0*i0) ] += X[ ix0 ] * tmp; - ix0 += strideX; - } - } - ix1 += strideX; - } - return; -} diff --git a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c index de11f791c556..b0434a1f5fa9 100644 --- a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c +++ b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c @@ -19,6 +19,8 @@ #include "stdlib/blas/base/ssyr.h" #include "stdlib/blas/base/ssyr_cblas.h" #include "stdlib/blas/base/shared.h" +#include "stdlib/strided/base/min_view_buffer_index.h" +#include "stdlib/ndarray/base/min_view_buffer_index.h" /** * Performs the symmetric rank 1 operation `A = α*x*x^T + A`. @@ -34,4 +36,35 @@ */ void API_SUFFIX(c_ssyr)( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const CBLAS_INT N, const float alpha, const float *X, const CBLAS_INT strideX, float *A, const CBLAS_INT LDA ) { API_SUFFIX(cblas_ssyr)( order, uplo, N, alpha, X, strideX, A, LDA ); + CBLAS_INT sx = strideX; + if ( sx < 0 ) { + sx = -sx; + } + API_SUFFIX(cblas_ssyr)( order, uplo, N, alpha, X, sx, A, LDA ); +} + +/** +* Performs the symmetric rank 1 operation `A = α*x*x^T + A` using alternative indexing semantics. +* +* @param uplo specifies whether the upper or lower triangular part of the symmetric matrix `A` should be referenced +* @param N number of elements along each dimension of `A` +* @param alpha scalar +* @param X input vector +* @param strideX `X` stride length +* @param offsetX starting index of `X` +* @param A input matrix +* @param strideA1 stride of the first dimension of `A` +* @param strideA2 stride of the second dimension of `A` +* @param offsetA starting index of `A` +*/ +void API_SUFFIX(c_ssyr_ndarray)( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const CBLAS_INT N, const float alpha, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, float *A, const CBLAS_INT strideA, const CBLAS_INT offsetA ) { + CBLAS_INT sx = strideX; + X += stdlib_strided_min_view_buffer_index( N, strideX, offsetX ); // adjust array pointer + const int64_t shape[] = { N, N }; + const int64_t strides[] = { strideA1, strideA2 }; + A += stdlib_ndarray_min_view_buffer_index( 2, shape, strides, offsetA ); // adjust array pointer + if ( sx < 0 ) { + sx = -sx; + } + API_SUFFIX(cblas_ssyr)( order, uplo, N, alpha, X, sx, A, LDA ); } diff --git a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_ndarray.c b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_ndarray.c new file mode 100644 index 000000000000..b664ce187d26 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_ndarray.c @@ -0,0 +1,98 @@ +/** +* @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. +*/ + +#include "stdlib/blas/base/ssyr.h" +#include "stdlib/blas/base/shared.h" +#include "stdlib/ndarray/base/assert/is_row_major.h" + +/** +* Performs the symmetric rank 1 operation `A = α*x*x^T + A` using alternative indexing semantics. +* +* @param uplo specifies whether the upper or lower triangular part of the symmetric matrix `A` should be referenced +* @param N number of elements along each dimension of `A` +* @param alpha scalar +* @param X input vector +* @param strideX `X` stride length +* @param offsetX starting index of `X` +* @param A input matrix +* @param strideA1 stride of the first dimension of `A` +* @param strideA2 stride of the second dimension of `A` +* @param offsetA starting index of `A` +*/ +void API_SUFFIX(c_ssyr_ndarray)( const CBLAS_UPLO uplo, const CBLAS_INT N, const float alpha, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, float *A, const CBLAS_INT strideA1, const CBLAS_INT strideA2, const CBLAS_INT offsetA ) { + CBLAS_INT isrm; + CBLAS_INT ix0; + CBLAS_INT ix1; + CBLAS_INT sa0; + CBLAS_INT sa1; + CBLAS_INT i0; + CBLAS_INT i1; + CBLAS_INT oa; + CBLAS_INT ox; + float tmp; + + int64_t strides[] = { strideA1, strideA2 }; + if ( N == 0 || alpha == 0.0f ) { + return; + } + isrm = stdlib_ndarray_is_row_major( 2, strides ); + if ( isrm ) { + // For row-major matrices, the last dimension has the fastest changing index... + sa0 = strideA2; // stride for innermost loop + sa1 = strideA1; // stride for outermost loop + } else { // isColMajor + // For column-major matrices, the first dimension has the fastest changing index... + sa0 = strideA1; // stride for innermost loop + sa1 = strideA2; // stride for outermost loop + } + ox = offsetX; + if ( + ( isrm && uplo == CblasLower ) || + ( !isrm && uplo == CblasUpper ) + ) { + ix1 = ox; + for ( i1 = 0; i1 < N; i1++ ) { + if ( X[ ix1 ] != 0.0f ) { + tmp = alpha * X[ ix1 ]; + oa = offsetA + (sa1*i1); + ix0 = ox; + for ( i0 = 0; i0 <= i1; i0++ ) { + A[ oa+(sa0*i0) ] += X[ ix0 ] * tmp; + ix0 += strideX; + } + } + ix1 += strideX; + } + return; + } + // ( isrm && uplo == 'CblasUpper' ) || ( !isrm && uplo === 'CblasLower' ) + ix1 = ox; + for ( i1 = 0; i1 < N; i1++ ) { + if ( X[ ix1 ] != 0.0f ) { + tmp = alpha * X[ ix1 ]; + oa = offsetA + (sa1*i1); + ix0 = ix1; + for ( i0 = i1; i0 < N; i0++ ) { + A[ oa+(sa0*i0) ] += X[ ix0 ] * tmp; + ix0 += strideX; + } + } + ix1 += strideX; + } + return; +} From f5414a1c1931a0e841c40098c033d2a39d9f8b95 Mon Sep 17 00:00:00 2001 From: ShabiShett07 Date: Fri, 30 May 2025 18:47:34 +0530 Subject: [PATCH 2/6] chore: update packages --- 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: 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/blas/base/ssyr/manifest.json | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/ssyr/manifest.json b/lib/node_modules/@stdlib/blas/base/ssyr/manifest.json index efdf866064cb..8047a60ac851 100644 --- a/lib/node_modules/@stdlib/blas/base/ssyr/manifest.json +++ b/lib/node_modules/@stdlib/blas/base/ssyr/manifest.json @@ -34,8 +34,8 @@ "blas": "", "wasm": false, "src": [ - "./src/dsyr.c", - "./src/dsyr_ndarray.c" + "./src/ssyr.c", + "./src/ssyr_ndarray.c" ], "include": [ "./include" @@ -61,8 +61,8 @@ "blas": "", "wasm": false, "src": [ - "./src/dsyr.c", - "./src/dsyr_ndarray.c" + "./src/ssyr.c", + "./src/ssyr_ndarray.c" ], "include": [ "./include" @@ -82,8 +82,8 @@ "blas": "", "wasm": false, "src": [ - "./src/dsyr.c", - "./src/dsyr_ndarray.c" + "./src/ssyr.c", + "./src/ssyr_ndarray.c" ], "include": [ "./include" @@ -103,7 +103,7 @@ "blas": "openblas", "wasm": false, "src": [ - "./src/dsyr_cblas.c" + "./src/ssyr_cblas.c" ], "include": [ "./include" @@ -132,7 +132,7 @@ "blas": "openblas", "wasm": false, "src": [ - "./src/dsyr_cblas.c" + "./src/ssyr_cblas.c" ], "include": [ "./include" @@ -155,7 +155,7 @@ "blas": "openblas", "wasm": false, "src": [ - "./src/dsyr_cblas.c" + "./src/ssyr_cblas.c" ], "include": [ "./include" @@ -178,8 +178,8 @@ "blas": "", "wasm": false, "src": [ - "./src/dsyr.c", - "./src/dsyr_ndarray.c" + "./src/ssyr.c", + "./src/ssyr_ndarray.c" ], "include": [ "./include" @@ -205,8 +205,8 @@ "blas": "", "wasm": false, "src": [ - "./src/dsyr.c", - "./src/dsyr_ndarray.c" + "./src/ssyr.c", + "./src/ssyr_ndarray.c" ], "include": [ "./include" @@ -226,8 +226,8 @@ "blas": "", "wasm": false, "src": [ - "./src/dsyr.c", - "./src/dsyr_ndarray.c" + "./src/ssyr.c", + "./src/ssyr_ndarray.c" ], "include": [ "./include" @@ -247,7 +247,7 @@ "blas": "apple_accelerate_framework", "wasm": false, "src": [ - "./src/dsyr_cblas.c" + "./src/ssyr_cblas.c" ], "include": [ "./include" @@ -275,7 +275,7 @@ "blas": "apple_accelerate_framework", "wasm": false, "src": [ - "./src/dsyr_cblas.c" + "./src/ssyr_cblas.c" ], "include": [ "./include" @@ -297,7 +297,7 @@ "blas": "apple_accelerate_framework", "wasm": false, "src": [ - "./src/dsyr_cblas.c" + "./src/ssyr_cblas.c" ], "include": [ "./include" @@ -319,7 +319,7 @@ "blas": "openblas", "wasm": false, "src": [ - "./src/dsyr_cblas.c" + "./src/ssyr_cblas.c" ], "include": [ "./include" @@ -348,7 +348,7 @@ "blas": "openblas", "wasm": false, "src": [ - "./src/dsyr_cblas.c" + "./src/ssyr_cblas.c" ], "include": [ "./include" @@ -371,7 +371,7 @@ "blas": "openblas", "wasm": false, "src": [ - "./src/dsyr_cblas.c" + "./src/ssyr_cblas.c" ], "include": [ "./include" @@ -394,8 +394,8 @@ "blas": "", "wasm": false, "src": [ - "./src/dsyr.c", - "./src/dsyr_ndarray.c" + "./src/ssyr.c", + "./src/ssyr_ndarray.c" ], "include": [ "./include" @@ -421,8 +421,8 @@ "blas": "", "wasm": false, "src": [ - "./src/dsyr.c", - "./src/dsyr_ndarray.c" + "./src/ssyr.c", + "./src/ssyr_ndarray.c" ], "include": [ "./include" @@ -442,8 +442,8 @@ "blas": "", "wasm": false, "src": [ - "./src/dsyr.c", - "./src/dsyr_ndarray.c" + "./src/ssyr.c", + "./src/ssyr_ndarray.c" ], "include": [ "./include" @@ -463,8 +463,8 @@ "blas": "", "wasm": true, "src": [ - "./src/dsyr.c", - "./src/dsyr_ndarray.c" + "./src/ssyr.c", + "./src/ssyr_ndarray.c" ], "include": [ "./include" From 530e616250ee91df4c93c94f2c5b53b4fd1ba0c3 Mon Sep 17 00:00:00 2001 From: Shabareesh Shetty <139731143+ShabiShett07@users.noreply.github.com> Date: Fri, 30 May 2025 18:52:18 +0530 Subject: [PATCH 3/6] chore: minor clean-up Signed-off-by: Shabareesh Shetty <139731143+ShabiShett07@users.noreply.github.com> --- lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c index 6fa1e05df690..7bde233f44cf 100644 --- a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c +++ b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c @@ -47,7 +47,7 @@ void API_SUFFIX(c_ssyr)( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const sa1 = LDA; sa2 = 1; } - ox = stdlib_blas_base_stride2offset( N, strideX ); + ox = stdlib_strided_base_stride2offset( N, strideX ); API_SUFFIX(c_ssyr_ndarray)( uplo, N, alpha, X, strideX, ox, A, sa1, sa2, 0 ); return; } From 0cb1c6bdc64ab2f0bfb2d73b822fa33ddfd9dde6 Mon Sep 17 00:00:00 2001 From: Shabareesh Shetty <139731143+ShabiShett07@users.noreply.github.com> Date: Fri, 30 May 2025 19:07:13 +0530 Subject: [PATCH 4/6] chore: minor clean-up Signed-off-by: Shabareesh Shetty <139731143+ShabiShett07@users.noreply.github.com> --- lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c index 7bde233f44cf..9267177e6e19 100644 --- a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c +++ b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr.c @@ -47,7 +47,7 @@ void API_SUFFIX(c_ssyr)( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const sa1 = LDA; sa2 = 1; } - ox = stdlib_strided_base_stride2offset( N, strideX ); + ox = stdlib_strided_stride2offset( N, strideX ); API_SUFFIX(c_ssyr_ndarray)( uplo, N, alpha, X, strideX, ox, A, sa1, sa2, 0 ); return; } From bae7044793665d780323b771e2d6ee34dd6f6f5f Mon Sep 17 00:00:00 2001 From: Shabareesh Shetty <139731143+ShabiShett07@users.noreply.github.com> Date: Fri, 30 May 2025 19:32:17 +0530 Subject: [PATCH 5/6] chore: minor clean-up Signed-off-by: Shabareesh Shetty <139731143+ShabiShett07@users.noreply.github.com> --- lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c index b0434a1f5fa9..fd7267a573c6 100644 --- a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c +++ b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c @@ -57,7 +57,7 @@ void API_SUFFIX(c_ssyr)( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const * @param strideA2 stride of the second dimension of `A` * @param offsetA starting index of `A` */ -void API_SUFFIX(c_ssyr_ndarray)( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const CBLAS_INT N, const float alpha, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, float *A, const CBLAS_INT strideA, const CBLAS_INT offsetA ) { +void API_SUFFIX(c_ssyr_ndarray)( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const CBLAS_INT N, const float alpha, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, float *A, const CBLAS_INT strideA1, const CBLAS_INT strideA2, const CBLAS_INT offsetA ) { CBLAS_INT sx = strideX; X += stdlib_strided_min_view_buffer_index( N, strideX, offsetX ); // adjust array pointer const int64_t shape[] = { N, N }; From 2df183ee056a88277748d686ef32d7efcfc17912 Mon Sep 17 00:00:00 2001 From: Shabareesh Shetty <139731143+ShabiShett07@users.noreply.github.com> Date: Fri, 30 May 2025 23:30:12 +0530 Subject: [PATCH 6/6] chore: minor clean-up Signed-off-by: Shabareesh Shetty <139731143+ShabiShett07@users.noreply.github.com> --- lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c index fd7267a573c6..313bb6575717 100644 --- a/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c +++ b/lib/node_modules/@stdlib/blas/base/ssyr/src/ssyr_cblas.c @@ -57,7 +57,7 @@ void API_SUFFIX(c_ssyr)( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const * @param strideA2 stride of the second dimension of `A` * @param offsetA starting index of `A` */ -void API_SUFFIX(c_ssyr_ndarray)( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const CBLAS_INT N, const float alpha, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, float *A, const CBLAS_INT strideA1, const CBLAS_INT strideA2, const CBLAS_INT offsetA ) { +void API_SUFFIX(c_ssyr_ndarray)( const CBLAS_UPLO uplo, const CBLAS_INT N, const float alpha, const float *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, float *A, const CBLAS_INT strideA1, const CBLAS_INT strideA2, const CBLAS_INT offsetA ) { CBLAS_INT sx = strideX; X += stdlib_strided_min_view_buffer_index( N, strideX, offsetX ); // adjust array pointer const int64_t shape[] = { N, N };