@stdlib/stats-base-dists-frechet-quantile 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/NOTICE CHANGED
@@ -1 +1 @@
1
- Copyright (c) 2016-2024 The Stdlib Authors.
1
+ Copyright (c) 2016-2026 The Stdlib Authors.
package/README.md CHANGED
@@ -182,6 +182,108 @@ for ( i = 0; i < 100; i++ ) {
182
182
 
183
183
  <!-- /.examples -->
184
184
 
185
+ <!-- C interface documentation. -->
186
+
187
+ * * *
188
+
189
+ <section class="c">
190
+
191
+ ## C APIs
192
+
193
+ <!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. -->
194
+
195
+ <section class="intro">
196
+
197
+ </section>
198
+
199
+ <!-- /.intro -->
200
+
201
+ <!-- C usage documentation. -->
202
+
203
+ <section class="usage">
204
+
205
+ ### Usage
206
+
207
+ ```c
208
+ #include "stdlib/stats/base/dists/frechet/quantile.h"
209
+ ```
210
+
211
+ #### stdlib_base_dists_frechet_quantile( p, alpha, s, m )
212
+
213
+ Evaluates the [quantile function][quantile] for a [Fréchet][frechet-distribution] distribution with shape `alpha`, scale `s`, and location `m` at a probability `p`.
214
+
215
+ ```c
216
+ double out = stdlib_base_dists_frechet_quantile( 0.5, 2.0, 3.0, 2.0 );
217
+ // returns ~5.603
218
+ ```
219
+
220
+ The function accepts the following arguments:
221
+
222
+ - **p**: `[in] double` input probability.
223
+ - **alpha**: `[in] double` shape parameter.
224
+ - **s**: `[in] double` scale parameter.
225
+ - **m**: `[in] double` location parameter.
226
+
227
+ ```c
228
+ double stdlib_base_dists_frechet_quantile( const double p, const double alpha, const double s, const double m );
229
+ ```
230
+
231
+ </section>
232
+
233
+ <!-- /.usage -->
234
+
235
+ <!-- C API usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
236
+
237
+ <section class="notes">
238
+
239
+ </section>
240
+
241
+ <!-- /.notes -->
242
+
243
+ <!-- C API usage examples. -->
244
+
245
+ <section class="examples">
246
+
247
+ ### Examples
248
+
249
+ ```c
250
+ #include "stdlib/stats/base/dists/frechet/quantile.h"
251
+ #include "stdlib/constants/float64/eps.h"
252
+ #include <stdlib.h>
253
+ #include <stdio.h>
254
+
255
+ static double random_uniform( const double min, const double max ) {
256
+ double v = (double)rand() / ( (double)RAND_MAX + 1.0 );
257
+ return min + ( v*(max-min) );
258
+ }
259
+
260
+ int main( void ) {
261
+ double alpha;
262
+ double p;
263
+ double s;
264
+ double m;
265
+ double y;
266
+ int i;
267
+
268
+ for ( i = 0; i < 10; i++ ) {
269
+ p = random_uniform( 0.0, 1.0 );
270
+ alpha = random_uniform( STDLIB_CONSTANT_FLOAT64_EPS, 5.0 );
271
+ s = random_uniform( STDLIB_CONSTANT_FLOAT64_EPS, 5.0 );
272
+ m = random_uniform( -2.0, 2.0 );
273
+ y = stdlib_base_dists_frechet_quantile( p, alpha, s, m );
274
+ printf( "p: %lf, α: %lf, s: %lf, m: %lf, Q(p;α,s,m): %lf\n", p, alpha, s, m, y );
275
+ }
276
+ }
277
+ ```
278
+
279
+ </section>
280
+
281
+ <!-- /.examples -->
282
+
283
+ </section>
284
+
285
+ <!-- /.c -->
286
+
185
287
  <!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. -->
186
288
 
187
289
  <section class="related">
@@ -216,7 +318,7 @@ See [LICENSE][stdlib-license].
216
318
 
217
319
  ## Copyright
218
320
 
219
- Copyright &copy; 2016-2024. The Stdlib [Authors][stdlib-authors].
321
+ Copyright &copy; 2016-2026. The Stdlib [Authors][stdlib-authors].
220
322
 
221
323
  </section>
222
324
 
@@ -229,8 +331,8 @@ Copyright &copy; 2016-2024. The Stdlib [Authors][stdlib-authors].
229
331
  [npm-image]: http://img.shields.io/npm/v/@stdlib/stats-base-dists-frechet-quantile.svg
230
332
  [npm-url]: https://npmjs.org/package/@stdlib/stats-base-dists-frechet-quantile
231
333
 
232
- [test-image]: https://github.com/stdlib-js/stats-base-dists-frechet-quantile/actions/workflows/test.yml/badge.svg?branch=v0.2.2
233
- [test-url]: https://github.com/stdlib-js/stats-base-dists-frechet-quantile/actions/workflows/test.yml?query=branch:v0.2.2
334
+ [test-image]: https://github.com/stdlib-js/stats-base-dists-frechet-quantile/actions/workflows/test.yml/badge.svg?branch=v0.3.1
335
+ [test-url]: https://github.com/stdlib-js/stats-base-dists-frechet-quantile/actions/workflows/test.yml?query=branch:v0.3.1
234
336
 
235
337
  [coverage-image]: https://img.shields.io/codecov/c/github/stdlib-js/stats-base-dists-frechet-quantile/main.svg
236
338
  [coverage-url]: https://codecov.io/github/stdlib-js/stats-base-dists-frechet-quantile?branch=main
@@ -242,8 +344,8 @@ Copyright &copy; 2016-2024. The Stdlib [Authors][stdlib-authors].
242
344
 
243
345
  -->
244
346
 
245
- [chat-image]: https://img.shields.io/gitter/room/stdlib-js/stdlib.svg
246
- [chat-url]: https://app.gitter.im/#/room/#stdlib-js_stdlib:gitter.im
347
+ [chat-image]: https://img.shields.io/badge/zulip-join_chat-brightgreen.svg
348
+ [chat-url]: https://stdlib.zulipchat.com
247
349
 
248
350
  [stdlib]: https://github.com/stdlib-js/stdlib
249
351
 
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @license Apache-2.0
3
+ *
4
+ * Copyright (c) 2025 The Stdlib Authors.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ #ifndef STDLIB_STATS_BASE_DISTS_FRECHET_QUANTILE_H
20
+ #define STDLIB_STATS_BASE_DISTS_FRECHET_QUANTILE_H
21
+
22
+ /*
23
+ * If C++, prevent name mangling so that the compiler emits a binary file having undecorated names, thus mirroring the behavior of a C compiler.
24
+ */
25
+ #ifdef __cplusplus
26
+ extern "C" {
27
+ #endif
28
+
29
+ /**
30
+ * Evaluates the quantile function for a Fréchet distribution with shape `alpha`, scale `s`, and location `m` at a probability `p`.
31
+ */
32
+ double stdlib_base_dists_frechet_quantile( const double p, const double alpha, const double s, const double m );
33
+
34
+ #ifdef __cplusplus
35
+ }
36
+ #endif
37
+
38
+ #endif // !STDLIB_STATS_BASE_DISTS_FRECHET_QUANTILE_H
package/lib/native.js ADDED
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @license Apache-2.0
3
+ *
4
+ * Copyright (c) 2025 The Stdlib Authors.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ 'use strict';
20
+
21
+ // MODULES //
22
+
23
+ var addon = require( './../src/addon.node' );
24
+
25
+
26
+ // MAIN //
27
+
28
+ /**
29
+ * Evaluates the quantile function for a Fréchet distribution with shape `alpha`, scale `s`, and location `m` at a probability `p`.
30
+ *
31
+ * @private
32
+ * @param {number} p - input probability
33
+ * @param {PositiveNumber} alpha - shape parameter
34
+ * @param {PositiveNumber} s - scale parameter
35
+ * @param {number} m - location parameter
36
+ * @returns {number} evaluated quantile function
37
+ *
38
+ * @example
39
+ * var y = quantile( 0.5, 2.0, 3.0, 2.0 );
40
+ * // returns ~5.603
41
+ *
42
+ * @example
43
+ * var y = quantile( 0.2, 1.0, 3.0, -1.0 );
44
+ * // returns ~0.864
45
+ *
46
+ * @example
47
+ * var y = quantile( NaN, 2.0, 1.0, -1.0 );
48
+ * // returns NaN
49
+ *
50
+ * @example
51
+ * var y = quantile( 0.1, NaN, 1.0, -1.0 );
52
+ * // returns NaN
53
+ *
54
+ * @example
55
+ * var y = quantile( 0.1, -1.0, 1.0, 0.0 );
56
+ * // returns NaN
57
+ */
58
+ function quantile( p, alpha, s, m ) {
59
+ return addon( p, alpha, s, m );
60
+ }
61
+
62
+
63
+ // EXPORTS //
64
+
65
+ module.exports = quantile;
package/manifest.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "options": {
3
+ "task": "build",
4
+ "wasm": false
5
+ },
6
+ "fields": [
7
+ {
8
+ "field": "src",
9
+ "resolve": true,
10
+ "relative": true
11
+ },
12
+ {
13
+ "field": "include",
14
+ "resolve": true,
15
+ "relative": true
16
+ },
17
+ {
18
+ "field": "libraries",
19
+ "resolve": false,
20
+ "relative": false
21
+ },
22
+ {
23
+ "field": "libpath",
24
+ "resolve": true,
25
+ "relative": false
26
+ }
27
+ ],
28
+ "confs": [
29
+ {
30
+ "task": "build",
31
+ "wasm": false,
32
+ "src": [
33
+ "./src/main.c"
34
+ ],
35
+ "include": [
36
+ "./include"
37
+ ],
38
+ "libraries": [],
39
+ "libpath": [],
40
+ "dependencies": [
41
+ "@stdlib/math-base-napi-quaternary",
42
+ "@stdlib/math-base-assert-is-nan",
43
+ "@stdlib/math-base-special-pow",
44
+ "@stdlib/math-base-special-ln"
45
+ ]
46
+ },
47
+ {
48
+ "task": "benchmark",
49
+ "wasm": false,
50
+ "src": [
51
+ "./src/main.c"
52
+ ],
53
+ "include": [
54
+ "./include"
55
+ ],
56
+ "libraries": [],
57
+ "libpath": [],
58
+ "dependencies": [
59
+ "@stdlib/math-base-assert-is-nan",
60
+ "@stdlib/math-base-special-pow",
61
+ "@stdlib/math-base-special-ln",
62
+ "@stdlib/constants-float64-eps"
63
+ ]
64
+ },
65
+ {
66
+ "task": "examples",
67
+ "wasm": false,
68
+ "src": [
69
+ "./src/main.c"
70
+ ],
71
+ "include": [
72
+ "./include"
73
+ ],
74
+ "libraries": [],
75
+ "libpath": [],
76
+ "dependencies": [
77
+ "@stdlib/math-base-assert-is-nan",
78
+ "@stdlib/constants-float64-eps",
79
+ "@stdlib/math-base-special-pow",
80
+ "@stdlib/math-base-special-ln"
81
+ ]
82
+ }
83
+ ]
84
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stdlib/stats-base-dists-frechet-quantile",
3
- "version": "0.2.2",
3
+ "version": "0.3.1",
4
4
  "description": "Fréchet distribution quantile function.",
5
5
  "license": "Apache-2.0",
6
6
  "author": {
@@ -14,9 +14,12 @@
14
14
  }
15
15
  ],
