From 134ba858f0842ab9335c0e1c19c10269a535abf3 Mon Sep 17 00:00:00 2001 From: Lokeshranjan8 Date: Tue, 7 Jan 2025 23:28:08 +0530 Subject: [PATCH 01/13] feat: add c implementation for stats/base/dists/signrank/pdf --- 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: passed - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: passed - task: lint_c_examples status: passed - task: lint_c_benchmarks status: passed - 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/dists/signrank/pdf/README.md | 96 ++++++++++ .../dists/signrank/pdf/benchmark/benchmark.js | 49 +++-- .../pdf/benchmark/benchmark.native.js | 89 +++++++++ .../dists/signrank/pdf/benchmark/c/Makefile | 146 +++++++++++++++ .../signrank/pdf/benchmark/c/benchmark.c | 141 +++++++++++++++ .../stats/base/dists/signrank/pdf/binding.gyp | 170 ++++++++++++++++++ .../dists/signrank/pdf/examples/c/Makefile | 146 +++++++++++++++ .../dists/signrank/pdf/examples/c/example.c | 41 +++++ .../base/dists/signrank/pdf/include.gypi | 53 ++++++ .../stdlib/stats/base/dists/signrank/pdf.h | 38 ++++ .../base/dists/signrank/pdf/lib/native.js | 70 ++++++++ .../base/dists/signrank/pdf/manifest.json | 82 +++++++++ .../base/dists/signrank/pdf/package.json | 3 + .../base/dists/signrank/pdf/src/Makefile | 70 ++++++++ .../stats/base/dists/signrank/pdf/src/addon.c | 23 +++ .../stats/base/dists/signrank/pdf/src/main.c | 104 +++++++++++ .../dists/signrank/pdf/test/test.native.js | 123 +++++++++++++ 17 files changed, 1415 insertions(+), 29 deletions(-) create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/Makefile create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/binding.gyp create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/examples/c/Makefile create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/examples/c/example.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/include.gypi create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/include/stdlib/stats/base/dists/signrank/pdf.h create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/lib/native.js create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/Makefile create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/addon.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/test/test.native.js diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md index 00c29246c2eb..7429c3549c15 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md @@ -126,6 +126,102 @@ for ( i = 0; i < 10; i++ ) { + + +* * * + +
+ +## C APIs + + + +
+ +
+ + + + + +
+ +### Usage + +```c +#include "stdlib/stats/base/dists/signrank/pdf.h" +``` + +#### stdlib_base_dists_signrank_cdf( x, n ) + +Evaluates the probability density function (PDF) of the Wilcoxon signed rank test statistic with `n` observations. + +```c +double out = stdlib_base_dists_signrank_pdf( 7.0, 9 ); +// returns ~0.01 +``` + +The function accepts the following arguments: + +- **x**: `[in] double` input value. +- **n**: `[in] double` number of observations. + +```c +double stdlib_base_dists_signrank_cdf( double x, const double n ); +``` + +
+ + + + + +
+ +
+ + + + + +
+ +### Examples + +```c +#include "stdlib/stats/base/dists/signrank/pdf.h" +#include "stdlib/math/base/special/ceil.h" +#include +#include + +static double random_uniform( const double min, const double max ) { + double v = (double)rand() / ( (double)RAND_MAX + 1.0 ); + return min + ( v*(max-min) ); +} + +int main( void ) { + double n; + double x; + double y; + int i; + + for ( i = 0; i < 25; i++ ) { + x = random_uniform( 0, 30.0 ); + n = stdlib_base_ceil(random_uniform( 1, 30.0 )); + y = stdlib_base_dists_signrank_pdf( x, n ); + printf( "x: %lf, n: %lf, F(x;n): %lf\n", x, n, y ); + } +} +``` + +
+ + + +
+ + + diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c index a1cd477cfebc..4aee3bbac756 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2024 The Stdlib Authors. +* 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. @@ -101,8 +101,8 @@ static double benchmark( void ) { int i; for ( i = 0; i < 100; i++ ) { - x[ i ] = random_uniform( 0, 30.0 ); - n[ i ] = stdlib_base_ceil(random_uniform( 1, 30.0 )); + x[ i ] = random_uniform( 0.0, 30.0 ); + n[ i ] = stdlib_base_ceil(random_uniform( 1.0, 30.0 )); } t = tic(); diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/include/stdlib/stats/base/dists/signrank/pdf.h b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/include/stdlib/stats/base/dists/signrank/pdf.h index de9994bc88a7..7cb8d101d603 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/include/stdlib/stats/base/dists/signrank/pdf.h +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/include/stdlib/stats/base/dists/signrank/pdf.h @@ -27,7 +27,7 @@ extern "C" { #endif /** -* Evaluates the cumulative distribution function (PDF) of the Wilcoxon signed rank test statistic with `n` observations. +* Evaluates the probability density function (PDF) of the Wilcoxon signed rank test statistic with `n` observations. */ double stdlib_base_dists_signrank_pdf( double x, const double n ); From d5d2acb4f066d47a6ec5fbc3012a0d2c129321b5 Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Thu, 10 Jul 2025 21:59:36 -0500 Subject: [PATCH 03/13] refactor: type n as an int32 --- 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: passed - 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: passed - task: lint_c_benchmarks status: passed - 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 --- --- .../stats/base/dists/signrank/pdf/README.md | 11 +++++----- .../signrank/pdf/benchmark/c/benchmark.c | 5 +++-- .../dists/signrank/pdf/examples/c/example.c | 7 ++++--- .../stdlib/stats/base/dists/signrank/pdf.h | 4 +++- .../stats/base/dists/signrank/pdf/src/addon.c | 2 +- .../stats/base/dists/signrank/pdf/src/main.c | 21 +++++++------------ .../dists/signrank/pdf/test/test.native.js | 5 +---- 7 files changed, 26 insertions(+), 29 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md index eb182c6fbba6..4d01a633ceb8 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md @@ -164,10 +164,10 @@ double out = stdlib_base_dists_signrank_pdf( 7.0, 9 ); The function accepts the following arguments: - **x**: `[in] double` input value. -- **n**: `[in] double` number of observations. +- **n**: `[in] int32_t` number of observations. ```c -double stdlib_base_dists_signrank_pdf( double x, const double n ); +double stdlib_base_dists_signrank_pdf( const double x, const int32_t n ); ``` @@ -193,6 +193,7 @@ double stdlib_base_dists_signrank_pdf( double x, const double n ); #include "stdlib/math/base/special/ceil.h" #include #include +#include static double random_uniform( const double min, const double max ) { double v = (double)rand() / ( (double)RAND_MAX + 1.0 ); @@ -200,16 +201,16 @@ static double random_uniform( const double min, const double max ) { } int main( void ) { - double n; + int32_t n; double x; double y; int i; for ( i = 0; i < 25; i++ ) { x = random_uniform( 0, 30.0 ); - n = stdlib_base_ceil(random_uniform( 1, 30.0 )); + n = (int32_t)stdlib_base_ceil(random_uniform( 1.0, 30.0 )); y = stdlib_base_dists_signrank_pdf( x, n ); - printf( "x: %lf, n: %lf, F(x;n): %lf\n", x, n, y ); + printf( "x: %lf, n: %d, f(x;n): %lf\n", x, n, y ); } } ``` diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c index 4aee3bbac756..3395512fc275 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c @@ -23,6 +23,7 @@ #include #include #include +#include #define NAME "signrank-pdf" #define ITERATIONS 1000000 @@ -95,14 +96,14 @@ static double random_uniform( const double min, const double max ) { static double benchmark( void ) { double elapsed; double x[ 100 ]; - double n[ 100 ]; + int32_t n[ 100 ]; double y; double t; int i; for ( i = 0; i < 100; i++ ) { x[ i ] = random_uniform( 0.0, 30.0 ); - n[ i ] = stdlib_base_ceil(random_uniform( 1.0, 30.0 )); + n[ i ] = (int32_t)stdlib_base_ceil(random_uniform( 1.0, 30.0 )); } t = tic(); diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/examples/c/example.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/examples/c/example.c index 1fafc3e27135..cf53bd0e34fc 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/examples/c/example.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/examples/c/example.c @@ -20,6 +20,7 @@ #include "stdlib/math/base/special/ceil.h" #include #include +#include static double random_uniform( const double min, const double max ) { double v = (double)rand() / ( (double)RAND_MAX + 1.0 ); @@ -27,15 +28,15 @@ static double random_uniform( const double min, const double max ) { } int main( void ) { - double n; + int32_t n; double x; double y; int i; for ( i = 0; i < 25; i++ ) { x = random_uniform( 0, 30.0 ); - n = stdlib_base_ceil(random_uniform( 1, 30.0 )); + n = (int32_t)stdlib_base_ceil(random_uniform( 1.0, 30.0 )); y = stdlib_base_dists_signrank_pdf( x, n ); - printf( "x: %lf, n: %lf, F(x;n): %lf\n", x, n, y ); + printf( "x: %lf, n: %d, f(x;n): %lf\n", x, n, y ); } } diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/include/stdlib/stats/base/dists/signrank/pdf.h b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/include/stdlib/stats/base/dists/signrank/pdf.h index 7cb8d101d603..ae2fce0f678e 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/include/stdlib/stats/base/dists/signrank/pdf.h +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/include/stdlib/stats/base/dists/signrank/pdf.h @@ -19,6 +19,8 @@ #ifndef STDLIB_STATS_BASE_DISTS_SIGNRANK_PDF_H #define STDLIB_STATS_BASE_DISTS_SIGNRANK_PDF_H +#include + /* * If C++, prevent name mangling so that the compiler emits a binary file having undecorated names, thus mirroring the behavior of a C compiler. */ @@ -29,7 +31,7 @@ extern "C" { /** * Evaluates the probability density function (PDF) of the Wilcoxon signed rank test statistic with `n` observations. */ -double stdlib_base_dists_signrank_pdf( double x, const double n ); +double stdlib_base_dists_signrank_pdf( const double x, const int32_t n ); #ifdef __cplusplus } diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/addon.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/addon.c index 69417db62c8e..665ec01e1a78 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/addon.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/addon.c @@ -20,4 +20,4 @@ #include "stdlib/math/base/napi/binary.h" // cppcheck-suppress shadowFunction -STDLIB_MATH_BASE_NAPI_MODULE_DD_D( stdlib_base_dists_signrank_pdf ) +STDLIB_MATH_BASE_NAPI_MODULE_DI_D( stdlib_base_dists_signrank_pdf ) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c index 057f94e0f78e..c065aa97e778 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c @@ -17,13 +17,12 @@ */ #include "stdlib/stats/base/dists/signrank/pdf.h" -#include "stdlib/math/base/assert/is_positive_integer.h" #include "stdlib/math/base/assert/is_integer.h" -#include "stdlib/math/base/assert/is_finite.h" #include "stdlib/math/base/assert/is_nan.h" #include "stdlib/math/base/special/exp.h" #include "stdlib/constants/float64/ln_two.h" #include "stdlib/math/base/special/ln.h" +#include /** * Calculates the weight for the `(x,n)` pair and memoizes the result. @@ -33,20 +32,20 @@ * @param {NonNegativeInteger} n - number of observations * @returns {number} weight */ -static double weights( double x, const double n ) { +static double weights( double x, const int32_t n ) { double mlim; if ( n == 0 ) { return ( x == 0 ) ? 1 : 0; } - mlim = n * ( n + 1 ) / 2; + mlim = ( (double)n * ( (double)n + 1.0 ) ) / 2.0; if ( x < 0 || x > mlim ) { return 0; } if ( x > mlim / 2 ) { x = mlim - x; } - return weights( x - n, n - 1 ) + weights( x, n - 1 ); + return weights( x - (double)n, n - 1 ) + weights( x, n - 1 ); } /** @@ -84,21 +83,17 @@ static double weights( double x, const double n ) { * var y = pdf( 2.0, 1.8 ); * // returns NaN */ -double stdlib_base_dists_signrank_pdf( const double x, const double n ) { +double stdlib_base_dists_signrank_pdf( const double x, const int32_t n ) { double mlim; - if ( - stdlib_base_is_nan( x ) || - !stdlib_base_is_positive_integer( n ) || - !stdlib_base_is_finite( n ) - ) { + if ( stdlib_base_is_nan( x ) || n <= 0 ) { return 0.0/0.0; } if ( !stdlib_base_is_integer( x ) ) { return 0.0; } - mlim = ( n * ( n + 1 ) ) / 2; + mlim = ( (double)n * ( (double)n + 1.0 ) ) / 2.0; if ( x < 0.0 || x > mlim ) { return 0.0; } - return stdlib_base_exp( stdlib_base_ln( weights( x, n ) ) - ( n * STDLIB_CONSTANT_FLOAT64_LN2 ) ); + return stdlib_base_exp( stdlib_base_ln( weights( x, n ) ) - ( (double)n * STDLIB_CONSTANT_FLOAT64_LN2 ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/test/test.native.js b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/test/test.native.js index 7af91d34c755..498308478953 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/test/test.native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/test/test.native.js @@ -76,9 +76,6 @@ tape( 'if not provided a positive integer for `n`, the function returns `NaN`', y = pdf( 2.0, NINF ); t.equal( isnan( y ), true, 'returns NaN' ); - y = pdf( 2.0, 6.9 ); - t.equal( isnan( y ), true, 'returns NaN' ); - y = pdf( 2.0, PINF ); t.equal( isnan( y ), true, 'returns NaN' ); @@ -115,7 +112,7 @@ tape( 'the function evaluates the PDF for `x` given `n` observations', opts, fun t.equal( y, expected[i], 'x: '+x[i]+', n: '+n[i]+', y: '+y+', expected: '+expected[i] ); } else { delta = abs( y - expected[ i ] ); - tol = 20.0 * EPS * abs( expected[ i ] ); + tol = 80.0 * EPS * abs( expected[ i ] ); t.ok( delta <= tol, 'within tolerance. x: '+x[ i ]+'. n: '+n[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); } } From 3030fda76899b74e74220df6414780b94c4195c8 Mon Sep 17 00:00:00 2001 From: Lokesh Ranjan Date: Fri, 11 Jul 2025 08:48:39 +0530 Subject: [PATCH 04/13] Apply suggestion from @Planeshifter Co-authored-by: Philipp Burckhardt Signed-off-by: Lokesh Ranjan --- .../@stdlib/stats/base/dists/signrank/pdf/src/addon.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/addon.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/addon.c index 665ec01e1a78..c3abe410c412 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/addon.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/addon.c @@ -19,5 +19,4 @@ #include "stdlib/stats/base/dists/signrank/pdf.h" #include "stdlib/math/base/napi/binary.h" -// cppcheck-suppress shadowFunction STDLIB_MATH_BASE_NAPI_MODULE_DI_D( stdlib_base_dists_signrank_pdf ) From 86ef6b78e6075f84a9f81234dc8bfc81ce7c3abf Mon Sep 17 00:00:00 2001 From: Lokesh Ranjan Date: Fri, 11 Jul 2025 08:59:49 +0530 Subject: [PATCH 05/13] Apply suggestion from @Planeshifter Co-authored-by: Philipp Burckhardt Signed-off-by: Lokesh Ranjan --- .../stats/base/dists/signrank/pdf/src/main.c | 26 +------------------ 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c index c065aa97e778..71e62de63bbf 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c @@ -56,32 +56,8 @@ static double weights( double x, const int32_t n ) { * @returns {Probability} evaluated PDF * * @example -* var y = pdf( 7.0, 9 ); +* double y = stdlib_base_dists_signrank_pdf( 7.0, 9 ); * // returns ~0.01 -* -* @example -* var y = pdf( 7.0, 6 ); -* // returns ~0.063 -* -* @example -* var y = pdf( -1.0, 40 ); -* // returns 0.0 -* -* @example -* var y = pdf( NaN, 10 ); -* // returns NaN -* -* @example -* var y = pdf( 0.0, NaN ); -* // returns NaN -* -* @example -* var y = pdf( 2.0, -1 ); -* // returns NaN -* -* @example -* var y = pdf( 2.0, 1.8 ); -* // returns NaN */ double stdlib_base_dists_signrank_pdf( const double x, const int32_t n ) { double mlim; From de34d5c1045f3aff8f2f99e735ba2da2d53a0ca2 Mon Sep 17 00:00:00 2001 From: Lokesh Ranjan Date: Fri, 11 Jul 2025 09:00:40 +0530 Subject: [PATCH 06/13] Update lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json Co-authored-by: Philipp Burckhardt Signed-off-by: Lokesh Ranjan --- .../@stdlib/stats/base/dists/signrank/pdf/manifest.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json index 5973beba64b8..a49cd32509b7 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json @@ -69,8 +69,7 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-positive-integer", - "@stdlib/math/base/assert/is-finite", + "@stdlib/stdlib/math/base/special/ceil", "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/exp", "@stdlib/constants/float64/ln-two", From b7cd111887508177c9037ff4719573d011e766d5 Mon Sep 17 00:00:00 2001 From: Lokesh Ranjan Date: Fri, 11 Jul 2025 09:00:57 +0530 Subject: [PATCH 07/13] Update lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json Co-authored-by: Philipp Burckhardt Signed-off-by: Lokesh Ranjan --- .../@stdlib/stats/base/dists/signrank/pdf/manifest.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json index a49cd32509b7..614e278697f3 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json @@ -52,8 +52,7 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-positive-integer", - "@stdlib/math/base/assert/is-finite", + "@stdlib/stdlib/math/base/special/ceil", "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/exp", "@stdlib/constants/float64/ln-two", From 12b9451cca1c8fff08883556cb5174034586e07e Mon Sep 17 00:00:00 2001 From: Lokesh Ranjan Date: Fri, 11 Jul 2025 09:01:20 +0530 Subject: [PATCH 08/13] Update lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json Co-authored-by: Philipp Burckhardt Signed-off-by: Lokesh Ranjan --- .../@stdlib/stats/base/dists/signrank/pdf/manifest.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json index 614e278697f3..62a839d48e59 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/manifest.json @@ -34,8 +34,6 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-positive-integer", - "@stdlib/math/base/assert/is-finite", "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/exp", "@stdlib/constants/float64/ln-two", From cbca601449846f1d7afc61e5a6156a2c2ca0ce1a Mon Sep 17 00:00:00 2001 From: Lokesh Ranjan Date: Fri, 11 Jul 2025 09:01:55 +0530 Subject: [PATCH 09/13] Update lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/lib/native.js Co-authored-by: Philipp Burckhardt Signed-off-by: Lokesh Ranjan --- .../@stdlib/stats/base/dists/signrank/pdf/lib/native.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/lib/native.js b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/lib/native.js index 8dfa20d463cf..fa8497fcb249 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/lib/native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/lib/native.js @@ -55,10 +55,6 @@ var addon = require( './../src/addon.node' ); * @example * var y = pdf( 2.0, -1 ); * // returns NaN -* -* @example -* var y = pdf( 2.0, 1.8 ); -* // returns NaN */ function pdf( x, n ) { return addon( x, n ); From ceb625c95200e3bb71e5baee522d591be20e79e2 Mon Sep 17 00:00:00 2001 From: Lokeshranjan8 Date: Fri, 11 Jul 2025 10:15:52 +0530 Subject: [PATCH 10/13] fix: implement C Doxygen style comments in main.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 --- --- .../dists/signrank/pdf/benchmark/benchmark.js | 42 +++++++++++++------ .../pdf/benchmark/benchmark.native.js | 42 ++++++------------- .../stats/base/dists/signrank/pdf/src/main.c | 15 ++++--- 3 files changed, 49 insertions(+), 50 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js index 3aa3b0ddbb62..aa8e6be1f472 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2020 The Stdlib Authors. +* 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. @@ -20,27 +20,19 @@ // MODULES // -var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); var Float64Array = require( '@stdlib/array/float64' ); +var uniform = require( '@stdlib/random/array/uniform' ); var randu = require( '@stdlib/random/base/randu' ); var ceil = require( '@stdlib/math/base/special/ceil' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var tryRequire = require( '@stdlib/utils/try-require' ); var pkg = require( './../package.json' ).name; - - -// VARIABLES // - -var pdf = tryRequire( resolve( __dirname, './../lib/native.js' ) ); -var opts = { - 'skip': ( pdf instanceof Error ) -}; +var pdf = require( './../lib' ); // MAIN // -bench( pkg, opts, function benchmark( b ) { +bench( pkg, function benchmark( b ) { var len; var n; var x; @@ -69,3 +61,29 @@ bench( pkg, opts, function benchmark( b ) { b.pass( 'benchmark finished' ); b.end(); }); + +bench( pkg+':factory', function benchmark( b ) { + var mypdf; + var n; + var x; + var y; + var i; + + n = 20; + mypdf = pdf.factory( n ); + x = uniform( 100, -2.0, 2.0 ); + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + y = mypdf( x[ i % x.length] ); + if ( isnan( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js index aa8e6be1f472..3aa3b0ddbb62 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* 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. @@ -20,19 +20,27 @@ // MODULES // +var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); var Float64Array = require( '@stdlib/array/float64' ); -var uniform = require( '@stdlib/random/array/uniform' ); var randu = require( '@stdlib/random/base/randu' ); var ceil = require( '@stdlib/math/base/special/ceil' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var tryRequire = require( '@stdlib/utils/try-require' ); var pkg = require( './../package.json' ).name; -var pdf = require( './../lib' ); + + +// VARIABLES // + +var pdf = tryRequire( resolve( __dirname, './../lib/native.js' ) ); +var opts = { + 'skip': ( pdf instanceof Error ) +}; // MAIN // -bench( pkg, function benchmark( b ) { +bench( pkg, opts, function benchmark( b ) { var len; var n; var x; @@ -61,29 +69,3 @@ bench( pkg, function benchmark( b ) { b.pass( 'benchmark finished' ); b.end(); }); - -bench( pkg+':factory', function benchmark( b ) { - var mypdf; - var n; - var x; - var y; - var i; - - n = 20; - mypdf = pdf.factory( n ); - x = uniform( 100, -2.0, 2.0 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - y = mypdf( x[ i % x.length] ); - if ( isnan( y ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c index 71e62de63bbf..1403b93f83e0 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c @@ -25,12 +25,11 @@ #include /** -* Calculates the weight for the `(x,n)` pair and memoizes the result. +* Calculates the weight for the (x,n) pair and memoizes the result. * -* @private -* @param {number} x - input value -* @param {NonNegativeInteger} n - number of observations -* @returns {number} weight +* @param x Input value +* @param n Number of observations (must be a non-negative) +* @return Weight value */ static double weights( double x, const int32_t n ) { double mlim; @@ -51,9 +50,9 @@ static double weights( double x, const int32_t n ) { /** * Evaluates the probability density function (PDF) of the Wilcoxon signed rank test statistic with `n` observations. * -* @param {number} x - input value -* @param {PositiveInteger} n - number of observations -* @returns {Probability} evaluated PDF +* @param x Input value +* @param n Number of observations (must be a non-negative) +* @return Evaluated PDF * * @example * double y = stdlib_base_dists_signrank_pdf( 7.0, 9 ); From 0a27f62edefc0ecb410c81ff0a9707a51b9ec27d Mon Sep 17 00:00:00 2001 From: Lokesh Ranjan Date: Fri, 11 Jul 2025 10:29:46 +0530 Subject: [PATCH 11/13] Update benchmark.native.js Signed-off-by: Lokesh Ranjan --- .../stats/base/dists/signrank/pdf/benchmark/benchmark.native.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js index 3aa3b0ddbb62..f3d8d033c31d 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2020 The Stdlib Authors. +* 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. From 8a585570d199e1dd4eb1ee160e2b5ca29841e084 Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Fri, 11 Jul 2025 13:11:11 -0500 Subject: [PATCH 12/13] chore: minor clean-up --- 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: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: passed - task: lint_c_examples status: passed - task: lint_c_benchmarks status: passed - 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/stats/base/dists/signrank/pdf/README.md | 2 +- .../base/dists/signrank/pdf/benchmark/benchmark.js | 12 +++--------- .../signrank/pdf/benchmark/benchmark.native.js | 13 ++++--------- .../base/dists/signrank/pdf/benchmark/c/benchmark.c | 2 +- .../base/dists/signrank/pdf/examples/c/example.c | 2 +- .../stats/base/dists/signrank/pdf/src/main.c | 12 ++++++------ 6 files changed, 16 insertions(+), 27 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md index 4d01a633ceb8..eaaaa065a4c1 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/README.md @@ -208,7 +208,7 @@ int main( void ) { for ( i = 0; i < 25; i++ ) { x = random_uniform( 0, 30.0 ); - n = (int32_t)stdlib_base_ceil(random_uniform( 1.0, 30.0 )); + n = (int32_t)stdlib_base_ceil( random_uniform( 1.0, 30.0 ) ); y = stdlib_base_dists_signrank_pdf( x, n ); printf( "x: %lf, n: %d, f(x;n): %lf\n", x, n, y ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js index aa8e6be1f472..0b4504561587 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js @@ -21,10 +21,8 @@ // MODULES // var bench = require( '@stdlib/bench' ); -var Float64Array = require( '@stdlib/array/float64' ); var uniform = require( '@stdlib/random/array/uniform' ); -var randu = require( '@stdlib/random/base/randu' ); -var ceil = require( '@stdlib/math/base/special/ceil' ); +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); var pkg = require( './../package.json' ).name; var pdf = require( './../lib' ); @@ -40,12 +38,8 @@ bench( pkg, function benchmark( b ) { var i; len = 100; - x = new Float64Array( len ); - n = new Float64Array( len ); - for ( i = 0; i < len; i++ ) { - x[ i ] = ( randu() * 30.0 ); - n[ i ] = ceil( randu() * 30.0 ); - } + x = uniform( len, 0.0, 30.0 ); + n = discreteUniform( len, 1, 30 ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js index f3d8d033c31d..d95c93e2dc61 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.native.js @@ -22,9 +22,8 @@ var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); -var Float64Array = require( '@stdlib/array/float64' ); -var randu = require( '@stdlib/random/base/randu' ); -var ceil = require( '@stdlib/math/base/special/ceil' ); +var uniform = require( '@stdlib/random/array/uniform' ); +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); var tryRequire = require( '@stdlib/utils/try-require' ); var pkg = require( './../package.json' ).name; @@ -48,12 +47,8 @@ bench( pkg, opts, function benchmark( b ) { var i; len = 100; - x = new Float64Array( len ); - n = new Float64Array( len ); - for ( i = 0; i < len; i++ ) { - x[ i ] = ( randu() * 30.0 ); - n[ i ] = ceil( randu() * 30.0 ); - } + x = uniform( len, 0.0, 30.0 ); + n = discreteUniform( len, 1, 30 ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c index 3395512fc275..9842bfeb2d99 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/c/benchmark.c @@ -103,7 +103,7 @@ static double benchmark( void ) { for ( i = 0; i < 100; i++ ) { x[ i ] = random_uniform( 0.0, 30.0 ); - n[ i ] = (int32_t)stdlib_base_ceil(random_uniform( 1.0, 30.0 )); + n[ i ] = (int32_t)stdlib_base_ceil( random_uniform( 1.0, 30.0 ) ); } t = tic(); diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/examples/c/example.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/examples/c/example.c index cf53bd0e34fc..6807c63c5474 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/examples/c/example.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/examples/c/example.c @@ -35,7 +35,7 @@ int main( void ) { for ( i = 0; i < 25; i++ ) { x = random_uniform( 0, 30.0 ); - n = (int32_t)stdlib_base_ceil(random_uniform( 1.0, 30.0 )); + n = (int32_t)stdlib_base_ceil( random_uniform( 1.0, 30.0 ) ); y = stdlib_base_dists_signrank_pdf( x, n ); printf( "x: %lf, n: %d, f(x;n): %lf\n", x, n, y ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c index 1403b93f83e0..10d30bdaaa7d 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/src/main.c @@ -27,9 +27,9 @@ /** * Calculates the weight for the (x,n) pair and memoizes the result. * -* @param x Input value -* @param n Number of observations (must be a non-negative) -* @return Weight value +* @param x input value +* @param n number of observations (must be a non-negative) +* @return weight value */ static double weights( double x, const int32_t n ) { double mlim; @@ -50,9 +50,9 @@ static double weights( double x, const int32_t n ) { /** * Evaluates the probability density function (PDF) of the Wilcoxon signed rank test statistic with `n` observations. * -* @param x Input value -* @param n Number of observations (must be a non-negative) -* @return Evaluated PDF +* @param x input value +* @param n number of observations (must be a non-negative) +* @return evaluated PDF * * @example * double y = stdlib_base_dists_signrank_pdf( 7.0, 9 ); From 713cdaf8167e9d5b4ccd5b9eee468f4cf63e4924 Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Fri, 11 Jul 2025 13:55:11 -0500 Subject: [PATCH 13/13] chore: keep original copyright year Signed-off-by: Philipp Burckhardt --- .../stats/base/dists/signrank/pdf/benchmark/benchmark.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js index 0b4504561587..d1ba8ac9fd6d 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/stats/base/dists/signrank/pdf/benchmark/benchmark.js @@ -1,7 +1,7 @@ /** * @license Apache-2.0 * -* Copyright (c) 2025 The Stdlib Authors. +* 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.