From 98d44a0178311affa63170e87c10c3bde9099fe8 Mon Sep 17 00:00:00 2001
From: AtharvaPatange <164712914+AtharvaPatange@users.noreply.github.com>
Date: Sun, 9 Aug 2026 00:05:09 +0530
Subject: [PATCH] feat: add C implementation for stats/base/ndarray/smeanors
---
.../stats/base/ndarray/smeanors/README.md | 147 ++++++++++++++
.../smeanors/benchmark/benchmark.native.js | 108 ++++++++++
.../ndarray/smeanors/benchmark/c/Makefile | 146 ++++++++++++++
.../smeanors/benchmark/c/benchmark.length.c | 185 ++++++++++++++++++
.../stats/base/ndarray/smeanors/binding.gyp | 170 ++++++++++++++++
.../base/ndarray/smeanors/examples/c/Makefile | 146 ++++++++++++++
.../ndarray/smeanors/examples/c/example.c | 74 +++++++
.../stats/base/ndarray/smeanors/include.gypi | 53 +++++
.../stdlib/stats/base/ndarray/smeanors.h | 40 ++++
.../stats/base/ndarray/smeanors/lib/index.js | 16 +-
.../stats/base/ndarray/smeanors/lib/native.js | 59 ++++++
.../stats/base/ndarray/smeanors/manifest.json | 110 +++++++++++
.../stats/base/ndarray/smeanors/package.json | 4 +
.../stats/base/ndarray/smeanors/src/Makefile | 70 +++++++
.../stats/base/ndarray/smeanors/src/addon.c | 62 ++++++
.../stats/base/ndarray/smeanors/src/main.c | 33 ++++
.../stats/base/ndarray/smeanors/test/test.js | 152 +++-----------
.../base/ndarray/smeanors/test/test.main.js | 173 ++++++++++++++++
.../base/ndarray/smeanors/test/test.native.js | 182 +++++++++++++++++
19 files changed, 1805 insertions(+), 125 deletions(-)
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/benchmark/benchmark.native.js
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/benchmark/c/Makefile
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/benchmark/c/benchmark.length.c
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/binding.gyp
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/examples/c/Makefile
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/examples/c/example.c
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/include.gypi
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/include/stdlib/stats/base/ndarray/smeanors.h
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/lib/native.js
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/manifest.json
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/src/Makefile
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/src/addon.c
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/src/main.c
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/test/test.main.js
create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/smeanors/test/test.native.js
diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/smeanors/README.md b/lib/node_modules/@stdlib/stats/base/ndarray/smeanors/README.md
index 2db164ec3de2..e933ab88d6cb 100644
--- a/lib/node_modules/@stdlib/stats/base/ndarray/smeanors/README.md
+++ b/lib/node_modules/@stdlib/stats/base/ndarray/smeanors/README.md
@@ -108,6 +108,153 @@ console.log( v );
+
+
+* * *
+
+
+
+## C APIs
+
+
+
+
+
+
+
+
+
+
+
+### Usage
+
+```c
+#include "stdlib/stats/base/ndarray/smeanors.h"
+```
+
+#### stdlib_stats_smeanors( arrays )
+
+Computes the arithmetic mean of a one-dimensional single-precision floating-point ndarray using ordinary recursive summation.
+
+```c
+#include "stdlib/ndarray/ctor.h"
+#include "stdlib/ndarray/dtypes.h"
+#include "stdlib/ndarray/index_modes.h"
+#include "stdlib/ndarray/orders.h"
+#include "stdlib/ndarray/base/bytes_per_element.h"
+#include
+
+// Create an ndarray:
+const float data[] = { 1.0f, 2.0f, 3.0f, 4.0f };
+int64_t shape[] = { 4 };
+int64_t strides[] = { STDLIB_NDARRAY_FLOAT32_BYTES_PER_ELEMENT };
+int8_t submodes[] = { STDLIB_NDARRAY_INDEX_ERROR };
+
+struct ndarray *x = stdlib_ndarray_allocate( STDLIB_NDARRAY_FLOAT32, (uint8_t *)data, 1, shape, strides, 0, STDLIB_NDARRAY_ROW_MAJOR, STDLIB_NDARRAY_INDEX_ERROR, 1, submodes );
+
+// Compute the arithmetic mean:
+const struct ndarray *arrays[] = { x };
+float v = stdlib_stats_smeanors( arrays );
+// returns 2.5f
+
+// Free allocated memory:
+stdlib_ndarray_free( x );
+```
+
+The function accepts the following arguments:
+
+- **arrays**: `[in] struct ndarray**` list containing a one-dimensional input ndarray.
+
+```c
+float stdlib_stats_smeanors( const struct ndarray *arrays[] );
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### Examples
+
+```c
+#include "stdlib/stats/base/ndarray/smeanors.h"
+#include "stdlib/ndarray/ctor.h"
+#include "stdlib/ndarray/dtypes.h"
+#include "stdlib/ndarray/index_modes.h"
+#include "stdlib/ndarray/orders.h"
+#include "stdlib/ndarray/base/bytes_per_element.h"
+#include
+#include
+#include
+
+int main( void ) {
+ // Create a data buffer:
+ const float data[] = { 1.0f, -2.0f, 3.0f, -4.0f, 5.0f, -6.0f, 7.0f, -8.0f };
+
+ // Specify the number of array dimensions:
+ const int64_t ndims = 1;
+
+ // Specify the array shape:
+ int64_t shape[] = { 4 };
+
+ // Specify the array strides:
+ int64_t strides[] = { 2*STDLIB_NDARRAY_FLOAT32_BYTES_PER_ELEMENT };
+
+ // Specify the byte offset:
+ const int64_t offset = 0;
+
+ // Specify the array order:
+ const enum STDLIB_NDARRAY_ORDER order = STDLIB_NDARRAY_ROW_MAJOR;
+
+ // Specify the index mode:
+ const enum STDLIB_NDARRAY_INDEX_MODE imode = STDLIB_NDARRAY_INDEX_ERROR;
+
+ // Specify the subscript index modes:
+ int8_t submodes[] = { STDLIB_NDARRAY_INDEX_ERROR };
+ const int64_t nsubmodes = 1;
+
+ // Create an ndarray:
+ struct ndarray *x = stdlib_ndarray_allocate( STDLIB_NDARRAY_FLOAT32, (uint8_t *)data, ndims, shape, strides, offset, order, imode, nsubmodes, submodes );
+ if ( x == NULL ) {
+ fprintf( stderr, "Error allocating memory.\n" );
+ exit( 1 );
+ }
+
+ // Define a list of ndarrays:
+ const struct ndarray *arrays[] = { x };
+
+ // Compute the arithmetic mean:
+ float v = stdlib_stats_smeanors( arrays );
+
+ // Print the result:
+ printf( "mean: %f\n", v );
+
+ // Free allocated memory:
+ stdlib_ndarray_free( x );
+}
+```
+
+
+
+
+
+
+
+
+