From e47d6e4f25a36af2233c26beb0f6caf78203406f Mon Sep 17 00:00:00 2001 From: Om-A-osc Date: Sat, 11 Apr 2026 15:06:15 +0530 Subject: [PATCH 1/2] refactor(stats/base/dists): reuse variance implementation for stdev --- 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: passed - 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: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../base/dists/bradford/stdev/lib/main.js | 10 ++-------- .../base/dists/bradford/stdev/manifest.json | 13 +++++-------- .../base/dists/bradford/stdev/src/main.c | 10 ++-------- .../base/dists/chisquare/stdev/lib/main.js | 7 ++----- .../base/dists/chisquare/stdev/manifest.json | 10 +++++----- .../base/dists/chisquare/stdev/src/main.c | 7 ++----- .../dists/hypergeometric/stdev/lib/main.js | 16 ++-------------- .../dists/hypergeometric/stdev/manifest.json | 5 ++++- .../dists/hypergeometric/stdev/src/main.c | 12 ++---------- .../base/dists/kumaraswamy/stdev/lib/main.js | 17 ++--------------- .../dists/kumaraswamy/stdev/manifest.json | 13 +++++-------- .../base/dists/kumaraswamy/stdev/src/main.c | 18 ++---------------- .../base/dists/lognormal/stdev/lib/main.js | 14 ++------------ .../base/dists/lognormal/stdev/manifest.json | 15 ++++++--------- .../base/dists/lognormal/stdev/src/main.c | 14 ++------------ .../base/dists/pareto-type1/stdev/lib/main.js | 19 ++----------------- .../dists/pareto-type1/stdev/manifest.json | 12 +++--------- .../base/dists/pareto-type1/stdev/src/main.c | 19 ++----------------- .../base/dists/poisson/stdev/lib/main.js | 7 ++----- .../base/dists/poisson/stdev/manifest.json | 12 ++++++------ .../stats/base/dists/poisson/stdev/src/main.c | 10 ++-------- .../stats/base/dists/t/stdev/lib/main.js | 11 ++--------- .../stats/base/dists/t/stdev/manifest.json | 9 +++------ .../stats/base/dists/t/stdev/src/main.c | 11 ++--------- .../base/dists/triangular/stdev/lib/main.js | 12 ++---------- .../base/dists/triangular/stdev/manifest.json | 12 ++++++------ .../base/dists/triangular/stdev/src/main.c | 12 ++---------- 27 files changed, 79 insertions(+), 248 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/lib/main.js index f93643b6a1da..dc41d6f22fd1 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/lib/main.js @@ -20,9 +20,8 @@ // MODULES // -var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var ln = require( '@stdlib/math/base/special/ln' ); var sqrt = require( '@stdlib/math/base/special/sqrt' ); +var variance = require( '@stdlib/stats/base/dists/bradford/variance' ); // MAIN // @@ -58,12 +57,7 @@ var sqrt = require( '@stdlib/math/base/special/sqrt' ); * // returns NaN */ function stdev( c ) { - var k; - if ( isnan( c ) || c <= 0.0 ) { - return NaN; - } - k = ln( 1.0 + c ); - return sqrt( ( ( ( 2.0+c ) * k ) - ( 2.0*c ) ) / ( 2.0*c*k*k ) ); + return sqrt( variance( c ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/manifest.json index 23b9fc7b9b4d..2b12b6554121 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/manifest.json @@ -39,9 +39,8 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/unary", - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/ln", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/bradford/variance" ] }, { @@ -56,9 +55,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/ln", "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/bradford/variance", "@stdlib/constants/float64/eps" ] }, @@ -74,9 +72,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/ln", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/bradford/variance" ] } ] diff --git a/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/src/main.c index 2795f6b970ec..24ccca544d85 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/bradford/stdev/src/main.c @@ -17,9 +17,8 @@ */ #include "stdlib/stats/base/dists/bradford/stdev.h" -#include "stdlib/math/base/assert/is_nan.h" -#include "stdlib/math/base/special/ln.h" #include "stdlib/math/base/special/sqrt.h" +#include "stdlib/stats/base/dists/bradford/variance.h" /** * Returns the standard deviation of a Bradford distribution. @@ -32,10 +31,5 @@ * // returns ~0.288 */ double stdlib_base_dists_bradford_stdev( const double c ) { - double k; - if ( stdlib_base_is_nan( c ) || c <= 0.0 ) { - return 0.0/0.0; // NaN - } - k = stdlib_base_ln( 1.0 + c ); - return stdlib_base_sqrt( ( ( ( 2.0+c ) * k ) - ( 2.0*c ) ) / ( 2.0*c*k*k ) ); + return stdlib_base_sqrt( stdlib_base_dists_bradford_variance( c ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/lib/main.js index fe1780bc217b..a03578e6b2de 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/lib/main.js @@ -20,8 +20,8 @@ // MODULES // -var isnan = require( '@stdlib/math/base/assert/is-nan' ); var sqrt = require( '@stdlib/math/base/special/sqrt' ); +var variance = require( '@stdlib/stats/base/dists/chisquare/variance' ); // MAIN // @@ -49,10 +49,7 @@ var sqrt = require( '@stdlib/math/base/special/sqrt' ); * // returns NaN */ function stdev( k ) { - if ( isnan( k ) || k < 0.0 ) { - return NaN; - } - return sqrt( 2.0 * k ); + return sqrt( variance( k ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/manifest.json index 92e6eeaf5483..a91f57eb1f09 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/manifest.json @@ -39,8 +39,8 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/unary", - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/chisquare/variance" ] }, { @@ -55,8 +55,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/chisquare/variance", "@stdlib/constants/float64/eps" ] }, @@ -72,8 +72,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/chisquare/variance" ] } ] diff --git a/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/src/main.c index bb5fee24982d..925347942f16 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/chisquare/stdev/src/main.c @@ -17,8 +17,8 @@ */ #include "stdlib/stats/base/dists/chisquare/stdev.h" -#include "stdlib/math/base/assert/is_nan.h" #include "stdlib/math/base/special/sqrt.h" +#include "stdlib/stats/base/dists/chisquare/variance.h" /** * Returns the standard deviation of a chi-squared distribution. @@ -31,8 +31,5 @@ * // returns ~4.243 */ double stdlib_base_dists_chisquare_stdev( const double k ) { - if ( stdlib_base_is_nan( k ) || k < 0.0 ) { - return 0.0/0.0; //NaN - } - return stdlib_base_sqrt( 2.0 * k ); + return stdlib_base_sqrt( stdlib_base_dists_chisquare_variance( k ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/lib/main.js index 94417c82e2dc..2a06b32d290b 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/lib/main.js @@ -20,9 +20,8 @@ // MODULES // -var isNonNegativeInteger = require( '@stdlib/math/base/assert/is-nonnegative-integer' ); var sqrt = require( '@stdlib/math/base/special/sqrt' ); -var PINF = require( '@stdlib/constants/float64/pinf' ); +var variance = require( '@stdlib/stats/base/dists/hypergeometric/variance' ); // MAIN // @@ -72,18 +71,7 @@ var PINF = require( '@stdlib/constants/float64/pinf' ); * // returns NaN */ function stdev( N, K, n ) { - if ( - !isNonNegativeInteger( N ) || - !isNonNegativeInteger( K ) || - !isNonNegativeInteger( n ) || - N === PINF || - K === PINF || - K > N || - n > N - ) { - return NaN; - } - return sqrt( n * ( K/N ) * ( (N-K)/N ) * ( (N-n)/(N-1) ) ); + return sqrt( variance( N, K, n ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/manifest.json index 4229e8aea358..7329e8956f83 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/manifest.json @@ -39,7 +39,8 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/ternary", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/hypergeometric/variance" ] }, { @@ -55,6 +56,7 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/hypergeometric/variance", "@stdlib/math/base/special/ceil" ] }, @@ -71,6 +73,7 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/hypergeometric/variance", "@stdlib/math/base/special/ceil" ] } diff --git a/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/src/main.c index 41d0ce981fc2..c395a86edbbe 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/src/main.c @@ -18,7 +18,7 @@ #include "stdlib/stats/base/dists/hypergeometric/stdev.h" #include "stdlib/math/base/special/sqrt.h" -#include +#include "stdlib/stats/base/dists/hypergeometric/variance.h" /** * Returns the standard deviation of a hypergeometric distribution. @@ -33,13 +33,5 @@ * // returns ~0.829 */ double stdlib_base_dists_hypergeometric_stdev( const int32_t N, const int32_t K, const int32_t n ) { - double variance; - double p; - - if ( N < 0 || K < 0 || n < 0 || K > N || n > N ) { - return 0.0/0.0; // NaN - } - p = (double)K / (double)N; - variance = n * p * ( 1.0-p ) * ( (double)(N-n)/(double)(N-1) ); - return stdlib_base_sqrt( variance ); + return stdlib_base_sqrt( stdlib_base_dists_hypergeometric_variance( N, K, n ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/lib/main.js index 4e8b3dde0c0f..8e9a7c69bd21 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/lib/main.js @@ -20,9 +20,8 @@ // MODULES // -var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var beta = require( '@stdlib/math/base/special/beta' ); var sqrt = require( '@stdlib/math/base/special/sqrt' ); +var variance = require( '@stdlib/stats/base/dists/kumaraswamy/variance' ); // MAIN // @@ -63,19 +62,7 @@ var sqrt = require( '@stdlib/math/base/special/sqrt' ); * // returns NaN */ function stdev( a, b ) { - var m1; - var m2; - if ( - isnan( a ) || - a <= 0.0 || - isnan( b ) || - b <= 0.0 - ) { - return NaN; - } - m1 = b * beta( 1.0 + ( 1.0/a ), b ); - m2 = b * beta( 1.0 + ( 2.0/a ), b ); - return sqrt( m2 - ( m1*m1 ) ); + return sqrt( variance( a, b ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/manifest.json index f1589a6b3c20..36571ca1e231 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/manifest.json @@ -39,9 +39,8 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/binary", - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/beta", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/kumaraswamy/variance" ] }, { @@ -56,9 +55,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/beta", "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/kumaraswamy/variance", "@stdlib/constants/float64/eps" ] }, @@ -74,9 +72,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/beta", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/kumaraswamy/variance" ] } ] diff --git a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/src/main.c index 733a8b3418d0..049be831c014 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/stdev/src/main.c @@ -17,9 +17,8 @@ */ #include "stdlib/stats/base/dists/kumaraswamy/stdev.h" -#include "stdlib/math/base/assert/is_nan.h" -#include "stdlib/math/base/special/beta.h" #include "stdlib/math/base/special/sqrt.h" +#include "stdlib/stats/base/dists/kumaraswamy/variance.h" /** * Returns the standard deviation of a Kumaraswamy's double bounded distribution. @@ -33,18 +32,5 @@ * // returns ~0.298 */ double stdlib_base_dists_kumaraswamy_stdev( const double a, const double b ) { - double m1; - double m2; - if ( - stdlib_base_is_nan( a ) || - a <= 0.0 || - stdlib_base_is_nan( b ) || - b <= 0.0 - ) { - return 0.0/0.0; // NaN - } - m1 = b * stdlib_base_beta( 1.0 + ( 1.0/a ), b ); - m2 = b * stdlib_base_beta( 1.0 + ( 2.0/a ), b ); - return stdlib_base_sqrt( m2 - ( m1*m1 ) ); + return stdlib_base_sqrt( stdlib_base_dists_kumaraswamy_variance( a, b ) ); } - diff --git a/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/lib/main.js index 66e20dfa3ca5..f1d84ec9b454 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/lib/main.js @@ -20,9 +20,8 @@ // MODULES // -var isnan = require( '@stdlib/math/base/assert/is-nan' ); var sqrt = require( '@stdlib/math/base/special/sqrt' ); -var exp = require( '@stdlib/math/base/special/exp' ); +var variance = require( '@stdlib/stats/base/dists/lognormal/variance' ); // MAIN // @@ -55,16 +54,7 @@ var exp = require( '@stdlib/math/base/special/exp' ); * // returns NaN */ function stdev( mu, sigma ) { - var s2; - if ( - isnan( mu ) || - isnan( sigma ) || - sigma <= 0.0 - ) { - return NaN; - } - s2 = sigma*sigma; - return sqrt( ( exp( s2 ) - 1.0 ) * exp( ( 2.0*mu ) + s2 ) ); + return sqrt( variance( mu, sigma ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/manifest.json index 7a0095b9cd91..4707b240a9d8 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/manifest.json @@ -39,9 +39,8 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/binary", - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/exp", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/lognormal/variance" ] }, { @@ -56,10 +55,9 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", "@stdlib/constants/float64/eps", - "@stdlib/math/base/special/exp", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/lognormal/variance" ] }, { @@ -74,9 +72,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/exp", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/lognormal/variance" ] } ] diff --git a/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/src/main.c index 8d344ca711b9..554ccb3f0634 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/lognormal/stdev/src/main.c @@ -17,9 +17,8 @@ */ #include "stdlib/stats/base/dists/lognormal/stdev.h" -#include "stdlib/math/base/assert/is_nan.h" -#include "stdlib/math/base/special/exp.h" #include "stdlib/math/base/special/sqrt.h" +#include "stdlib/stats/base/dists/lognormal/variance.h" /** * Returns the standard deviation for a lognormal distribution with location `mu` and scale `sigma`. @@ -33,14 +32,5 @@ * // returns ~2.161 */ double stdlib_base_dists_lognormal_stdev( const double mu, const double sigma ) { - double s2; - if ( - stdlib_base_is_nan( mu ) || - stdlib_base_is_nan( sigma ) || - sigma <= 0.0 - ) { - return 0.0 / 0.0; // NaN - } - s2 = sigma * sigma; - return stdlib_base_sqrt( ( stdlib_base_exp( s2 ) - 1.0 ) * stdlib_base_exp( ( 2.0 * mu ) + s2 ) ); + return stdlib_base_sqrt( stdlib_base_dists_lognormal_variance( mu, sigma ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/lib/main.js index 79247ac299b5..5f95d04ee006 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/lib/main.js @@ -20,10 +20,8 @@ // MODULES // -var isnan = require( '@stdlib/math/base/assert/is-nan' ); var sqrt = require( '@stdlib/math/base/special/sqrt' ); -var pow = require( '@stdlib/math/base/special/pow' ); -var PINF = require( '@stdlib/constants/float64/pinf' ); +var variance = require( '@stdlib/stats/base/dists/pareto-type1/variance' ); // MAIN // @@ -64,20 +62,7 @@ var PINF = require( '@stdlib/constants/float64/pinf' ); * // returns NaN */ function stdev( alpha, beta ) { - var out; - if ( - isnan( alpha ) || - alpha <= 0.0 || - isnan( beta ) || - beta <= 0.0 - ) { - return NaN; - } - if ( alpha < 2.0 ) { - return PINF; - } - out = ( (beta*beta) * alpha ) / ( pow( alpha-1.0, 2.0 ) * ( alpha-2.0 ) ); - return sqrt( out ); + return sqrt( variance( alpha, beta ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/manifest.json index 9e265f4448e4..38db5587a87c 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/manifest.json @@ -39,10 +39,8 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/binary", - "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/sqrt", - "@stdlib/math/base/special/pow", - "@stdlib/constants/float64/pinf" + "@stdlib/stats/base/dists/pareto-type1/variance" ] }, { @@ -57,10 +55,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/sqrt", - "@stdlib/math/base/special/pow", - "@stdlib/constants/float64/pinf" + "@stdlib/stats/base/dists/pareto-type1/variance" ] }, { @@ -75,10 +71,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/sqrt", - "@stdlib/math/base/special/pow", - "@stdlib/constants/float64/pinf" + "@stdlib/stats/base/dists/pareto-type1/variance" ] } ] diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/src/main.c index b6ee53700f55..91ba0f54d6c7 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/stdev/src/main.c @@ -17,10 +17,8 @@ */ #include "stdlib/stats/base/dists/pareto-type1/stdev.h" -#include "stdlib/math/base/assert/is_nan.h" #include "stdlib/math/base/special/sqrt.h" -#include "stdlib/math/base/special/pow.h" -#include "stdlib/constants/float64/pinf.h" +#include "stdlib/stats/base/dists/pareto-type1/variance.h" /** * Returns the standard deviation of a Pareto (Type I) distribution. @@ -34,18 +32,5 @@ * // returns ~5.657 */ double stdlib_base_dists_pareto_type1_stdev( const double alpha, const double beta ) { - double out; - if ( - stdlib_base_is_nan( alpha ) || - alpha <= 0.0 || - stdlib_base_is_nan( beta ) || - beta <= 0.0 - ) { - return 0.0 / 0.0; // NaN - } - if ( alpha < 2.0 ) { - return STDLIB_CONSTANT_FLOAT64_PINF; - } - out = ( ( beta*beta ) * alpha ) / ( stdlib_base_pow( alpha-1.0, 2.0 ) * ( alpha-2.0 ) ); - return stdlib_base_sqrt( out ); + return stdlib_base_sqrt( stdlib_base_dists_pareto_type1_variance( alpha, beta ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/lib/main.js index ba06b60ec54d..5b21de6dd354 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/lib/main.js @@ -20,8 +20,8 @@ // MODULES // -var isnan = require( '@stdlib/math/base/assert/is-nan' ); var sqrt = require( '@stdlib/math/base/special/sqrt' ); +var variance = require( '@stdlib/stats/base/dists/poisson/variance' ); // MAIN // @@ -49,10 +49,7 @@ var sqrt = require( '@stdlib/math/base/special/sqrt' ); * // returns NaN */ function stdev( lambda ) { - if ( isnan( lambda ) || lambda < 0.0 ) { - return NaN; - } - return sqrt( lambda ); + return sqrt( variance( lambda ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/manifest.json index 546b58881775..0b0d3a84753f 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/manifest.json @@ -39,8 +39,8 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/unary", - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/poisson/variance" ] }, { @@ -55,8 +55,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/poisson/variance" ] }, { @@ -71,8 +71,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/poisson/variance" ] } ] diff --git a/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/src/main.c index 80f20f0bb68b..0ace0ea2cd0f 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/poisson/stdev/src/main.c @@ -17,8 +17,8 @@ */ #include "stdlib/stats/base/dists/poisson/stdev.h" -#include "stdlib/math/base/assert/is_nan.h" #include "stdlib/math/base/special/sqrt.h" +#include "stdlib/stats/base/dists/poisson/variance.h" /** * Returns the standard deviation of a Poisson distribution with parameter `lambda`. @@ -31,11 +31,5 @@ * // returns 3.0 */ double stdlib_base_dists_poisson_stdev( const double lambda ) { - if ( - stdlib_base_is_nan( lambda ) || - lambda < 0.0 - ) { - return 0.0/0.0; // NaN - } - return stdlib_base_sqrt( lambda ); + return stdlib_base_sqrt( stdlib_base_dists_poisson_variance( lambda ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/t/stdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/t/stdev/lib/main.js index 32e893097a7b..5e7267024bcd 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/t/stdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/t/stdev/lib/main.js @@ -20,9 +20,8 @@ // MODULES // -var isnan = require( '@stdlib/math/base/assert/is-nan' ); var sqrt = require( '@stdlib/math/base/special/sqrt' ); -var PINF = require( '@stdlib/constants/float64/pinf' ); +var variance = require( '@stdlib/stats/base/dists/t/variance' ); // MAIN // @@ -54,13 +53,7 @@ var PINF = require( '@stdlib/constants/float64/pinf' ); * // returns NaN */ function stdev( v ) { - if ( isnan( v ) || v <= 1.0 ) { - return NaN; - } - if ( v <= 2.0 ) { - return PINF; - } - return sqrt( v / ( v - 2.0 ) ); + return sqrt( variance( v ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/t/stdev/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/t/stdev/manifest.json index 19b4bb84411b..fe212a46d56b 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/t/stdev/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/t/stdev/manifest.json @@ -39,9 +39,8 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/unary", - "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/sqrt", - "@stdlib/constants/float64/pinf" + "@stdlib/stats/base/dists/t/variance" ] }, { @@ -56,9 +55,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/sqrt", - "@stdlib/constants/float64/pinf" + "@stdlib/stats/base/dists/t/variance" ] }, { @@ -73,9 +71,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/sqrt", - "@stdlib/constants/float64/pinf" + "@stdlib/stats/base/dists/t/variance" ] } ] diff --git a/lib/node_modules/@stdlib/stats/base/dists/t/stdev/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/t/stdev/src/main.c index 12e06afd4f7a..b8cfb20958e7 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/t/stdev/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/t/stdev/src/main.c @@ -17,9 +17,8 @@ */ #include "stdlib/stats/base/dists/t/stdev.h" -#include "stdlib/math/base/assert/is_nan.h" #include "stdlib/math/base/special/sqrt.h" -#include "stdlib/constants/float64/pinf.h" +#include "stdlib/stats/base/dists/t/variance.h" /** * Returns the standard deviation of a Student's t distribution. @@ -32,11 +31,5 @@ * // returns ~1.134 */ double stdlib_base_dists_t_stdev( const double v ) { - if ( stdlib_base_is_nan( v ) || v <= 1.0 ) { - return 0.0 / 0.0; // NaN - } - if ( v <= 2.0 ) { - return STDLIB_CONSTANT_FLOAT64_PINF; - } - return stdlib_base_sqrt( v / ( v - 2.0 ) ); + return stdlib_base_sqrt( stdlib_base_dists_t_variance( v ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/lib/main.js index c7012c662b6b..df370a5d0702 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/lib/main.js @@ -20,8 +20,8 @@ // MODULES // -var isnan = require( '@stdlib/math/base/assert/is-nan' ); var sqrt = require( '@stdlib/math/base/special/sqrt' ); +var variance = require( '@stdlib/stats/base/dists/triangular/variance' ); // MAIN // @@ -67,15 +67,7 @@ var sqrt = require( '@stdlib/math/base/special/sqrt' ); * // returns NaN */ function stdev( a, b, c ) { - if ( - isnan( a ) || - isnan( b ) || - isnan( c ) || - !( a <= c && c <= b ) - ) { - return NaN; - } - return sqrt( ( (a*a) + (b*b) + (c*c) - (a*b) - (a*c) - (b*c) ) / 18.0 ); + return sqrt( variance( a, b, c ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/manifest.json index b050c2ec550f..a1ec01aa013b 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/manifest.json @@ -39,8 +39,8 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/napi/ternary", - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/triangular/variance" ] }, { @@ -55,8 +55,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/triangular/variance" ] }, { @@ -71,8 +71,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-nan", - "@stdlib/math/base/special/sqrt" + "@stdlib/math/base/special/sqrt", + "@stdlib/stats/base/dists/triangular/variance" ] } ] diff --git a/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/src/main.c index 61d8a28bf115..b8c00dc2f411 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/triangular/stdev/src/main.c @@ -17,8 +17,8 @@ */ #include "stdlib/stats/base/dists/triangular/stdev.h" -#include "stdlib/math/base/assert/is_nan.h" #include "stdlib/math/base/special/sqrt.h" +#include "stdlib/stats/base/dists/triangular/variance.h" /** * Returns the standard deviation of a triangular distribution. @@ -33,13 +33,5 @@ * // returns ~0.204 */ double stdlib_base_dists_triangular_stdev( const double a, const double b, const double c ) { - if ( - stdlib_base_is_nan( a ) || - stdlib_base_is_nan( b ) || - stdlib_base_is_nan( c ) || - !( a <= c && c <= b ) - ) { - return 0.0/0.0; // NaN - } - return stdlib_base_sqrt( ( ( a*a ) + ( b*b ) + ( c*c ) - ( a*b ) - ( a*c ) - ( b*c ) ) / 18.0 ); + return stdlib_base_sqrt( stdlib_base_dists_triangular_variance( a, b, c ) ); } From 2d47fe6d1b1da7f265354b7e43edf5453b4bca71 Mon Sep 17 00:00:00 2001 From: Athan Date: Sun, 12 Apr 2026 04:18:18 -0700 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Athan Signed-off-by: Athan --- .../@stdlib/stats/base/dists/hypergeometric/stdev/src/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/src/main.c index c395a86edbbe..94443c608b04 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/hypergeometric/stdev/src/main.c @@ -19,6 +19,7 @@ #include "stdlib/stats/base/dists/hypergeometric/stdev.h" #include "stdlib/math/base/special/sqrt.h" #include "stdlib/stats/base/dists/hypergeometric/variance.h" +#include /** * Returns the standard deviation of a hypergeometric distribution.