From 6ea1f20da37100db4621e89250883b8c86b5a3ff Mon Sep 17 00:00:00 2001
From: DhruvArvindSingh <dhruvsinghxd@gmail.com>
Date: Thu, 2 Jan 2025 15:10:08 +0000
Subject: [PATCH 1/2] refactor: update stats/base/snanstdevyc native addon from
 C++ to C

---
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: passed
  - 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
---

---
type: pre_push_report
description: Results of running various checks prior to pushing changes.
report:
  - task: run_javascript_examples
    status: na
  - task: run_c_examples
    status: na
  - task: run_cpp_examples
    status: na
  - task: run_javascript_readme_examples
    status: na
  - task: run_c_benchmarks
    status: na
  - task: run_cpp_benchmarks
    status: na
  - task: run_fortran_benchmarks
    status: na
  - task: run_javascript_benchmarks
    status: na
  - task: run_julia_benchmarks
    status: na
  - task: run_python_benchmarks
    status: na
  - task: run_r_benchmarks
    status: na
  - task: run_javascript_tests
    status: na
---
---
 .../stats/base/snanstdevyc/include.gypi       |   2 +-
 .../stats/base/snanstdevyc/manifest.json      |  44 +++++-
 .../stats/base/snanstdevyc/src/addon.c        |  45 ++++++
 .../stats/base/snanstdevyc/src/addon.cpp      | 130 ------------------
 4 files changed, 89 insertions(+), 132 deletions(-)
 create mode 100644 lib/node_modules/@stdlib/stats/base/snanstdevyc/src/addon.c
 delete mode 100644 lib/node_modules/@stdlib/stats/base/snanstdevyc/src/addon.cpp

diff --git a/lib/node_modules/@stdlib/stats/base/snanstdevyc/include.gypi b/lib/node_modules/@stdlib/stats/base/snanstdevyc/include.gypi
index 868c5c12e852..26476a8c2655 100644
--- a/lib/node_modules/@stdlib/stats/base/snanstdevyc/include.gypi
+++ b/lib/node_modules/@stdlib/stats/base/snanstdevyc/include.gypi
@@ -36,7 +36,7 @@
 
     # Source files:
     'src_files': [
-      '<(src_dir)/addon.cpp',
+      '<(src_dir)/addon.c',
       '<!@(node -e "var arr = require(\'@stdlib/utils/library-manifest\')(\'./manifest.json\',{},{\'basedir\':process.cwd(),\'paths\':\'posix\'}).src; for ( var i = 0; i < arr.length; i++ ) { console.log( arr[ i ] ); }")',
     ],
 
