From 5350555236e8c4f40f5a8330212b17f6bb8b1496 Mon Sep 17 00:00:00 2001 From: DhruvArvindSingh Date: Sat, 28 Dec 2024 07:15:01 +0000 Subject: [PATCH 1/8] feat: added C implementation for @stdlib/stats/base/dists/pareto-type1/quantile --- 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: missing_dependencies - task: lint_c_examples status: missing_dependencies - task: lint_c_benchmarks status: missing_dependencies - 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 --- --- 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 --- --- .../dists/pareto-type1/quantile/README.md | 84 +++++++ .../quantile/benchmark/benchmark.js | 17 +- .../quantile/benchmark/benchmark.native.js | 74 +++++++ .../quantile/benchmark/c/Makefile | 146 ++++++++++++ .../quantile/benchmark/c/benchmark.c | 142 ++++++++++++ .../dists/pareto-type1/quantile/binding.gyp | 170 ++++++++++++++ .../pareto-type1/quantile/examples/c/Makefile | 146 ++++++++++++ .../quantile/examples/c/example.c | 42 ++++ .../dists/pareto-type1/quantile/include.gypi | 53 +++++ .../stats/base/dists/pareto-type1/quantile.h | 38 ++++ .../dists/pareto-type1/quantile/lib/native.js | 83 +++++++ .../dists/pareto-type1/quantile/manifest.json | 79 +++++++ .../dists/pareto-type1/quantile/package.json | 3 + .../dists/pareto-type1/quantile/src/Makefile | 70 ++++++ .../dists/pareto-type1/quantile/src/addon.c | 23 ++ .../dists/pareto-type1/quantile/src/main.c | 85 +++++++ .../pareto-type1/quantile/test/test.native.js | 207 ++++++++++++++++++ 17 files changed, 1458 insertions(+), 4 deletions(-) create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/benchmark.native.js create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/c/Makefile create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/c/benchmark.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/binding.gyp create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/examples/c/Makefile create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/examples/c/example.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/include.gypi create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/include/stdlib/stats/base/dists/pareto-type1/quantile.h create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/lib/native.js create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/manifest.json create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/Makefile create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/addon.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/main.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/test/test.native.js diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md index 99cc5d125829..dad85b4ff0bd 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md @@ -157,6 +157,90 @@ for ( i = 0; i < 10; i++ ) { + + +* * * + +
+ +## C APIs + + + +
+ +
+ + + + + +
+ +### Usage + +```c +#include "stdlib/stats/base/dists/pareto-type1/quantile.h" +``` + +#### stdlib_base_dists_pareto_type1_quantile( p, alpha, beta ) + +Returns the quantile of a Pareto (Type I) distribution. + +```c +double y = stdlib_base_dists_pareto_type1_quantile( 0.8, 2.0, 1.0 ); +// returns ~2.236 +``` + +The function accepts the following arguments: + +- **alpha**: `[in] double` first shape parameter. +- **beta**: `[in] double` second shape parameter. + +```c +double stdlib_base_dists_pareto_type1_quantile( const double alpha, const double alpha, const double beta ); +``` + +
+ + +
+
+ + +
+### Examples +```c +#include "stdlib/stats/base/dists/pareto-type1/quantile.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 alpha; + double beta; + double y; + int i; + for ( i = 0; i < 25; i++ ) { + alpha = random_uniform( 0, 10 ) + 3.0; + beta = random_uniform( 0, 10 ); + y = stdlib_base_dists_pareto_type1_quantile( p, alpha, beta ); + printf( "p: %lf, α: %lf, β: %lf, quantile(X;α,β): %lf\n", p, alpha, beta, y ); + } +} +``` + +
+ + + +
+ + + + + + +
+
+ + +
+ ### Examples + ```c #include "stdlib/stats/base/dists/pareto-type1/quantile.h" #include @@ -221,13 +231,16 @@ static double random_uniform( const double min, const double max ) { int main( void ) { double alpha; double beta; + double p; double y; int i; + for ( i = 0; i < 25; i++ ) { - alpha = random_uniform( 0, 10 ) + 3.0; - beta = random_uniform( 0, 10 ); + p = random_uniform( 0.0, 1.0 ); + alpha = random_uniform( 1.0, 10.0 ); + beta = random_uniform( 1.0, 10.0 ); y = stdlib_base_dists_pareto_type1_quantile( p, alpha, beta ); - printf( "p: %lf, α: %lf, β: %lf, quantile(X;α,β): %lf\n", p, alpha, beta, y ); + printf( "p: %lf, α: %lf, β: %lf, Q(p;α,β): %lf\n", p, alpha, beta, y ); } } ``` diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/benchmark.js index 3207c93cec3b..05b0c762b7b6 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/benchmark.js @@ -21,10 +21,8 @@ // MODULES // var bench = require( '@stdlib/bench' ); -var Float64Array = require( '@stdlib/array/float64' ); -var uniform = require( '@stdlib/random/base/uniform' ); +var uniform = require( '@stdlib/random/array/uniform' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var EPS = require( '@stdlib/constants/float64/eps' ); var pkg = require( './../package.json' ).name; var quantile = require( './../lib' ); @@ -40,14 +38,9 @@ bench( pkg, function benchmark( b ) { var i; len = 100; - alpha = new Float64Array( len ); - beta = new Float64Array( len ); - p = new Float64Array( len ); - for ( i = 0; i < len; i++ ) { - p[ i ] = uniform( 0.0, 1.0 ); - alpha[ i ] = uniform( 3.0 + EPS, 100.0 ); - beta[ i ] = uniform( EPS, 100.0 ); - } + p = uniform( len, 0.0, 1.0 ); + alpha = uniform( len, 1.0, 100.0 ); + beta = uniform( len, 1.0, 100.0 ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { @@ -74,13 +67,10 @@ bench( pkg+':factory', function benchmark( b ) { var i; alpha = 100.56789; - len = 100; beta = 55.54321; myquantile = quantile.factory( alpha, beta ); - p = new Float64Array( len ); - for ( i = 0; i < len; i++ ) { - p[ i ] = uniform( 0.0, 1.0 ); - } + len = 100; + p = uniform( len, 0.0, 1.0 ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/benchmark.native.js index bd0be8b1065c..4d1a80b703ff 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/benchmark.native.js @@ -22,11 +22,9 @@ var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); -var Float64Array = require( '@stdlib/array/float64' ); var tryRequire = require( '@stdlib/utils/try-require' ); -var randu = require( '@stdlib/random/base/randu' ); +var uniform = require( '@stdlib/random/array/uniform' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var EPS = require( '@stdlib/constants/float64/eps' ); var pkg = require( './../package.json' ).name; @@ -49,14 +47,9 @@ bench( pkg+'::native', opts, function benchmark( b ) { var i; len = 100; - alpha = new Float64Array( len ); - beta = new Float64Array( len ); - p = new Float64Array( len ); - for ( i = 0; i < len; i++ ) { - p[ i ] = ( randu() * 1.0 ); - alpha[ i ] = ( randu() * 10.0 ) + 3.0 + EPS; - beta[ i ] = ( randu() * 10.0 ) + EPS; - } + p = uniform( len, 0.0, 1.0 ); + alpha = uniform( len, 1.0, 10.0 ); + beta = uniform( len, 1.0, 10.0 ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/c/benchmark.c b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/c/benchmark.c index a91e2909dbe8..eb4be282f905 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/c/benchmark.c +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/benchmark/c/benchmark.c @@ -102,8 +102,8 @@ static double benchmark( void ) { for ( i = 0; i < 100; i++ ) { p[ i ] = random_uniform( 0.0, 1.0 ); - alpha[ i ] = random_uniform( 0.0, 10.0 ) + 3.0; - beta[ i ] = random_uniform( 0.0, 10.0 ) + 3.0; + alpha[ i ] = random_uniform( 1.0, 10.0 ); + beta[ i ] = random_uniform( 1.0, 10.0 ); } t = tic(); diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/examples/c/example.c b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/examples/c/example.c index f398abe07873..ec0d5593a9dd 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/examples/c/example.c +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/examples/c/example.c @@ -33,10 +33,10 @@ int main( void ) { int i; for ( i = 0; i < 25; i++ ) { - p = random_uniform( 0, 1 ); - alpha = random_uniform( 0, 10 ) + 3.0; - beta = random_uniform( 0, 10 ); + p = random_uniform( 0.0, 1.0 ); + alpha = random_uniform( 1.0, 10.0 ); + beta = random_uniform( 1.0, 10.0 ); y = stdlib_base_dists_pareto_type1_quantile( p, alpha, beta ); - printf( "p: %lf, α: %lf, β: %lf, skew(X;α,β): %lf\n", p, alpha, beta, y ); + printf( "p: %lf, α: %lf, β: %lf, Q(p;α,β): %lf\n", p, alpha, beta, y ); } } diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/include/stdlib/stats/base/dists/pareto-type1/quantile.h b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/include/stdlib/stats/base/dists/pareto-type1/quantile.h index 9df05d4c675e..44fb085a4697 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/include/stdlib/stats/base/dists/pareto-type1/quantile.h +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/include/stdlib/stats/base/dists/pareto-type1/quantile.h @@ -27,7 +27,7 @@ extern "C" { #endif /** -* Returns the qunatile of a Pareto (Type I) distribution. +* Evaluates the quantile function for a Pareto (Type I) distribution with shape parameter `alpha` and scale parameter `beta` at a probability `p`. */ double stdlib_base_dists_pareto_type1_quantile( const double p, const double alpha, const double beta ); diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/main.c index 3b749bc73e15..1ac4970da727 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/main.c @@ -24,50 +24,14 @@ /** * Evaluates the quantile function for a Pareto (Type I) distribution with shape parameter `alpha` and scale parameter `beta` at a probability `p`. * -* @param {Probability} p - input value -* @param {PositiveNumber} alpha - shape parameter -* @param {PositiveNumber} beta - scale parameter -* @returns {number} evaluated quantile function +* @param p input probability +* @param alpha shape parameter +* @param beta scale parameter +* @return evaluated quantile function * * @example * double y = stdlib_base_dists_pareto_type1_quantile( 0.8, 2.0, 1.0 ); * // returns ~2.236 -* -* @example -* double y = stdlib_base_dists_pareto_type1_quantile( 0.8, 1.0, 10.0 ); -* // returns ~50.0 -* -* @example -* double y = stdlib_base_dists_pareto_type1_quantile( 0.1, 1.0, 10.0 ); -* // returns ~11.111 -* -* @example -* double y = stdlib_base_dists_pareto_type1_quantile( 1.1, 1.0, 1.0 ); -* // returns NaN -* -* @example -* double y = stdlib_base_dists_pareto_type1_quantile( -0.2, 1.0, 1.0 ); -* // returns NaN -* -* @example -* double y = stdlib_base_dists_pareto_type1_quantile( NaN, 1.0, 1.0 ); -* // returns NaN -* -* @example -* double y = stdlib_base_dists_pareto_type1_quantile( 0.5, NaN, 1.0 ); -* // returns NaN -* -* @example -* double y = stdlib_base_dists_pareto_type1_quantile( 0.5, 1.0, NaN ); -* // returns NaN -* -* @example -* double y = stdlib_base_dists_pareto_type1_quantile( 0.5, -1.0, 1.0 ); -* // returns NaN -* -* @example -* double y = stdlib_base_dists_pareto_type1_quantile( 0.5, 1.0, -1.0 ); -* // returns NaN */ double stdlib_base_dists_pareto_type1_quantile( const double p, const double alpha, const double beta ) { if ( From bdb8233b6bdb5b8099ecb2eab3394032dcfc8ba1 Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Wed, 9 Jul 2025 21:45:01 -0500 Subject: [PATCH 4/8] docs: fix up descriptions --- 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: 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 --- --- .../stats/base/dists/pareto-type1/quantile/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md index 0a325b7350ad..9013126ee933 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md @@ -55,7 +55,7 @@ var quantile = require( '@stdlib/stats/base/dists/pareto-type1/quantile' ); #### quantile( p, alpha, beta ) -Evaluates the [quantile function][quantile-function] for a [Pareto (Type I)][pareto-distribution] distribution with parameters `alpha` (shape parameter) and `beta` ( scale parameter). +Evaluates the [quantile function][quantile-function] for a [Pareto (Type I)][pareto-distribution] distribution with parameters `alpha` (shape parameter) and `beta` (scale parameter). ```javascript var y = quantile( 0.8, 2.0, 1.0 ); @@ -113,7 +113,7 @@ y = quantile( 0.4, 1.0, 0.0 ); #### quantile.factory( alpha, beta ) -Returns a function for evaluating the [quantile function][quantile-function] of a [Pareto (Type I)][pareto-distribution] distribution with parameters `alpha` (shape parameter) and `beta` ( scale parameter). +Returns a function for evaluating the [quantile function][quantile-function] of a [Pareto (Type I)][pareto-distribution] distribution with parameters `alpha` (shape parameter) and `beta` (scale parameter). ```javascript var myquantile = quantile.factory( 2.5, 0.5 ); @@ -185,7 +185,7 @@ for ( i = 0; i < 10; i++ ) { #### stdlib_base_dists_pareto_type1_quantile( p, alpha, beta ) -Returns the quantile of a Pareto (Type I) distribution. +Evaluates the [quantile function][quantile-function] for a [Pareto (Type I)][pareto-distribution] distribution with parameters `alpha` (shape parameter) and `beta` (scale parameter). ```c double y = stdlib_base_dists_pareto_type1_quantile( 0.8, 2.0, 1.0 ); From 4064b5fd95abb168fa5b535fddc2e49b325cecee Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Wed, 9 Jul 2025 22:46:35 -0400 Subject: [PATCH 5/8] style: remove extra empty line Signed-off-by: Philipp Burckhardt --- .../@stdlib/stats/base/dists/pareto-type1/quantile/src/main.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/main.c index 1ac4970da727..699108a330b3 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/src/main.c @@ -20,7 +20,6 @@ #include "stdlib/math/base/assert/is_nan.h" #include "stdlib/math/base/special/pow.h" - /** * Evaluates the quantile function for a Pareto (Type I) distribution with shape parameter `alpha` and scale parameter `beta` at a probability `p`. * From e8f17a65430af523a8a2b3756a27ea76e668d27c Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Wed, 9 Jul 2025 22:48:48 -0400 Subject: [PATCH 6/8] style: add empty lines Signed-off-by: Philipp Burckhardt --- .../@stdlib/stats/base/dists/pareto-type1/quantile/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md index 9013126ee933..70a3755aa8ea 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md @@ -224,10 +224,12 @@ double stdlib_base_dists_pareto_type1_quantile( const double p, const double alp #include "stdlib/stats/base/dists/pareto-type1/quantile.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 alpha; double beta; From e22e78a1930dbf3ea96192b10af43ae9bfb94cf8 Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Wed, 9 Jul 2025 23:03:21 -0400 Subject: [PATCH 7/8] style: remove extra empty line Signed-off-by: Philipp Burckhardt --- .../@stdlib/stats/base/dists/pareto-type1/quantile/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md index 70a3755aa8ea..8b4aa1084069 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/pareto-type1/quantile/README.md @@ -255,7 +255,6 @@ int main( void ) { -