From bf36ebeba8204497117347d7e242a83fe05bb6d1 Mon Sep 17 00:00:00 2001 From: DeshDeepakKant Date: Wed, 18 Dec 2024 18:03:57 +0530 Subject: [PATCH 1/8] feat: add C implementation for kumaraswamy dist median --- .../stats/base/dists/kumaraswamy/median.h | 38 ++++ .../base/dists/kumaraswamy/median/README.md | 111 +++++++++++- .../kumaraswamy/median/benchmark/benchmark.js | 18 +- .../median/benchmark/benchmark.native.js | 71 ++++++++ .../kumaraswamy/median/benchmark/c/Makefile | 146 +++++++++++++++ .../median/benchmark/c/benchmark.c | 143 +++++++++++++++ .../base/dists/kumaraswamy/median/binding.gyp | 170 ++++++++++++++++++ .../kumaraswamy/median/examples/c/Makefile | 146 +++++++++++++++ .../kumaraswamy/median/examples/c/example.c | 45 +++++ .../dists/kumaraswamy/median/include.gypi | 53 ++++++ .../stats/base/dists/kumaraswamy/median.h | 38 ++++ .../dists/kumaraswamy/median/lib/native.js | 54 ++++++ .../dists/kumaraswamy/median/manifest.json | 79 ++++++++ .../dists/kumaraswamy/median/package.json | 37 ++-- .../dists/kumaraswamy/median/src/Makefile | 70 ++++++++ .../base/dists/kumaraswamy/median/src/addon.c | 23 +++ .../base/dists/kumaraswamy/median/src/main.c | 43 +++++ .../median/test/fixtures/julia/REQUIRE | 3 + .../median/test/fixtures/julia/data.json | 1 + .../median/test/fixtures/julia/runner.jl | 71 ++++++++ .../kumaraswamy/median/test/test.native.js | 98 ++++++++++ 21 files changed, 1437 insertions(+), 21 deletions(-) create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median.h create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/benchmark/benchmark.native.js create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/benchmark/c/Makefile create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/benchmark/c/benchmark.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/binding.gyp create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/examples/c/Makefile create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/examples/c/example.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/include.gypi create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/include/stdlib/stats/base/dists/kumaraswamy/median.h create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/lib/native.js create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/manifest.json create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/src/Makefile create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/src/addon.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/src/main.c create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/test/fixtures/julia/REQUIRE create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/test/fixtures/julia/data.json create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/test/fixtures/julia/runner.jl create mode 100644 lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/test/test.native.js diff --git a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median.h b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median.h new file mode 100644 index 000000000000..51f680772849 --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median.h @@ -0,0 +1,38 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2024 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef STDLIB_STATS_BASE_DISTS_KUMARASWAMY_MEDIAN_H +#define STDLIB_STATS_BASE_DISTS_KUMARASWAMY_MEDIAN_H + +/* +* If C++, prevent name mangling so that the compiler emits a binary file having undecorated names, thus mirroring the behavior of a C compiler. +*/ +#ifdef __cplusplus +extern "C" { +#endif + +/** +* Returns the median of a Kumaraswamy distribution. +*/ +double stdlib_base_dists_kumaraswamy_median( const double a, const double b ); + +#ifdef __cplusplus +} +#endif + +#endif // !STDLIB_STATS_BASE_DISTS_KUMARASWAMY_MEDIAN_H diff --git a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/README.md b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/README.md index 4ed44b2de696..fb4100baf6ae 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/README.md @@ -2,7 +2,7 @@ @license Apache-2.0 -Copyright (c) 2018 The Stdlib Authors. +Copyright (c) 2014 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. @@ -143,6 +143,114 @@ for ( i = 0; i < 10; i++ ) { + + + +* * * + +
+ +## C APIs + + + +
+ +
+ + + + + +
+ +### Usage + +```c +#include "stdlib/stats/base/dists/kumaraswamy/median.h" +``` + +#### stdlib_base_dists_kumaraswamy_median( a, b ) + +Evaluates the [median][median] of a [Kumaraswamy][kumaraswamy-distribution] distribution with shape parameters a and b. + +```c +double out = stdlib_base_dists_kumaraswamy_median( 2.0, 3.0 ); +// returns ~1.817 +``` + +The function accepts the following arguments: + +- **a**: `[in] double` shape parameter. +- **b**: `[in] double` shape parameter. + + +```c +double stdlib_base_dists_kumaraswamy_median( const double a, const double b ); + +``` + +
+ + + + + +
+ +
+ + + + + +
+ +### Examples + +```c +#include "stdlib/stats/base/dists/kumaraswamy/median.h" +#include "stdlib/constants/float64/eps.h" +#include +#include + +double stdlib_base_dists_kumaraswamy_median( const double a, const double b ) { + return pow( 1.0 - pow( 0.5, 1.0 / b ), 1.0 / a ); +} + +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 a; + double b; + double y; + int i; + + for ( i = 0; i < 25; i++ ) { + a = random_uniform( 0.1, 10.0 ); + b = random_uniform( 0.1, 10.0 ); + y = stdlib_base_dists_kumaraswamy_median( a, b ); + printf( "a: %lf, b: %lf, Median(a, b): %lf\n", a, b, y ); + } + + return 0; +} + +``` + +
+ + + +
+ + + + +
@@ -151,6 +259,7 @@ for ( i = 0; i < 10; i++ ) { + @@ -233,7 +232,6 @@ int main( void ) { return 0; } - ```
diff --git a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/examples/c/example.c b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/examples/c/example.c index 2929e430c2a0..4db00037ecc3 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/examples/c/example.c +++ b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/examples/c/example.c @@ -32,8 +32,6 @@ int main( void ) { int i; for ( i = 0; i < 25; i++ ) { - // Generate random parameters for Kumaraswamy distribution - // Ensure parameters are positive and within reasonable ranges a = random_uniform( 0.0, 10.0 ) + STDLIB_CONSTANT_FLOAT64_EPS; b = random_uniform( 0.0, 10.0 ) + STDLIB_CONSTANT_FLOAT64_EPS; @@ -42,4 +40,4 @@ int main( void ) { } return 0; -} \ No newline at end of file +} From 9b3143a65574634fc381462ad7608dca2070578c Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Thu, 19 Dec 2024 19:08:14 -0500 Subject: [PATCH 6/8] refactor: use stdlib pow Signed-off-by: Philipp Burckhardt --- .../@stdlib/stats/base/dists/kumaraswamy/median/manifest.json | 3 +++ .../@stdlib/stats/base/dists/kumaraswamy/median/src/main.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/manifest.json index 93ccded754bf..4e958d7e3adf 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/manifest.json @@ -40,6 +40,7 @@ "dependencies": [ "@stdlib/math/base/napi/binary", "@stdlib/math/base/assert/is-nan", + "@stdlib/math/base/special/pow", "@stdlib/constants/float64/eps" ] }, @@ -56,6 +57,7 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/assert/is-nan", + "@stdlib/math/base/special/pow", "@stdlib/constants/float64/eps" ] }, @@ -72,6 +74,7 @@ "libpath": [], "dependencies": [ "@stdlib/math/base/assert/is-nan", + "@stdlib/math/base/special/pow", "@stdlib/constants/float64/eps" ] } diff --git a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/src/main.c index a1c9e2a2e463..753342d565b4 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/src/main.c @@ -18,7 +18,7 @@ #include "stdlib/stats/base/dists/kumaraswamy/median.h" #include "stdlib/math/base/assert/is_nan.h" -#include +#include "stdlib/math/base/special/pow.h" /** * Returns the median of a Kumaraswamy distribution. @@ -39,5 +39,5 @@ double stdlib_base_dists_kumaraswamy_median( const double a, const double b ) { ) { return 0.0/0.0; // NaN } - return 1.0 - pow( 0.5, 1.0 / b ); + return 1.0 - stdlib_base_pow( 0.5, 1.0 / b ); } From e215e94b4724797c40bd6d7718af7f5d7290607e Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Thu, 19 Dec 2024 19:11:38 -0500 Subject: [PATCH 7/8] chore: update copyright year Signed-off-by: Philipp Burckhardt --- .../base/dists/kumaraswamy/median/test/fixtures/julia/runner.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/test/fixtures/julia/runner.jl b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/test/fixtures/julia/runner.jl index 3b807b87276a..dea02c6f8aa5 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/test/fixtures/julia/runner.jl +++ b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/test/fixtures/julia/runner.jl @@ -2,7 +2,7 @@ # # @license Apache-2.0 # -# Copyright (c) 2018 The Stdlib Authors. +# Copyright (c) 2024 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 8cb332928ba08277b46d4b969c27dce5b2cb353f Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Thu, 19 Dec 2024 19:21:27 -0500 Subject: [PATCH 8/8] fix: revert changes and update package.json with correct directories an gypfiles --- .../dists/kumaraswamy/median/package.json | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/package.json b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/package.json index b4a79cd520d5..f26f21281232 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/package.json +++ b/lib/node_modules/@stdlib/stats/base/dists/kumaraswamy/median/package.json @@ -1,7 +1,7 @@ { - "name": "@stdlib/stats/base/dists/kumaraswamy", + "name": "@stdlib/stats/base/dists/kumaraswamy/median", "version": "0.0.0", - "description": "Kumaraswamy's double bounded distribution.", + "description": "Kumaraswamy's double bounded distribution median.", "license": "Apache-2.0", "author": { "name": "The Stdlib Authors", @@ -14,10 +14,14 @@ } ], "main": "./lib", + "gypfile": true, "directories": { + "benchmark": "./benchmark", "doc": "./docs", "example": "./examples", + "include": "./include", "lib": "./lib", + "src": "./src", "test": "./test" }, "types": "./docs/types", @@ -50,19 +54,18 @@ "keywords": [ "stdlib", "stdmath", - "standard", - "library", - "std", - "lib", "statistics", "stats", - "probability", - "prob", "distribution", "dist", + "median", + "location", + "center", + "continuous", + "probability", + "prob", "kumaraswamy", "bounded", - "univariate", - "continuous" + "univariate" ] }