diff --git a/lib/node_modules/@stdlib/stats/base/snanstdevyc/manifest.json b/lib/node_modules/@stdlib/stats/base/snanstdevyc/manifest.json
index aaa633ca7b1d..d81714f687c6 100644
--- a/lib/node_modules/@stdlib/stats/base/snanstdevyc/manifest.json
+++ b/lib/node_modules/@stdlib/stats/base/snanstdevyc/manifest.json
@@ -1,5 +1,7 @@
 {
-  "options": {},
+  "options": {
+    "task": "build"
+  },
   "fields": [
     {
       "field": "src",
@@ -24,6 +26,46 @@
   ],
   "confs": [
     {
+      "task": "build",
+      "src": [
+        "./src/snanstdevyc.c"
+      ],
+      "include": [
+        "./include"
+      ],
+      "libraries": [
+        "-lm"
+      ],
+      "libpath": [],
+      "dependencies": [
+        "@stdlib/blas/ext/base/ssum",
+        "@stdlib/napi/export",
+        "@stdlib/napi/argv",
+        "@stdlib/napi/argv-int64",
+        "@stdlib/napi/argv-float",
+        "@stdlib/napi/argv-strided-float32array",
+        "@stdlib/stats/base/snanvarianceyc",
+        "@stdlib/napi/create-double"
+      ]
+    },
+    {
+      "task": "benchmark",
+      "src": [
+        "./src/snanstdevyc.c"
+      ],
+      "include": [
+        "./include"
+      ],
+      "libraries": [
+        "-lm"
+      ],
+      "libpath": [],
+      "dependencies": [
+        "@stdlib/stats/base/snanvarianceyc"
+      ]
+    },
+    {
+      "task": "examples",
       "src": [
         "./src/snanstdevyc.c"
       ],
diff --git a/lib/node_modules/@stdlib/stats/base/snanstdevyc/src/addon.c b/lib/node_modules/@stdlib/stats/base/snanstdevyc/src/addon.c
new file mode 100644
index 000000000000..e35b098687ff
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/base/snanstdevyc/src/addon.c
@@ -0,0 +1,45 @@
+/**
+* @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/stats/base/snanstdevyc.h"
+#include "stdlib/napi/export.h"
+#include "stdlib/napi/argv.h"
+#include "stdlib/napi/argv_int64.h"
+#include "stdlib/napi/argv_float.h"
+#include "stdlib/napi/argv_strided_float32array.h"
+#include "stdlib/napi/create_double.h"
+#include <node_api.h>
+
+/**
+* Receives JavaScript callback invocation data.
+*
+* @param env    environment under which the function is invoked
+* @param info   callback data
+* @return       Node-API value
+*/
+static napi_value addon( napi_env env, napi_callback_info info ) {
+	STDLIB_NAPI_ARGV( env, info, argv, argc, 4 );
+	STDLIB_NAPI_ARGV_INT64( env, N, argv, 0 );
+	STDLIB_NAPI_ARGV_FLOAT( env, correction, argv, 1 );
+	STDLIB_NAPI_ARGV_INT64( env, stride, argv, 3 );
+	STDLIB_NAPI_ARGV_STRIDED_FLOAT32ARRAY( env, X, N, stride, argv, 2 );
+	STDLIB_NAPI_CREATE_DOUBLE( env, (double)stdlib_strided_snanstdevyc( N, correction, X, stride ), v );
+	return v;
+}
+
+STDLIB_NAPI_MODULE_EXPORT_FCN( addon )
diff --git a/lib/node_modules/@stdlib/stats/base/snanstdevyc/src/addon.cpp b/lib/node_modules/@stdlib/stats/base/snanstdevyc/src/addon.cpp
deleted file mode 100644
index ecaf47683a53..000000000000
--- a/lib/node_modules/@stdlib/stats/base/snanstdevyc/src/addon.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
-* @license Apache-2.0
-*
-* Copyright (c) 2020 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/stats/base/snanstdevyc.h"
-#include <node_api.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <assert.h>
-
-/**
-* Add-on namespace.
-*/
-namespace stdlib_stats_base_snanstdevyc {
-
-	/**
-	* Computes the standard deviation of a single-precision floating-point strided array ignoring `NaN` values and using a one-pass algorithm proposed by Youngs and Cramer.
-	*
-	* ## Notes
-	*
-	* -   When called from JavaScript, the function expects four arguments:
-	*
-	*     -   `N`: number of indexed elements
-	*     -   `correction`: degrees of freedom adjustment
-	*     -   `X`: input array
-	*     -   `stride`: stride length
-	*/
-	napi_value node_snanstdevyc( napi_env env, napi_callback_info info ) {
-		napi_status status;
-
-		size_t argc = 4;
-		napi_value argv[ 4 ];
-		status = napi_get_cb_info( env, info, &argc, argv, nullptr, nullptr );
-		assert( status == napi_ok );
-
-		if ( argc < 4 ) {
-			napi_throw_error( env, nullptr, "invalid invocation. Must provide 4 arguments." );
-			return nullptr;
-		}
-
-		napi_valuetype vtype0;
-		status = napi_typeof( env, argv[ 0 ], &vtype0 );
-		assert( status == napi_ok );
-		if ( vtype0 != napi_number ) {
-			napi_throw_type_error( env, nullptr, "invalid argument. First argument must be a number." );
-			return nullptr;
-		}
-
-		napi_valuetype vtype1;
-		status = napi_typeof( env, argv[ 1 ], &vtype1 );
-		assert( status == napi_ok );
-		if ( vtype1 != napi_number ) {
-			napi_throw_type_error( env, nullptr, "invalid argument. Second argument must be a number." );
-			return nullptr;
-		}
-
-		bool res;
-		status = napi_is_typedarray( env, argv[ 2 ], &res );
-		assert( status == napi_ok );
-		if ( res == false ) {
-			napi_throw_type_error( env, nullptr, "invalid argument. Third argument must be a Float32Array." );
-			return nullptr;
-		}
-
-		napi_valuetype vtype3;
-		status = napi_typeof( env, argv[ 3 ], &vtype3 );
-		assert( status == napi_ok );
-		if ( vtype3 != napi_number ) {
-			napi_throw_type_error( env, nullptr, "invalid argument. Fourth argument must be a number." );
-			return nullptr;
-		}
-
-		int64_t N;
-		status = napi_get_value_int64( env, argv[ 0 ], &N );
-		assert( status == napi_ok );
-
-		double correction;
-		status = napi_get_value_double( env, argv[ 1 ], &correction );
-		assert( status == napi_ok );
-
-		int64_t stride;
-		status = napi_get_value_int64( env, argv[ 3 ], &stride );
-		assert( status == napi_ok );
-
-		napi_typedarray_type vtype2;
-		size_t xlen;
-		void *X;
-		status = napi_get_typedarray_info( env, argv[ 2 ], &vtype2, &xlen, &X, nullptr, nullptr );
-		assert( status == napi_ok );
-		if ( vtype2 != napi_float32_array ) {
-			napi_throw_type_error( env, nullptr, "invalid argument. Third argument must be a Float32Array." );
-			return nullptr;
-		}
-		if ( (N-1)*llabs(stride) >= (int64_t)xlen ) {
-			napi_throw_range_error( env, nullptr, "invalid argument. Third argument has insufficient elements based on the associated stride and the number of indexed elements." );
-			return nullptr;
-		}
-
-		napi_value v;
-		status = napi_create_double( env, (double)stdlib_strided_snanstdevyc( N, (float)correction, (float *)X, stride ), &v );
-		assert( status == napi_ok );
-
-		return v;
-	}
-
-	napi_value Init( napi_env env, napi_value exports ) {
-		napi_status status;
-		napi_value fcn;
-		status = napi_create_function( env, "exports", NAPI_AUTO_LENGTH, node_snanstdevyc, NULL, &fcn );
-		assert( status == napi_ok );
-		return fcn;
-	}
-
-	NAPI_MODULE( NODE_GYP_MODULE_NAME, Init )
-} // end namespace stdlib_stats_base_snanstdevyc

From ec02b96e6404d35fd812099f306cf0705399f828 Mon Sep 17 00:00:00 2001
From: DhruvArvindSingh <dhruvsinghxd@gmail.com>
Date: Thu, 2 Jan 2025 20:59:07 +0000
Subject: [PATCH 2/2] fix: update manifest.json

---
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
---

---
type: pre_push_report
description: Results of running various checks prior to pushing changes.
report:
  - task: run_javascript_examples
    status: na
  - task: run_c_examples
    status: na
  - task: run_cpp_examples
    status: na
  - task: run_javascript_readme_examples
    status: na
  - task: run_c_benchmarks
    status: na
  - task: run_cpp_benchmarks
    status: na
  - task: run_fortran_benchmarks
    status: na
  - task: run_javascript_benchmarks
    status: na
  - task: run_julia_benchmarks
    status: na
  - task: run_python_benchmarks
    status: na
  - task: run_r_benchmarks
    status: na
  - task: run_javascript_tests
    status: na
---
---
 lib/node_modules/@stdlib/stats/base/snanstdevyc/manifest.json | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lib/node_modules/@stdlib/stats/base/snanstdevyc/manifest.json b/lib/node_modules/@stdlib/stats/base/snanstdevyc/manifest.json
index d81714f687c6..ccd693a96a58 100644
--- a/lib/node_modules/@stdlib/stats/base/snanstdevyc/manifest.json
+++ b/lib/node_modules/@stdlib/stats/base/snanstdevyc/manifest.json
@@ -38,7 +38,6 @@
       ],
       "libpath": [],
       "dependencies": [
-        "@stdlib/blas/ext/base/ssum",
         "@stdlib/napi/export",
         "@stdlib/napi/argv",
         "@stdlib/napi/argv-int64",