16
16
  "main": "./lib",
17
+ "gypfile": false,
17
18
  "directories": {
18
19
  "doc": "./docs",
20
+ "include": "./include",
19
21
  "lib": "./lib",
22
+ "src": "./src",
20
23
  "dist": "./dist"
21
24
  },
22
25
  "types": "./docs/types",
@@ -30,11 +33,13 @@
30
33
  "url": "https://github.com/stdlib-js/stdlib/issues"
31
34
  },
32
35
  "dependencies": {
33
- "@stdlib/math-base-assert-is-nan": "^0.2.2",
34
- "@stdlib/math-base-special-ln": "^0.2.4",
36
+ "@stdlib/math-base-assert-is-nan": "^0.2.3",
37
+ "@stdlib/math-base-napi-quaternary": "^0.2.4",
38
+ "@stdlib/math-base-special-ln": "^0.2.5",
35
39
  "@stdlib/math-base-special-pow": "^0.3.0",
36
- "@stdlib/utils-constant-function": "^0.2.2",
37
- "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.2"
40
+ "@stdlib/utils-constant-function": "^0.2.3",
41
+ "@stdlib/utils-define-nonenumerable-read-only-property": "^0.2.3",
42
+ "@stdlib/utils-library-manifest": "^0.2.4"
38
43
  },
39
44
  "devDependencies": {},
40
45
  "engines": {
package/src/addon.c ADDED
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license Apache-2.0
3
+ *
4
+ * Copyright (c) 2025 The Stdlib Authors.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ #include "stdlib/stats/base/dists/frechet/quantile.h"
20
+ #include "stdlib/math/base/napi/quaternary.h"
21
+
22
+ STDLIB_MATH_BASE_NAPI_MODULE_DDDD_D( stdlib_base_dists_frechet_quantile )
package/src/main.c ADDED
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @license Apache-2.0
3
+ *
4
+ * Copyright (c) 2025 The Stdlib Authors.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ #include "stdlib/stats/base/dists/frechet/quantile.h"
20
+ #include "stdlib/math/base/assert/is_nan.h"
21
+ #include "stdlib/math/base/special/pow.h"
22
+ #include "stdlib/math/base/special/ln.h"
23
+
24
+ /**
25
+ * Evaluates the quantile function for a Fréchet distribution with shape `alpha`, scale `s`, and location `m` at a probability `p`.
26
+ *
27
+ * @param p input probability
28
+ * @param alpha shape parameter
29
+ * @param s scale parameter
30
+ * @param m location parameter
31
+ * @return evaluated quantile function
32
+ *
33
+ * @example
34
+ * double y = stdlib_base_dists_frechet_quantile( 0.5, 2.0, 3.0, 2.0 );
35
+ * // returns ~5.603
36
+ *
37
+ * @example
38
+ * double y = stdlib_base_dists_frechet_quantile( 0.2, 1.0, 3.0, -1.0 );
39
+ * // returns ~0.864
40
+ */
41
+ double stdlib_base_dists_frechet_quantile( const double p, const double alpha, const double s, const double m ) {
42
+ if (
43
+ stdlib_base_is_nan( p ) ||
44
+ stdlib_base_is_nan( alpha ) ||
45
+ stdlib_base_is_nan( s ) ||
46
+ stdlib_base_is_nan( m ) ||
47
+ p < 0.0 ||
48
+ p > 1.0 ||
49
+ alpha <= 0.0 ||
50
+ s <= 0.0
51
+ ) {
52
+ return 0.0/0.0; // NaN
53
+ }
54
+ return m + ( s * stdlib_base_pow( -stdlib_base_ln( p ), -1.0/alpha ) );
55
+ }