From 67c0083b95cbcbc0d3933fec3f175f1cbb97f509 Mon Sep 17 00:00:00 2001 From: aayush0325 <aayush25khanna@gmail,com> Date: Thu, 5 Dec 2024 00:05:29 +0530 Subject: [PATCH 01/18] feat: basic files added --- .../math/base/special/lucasf/README.md | 256 ++++++++++++++++++ .../math/base/special/lucasf/binding.gyp | 170 ++++++++++++ .../math/base/special/lucasf/include.gypi | 53 ++++ .../math/base/special/lucasf/manifest.json | 67 +++++ .../math/base/special/lucasf/package.json | 69 +++++ 5 files changed, 615 insertions(+) create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/README.md create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/binding.gyp create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/include.gypi create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/manifest.json create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/package.json diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md new file mode 100644 index 000000000000..b9bbe3dd3009 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md @@ -0,0 +1,256 @@ +<!-- + +@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. + +--> + +# Lucas + +> Compute the nth [Lucas number][lucas-number] in single-precision floating-point format. + +<section class="intro"> + +The [Lucas numbers][lucas-number] are the integer sequence + +<!-- <equation class="equation" label="eq:lucas_sequence" align="center" raw="2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322, \ldots" alt="Lucas sequence"> --> + +```math +2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322, \ldots +``` + +<!-- <div class="equation" align="center" data-raw-text="2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322, \ldots" data-equation="eq:lucas_sequence"> + <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@bb29798906e119fcb2af99e94b60407a270c9b32/lib/node_modules/@stdlib/math/base/special/lucas/docs/img/equation_lucas_sequence.svg" alt="Lucas sequence"> + <br> +</div> --> + +<!-- </equation> --> + +The sequence is defined by the recurrence relation + +<!-- <equation class="equation" label="eq:lucas_recurrence_relation" align="center" raw="L_n = \begin{cases}2 & \textrm{if}\ n = 0\\1 & \textrm{if}\ n = 1\\L_{n-1} + L_{n-2} & \textrm{if}\ n > 1\end{cases}" alt="Lucas sequence recurrence relation"> --> + +```math +L_n = \begin{cases}2 & \textrm{if}\ n = 0\\1 & \textrm{if}\ n = 1\\L_{n-1} + L_{n-2} & \textrm{if}\ n > 1\end{cases} +``` + +<!-- <div class="equation" align="center" data-raw-text="L_n = \begin{cases}2 & \textrm{if}\ n = 0\\1 & \textrm{if}\ n = 1\\L_{n-1} + L_{n-2} & \textrm{if}\ n > 1\end{cases}" data-equation="eq:lucas_recurrence_relation"> + <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@bb29798906e119fcb2af99e94b60407a270c9b32/lib/node_modules/@stdlib/math/base/special/lucas/docs/img/equation_lucas_recurrence_relation.svg" alt="Lucas sequence recurrence relation"> + <br> +</div> --> + +<!-- </equation> --> + +</section> + +<!-- /.intro --> + +<section class="usage"> + +## Usage + +```javascript +var lucasf = require( '@stdlib/math/base/special/lucasf' ); +``` + +#### lucasf( n ) + +Computes the nth [Lucas number][lucas-number] in single-precision floating-point format. + +```javascript +var v = lucasf( 0 ); +// returns 2 + +v = lucasf( 1 ); +// returns 1 + +v = lucasf( 2 ); +// returns 3 + +v = lucasf( 3 ); +// returns 4 + +v = lucasf( 34 ); +// returns 12752043 +``` + +If `n > 34`, the function returns `NaN`, as larger [Lucas numbers][lucas-number] cannot be safely represented in [single-precision floating-point format][ieee754]. + +```javascript +var v = lucasf( 35 ); +// returns NaN +``` + +If not provided a nonnegative integer value, the function returns `NaN`. + +```javascript +var v = lucasf( 3.14 ); +// returns NaN + +v = lucasf( -1 ); +// returns NaN +``` + +If provided `NaN`, the function returns `NaN`. + +```javascript +var v = lucasf( NaN ); +// returns NaN +``` + +</section> + +<!-- /.usage --> + +<section class="notes"> + +</section> + +<!-- /.notes --> + +<section class="examples"> + +## Examples + +<!-- eslint no-undef: "error" --> + +```javascript +var lucasf = require( '@stdlib/math/base/special/lucasf' ); + +var v; +var i; + +for ( i = 0; i < 35; i++ ) { + v = lucasf( i ); + console.log( v ); +} +``` + +</section> + +<!-- /.examples --> + +<!-- C interface documentation. --> + +* * * + +<section class="c"> + +## C APIs + +<!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. --> + +<section class="intro"> + +</section> + +<!-- /.intro --> + +<!-- C usage documentation. --> + +<section class="usage"> + +### Usage + +```c +#include "stdlib/math/base/special/lucasf.h" +``` + +#### stdlib_base_lucasf( n ) + +Computes the nth [Lucas number][lucas-number] in single-precision floating-point format. + +```c +float out = stdlib_base_lucasf( 0.0f ); +// returns 2.0f + +out = stdlib_base_lucasf( 1.0f ); +// returns 1.0f +``` + +The function accepts the following arguments: + +- **n**: `[in] int32_t` input value. + +```c +float stdlib_base_lucasf( const int32_t n ); +``` + +</section> + +<!-- /.usage --> + +<!-- C API usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. --> + +<section class="notes"> + +</section> + +<!-- /.notes --> + +<!-- C API usage examples. --> + +<section class="examples"> + +### Examples + +```c +#include "stdlib/math/base/special/lucasf.h" +#include <stdio.h> +#include <stdint.h> + +int main( void ) { + int32_t i; + float v; + + for ( i = 0; i < 35; i++ ) { + v = stdlib_base_lucasf( i ); + printf( "lucasf(%d) = %f\n", i, v ); + } +} +``` + +</section> + +<!-- /.examples --> + +</section> + +<!-- /.c --> + +<!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. --> + +<section class="related"> + +</section> + +<!-- /.related --> + +<!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. --> + +<section class="links"> + +[lucas-number]: https://en.wikipedia.org/wiki/Lucas_number + +[ieee754]: https://en.wikipedia.org/wiki/IEEE_754-1985 + +<!-- <related-links> --> + +<!-- </related-links> --> + +</section> + +<!-- /.links --> diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/binding.gyp b/lib/node_modules/@stdlib/math/base/special/lucasf/binding.gyp new file mode 100644 index 000000000000..ec3992233442 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/binding.gyp @@ -0,0 +1,170 @@ +# @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. + +# A `.gyp` file for building a Node.js native add-on. +# +# [1]: https://gyp.gsrc.io/docs/InputFormatReference.md +# [2]: https://gyp.gsrc.io/docs/UserDocumentation.md +{ + # List of files to include in this file: + 'includes': [ + './include.gypi', + ], + + # Define variables to be used throughout the configuration for all targets: + 'variables': { + # Target name should match the add-on export name: + 'addon_target_name%': 'addon', + + # Set variables based on the host OS: + 'conditions': [ + [ + 'OS=="win"', + { + # Define the object file suffix: + 'obj': 'obj', + }, + { + # Define the object file suffix: + 'obj': 'o', + } + ], # end condition (OS=="win") + ], # end conditions + }, # end variables + + # Define compile targets: + 'targets': [ + + # Target to generate an add-on: + { + # The target name should match the add-on export name: + 'target_name': '<(addon_target_name)', + + # Define dependencies: + 'dependencies': [], + + # Define directories which contain relevant include headers: + 'include_dirs': [ + # Local include directory: + '<@(include_dirs)', + ], + + # List of source files: + 'sources': [ + '<@(src_files)', + ], + + # Settings which should be applied when a target's object files are used as linker input: + 'link_settings': { + # Define libraries: + 'libraries': [ + '<@(libraries)', + ], + + # Define library directories: + 'library_dirs': [ + '<@(library_dirs)', + ], + }, + + # C/C++ compiler flags: + 'cflags': [ + # Enable commonly used warning options: + '-Wall', + + # Aggressive optimization: + '-O3', + ], + + # C specific compiler flags: + 'cflags_c': [ + # Specify the C standard to which a program is expected to conform: + '-std=c99', + ], + + # C++ specific compiler flags: + 'cflags_cpp': [ + # Specify the C++ standard to which a program is expected to conform: + '-std=c++11', + ], + + # Linker flags: + 'ldflags': [], + + # Apply conditions based on the host OS: + 'conditions': [ + [ + 'OS=="mac"', + { + # Linker flags: + 'ldflags': [ + '-undefined dynamic_lookup', + '-Wl,-no-pie', + '-Wl,-search_paths_first', + ], + }, + ], # end condition (OS=="mac") + [ + 'OS!="win"', + { + # C/C++ flags: + 'cflags': [ + # Generate platform-independent code: + '-fPIC', + ], + }, + ], # end condition (OS!="win") + ], # end conditions + }, # end target <(addon_target_name) + + # Target to copy a generated add-on to a standard location: + { + 'target_name': 'copy_addon', + + # Declare that the output of this target is not linked: + 'type': 'none', + + # Define dependencies: + 'dependencies': [ + # Require that the add-on be generated before building this target: + '<(addon_target_name)', + ], + + # Define a list of actions: + 'actions': [ + { + 'action_name': 'copy_addon', + 'message': 'Copying addon...', + + # Explicitly list the inputs in the command-line invocation below: + 'inputs': [], + + # Declare the expected outputs: + 'outputs': [ + '<(addon_output_dir)/<(addon_target_name).node', + ], + + # Define the command-line invocation: + 'action': [ + 'cp', + '<(PRODUCT_DIR)/<(addon_target_name).node', + '<(addon_output_dir)/<(addon_target_name).node', + ], + }, + ], # end actions + }, # end target copy_addon + ], # end targets +} diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/include.gypi b/lib/node_modules/@stdlib/math/base/special/lucasf/include.gypi new file mode 100644 index 000000000000..575cb043c0bf --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/include.gypi @@ -0,0 +1,53 @@ +# @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. + +# A GYP include file for building a Node.js native add-on. +# +# Main documentation: +# +# [1]: https://gyp.gsrc.io/docs/InputFormatReference.md +# [2]: https://gyp.gsrc.io/docs/UserDocumentation.md +{ + # Define variables to be used throughout the configuration for all targets: + 'variables': { + # Source directory: + 'src_dir': './src', + + # Include directories: + 'include_dirs': [ + '<!@(node -e "var arr = require(\'@stdlib/utils/library-manifest\')(\'./manifest.json\',{},{\'basedir\':process.cwd(),\'paths\':\'posix\'}).include; for ( var i = 0; i < arr.length; i++ ) { console.log( arr[ i ] ); }")', + ], + + # Add-on destination directory: + 'addon_output_dir': './src', + + # Source files: + 'src_files': [ + '<(src_dir)/addon.c', + '<!@(node -e "var arr = require(\'@stdlib/utils/library-manifest\')(\'./manifest.json\',{},{\'basedir\':process.cwd(),\'paths\':\'posix\'}).src; for ( var i = 0; i < arr.length; i++ ) { console.log( arr[ i ] ); }")', + ], + + # Library dependencies: + 'libraries': [ + '<!@(node -e "var arr = require(\'@stdlib/utils/library-manifest\')(\'./manifest.json\',{},{\'basedir\':process.cwd(),\'paths\':\'posix\'}).libraries; for ( var i = 0; i < arr.length; i++ ) { console.log( arr[ i ] ); }")', + ], + + # Library directories: + 'library_dirs': [ + '<!@(node -e "var arr = require(\'@stdlib/utils/library-manifest\')(\'./manifest.json\',{},{\'basedir\':process.cwd(),\'paths\':\'posix\'}).libpath; for ( var i = 0; i < arr.length; i++ ) { console.log( arr[ i ] ); }")', + ], + }, # end variables +} diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/manifest.json b/lib/node_modules/@stdlib/math/base/special/lucasf/manifest.json new file mode 100644 index 000000000000..6bfc690068b2 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/manifest.json @@ -0,0 +1,67 @@ +{ + "options": { + "task": "build" + }, + "fields": [ + { + "field": "src", + "resolve": true, + "relative": true + }, + { + "field": "include", + "resolve": true, + "relative": true + }, + { + "field": "libraries", + "resolve": false, + "relative": false + }, + { + "field": "libpath", + "resolve": true, + "relative": false + } + ], + "confs": [ + { + "task": "build", + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [ + "@stdlib/math/base/napi/unary" + ] + }, + { + "task": "benchmark", + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [] + }, + { + "task": "examples", + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [], + "libpath": [], + "dependencies": [] + } + ] +} diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/package.json b/lib/node_modules/@stdlib/math/base/special/lucasf/package.json new file mode 100644 index 000000000000..499d2470f300 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/package.json @@ -0,0 +1,69 @@ +{ + "name": "@stdlib/math/base/special/lucasf", + "version": "0.0.0", + "description": "Compute the nth Lucas number in single-precision floating-point format.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "gypfile": true, + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "include": "./include", + "lib": "./lib", + "src": "./src", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "stdmath", + "mathematics", + "math", + "special functions", + "special", + "function", + "fibonacci", + "lucas", + "fib", + "number", + "integer", + "sequences" + ] +} From 8d1b547ecfff2236e496805edf50004500348fe7 Mon Sep 17 00:00:00 2001 From: aayush0325 <aayush25khanna@gmail,com> Date: Thu, 5 Dec 2024 16:10:12 +0530 Subject: [PATCH 02/18] feat: basic files added --- .../math/base/special/lucasf/README.md | 4 +- .../include/stdlib/math/base/special/lucasf.h | 40 ++++++++++ .../math/base/special/lucasf/src/Makefile | 70 ++++++++++++++++ .../math/base/special/lucasf/src/addon.c | 22 +++++ .../math/base/special/lucasf/src/main.c | 80 +++++++++++++++++++ 5 files changed, 214 insertions(+), 2 deletions(-) create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/src/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/src/addon.c create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md index b9bbe3dd3009..d9c982df2907 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md @@ -174,10 +174,10 @@ for ( i = 0; i < 35; i++ ) { Computes the nth [Lucas number][lucas-number] in single-precision floating-point format. ```c -float out = stdlib_base_lucasf( 0.0f ); +float out = stdlib_base_lucasf( 0 ); // returns 2.0f -out = stdlib_base_lucasf( 1.0f ); +out = stdlib_base_lucasf( 1 ); // returns 1.0f ``` diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h b/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h new file mode 100644 index 000000000000..efdb1e90e4b4 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h @@ -0,0 +1,40 @@ +/** +* @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_MATH_BASE_SPECIAL_LUCASF_H +#define STDLIB_MATH_BASE_SPECIAL_LUCASF_H + +#include <stdint.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 + +/** +* Computes the nth Lucas number in single-precision floating-point format. +*/ +float stdlib_base_lucas( const int32_t n ); + +#ifdef __cplusplus +} +#endif + +#endif // !STDLIB_MATH_BASE_SPECIAL_LUCASF_H diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/src/Makefile b/lib/node_modules/@stdlib/math/base/special/lucasf/src/Makefile new file mode 100644 index 000000000000..904c7dc4bd7a --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/src/Makefile @@ -0,0 +1,70 @@ +#/ +# @license Apache-2.0 +# +# Copyright (c) 2023 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. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +endif +endif +endif + + +# RULES # + +#/ +# Removes generated files for building an add-on. +# +# @example +# make clean-addon +#/ +clean-addon: + $(QUIET) -rm -f *.o *.node + +.PHONY: clean-addon + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: clean-addon + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/src/addon.c b/lib/node_modules/@stdlib/math/base/special/lucasf/src/addon.c new file mode 100644 index 000000000000..4b5da1249404 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/src/addon.c @@ -0,0 +1,22 @@ +/** +* @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. +*/ + +#include "stdlib/math/base/special/lucasf.h" +#include "stdlib/math/base/napi/unary.h" + +STDLIB_MATH_BASE_NAPI_MODULE_I_F( stdlib_base_lucasf ) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c new file mode 100644 index 000000000000..922f5fcb2a9a --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c @@ -0,0 +1,80 @@ +/** +* @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. +*/ + +#include "stdlib/math/base/special/lucasf.h" + +static const int32_t STDLIB_CONSTANT_FLOAT32_MAX_SAFE_NTH_LUCAS = 34; + +static const int32_t lucas_value[ 35 ] = { + 2, + 1, + 3, + 4, + 7, + 11, + 18, + 29, + 47, + 76, + 123, + 199, + 322, + 521, + 843, + 1364, + 2207, + 3571, + 5778, + 9349, + 15127, + 24476, + 39603, + 64079, + 103682, + 167761, + 271443, + 439204, + 710647, + 1149851, + 1860498, + 3010349, + 4870847, + 7881196, + 12752043 +}; + +/** +* Computes the nth Lucas number in single-precision floating-point format. +* +* @param n input value +* @return output value +* +* @example +* float out = stdlib_base_lucasf( 1 ); +* // returns 1.0f +* +* @example +* float out = stdlib_base_lucasf( -1 ); +* // returns NaN +*/ +float stdlib_base_lucasf( const int32_t n ) { + if ( n < 0 || n > STDLIB_CONSTANT_FLOAT32_MAX_SAFE_NTH_LUCAS ) { + return 0.0f / 0.0f; // NaN + } + return lucas_value[ n ]; +} From 26c72a12af57a767f5b6e6520f06281ec62f9be2 Mon Sep 17 00:00:00 2001 From: aayush0325 <aayush25khanna@gmail,com> Date: Thu, 5 Dec 2024 16:36:29 +0530 Subject: [PATCH 03/18] feat: tests added --- .../include/stdlib/math/base/special/lucasf.h | 2 +- .../math/base/special/lucasf/lib/index.js | 58 ++++++++++++ .../math/base/special/lucasf/lib/lucas.json | 1 + .../math/base/special/lucasf/lib/main.js | 92 +++++++++++++++++++ .../math/base/special/lucasf/lib/native.js | 74 +++++++++++++++ .../math/base/special/lucasf/src/Makefile | 2 +- .../math/base/special/lucasf/src/addon.c | 1 + .../math/base/special/lucasf/test/test.js | 92 +++++++++++++++++++ .../base/special/lucasf/test/test.native.js | 79 ++++++++++++++++ 9 files changed, 399 insertions(+), 2 deletions(-) create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/lib/index.js create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/lib/lucas.json create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/test/test.js create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/test/test.native.js diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h b/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h index efdb1e90e4b4..13b00041d64d 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h @@ -31,7 +31,7 @@ extern "C" { /** * Computes the nth Lucas number in single-precision floating-point format. */ -float stdlib_base_lucas( const int32_t n ); +float stdlib_base_lucasf( const int32_t n ); #ifdef __cplusplus } diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/index.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/index.js new file mode 100644 index 000000000000..cc55a0cb05d1 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/index.js @@ -0,0 +1,58 @@ +/** +* @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. +*/ + +'use strict'; + +/** +* Compute the nth Lucas number in single-precision floating-point format. +* +* @module @stdlib/math/base/special/lucasf +* +* @example +* var lucasf = require( '@stdlib/math/base/special/lucasf' ); +* +* var y = lucasf( 0 ); +* // returns 2 +* +* y = lucasf( 1 ); +* // returns 1 +* +* y = lucasf( 2 ); +* // returns 3 +* +* y = lucasf( 3 ); +* // returns 4 +* +* y = lucasf( 4 ); +* // returns 7 +* +* y = lucasf( 5 ); +* // returns 11 +* +* y = lucasf( 6 ); +* // returns 18 +*/ + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/lucas.json b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/lucas.json new file mode 100644 index 000000000000..adace3c18e52 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/lucas.json @@ -0,0 +1 @@ +[2,1,3,4,7,11,18,29,47,76,123,199,322,521,843,1364,2207,3571,5778,9349,15127,24476,39603,64079,103682,167761,271443,439204,710647,1149851,1860498,3010349,4870847,7881196,12752043] diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js new file mode 100644 index 000000000000..f80a4ab111c0 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js @@ -0,0 +1,92 @@ +/** +* @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. +*/ + +'use strict'; + +// MODULES // + +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var isIntegerf = require( '@stdlib/math/base/assert/is-integerf' ); +var MAX_LUCAS = 34; +var LUCAS = require( './lucas.json' ); + + +// MAIN // + +/** +* Computes the nth Lucas number in single-precision floating-point format. +* +* @param {NonNegativeInteger} n - the Lucas number to compute +* @returns {NonNegativeInteger} Lucas number +* +* @example +* var y = lucasf( 0 ); +* // returns 2 +* +* @example +* var y = lucasf( 1 ); +* // returns 1 +* +* @example +* var y = lucasf( 2 ); +* // returns 3 +* +* @example +* var y = lucasf( 3 ); +* // returns 4 +* +* @example +* var y = lucasf( 4 ); +* // returns 7 +* +* @example +* var y = lucasf( 5 ); +* // returns 11 +* +* @example +* var y = lucasf( 6 ); +* // returns 18 +* +* @example +* var y = lucasf( NaN ); +* // returns NaN +* +* @example +* var y = lucasf( 3.14 ); +* // returns NaN +* +* @example +* var y = lucasf( -1.0 ); +* // returns NaN +*/ +function lucasf( n ) { + if ( + isnanf( n ) || + isIntegerf( n ) === false || + n < 0 || + n > MAX_LUCAS + ) { + return NaN; + } + return LUCAS[ n ]; +} + + +// EXPORTS // + +module.exports = lucasf; diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js new file mode 100644 index 000000000000..bcb11fe34420 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js @@ -0,0 +1,74 @@ +/** +* @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. +*/ + +'use strict'; + +// MODULES // + +var addon = require( './../src/addon.node' ); + + +// MAIN // + +/** +* Computes the nth Lucas number in single-precision floating-point format. +* +* @private +* @param {NonNegativeInteger} n - the Lucas number to compute +* @returns {NonNegativeInteger} Lucas number +* +* @example +* var y = lucasf( 0 ); +* // returns 2 +* +* @example +* var y = lucasf( 1 ); +* // returns 1 +* +* @example +* var y = lucasf( 2 ); +* // returns 3 +* +* @example +* var y = lucasf( 3 ); +* // returns 4 +* +* @example +* var y = lucasf( 4 ); +* // returns 7 +* +* @example +* var y = lucasf( 5 ); +* // returns 11 +* +* @example +* var y = lucasf( 6 ); +* // returns 18 +* +* @example +* var y = lucasf( -1.0 ); +* // returns NaN +*/ +function lucasf( n ) { + return addon( n ); +} + + +// EXPORTS // + +module.exports = lucasf; diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/src/Makefile b/lib/node_modules/@stdlib/math/base/special/lucasf/src/Makefile index 904c7dc4bd7a..bcf18aa46655 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/src/Makefile +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/src/Makefile @@ -1,7 +1,7 @@ #/ # @license Apache-2.0 # -# Copyright (c) 2023 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. diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/src/addon.c b/lib/node_modules/@stdlib/math/base/special/lucasf/src/addon.c index 4b5da1249404..feca2cce2137 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/src/addon.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/src/addon.c @@ -19,4 +19,5 @@ #include "stdlib/math/base/special/lucasf.h" #include "stdlib/math/base/napi/unary.h" +// cppcheck-suppress shadowFunction STDLIB_MATH_BASE_NAPI_MODULE_I_F( stdlib_base_lucasf ) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.js b/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.js new file mode 100644 index 000000000000..c8765a8ffb61 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.js @@ -0,0 +1,92 @@ +/** +* @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. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var PINF = require( '@stdlib/constants/float32/pinf' ); +var lucasf = require( './../lib' ); + + +// FIXTURES // + +// For reference values, see https://oeis.org/A000032: +var LUCAS = require( './../lib/lucas.json' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof lucasf, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'if provided a negative number, the function returns `NaN`', function test( t ) { + var v; + var i; + + t.strictEqual( isnanf( lucasf( -3.14 ) ), true, 'returns NaN' ); + + for ( i = -1; i > -100; i-- ) { + v = lucasf( i ); + t.strictEqual( isnanf( v ), true, 'returns NaN when provided ' + i ); + } + t.end(); +}); + +tape( 'if provided positive infinity, the function returns `NaN`', function test( t ) { + var v = lucasf( PINF ); + t.strictEqual( isnanf( v ), true, 'returns NaN when provided +infinity' ); + t.end(); +}); + +tape( 'if provided `NaN`, the function returns `NaN`', function test( t ) { + var v = lucasf( NaN ); + t.strictEqual( isnanf( v ), true, 'returns NaN when provided a NaN' ); + t.end(); +}); + +tape( 'if provided a non-integer, the function returns `NaN`', function test( t ) { + var v = lucasf( 3.14 ); + t.strictEqual( isnanf( v ), true, 'returns NaN' ); + t.end(); +}); + +tape( 'the function returns the nth Lucas number', function test( t ) { + var v; + var i; + for ( i = 0; i < 35; i++ ) { + v = lucasf( i ); + t.strictEqual( v, LUCAS[ i ], 'returns the '+i+'th Lucas number' ); + } + t.end(); +}); + +tape( 'if provided nonnegative integers greater than `34`, the function returns `NaN`', function test( t ) { + var i; + var v; + for ( i = 35; i < 500; i++ ) { + v = lucasf( i ); + t.strictEqual( isnanf( v ), true, 'returns NaN when provided ' + i ); + } + t.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.native.js new file mode 100644 index 000000000000..d39d7bf62bbf --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.native.js @@ -0,0 +1,79 @@ +/** +* @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. +*/ + +'use strict'; + +// MODULES // + +var resolve = require( 'path' ).resolve; +var tape = require( 'tape' ); +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var tryRequire = require( '@stdlib/utils/try-require' ); + + +// FIXTURES // + +var LUCAS = require( './../lib/lucas.json' ); + + +// VARIABLES // + +var lucasf = tryRequire( resolve( __dirname, './../lib/native.js' ) ); +var opts = { + 'skip': ( lucasf instanceof Error ) +}; + + +// TESTS // + +tape( 'main export is a function', opts, function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof lucasf, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'if provided a negative number, the function returns `NaN`', opts, function test( t ) { + var v; + var i; + + for ( i = -1; i > -100; i-- ) { + v = lucasf( i ); + t.strictEqual( isnanf( v ), true, 'returns NaN when provided ' + i ); + } + t.end(); +}); + +tape( 'the function returns the nth Lucas number', opts, function test( t ) { + var v; + var i; + for ( i = 0; i < 35; i++ ) { + v = lucasf( i ); + t.strictEqual( v, LUCAS[ i ], 'returns the '+i+'th Lucas number' ); + } + t.end(); +}); + +tape( 'if provided nonnegative integers less than `34`, the function returns `NaN`', opts, function test( t ) { + var i; + var v; + for ( i = 35; i < 500; i++ ) { + v = lucasf( i ); + t.strictEqual( isnanf( v ), true, 'returns NaN when provided ' + i ); + } + t.end(); +}); From 12a3f668c9e78cfbd496456ede7679072689475d Mon Sep 17 00:00:00 2001 From: aayush0325 <aayush25khanna@gmail,com> Date: Thu, 5 Dec 2024 17:41:52 +0530 Subject: [PATCH 04/18] feat: add math/base/special/lucasf --- .../special/lucasf/benchmark/benchmark.js | 282 ++++++++++++++++++ .../lucasf/benchmark/benchmark.native.js | 61 ++++ .../base/special/lucasf/benchmark/c/Makefile | 127 ++++++++ .../special/lucasf/benchmark/c/benchmark.c | 148 +++++++++ .../lucasf/benchmark/c/native/Makefile | 146 +++++++++ .../lucasf/benchmark/c/native/benchmark.c | 133 +++++++++ .../equation_lucas_recurrence_relation.svg | 78 +++++ .../docs/img/equation_lucas_sequence.svg | 71 +++++ .../math/base/special/lucasf/docs/repl.txt | 49 +++ .../base/special/lucasf/docs/types/index.d.ts | 78 +++++ .../base/special/lucasf/docs/types/test.ts | 44 +++ .../base/special/lucasf/examples/c/Makefile | 146 +++++++++ .../base/special/lucasf/examples/c/example.c | 31 ++ .../base/special/lucasf/examples/index.js | 29 ++ 14 files changed, 1423 insertions(+) create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/benchmark.c create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/docs/img/equation_lucas_recurrence_relation.svg create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/docs/img/equation_lucas_sequence.svg create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/example.c create mode 100644 lib/node_modules/@stdlib/math/base/special/lucasf/examples/index.js diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js new file mode 100644 index 000000000000..1f9ce236dac2 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js @@ -0,0 +1,282 @@ +/** +* @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. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var randu = require( '@stdlib/random/base/randu' ); +var floorf = require( '@stdlib/math/base/special/floorf' ); +var roundf = require( '@stdlib/math/base/special/roundf' ); +var pow = require( '@stdlib/math/base/special/pow' ); +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var PHI = require( '@stdlib/constants/float32/phi' ); +var pkg = require( './../package.json' ).name; +var LUCAS = require( './../lib/lucas.json' ); +var lucasf = require( './../lib' ); + + +// MAIN // + +bench( pkg, function benchmark( b ) { + var x; + var y; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = floorf( randu() * 35.0 ); + y = lucasf( x ); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( pkg+'::analytic', function benchmark( b ) { + var x; + var y; + var i; + + function lucasf( n ) { + return roundf( pow( PHI, n ) ); + } + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = floorf( randu() * 35.0 ); + y = lucasf( x ); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( pkg+'::table', function benchmark( b ) { + var x; + var y; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = floorf( randu() * 35.0 ); + y = LUCAS[ x ]; + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( pkg+'::naive_recursion', function benchmark( b ) { + var x; + var y; + var i; + + function lucasf( n ) { + if ( n === 0 ) { + return 2; + } + if ( n === 1 ) { + return 1; + } + return lucasf( n-1 ) + lucasf( n-2 ); + } + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = floorf( randu() * 40.0 ); // limit upper bound + y = lucasf( x ); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( pkg+'::recursion_memoized', function benchmark( b ) { + var arr; + var N; + var x; + var y; + var i; + + arr = new Array( 35 ); + arr[ 0 ] = 2; + arr[ 1 ] = 1; + N = 1; + + function lucasf( n ) { + if ( n <= N ) { + return arr[ n ]; + } + arr[ n ] = lucasf( n-1 ) + lucasf( n-2 ); + return arr[ n ]; + } + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = floorf( randu() * 40.0 ); // limit upper bound + y = lucasf( x ); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( pkg+'::naive_iterative', function benchmark( b ) { + var x; + var y; + var i; + + function lucasf( n ) { + var arr; + var i; + + arr = new Array( n+1 ); + arr[ 0 ] = 2; + arr[ 1 ] = 1; + for ( i = 2; i <= n; i++ ) { + arr[ i ] = arr[ i-1 ] + arr[ i-2 ]; + } + return arr[ n ]; + } + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = floorf( randu() * 35.0 ); + y = lucasf( x ); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( pkg+'::iterative', function benchmark( b ) { + var x; + var y; + var i; + + function lucasf( n ) { + var a; + var b; + var c; + var i; + + a = 2; + if ( n === 0 ) { + return a; + } + b = 1; + for ( i = 2; i <= n; i++ ) { + c = a + b; + a = b; + b = c; + } + return b; + } + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = floorf( randu() * 35.0 ); + y = lucasf( x ); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( pkg+'::iterative_memoized', function benchmark( b ) { + var arr; + var N; + var x; + var y; + var i; + + arr = new Array( 35 ); + arr[ 0 ] = 2; + arr[ 1 ] = 1; + N = 1; + + function lucasf( n ) { + var i; + if ( n > N ) { + for ( i = N+1; i <= n; i++ ) { + arr[ i ] = arr[ i-1 ] + arr[ i-2 ]; + } + N = n; + } + return arr[ n ]; + } + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = floorf( randu() * 35.0 ); + y = lucasf( x ); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js new file mode 100644 index 000000000000..5223a1532863 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js @@ -0,0 +1,61 @@ +/** +* @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. +*/ + +'use strict'; + +// MODULES // + +var resolve = require( 'path' ).resolve; +var bench = require( '@stdlib/bench' ); +var randu = require( '@stdlib/random/base/randu' ); +var floorf = require( '@stdlib/math/base/special/floorf' ); +var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); +var tryRequire = require( '@stdlib/utils/try-require' ); +var pkg = require( './../package.json' ).name; + + +// VARIABLES // + +var lucasf = tryRequire( resolve( __dirname, './../lib/native.js' ) ); +var opts = { + 'skip': ( lucasf instanceof Error ) +}; + + +// MAIN // + +bench( pkg+'::native', opts, function benchmark( b ) { + var x; + var y; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = floorf( randu() * 34.0 ); + y = lucasf( x ); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnanf( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/Makefile b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/Makefile new file mode 100644 index 000000000000..e85bfcccdd04 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/Makefile @@ -0,0 +1,127 @@ +#/ +# @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. +#/ + + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +endif +endif +endif + +# Define the program used for compiling C source files: +ifdef C_COMPILER + CC := $(C_COMPILER) +else + CC := gcc +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -Wall \ + -pedantic + +# Determine whether to generate position independent code ([1][1], [2][2]). +# +# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options +# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option +ifeq ($(OS), WINNT) + fPIC ?= +else + fPIC ?= -fPIC +endif + +# List of C targets: +c_targets := benchmark.out + + +# RULES # + +#/ +# Compiles C source files. +# +# @param {string} [C_COMPILER] - C compiler +# @param {string} [CFLAGS] - C compiler flags +# @param {(string|void)} [fPIC] - compiler flag indicating whether to generate position independent code +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler +# @param {string} CFLAGS - C compiler flags +# @param {(string|void)} fPIC - compiler flag indicating whether to generate position independent code +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) $(fPIC) -o $@ $< -lm + +#/ +# Runs compiled benchmarks. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/benchmark.c b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/benchmark.c new file mode 100644 index 000000000000..fddab3e54d21 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/benchmark.c @@ -0,0 +1,148 @@ +/** +* @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. +*/ + +#include <stdlib.h> +#include <stdio.h> +#include <math.h> +#include <time.h> +#include <sys/time.h> + +#define NAME "lucasf::naive_recursion" +#define ITERATIONS 100 +#define REPEATS 3 + +/** +* Prints the TAP version. +*/ +static void print_version( void ) { + printf( "TAP version 13\n" ); +} + +/** +* Prints the TAP summary. +* +* @param total total number of tests +* @param passing total number of passing tests +*/ +static void print_summary( int total, int passing ) { + printf( "#\n" ); + printf( "1..%d\n", total ); // TAP plan + printf( "# total %d\n", total ); + printf( "# pass %d\n", passing ); + printf( "#\n" ); + printf( "# ok\n" ); +} + +/** +* Prints benchmarks results. +* +* @param elapsed elapsed time in seconds +*/ +static void print_results( double elapsed ) { + double rate = (double)ITERATIONS / elapsed; + printf( " ---\n" ); + printf( " iterations: %d\n", ITERATIONS ); + printf( " elapsed: %0.9f\n", elapsed ); + printf( " rate: %0.9f\n", rate ); + printf( " ...\n" ); +} + +/** +* Returns a clock time. +* +* @return clock time +*/ +static double tic( void ) { + struct timeval now; + gettimeofday( &now, NULL ); + return (double)now.tv_sec + (double)now.tv_usec/1.0e6; +} + +/** +* Generates a random number on the interval [0,1). +* +* @return random number +*/ +static float rand_float( void ) { + int r = rand(); + return (float)r / ( (float)RAND_MAX + 1.0f ); +} + +/** +* Computes the nth Lucas number in single-precision floating-point format. +* +* @param n Lucas number to compute +* @return Lucas number +*/ +int lucasf( int n ) { + if ( n == 0 ) { + return 2; + } + if ( n == 1 ) { + return 1; + } + return lucasf( n-1 ) + lucasf( n-2 ); +} + +/** +* Runs a benchmark. +* +* @return elapsed time in seconds +*/ +static double benchmark( void ) { + double elapsed; + double t; + int x; + int y; + int i; + + t = tic(); + for ( i = 0; i < ITERATIONS; i++ ) { + x = (int)floorf( 30.0f * rand_float() ); + y = lucasf( x ); + if ( y < 0 ) { + printf( "should return a nonnegative integer\n" ); + break; + } + } + elapsed = tic() - t; + if ( y < 0 ) { + printf( "should return a nonnegative integer\n" ); + } + return elapsed; +} + +/** +* Main execution sequence. +*/ +int main( void ) { + double elapsed; + int i; + + // Use the current time to seed the random number generator: + srand( time( NULL ) ); + + print_version(); + for ( i = 0; i < REPEATS; i++ ) { + printf( "# c::%s\n", NAME ); + elapsed = benchmark(); + print_results( elapsed ); + printf( "ok %d benchmark finished\n", i+1 ); + } + print_summary( REPEATS, REPEATS ); +} diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/Makefile b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/Makefile new file mode 100644 index 000000000000..f69e9da2b4d3 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/Makefile @@ -0,0 +1,146 @@ +#/ +# @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. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +endif +endif +endif + +# Define the program used for compiling C source files: +ifdef C_COMPILER + CC := $(C_COMPILER) +else + CC := gcc +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -Wall \ + -pedantic + +# Determine whether to generate position independent code ([1][1], [2][2]). +# +# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options +# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option +ifeq ($(OS), WINNT) + fPIC ?= +else + fPIC ?= -fPIC +endif + +# List of includes (e.g., `-I /foo/bar -I /beep/boop/include`): +INCLUDE ?= + +# List of source files: +SOURCE_FILES ?= + +# List of libraries (e.g., `-lopenblas -lpthread`): +LIBRARIES ?= + +# List of library paths (e.g., `-L /foo/bar -L /beep/boop`): +LIBPATH ?= + +# List of C targets: +c_targets := benchmark.out + + +# RULES # + +#/ +# Compiles source files. +# +# @param {string} [C_COMPILER] - C compiler (e.g., `gcc`) +# @param {string} [CFLAGS] - C compiler options +# @param {(string|void)} [fPIC] - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`) +# @param {string} [SOURCE_FILES] - list of source files +# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`) +# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`) +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler (e.g., `gcc`) +# @param {string} CFLAGS - C compiler options +# @param {(string|void)} fPIC - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} INCLUDE - list of includes (e.g., `-I /foo/bar`) +# @param {string} SOURCE_FILES - list of source files +# @param {string} LIBPATH - list of library paths (e.g., `-L /foo/bar`) +# @param {string} LIBRARIES - list of libraries (e.g., `-lopenblas`) +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) $(fPIC) $(INCLUDE) -o $@ $(SOURCE_FILES) $< $(LIBPATH) -lm $(LIBRARIES) + +#/ +# Runs compiled benchmarks. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c new file mode 100644 index 000000000000..953d226f1e1f --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c @@ -0,0 +1,133 @@ +/** +* @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. +*/ + +#include "stdlib/math/base/special/lucasf.h" +#include <stdlib.h> +#include <stdio.h> +#include <math.h> +#include <time.h> +#include <sys/time.h> + +#define NAME "lucas" +#define ITERATIONS 100 +#define REPEATS 3 + +/** +* Prints the TAP version. +*/ +void print_version() { + printf( "TAP version 13\n" ); +} + +/** +* Prints the TAP summary. +* +* @param total total number of tests +* @param passing total number of passing tests +*/ +static void print_summary( int total, int passing ) { + printf( "#\n" ); + printf( "1..%d\n", total ); // TAP plan + printf( "# total %d\n", total ); + printf( "# pass %d\n", passing ); + printf( "#\n" ); + printf( "# ok\n" ); +} + +/** +* Prints benchmarks results. +* +* @param elapsed elapsed time in seconds +*/ +static void print_results( double elapsed ) { + double rate = (double)ITERATIONS / elapsed; + printf( " ---\n" ); + printf( " iterations: %d\n", ITERATIONS ); + printf( " elapsed: %0.9f\n", elapsed ); + printf( " rate: %0.9f\n", rate ); + printf( " ...\n" ); +} + +/** +* Returns a clock time. +* +* @return clock time +*/ +static double tic( void ) { + struct timeval now; + gettimeofday( &now, NULL ); + return (double)now.tv_sec + (double)now.tv_usec/1.0e6; +} + +/** +* Generates a random number on the interval [0,1). +* +* @return random number +*/ +static float rand_float( void ) { + int r = rand(); + return (float)r / ( (float)RAND_MAX + 1.0f ); +} + +/** +* Runs a benchmark. +* +* @return elapsed time in seconds +*/ +static double benchmark( void ) { + double elapsed; + int32_t x; + double t; + float y; + int i; + + t = tic(); + for ( i = 0; i < ITERATIONS; i++ ) { + x = (int32_t)( 34.0f * rand_double() ); + y = stdlib_base_lucasf( x ); + if ( y != y ) { + printf( "should not return NaN\n" ); + break; + } + } + elapsed = tic() - t; + if ( y != y ) { + printf( "should not return NaN\n" ); + } + return elapsed; +} + +/** +* Main execution sequence. +*/ +int main( void ) { + double elapsed; + int i; + + // Use the current time to seed the random number generator: + srand( time( NULL ) ); + + print_version(); + for ( i = 0; i < REPEATS; i++ ) { + printf( "# c::native::%s\n", NAME ); + elapsed = benchmark(); + print_results( elapsed ); + printf( "ok %d benchmark finished\n", i+1 ); + } + print_summary( REPEATS, REPEATS ); +} diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/img/equation_lucas_recurrence_relation.svg b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/img/equation_lucas_recurrence_relation.svg new file mode 100644 index 000000000000..e2c3d6ada501 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/img/equation_lucas_recurrence_relation.svg @@ -0,0 +1,78 @@ +<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="31.279ex" height="8.509ex" style="vertical-align: -3.671ex;" viewBox="0 -2083 13467.2 3663.7" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" aria-labelledby="MathJax-SVG-1-Title"> +<title id="MathJax-SVG-1-Title">upper L Subscript n Baseline equals StartLayout Enlarged left-brace 1st Row 1st Column 2 2nd Column if n equals 0 2nd Row 1st Column 1 2nd Column if n equals 1 3rd Row 1st Column upper L Subscript n minus 1 Baseline plus upper L Subscript n minus 2 Baseline 2nd Column if n greater-than 1 EndLayout</title> +<defs aria-hidden="true"> +<path stroke-width="1" id="E1-MJMATHI-4C" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z"></path> +<path stroke-width="1" id="E1-MJMATHI-6E" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path> +<path stroke-width="1" id="E1-MJMAIN-3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path> +<path stroke-width="1" id="E1-MJMAIN-7B" d="M434 -231Q434 -244 428 -250H410Q281 -250 230 -184Q225 -177 222 -172T217 -161T213 -148T211 -133T210 -111T209 -84T209 -47T209 0Q209 21 209 53Q208 142 204 153Q203 154 203 155Q189 191 153 211T82 231Q71 231 68 234T65 250T68 266T82 269Q116 269 152 289T203 345Q208 356 208 377T209 529V579Q209 634 215 656T244 698Q270 724 324 740Q361 748 377 749Q379 749 390 749T408 750H428Q434 744 434 732Q434 719 431 716Q429 713 415 713Q362 710 332 689T296 647Q291 634 291 499V417Q291 370 288 353T271 314Q240 271 184 255L170 250L184 245Q202 239 220 230T262 196T290 137Q291 131 291 1Q291 -134 296 -147Q306 -174 339 -192T415 -213Q429 -213 431 -216Q434 -219 434 -231Z"></path> +<path stroke-width="1" id="E1-MJMAIN-32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path> +<path stroke-width="1" id="E1-MJMAIN-69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z"></path> +<path stroke-width="1" id="E1-MJMAIN-66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z"></path> +<path stroke-width="1" id="E1-MJMAIN-30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path> +<path stroke-width="1" id="E1-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path> +<path stroke-width="1" id="E1-MJMAIN-2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path> +<path stroke-width="1" id="E1-MJMAIN-2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z"></path> +<path stroke-width="1" id="E1-MJMAIN-3E" d="M84 520Q84 528 88 533T96 539L99 540Q106 540 253 471T544 334L687 265Q694 260 694 250T687 235Q685 233 395 96L107 -40H101Q83 -38 83 -20Q83 -19 83 -17Q82 -10 98 -1Q117 9 248 71Q326 108 378 132L626 250L378 368Q90 504 86 509Q84 513 84 520Z"></path> +<path stroke-width="1" id="E1-MJSZ4-23A7" d="M712 899L718 893V876V865Q718 854 704 846Q627 793 577 710T510 525Q510 524 509 521Q505 493 504 349Q504 345 504 334Q504 277 504 240Q504 -2 503 -4Q502 -8 494 -9T444 -10Q392 -10 390 -9Q387 -8 386 -5Q384 5 384 230Q384 262 384 312T383 382Q383 481 392 535T434 656Q510 806 664 892L677 899H712Z"></path> +<path stroke-width="1" id="E1-MJSZ4-23A9" d="M718 -893L712 -899H677L666 -893Q542 -825 468 -714T385 -476Q384 -466 384 -282Q384 3 385 5L389 9Q392 10 444 10Q486 10 494 9T503 4Q504 2 504 -239V-310V-366Q504 -470 508 -513T530 -609Q546 -657 569 -698T617 -767T661 -812T699 -843T717 -856T718 -876V-893Z"></path> +<path stroke-width="1" id="E1-MJSZ4-23A8" d="M389 1159Q391 1160 455 1160Q496 1160 498 1159Q501 1158 502 1155Q504 1145 504 924Q504 691 503 682Q494 549 425 439T243 259L229 250L243 241Q349 175 421 66T503 -182Q504 -191 504 -424Q504 -600 504 -629T499 -659H498Q496 -660 444 -660T390 -659Q387 -658 386 -655Q384 -645 384 -425V-282Q384 -176 377 -116T342 10Q325 54 301 92T255 155T214 196T183 222T171 232Q170 233 170 250T171 268Q171 269 191 284T240 331T300 407T354 524T383 679Q384 691 384 925Q384 1152 385 1155L389 1159Z"></path> +</defs> +<g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)" aria-hidden="true"> + <use xlink:href="#E1-MJMATHI-4C" x="0" y="0"></use> + <use transform="scale(0.707)" xlink:href="#E1-MJMATHI-6E" x="963" y="-213"></use> + <use xlink:href="#E1-MJMAIN-3D" x="1483" y="0"></use> +<g transform="translate(2540,0)"> +<g transform="translate(0,1954)"> + <use xlink:href="#E1-MJSZ4-23A7" x="0" y="-900"></use> + <use xlink:href="#E1-MJSZ4-23A8" x="0" y="-1955"></use> + <use xlink:href="#E1-MJSZ4-23A9" x="0" y="-2509"></use> +</g> +<g transform="translate(1056,0)"> +<g transform="translate(-11,0)"> + <use xlink:href="#E1-MJMAIN-32" x="0" y="1154"></use> + <use xlink:href="#E1-MJMAIN-31" x="0" y="-46"></use> +<g transform="translate(0,-1246)"> + <use xlink:href="#E1-MJMATHI-4C" x="0" y="0"></use> +<g transform="translate(681,-150)"> + <use transform="scale(0.707)" xlink:href="#E1-MJMATHI-6E" x="0" y="0"></use> + <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-2212" x="600" y="0"></use> + <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-31" x="1379" y="0"></use> +</g> + <use xlink:href="#E1-MJMAIN-2B" x="2332" y="0"></use> +<g transform="translate(3333,0)"> + <use xlink:href="#E1-MJMATHI-4C" x="0" y="0"></use> +<g transform="translate(681,-150)"> + <use transform="scale(0.707)" xlink:href="#E1-MJMATHI-6E" x="0" y="0"></use> + <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-2212" x="600" y="0"></use> + <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-32" x="1379" y="0"></use> +</g> +</g> +</g> +</g> +<g transform="translate(6433,0)"> +<g transform="translate(0,1154)"> + <use xlink:href="#E1-MJMAIN-69"></use> + <use xlink:href="#E1-MJMAIN-66" x="278" y="0"></use> + <use xlink:href="#E1-MJMATHI-6E" x="835" y="0"></use> + <use xlink:href="#E1-MJMAIN-3D" x="1713" y="0"></use> + <use xlink:href="#E1-MJMAIN-30" x="2769" y="0"></use> +</g> +<g transform="translate(0,-46)"> + <use xlink:href="#E1-MJMAIN-69"></use> + <use xlink:href="#E1-MJMAIN-66" x="278" y="0"></use> + <use xlink:href="#E1-MJMATHI-6E" x="835" y="0"></use> + <use xlink:href="#E1-MJMAIN-3D" x="1713" y="0"></use> + <use xlink:href="#E1-MJMAIN-31" x="2769" y="0"></use> +</g> +<g transform="translate(0,-1246)"> + <use xlink:href="#E1-MJMAIN-69"></use> + <use xlink:href="#E1-MJMAIN-66" x="278" y="0"></use> + <use xlink:href="#E1-MJMATHI-6E" x="835" y="0"></use> + <use xlink:href="#E1-MJMAIN-3E" x="1713" y="0"></use> + <use xlink:href="#E1-MJMAIN-31" x="2769" y="0"></use> +</g> +</g> +</g> +</g> +</g> +</svg> \ No newline at end of file diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/img/equation_lucas_sequence.svg b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/img/equation_lucas_sequence.svg new file mode 100644 index 000000000000..244a9b9b00b9 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/img/equation_lucas_sequence.svg @@ -0,0 +1,71 @@ +<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="44.063ex" height="2.509ex" style="vertical-align: -0.671ex;" viewBox="0 -791.3 18971.7 1080.4" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" aria-labelledby="MathJax-SVG-1-Title"> +<title id="MathJax-SVG-1-Title">2 comma 1 comma 3 comma 4 comma 7 comma 11 comma 18 comma 29 comma 47 comma 76 comma 123 comma 199 comma 322 comma ellipsis</title> +<defs aria-hidden="true"> +<path stroke-width="1" id="E1-MJMAIN-32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path> +<path stroke-width="1" id="E1-MJMAIN-2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z"></path> +<path stroke-width="1" id="E1-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path> +<path stroke-width="1" id="E1-MJMAIN-33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z"></path> +<path stroke-width="1" id="E1-MJMAIN-34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z"></path> +<path stroke-width="1" id="E1-MJMAIN-37" d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z"></path> +<path stroke-width="1" id="E1-MJMAIN-38" d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z"></path> +<path stroke-width="1" id="E1-MJMAIN-39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z"></path> +<path stroke-width="1" id="E1-MJMAIN-36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z"></path> +<path stroke-width="1" id="E1-MJMAIN-2026" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60ZM525 60Q525 84 542 102T585 120Q609 120 627 104T646 61Q646 36 629 18T586 0T543 17T525 60ZM972 60Q972 84 989 102T1032 120Q1056 120 1074 104T1093 61Q1093 36 1076 18T1033 0T990 17T972 60Z"></path> +</defs> +<g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)" aria-hidden="true"> + <use xlink:href="#E1-MJMAIN-32" x="0" y="0"></use> + <use xlink:href="#E1-MJMAIN-2C" x="500" y="0"></use> + <use xlink:href="#E1-MJMAIN-31" x="945" y="0"></use> + <use xlink:href="#E1-MJMAIN-2C" x="1446" y="0"></use> + <use xlink:href="#E1-MJMAIN-33" x="1891" y="0"></use> + <use xlink:href="#E1-MJMAIN-2C" x="2391" y="0"></use> + <use xlink:href="#E1-MJMAIN-34" x="2836" y="0"></use> + <use xlink:href="#E1-MJMAIN-2C" x="3337" y="0"></use> + <use xlink:href="#E1-MJMAIN-37" x="3782" y="0"></use> + <use xlink:href="#E1-MJMAIN-2C" x="4283" y="0"></use> +<g transform="translate(4728,0)"> + <use xlink:href="#E1-MJMAIN-31"></use> + <use xlink:href="#E1-MJMAIN-31" x="500" y="0"></use> +</g> + <use xlink:href="#E1-MJMAIN-2C" x="5729" y="0"></use> +<g transform="translate(6174,0)"> + <use xlink:href="#E1-MJMAIN-31"></use> + <use xlink:href="#E1-MJMAIN-38" x="500" y="0"></use> +</g> + <use xlink:href="#E1-MJMAIN-2C" x="7175" y="0"></use> +<g transform="translate(7620,0)"> + <use xlink:href="#E1-MJMAIN-32"></use> + <use xlink:href="#E1-MJMAIN-39" x="500" y="0"></use> +</g> + <use xlink:href="#E1-MJMAIN-2C" x="8621" y="0"></use> +<g transform="translate(9066,0)"> + <use xlink:href="#E1-MJMAIN-34"></use> + <use xlink:href="#E1-MJMAIN-37" x="500" y="0"></use> +</g> + <use xlink:href="#E1-MJMAIN-2C" x="10067" y="0"></use> +<g transform="translate(10513,0)"> + <use xlink:href="#E1-MJMAIN-37"></use> + <use xlink:href="#E1-MJMAIN-36" x="500" y="0"></use> +</g> + <use xlink:href="#E1-MJMAIN-2C" x="11514" y="0"></use> +<g transform="translate(11959,0)"> + <use xlink:href="#E1-MJMAIN-31"></use> + <use xlink:href="#E1-MJMAIN-32" x="500" y="0"></use> + <use xlink:href="#E1-MJMAIN-33" x="1001" y="0"></use> +</g> + <use xlink:href="#E1-MJMAIN-2C" x="13460" y="0"></use> +<g transform="translate(13905,0)"> + <use xlink:href="#E1-MJMAIN-31"></use> + <use xlink:href="#E1-MJMAIN-39" x="500" y="0"></use> + <use xlink:href="#E1-MJMAIN-39" x="1001" y="0"></use> +</g> + <use xlink:href="#E1-MJMAIN-2C" x="15407" y="0"></use> +<g transform="translate(15852,0)"> + <use xlink:href="#E1-MJMAIN-33"></use> + <use xlink:href="#E1-MJMAIN-32" x="500" y="0"></use> + <use xlink:href="#E1-MJMAIN-32" x="1001" y="0"></use> +</g> + <use xlink:href="#E1-MJMAIN-2C" x="17354" y="0"></use> + <use xlink:href="#E1-MJMAIN-2026" x="17799" y="0"></use> +</g> +</svg> \ No newline at end of file diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt new file mode 100644 index 000000000000..c724fec5fc9c --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt @@ -0,0 +1,49 @@ + +{{alias}}( n ) + Computes the nth Lucas number in single-precision + floating-point format. + + Lucas numbers follow the recurrence relation + + L_n = L_{n-1} + L_{n-2} + + with seed values L_0 = 2 and L_1 = 1. + + If `n` is greater than `34`, the function returns `NaN`, as larger Lucas + numbers cannot be accurately represented due to limitations of single- + precision floating-point format. + + If not provided a nonnegative integer value, the function returns `NaN`. + + If provided `NaN`, the function returns `NaN`. + + Parameters + ---------- + n: integer + Input value. + + Returns + ------- + y: integer + Lucas number. + + Examples + -------- + > var y = {{alias}}( 0 ) + 2 + > y = {{alias}}( 1 ) + 1 + > y = {{alias}}( 2 ) + 3 + > y = {{alias}}( 3 ) + 4 + > y = {{alias}}( 4 ) + 7 + > y = {{alias}}( 35 ) + NaN + > y = {{alias}}( NaN ) + NaN + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts new file mode 100644 index 000000000000..a57aa6879590 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts @@ -0,0 +1,78 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2019 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. +*/ + +// TypeScript Version: 4.1 + +/** +* Computes the nth Lucas number in single-precision floating-point format. +* +* ## Notes +* +* - Lucas numbers follow the recurrence relation `L_n = L_{n-1} + L_{n-2}` with seed values `L_0 = 2` and `L_1 = 1`. +* - If `n` is greater than `34`, the function returns `NaN`, as larger Lucas numbers cannot be accurately represented due to limitations of single-precision floating-point format. +* - If not provided a nonnegative integer value, the function returns `NaN`. +* +* @param n - the Lucas number to compute +* @returns Lucas number +* +* @example +* var y = lucasf( 0 ); +* // returns 2 +* +* @example +* var y = lucasf( 1 ); +* // returns 1 +* +* @example +* var y = lucasf( 2 ); +* // returns 3 +* +* @example +* var y = lucasf( 3 ); +* // returns 4 +* +* @example +* var y = lucasf( 4 ); +* // returns 7 +* +* @example +* var y = lucasf( 5 ); +* // returns 11 +* +* @example +* var y = lucasf( 6 ); +* // returns 18 +* +* @example +* var y = lucasf( NaN ); +* // returns NaN +* +* @example +* var y = lucasf( 3.14 ); +* // returns NaN +* +* @example +* var y = lucasf( -1.0 ); +* // returns NaN +*/ +declare function lucasf( n: number ): number; + + +// EXPORTS // + +export = lucasf; diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/test.ts b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/test.ts new file mode 100644 index 000000000000..5a14778ff8e2 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/test.ts @@ -0,0 +1,44 @@ +/* +* @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. +*/ + +import lucasf = require( './index' ); + + +// TESTS // + +// The function returns a number... +{ + lucasf( 8 ); // $ExpectType number +} + +// The compiler throws an error if the function is provided a value other than a number... +{ + lucasf( true ); // $ExpectError + lucasf( false ); // $ExpectError + lucasf( null ); // $ExpectError + lucasf( undefined ); // $ExpectError + lucasf( '5' ); // $ExpectError + lucasf( [] ); // $ExpectError + lucasf( {} ); // $ExpectError + lucasf( ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided insufficient arguments... +{ + lucasf(); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/Makefile b/lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/Makefile new file mode 100644 index 000000000000..6aed70daf167 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/Makefile @@ -0,0 +1,146 @@ +#/ +# @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. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +else + QUIET := +endif + +# Determine the OS ([1][1], [2][2]). +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +else +ifneq (, $(findstring Windows_NT,$(OS))) + OS := WINNT +endif +endif +endif +endif + +# Define the program used for compiling C source files: +ifdef C_COMPILER + CC := $(C_COMPILER) +else + CC := gcc +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -Wall \ + -pedantic + +# Determine whether to generate position independent code ([1][1], [2][2]). +# +# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options +# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option +ifeq ($(OS), WINNT) + fPIC ?= +else + fPIC ?= -fPIC +endif + +# List of includes (e.g., `-I /foo/bar -I /beep/boop/include`): +INCLUDE ?= + +# List of source files: +SOURCE_FILES ?= + +# List of libraries (e.g., `-lopenblas -lpthread`): +LIBRARIES ?= + +# List of library paths (e.g., `-L /foo/bar -L /beep/boop`): +LIBPATH ?= + +# List of C targets: +c_targets := example.out + + +# RULES # + +#/ +# Compiles source files. +# +# @param {string} [C_COMPILER] - C compiler (e.g., `gcc`) +# @param {string} [CFLAGS] - C compiler options +# @param {(string|void)} [fPIC] - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`) +# @param {string} [SOURCE_FILES] - list of source files +# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`) +# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`) +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler (e.g., `gcc`) +# @param {string} CFLAGS - C compiler options +# @param {(string|void)} fPIC - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) +# @param {string} INCLUDE - list of includes (e.g., `-I /foo/bar`) +# @param {string} SOURCE_FILES - list of source files +# @param {string} LIBPATH - list of library paths (e.g., `-L /foo/bar`) +# @param {string} LIBRARIES - list of libraries (e.g., `-lopenblas`) +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) $(fPIC) $(INCLUDE) -o $@ $(SOURCE_FILES) $< $(LIBPATH) -lm $(LIBRARIES) + +#/ +# Runs compiled examples. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/example.c b/lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/example.c new file mode 100644 index 000000000000..c2e60e4680a5 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/example.c @@ -0,0 +1,31 @@ +/** +* @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. +*/ + +#include "stdlib/math/base/special/lucasf.h" +#include <stdio.h> +#include <stdint.h> + +int main( void ) { + int32_t i; + float v; + + for ( i = 0; i < 35; i++ ) { + v = stdlib_base_lucasf( i ); + printf( "lucasf(%d) = %f\n", i, v ); + } +} diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/examples/index.js b/lib/node_modules/@stdlib/math/base/special/lucasf/examples/index.js new file mode 100644 index 000000000000..60e93828e0f3 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/examples/index.js @@ -0,0 +1,29 @@ +/** +* @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. +*/ + +'use strict'; + +var lucasf = require( './../lib' ); + +var v; +var i; + +for ( i = 0; i < 35; i++ ) { + v = lucasf( i ); + console.log( v ); +} From ca173bd528fbdce7929a429d93ab36a7368a69c2 Mon Sep 17 00:00:00 2001 From: stdlib-bot <82920195+stdlib-bot@users.noreply.github.com> Date: Fri, 6 Dec 2024 11:00:10 +0000 Subject: [PATCH 05/18] chore: update copyright years --- .../@stdlib/math/base/special/lucasf/docs/types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts index a57aa6879590..a1c7973d449f 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts @@ -1,7 +1,7 @@ /* * @license Apache-2.0 * -* Copyright (c) 2019 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 0a221ceb632bc188ad1fc247a83081c6da7d0b6e Mon Sep 17 00:00:00 2001 From: aayush0325 <aayush25khanna@gmail,com> Date: Fri, 6 Dec 2024 16:37:25 +0530 Subject: [PATCH 06/18] fix: bugs removed --- .../math/base/special/lucasf/benchmark/c/native/benchmark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c index 953d226f1e1f..2d21e000993d 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c @@ -98,7 +98,7 @@ static double benchmark( void ) { t = tic(); for ( i = 0; i < ITERATIONS; i++ ) { - x = (int32_t)( 34.0f * rand_double() ); + x = (int32_t)( 34.0f * rand_float() ); y = stdlib_base_lucasf( x ); if ( y != y ) { printf( "should not return NaN\n" ); From 66a0a8c6229f3ab31ff8cccd714e8b51071e9311 Mon Sep 17 00:00:00 2001 From: aayush0325 <aayush25khanna@gmail,com> Date: Fri, 6 Dec 2024 16:52:31 +0530 Subject: [PATCH 07/18] feat: updated benchmarks with pre-computation --- .../math/base/special/lucasf/benchmark/benchmark.js | 2 +- .../base/special/lucasf/benchmark/benchmark.native.js | 8 ++++---- .../base/special/lucasf/benchmark/c/native/benchmark.c | 9 ++++++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js index 1f9ce236dac2..b49401fe341e 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js @@ -154,7 +154,7 @@ bench( pkg+'::recursion_memoized', function benchmark( b ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = floorf( randu() * 40.0 ); // limit upper bound + x = floorf( randu() * 35.0 ); // limit upper bound y = lucasf( x ); if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js index 5223a1532863..fde08e121c9b 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js @@ -22,8 +22,7 @@ var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); -var randu = require( '@stdlib/random/base/randu' ); -var floorf = require( '@stdlib/math/base/special/floorf' ); +var randu = require( '@stdlib/random/array/discrete-uniform' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var tryRequire = require( '@stdlib/utils/try-require' ); var pkg = require( './../package.json' ).name; @@ -44,10 +43,11 @@ bench( pkg+'::native', opts, function benchmark( b ) { var y; var i; + x = randu( 100, -50, 50 ); + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = floorf( randu() * 34.0 ); - y = lucasf( x ); + y = lucasf( x[ i % 100 ] ); if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c index 2d21e000993d..06c0be54bf88 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c @@ -91,15 +91,18 @@ static float rand_float( void ) { */ static double benchmark( void ) { double elapsed; - int32_t x; + int32_t x[ 100 ]; double t; float y; int i; + for ( i = 0 ; i < 100 ; i++ ) { + x[ i ] = ( int32_t )( 34.0f * rand_float() ); + } + t = tic(); for ( i = 0; i < ITERATIONS; i++ ) { - x = (int32_t)( 34.0f * rand_float() ); - y = stdlib_base_lucasf( x ); + y = stdlib_base_lucasf( x[ i % 100 ] ); if ( y != y ) { printf( "should not return NaN\n" ); break; From d394f5f33315d968acb441c73adb8416c8906c47 Mon Sep 17 00:00:00 2001 From: aayush0325 <aayush25khanna@gmail,com> Date: Fri, 6 Dec 2024 16:54:36 +0530 Subject: [PATCH 08/18] feat: updated benchmarks with pre-computation --- .../math/base/special/lucasf/benchmark/benchmark.native.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js index fde08e121c9b..e18a48cd3b0f 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.native.js @@ -43,7 +43,7 @@ bench( pkg+'::native', opts, function benchmark( b ) { var y; var i; - x = randu( 100, -50, 50 ); + x = randu( 100, 0, 34 ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { From 6d63bdda5c9473f113fb7ad9cb41556761513167 Mon Sep 17 00:00:00 2001 From: aayush0325 <aayush25khanna@gmail,com> Date: Tue, 10 Dec 2024 12:34:34 +0530 Subject: [PATCH 09/18] fix: image errors fix --- lib/node_modules/@stdlib/math/base/special/lucasf/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md index d9c982df2907..235b07d7ee20 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md @@ -33,7 +33,7 @@ The [Lucas numbers][lucas-number] are the integer sequence ``` <!-- <div class="equation" align="center" data-raw-text="2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322, \ldots" data-equation="eq:lucas_sequence"> - <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@bb29798906e119fcb2af99e94b60407a270c9b32/lib/node_modules/@stdlib/math/base/special/lucas/docs/img/equation_lucas_sequence.svg" alt="Lucas sequence"> + <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@bb29798906e119fcb2af99e94b60407a270c9b32/lib/node_modules/@stdlib/math/base/special/lucasf/docs/img/equation_lucas_sequence.svg" alt="Lucas sequence"> <br> </div> --> @@ -48,7 +48,7 @@ L_n = \begin{cases}2 & \textrm{if}\ n = 0\\1 & \textrm{if}\ n = 1\\L_{n-1} + L_{ ``` <!-- <div class="equation" align="center" data-raw-text="L_n = \begin{cases}2 & \textrm{if}\ n = 0\\1 & \textrm{if}\ n = 1\\L_{n-1} + L_{n-2} & \textrm{if}\ n > 1\end{cases}" data-equation="eq:lucas_recurrence_relation"> - <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@bb29798906e119fcb2af99e94b60407a270c9b32/lib/node_modules/@stdlib/math/base/special/lucas/docs/img/equation_lucas_recurrence_relation.svg" alt="Lucas sequence recurrence relation"> + <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@bb29798906e119fcb2af99e94b60407a270c9b32/lib/node_modules/@stdlib/math/base/special/lucasf/docs/img/equation_lucas_recurrence_relation.svg" alt="Lucas sequence recurrence relation"> <br> </div> --> From 01f6fd313e71644ac13643674f93e591eb965cac Mon Sep 17 00:00:00 2001 From: aayush0325 <ayush25khanna@gmail.com> Date: Sat, 14 Dec 2024 16:55:06 +0000 Subject: [PATCH 10/18] chore: use macros instead of vars and updated benchmark --- .../math/base/special/lucasf/benchmark/c/benchmark.c | 9 ++++++--- .../@stdlib/math/base/special/lucasf/lib/main.js | 2 +- .../@stdlib/math/base/special/lucasf/manifest.json | 11 ++++++++--- .../@stdlib/math/base/special/lucasf/src/main.c | 3 +-- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/benchmark.c b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/benchmark.c index fddab3e54d21..f0854d405ec1 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/benchmark.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/benchmark.c @@ -107,14 +107,17 @@ int lucasf( int n ) { static double benchmark( void ) { double elapsed; double t; - int x; + int x[ 100 ]; int y; int i; + for ( i = 0; i < 100; i++ ) { + x[ i ] = (int)floorf( 30.0f * rand_float() ); + } + t = tic(); for ( i = 0; i < ITERATIONS; i++ ) { - x = (int)floorf( 30.0f * rand_float() ); - y = lucasf( x ); + y = lucasf( x[ i % 100 ] ); if ( y < 0 ) { printf( "should return a nonnegative integer\n" ); break; diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js index f80a4ab111c0..d28633858c1d 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js @@ -22,7 +22,7 @@ var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var isIntegerf = require( '@stdlib/math/base/assert/is-integerf' ); -var MAX_LUCAS = 34; +var MAX_LUCAS = require( '@stdlib/constants/float32/max-safe-nth-lucas' ); var LUCAS = require( './lucas.json' ); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/manifest.json b/lib/node_modules/@stdlib/math/base/special/lucasf/manifest.json index 6bfc690068b2..ce09484e2d1b 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/manifest.json +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/manifest.json @@ -36,7 +36,8 @@ "libraries": [], "libpath": [], "dependencies": [ - "@stdlib/math/base/napi/unary" + "@stdlib/math/base/napi/unary", + "@stdlib/constants/float32/max-safe-nth-lucas" ] }, { @@ -49,7 +50,9 @@ ], "libraries": [], "libpath": [], - "dependencies": [] + "dependencies": [ + "@stdlib/constants/float32/max-safe-nth-lucas" + ] }, { "task": "examples", @@ -61,7 +64,9 @@ ], "libraries": [], "libpath": [], - "dependencies": [] + "dependencies": [ + "@stdlib/constants/float32/max-safe-nth-lucas" + ] } ] } diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c index 922f5fcb2a9a..81acad026ee4 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c @@ -17,8 +17,7 @@ */ #include "stdlib/math/base/special/lucasf.h" - -static const int32_t STDLIB_CONSTANT_FLOAT32_MAX_SAFE_NTH_LUCAS = 34; +#include "stdlib/constants/float32/max_safe_nth_lucas.h" static const int32_t lucas_value[ 35 ] = { 2, From dc28013cc50a78da4e89f64598ea921448c2113c Mon Sep 17 00:00:00 2001 From: aayush0325 <ayush25khanna@gmail.com> Date: Tue, 17 Dec 2024 07:44:25 +0000 Subject: [PATCH 11/18] chore: indentation fixes --- .../lucasf/benchmark/c/native/benchmark.c | 96 +++++++++---------- .../base/special/lucasf/examples/c/example.c | 12 +-- .../math/base/special/lucasf/src/main.c | 8 +- 3 files changed, 58 insertions(+), 58 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c index 06c0be54bf88..4d19b219f7b5 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/c/native/benchmark.c @@ -31,7 +31,7 @@ * Prints the TAP version. */ void print_version() { - printf( "TAP version 13\n" ); + printf( "TAP version 13\n" ); } /** @@ -41,12 +41,12 @@ void print_version() { * @param passing total number of passing tests */ static void print_summary( int total, int passing ) { - printf( "#\n" ); - printf( "1..%d\n", total ); // TAP plan - printf( "# total %d\n", total ); - printf( "# pass %d\n", passing ); - printf( "#\n" ); - printf( "# ok\n" ); + printf( "#\n" ); + printf( "1..%d\n", total ); // TAP plan + printf( "# total %d\n", total ); + printf( "# pass %d\n", passing ); + printf( "#\n" ); + printf( "# ok\n" ); } /** @@ -55,12 +55,12 @@ static void print_summary( int total, int passing ) { * @param elapsed elapsed time in seconds */ static void print_results( double elapsed ) { - double rate = (double)ITERATIONS / elapsed; - printf( " ---\n" ); - printf( " iterations: %d\n", ITERATIONS ); - printf( " elapsed: %0.9f\n", elapsed ); - printf( " rate: %0.9f\n", rate ); - printf( " ...\n" ); + double rate = (double)ITERATIONS / elapsed; + printf( " ---\n" ); + printf( " iterations: %d\n", ITERATIONS ); + printf( " elapsed: %0.9f\n", elapsed ); + printf( " rate: %0.9f\n", rate ); + printf( " ...\n" ); } /** @@ -69,9 +69,9 @@ static void print_results( double elapsed ) { * @return clock time */ static double tic( void ) { - struct timeval now; - gettimeofday( &now, NULL ); - return (double)now.tv_sec + (double)now.tv_usec/1.0e6; + struct timeval now; + gettimeofday( &now, NULL ); + return (double)now.tv_sec + (double)now.tv_usec/1.0e6; } /** @@ -80,8 +80,8 @@ static double tic( void ) { * @return random number */ static float rand_float( void ) { - int r = rand(); - return (float)r / ( (float)RAND_MAX + 1.0f ); + int r = rand(); + return (float)r / ( (float)RAND_MAX + 1.0f ); } /** @@ -90,47 +90,47 @@ static float rand_float( void ) { * @return elapsed time in seconds */ static double benchmark( void ) { - double elapsed; - int32_t x[ 100 ]; - double t; - float y; - int i; + double elapsed; + int32_t x[ 100 ]; + double t; + float y; + int i; for ( i = 0 ; i < 100 ; i++ ) { x[ i ] = ( int32_t )( 34.0f * rand_float() ); } - t = tic(); - for ( i = 0; i < ITERATIONS; i++ ) { - y = stdlib_base_lucasf( x[ i % 100 ] ); - if ( y != y ) { - printf( "should not return NaN\n" ); - break; - } - } - elapsed = tic() - t; - if ( y != y ) { - printf( "should not return NaN\n" ); - } - return elapsed; + t = tic(); + for ( i = 0; i < ITERATIONS; i++ ) { + y = stdlib_base_lucasf( x[ i % 100 ] ); + if ( y != y ) { + printf( "should not return NaN\n" ); + break; + } + } + elapsed = tic() - t; + if ( y != y ) { + printf( "should not return NaN\n" ); + } + return elapsed; } /** * Main execution sequence. */ int main( void ) { - double elapsed; - int i; + double elapsed; + int i; - // Use the current time to seed the random number generator: - srand( time( NULL ) ); + // Use the current time to seed the random number generator: + srand( time( NULL ) ); - print_version(); - for ( i = 0; i < REPEATS; i++ ) { - printf( "# c::native::%s\n", NAME ); - elapsed = benchmark(); - print_results( elapsed ); - printf( "ok %d benchmark finished\n", i+1 ); - } - print_summary( REPEATS, REPEATS ); + print_version(); + for ( i = 0; i < REPEATS; i++ ) { + printf( "# c::native::%s\n", NAME ); + elapsed = benchmark(); + print_results( elapsed ); + printf( "ok %d benchmark finished\n", i+1 ); + } + print_summary( REPEATS, REPEATS ); } diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/example.c b/lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/example.c index c2e60e4680a5..586c5b8d3d6f 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/example.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/examples/c/example.c @@ -21,11 +21,11 @@ #include <stdint.h> int main( void ) { - int32_t i; - float v; + int32_t i; + float v; - for ( i = 0; i < 35; i++ ) { - v = stdlib_base_lucasf( i ); - printf( "lucasf(%d) = %f\n", i, v ); - } + for ( i = 0; i < 35; i++ ) { + v = stdlib_base_lucasf( i ); + printf( "lucasf(%d) = %f\n", i, v ); + } } diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c index 81acad026ee4..78477d9229b7 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c @@ -72,8 +72,8 @@ static const int32_t lucas_value[ 35 ] = { * // returns NaN */ float stdlib_base_lucasf( const int32_t n ) { - if ( n < 0 || n > STDLIB_CONSTANT_FLOAT32_MAX_SAFE_NTH_LUCAS ) { - return 0.0f / 0.0f; // NaN - } - return lucas_value[ n ]; + if ( n < 0 || n > STDLIB_CONSTANT_FLOAT32_MAX_SAFE_NTH_LUCAS ) { + return 0.0f / 0.0f; // NaN + } + return lucas_value[ n ]; } From d4a0d537ab960b996cebdf2e4385d8a7dd4e3290 Mon Sep 17 00:00:00 2001 From: aayush0325 <ayush25khanna@gmail.com> Date: Tue, 17 Dec 2024 08:02:52 +0000 Subject: [PATCH 12/18] chore: update function descriptions --- .../@stdlib/math/base/special/lucasf/test/test.js | 10 +++++----- .../math/base/special/lucasf/test/test.native.js | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.js b/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.js index c8765a8ffb61..23a007e091db 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.js @@ -44,24 +44,24 @@ tape( 'if provided a negative number, the function returns `NaN`', function test var v; var i; - t.strictEqual( isnanf( lucasf( -3.14 ) ), true, 'returns NaN' ); + t.strictEqual( isnanf( lucasf( -3.14 ) ), true, 'returns expected value' ); for ( i = -1; i > -100; i-- ) { v = lucasf( i ); - t.strictEqual( isnanf( v ), true, 'returns NaN when provided ' + i ); + t.strictEqual( isnanf( v ), true, 'returns expected value when provided ' + i ); } t.end(); }); tape( 'if provided positive infinity, the function returns `NaN`', function test( t ) { var v = lucasf( PINF ); - t.strictEqual( isnanf( v ), true, 'returns NaN when provided +infinity' ); + t.strictEqual( isnanf( v ), true, 'returns expected value when provided +infinity' ); t.end(); }); tape( 'if provided `NaN`, the function returns `NaN`', function test( t ) { var v = lucasf( NaN ); - t.strictEqual( isnanf( v ), true, 'returns NaN when provided a NaN' ); + t.strictEqual( isnanf( v ), true, 'returns expected value when provided a NaN' ); t.end(); }); @@ -86,7 +86,7 @@ tape( 'if provided nonnegative integers greater than `34`, the function returns var v; for ( i = 35; i < 500; i++ ) { v = lucasf( i ); - t.strictEqual( isnanf( v ), true, 'returns NaN when provided ' + i ); + t.strictEqual( isnanf( v ), true, 'returns expected value when provided ' + i ); } t.end(); }); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.native.js index d39d7bf62bbf..5881849f95ec 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.native.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/test/test.native.js @@ -53,7 +53,7 @@ tape( 'if provided a negative number, the function returns `NaN`', opts, functio for ( i = -1; i > -100; i-- ) { v = lucasf( i ); - t.strictEqual( isnanf( v ), true, 'returns NaN when provided ' + i ); + t.strictEqual( isnanf( v ), true, 'returns expected value when provided ' + i ); } t.end(); }); @@ -73,7 +73,7 @@ tape( 'if provided nonnegative integers less than `34`, the function returns `Na var v; for ( i = 35; i < 500; i++ ) { v = lucasf( i ); - t.strictEqual( isnanf( v ), true, 'returns NaN when provided ' + i ); + t.strictEqual( isnanf( v ), true, 'returns expected value when provided ' + i ); } t.end(); }); From 1f77b727c0cdfc09dcf3efca5b5a1397d7cdced6 Mon Sep 17 00:00:00 2001 From: aayush0325 <ayush25khanna@gmail.com> Date: Tue, 17 Dec 2024 08:12:52 +0000 Subject: [PATCH 13/18] feat: update benchmarks with precomputation --- .../special/lucasf/benchmark/benchmark.js | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js index b49401fe341e..f0272abb9c06 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/benchmark/benchmark.js @@ -21,8 +21,7 @@ // MODULES // var bench = require( '@stdlib/bench' ); -var randu = require( '@stdlib/random/base/randu' ); -var floorf = require( '@stdlib/math/base/special/floorf' ); +var randu = require( '@stdlib/random/array/discrete-uniform' ); var roundf = require( '@stdlib/math/base/special/roundf' ); var pow = require( '@stdlib/math/base/special/pow' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); @@ -39,10 +38,11 @@ bench( pkg, function benchmark( b ) { var y; var i; + x = randu( 100, 0, 34 ); + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = floorf( randu() * 35.0 ); - y = lucasf( x ); + y = lucasf( x[ i % 100 ] ); if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } @@ -64,10 +64,11 @@ bench( pkg+'::analytic', function benchmark( b ) { return roundf( pow( PHI, n ) ); } + x = randu( 100, 0, 34 ); + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = floorf( randu() * 35.0 ); - y = lucasf( x ); + y = lucasf( x[ i % 100 ] ); if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } @@ -85,10 +86,11 @@ bench( pkg+'::table', function benchmark( b ) { var y; var i; + x = randu( 100, 0, 34 ); + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = floorf( randu() * 35.0 ); - y = LUCAS[ x ]; + y = LUCAS[ x[ i % 100 ] ]; if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } @@ -116,10 +118,11 @@ bench( pkg+'::naive_recursion', function benchmark( b ) { return lucasf( n-1 ) + lucasf( n-2 ); } + x = randu( 100, 0, 40 ); // limit upper bound + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = floorf( randu() * 40.0 ); // limit upper bound - y = lucasf( x ); + y = lucasf( x[ i % 100 ] ); if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } @@ -152,10 +155,11 @@ bench( pkg+'::recursion_memoized', function benchmark( b ) { return arr[ n ]; } + x = randu( 100, 0, 35 ); // limit upper bound + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = floorf( randu() * 35.0 ); // limit upper bound - y = lucasf( x ); + y = lucasf( x[ i % 100 ] ); if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } @@ -186,10 +190,11 @@ bench( pkg+'::naive_iterative', function benchmark( b ) { return arr[ n ]; } + x = randu( 100, 0, 35 ); + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = floorf( randu() * 35.0 ); - y = lucasf( x ); + y = lucasf( x[ i % 100 ] ); if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } @@ -226,10 +231,11 @@ bench( pkg+'::iterative', function benchmark( b ) { return b; } + x = randu( 100, 0, 35 ); + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = floorf( randu() * 35.0 ); - y = lucasf( x ); + y = lucasf( x[ i % 100 ] ); if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } @@ -265,10 +271,11 @@ bench( pkg+'::iterative_memoized', function benchmark( b ) { return arr[ n ]; } + x = randu( 100, 0, 35 ); + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = floorf( randu() * 35.0 ); - y = lucasf( x ); + y = lucasf( x[ i % 100 ] ); if ( isnanf( y ) ) { b.fail( 'should not return NaN' ); } From eadb608bd4eb8318600c47b88145f88268b09b0b Mon Sep 17 00:00:00 2001 From: aayush0325 <ayush25khanna@gmail.com> Date: Tue, 17 Dec 2024 08:26:10 +0000 Subject: [PATCH 14/18] docs: update description --- lib/node_modules/@stdlib/math/base/special/lucasf/README.md | 4 ++-- .../@stdlib/math/base/special/lucasf/docs/repl.txt | 4 ++-- .../@stdlib/math/base/special/lucasf/docs/types/index.d.ts | 2 +- .../special/lucasf/include/stdlib/math/base/special/lucasf.h | 2 +- lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js | 2 +- .../@stdlib/math/base/special/lucasf/lib/native.js | 2 +- .../@stdlib/math/base/special/lucasf/package.json | 2 +- lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md index 235b07d7ee20..9fd805aa86cd 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md @@ -68,7 +68,7 @@ var lucasf = require( '@stdlib/math/base/special/lucasf' ); #### lucasf( n ) -Computes the nth [Lucas number][lucas-number] in single-precision floating-point format. +Compute/Computes the nth [Lucas number][lucas-number] in single-precision floating-point format. ```javascript var v = lucasf( 0 ); @@ -171,7 +171,7 @@ for ( i = 0; i < 35; i++ ) { #### stdlib_base_lucasf( n ) -Computes the nth [Lucas number][lucas-number] in single-precision floating-point format. +Compute/Computes the nth [Lucas number][lucas-number] in single-precision floating-point format. ```c float out = stdlib_base_lucasf( 0 ); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt index c724fec5fc9c..92546901714f 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt @@ -1,7 +1,7 @@ {{alias}}( n ) - Computes the nth Lucas number in single-precision - floating-point format. + Compute/Computes the nth Lucas number in + single-precision floating-point format. Lucas numbers follow the recurrence relation diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts index a1c7973d449f..b022b4ea4ff2 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts @@ -19,7 +19,7 @@ // TypeScript Version: 4.1 /** -* Computes the nth Lucas number in single-precision floating-point format. +* Compute/Computes the nth Lucas number in single-precision floating-point format. * * ## Notes * diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h b/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h index 13b00041d64d..702b90d19c8e 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h @@ -29,7 +29,7 @@ extern "C" { #endif /** -* Computes the nth Lucas number in single-precision floating-point format. +* Compute/Computes the nth Lucas number in single-precision floating-point format. */ float stdlib_base_lucasf( const int32_t n ); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js index d28633858c1d..3b4e97f459f6 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js @@ -29,7 +29,7 @@ var LUCAS = require( './lucas.json' ); // MAIN // /** -* Computes the nth Lucas number in single-precision floating-point format. +* Cmopute/Computes the nth Lucas number in single-precision floating-point format. * * @param {NonNegativeInteger} n - the Lucas number to compute * @returns {NonNegativeInteger} Lucas number diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js index bcb11fe34420..564e843875f6 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js @@ -26,7 +26,7 @@ var addon = require( './../src/addon.node' ); // MAIN // /** -* Computes the nth Lucas number in single-precision floating-point format. +* Compute/Computes the nth Lucas number in single-precision floating-point format. * * @private * @param {NonNegativeInteger} n - the Lucas number to compute diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/package.json b/lib/node_modules/@stdlib/math/base/special/lucasf/package.json index 499d2470f300..6edefcb98bf9 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/package.json +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/package.json @@ -1,7 +1,7 @@ { "name": "@stdlib/math/base/special/lucasf", "version": "0.0.0", - "description": "Compute the nth Lucas number in single-precision floating-point format.", + "description": "Compute/Computes the nth Lucas number in single-precision floating-point format.", "license": "Apache-2.0", "author": { "name": "The Stdlib Authors", diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c index 78477d9229b7..a6c43b7980de 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c @@ -58,7 +58,7 @@ static const int32_t lucas_value[ 35 ] = { }; /** -* Computes the nth Lucas number in single-precision floating-point format. +* Compute/Computes the nth Lucas number in single-precision floating-point format. * * @param n input value * @return output value From b4d38e55fb431224e04a4398156e81211499b65f Mon Sep 17 00:00:00 2001 From: aayush0325 <ayush25khanna@gmail.com> Date: Tue, 17 Dec 2024 08:49:55 +0000 Subject: [PATCH 15/18] feat: update descriptions --- lib/node_modules/@stdlib/math/base/special/lucasf/README.md | 6 +++--- .../@stdlib/math/base/special/lucasf/docs/repl.txt | 4 ++-- .../@stdlib/math/base/special/lucasf/docs/types/index.d.ts | 2 +- .../lucasf/include/stdlib/math/base/special/lucasf.h | 2 +- .../@stdlib/math/base/special/lucasf/lib/index.js | 2 +- .../@stdlib/math/base/special/lucasf/lib/main.js | 2 +- .../@stdlib/math/base/special/lucasf/lib/native.js | 2 +- .../@stdlib/math/base/special/lucasf/package.json | 2 +- .../@stdlib/math/base/special/lucasf/src/main.c | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md index 9fd805aa86cd..2f2cba235fd7 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md @@ -20,7 +20,7 @@ limitations under the License. # Lucas -> Compute the nth [Lucas number][lucas-number] in single-precision floating-point format. +> Compute/Computes the nth [Lucas number][lucas-number] as a single-precision floating-point number. <section class="intro"> @@ -68,7 +68,7 @@ var lucasf = require( '@stdlib/math/base/special/lucasf' ); #### lucasf( n ) -Compute/Computes the nth [Lucas number][lucas-number] in single-precision floating-point format. +Compute/Computes the nth [Lucas number][lucas-number] as a single-precision floating-point number. ```javascript var v = lucasf( 0 ); @@ -171,7 +171,7 @@ for ( i = 0; i < 35; i++ ) { #### stdlib_base_lucasf( n ) -Compute/Computes the nth [Lucas number][lucas-number] in single-precision floating-point format. +Compute/Computes the nth [Lucas number][lucas-number] as a single-precision floating-point number. ```c float out = stdlib_base_lucasf( 0 ); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt index 92546901714f..5665879ab876 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt @@ -1,7 +1,7 @@ {{alias}}( n ) - Compute/Computes the nth Lucas number in - single-precision floating-point format. + Compute/Computes the nth Lucas number as a + single-precision floating-point number. Lucas numbers follow the recurrence relation diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts index b022b4ea4ff2..86919640ae74 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts @@ -19,7 +19,7 @@ // TypeScript Version: 4.1 /** -* Compute/Computes the nth Lucas number in single-precision floating-point format. +* Compute/Computes the nth Lucas number as a single-precision floating-point number. * * ## Notes * diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h b/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h index 702b90d19c8e..3bf927ee78e0 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h @@ -29,7 +29,7 @@ extern "C" { #endif /** -* Compute/Computes the nth Lucas number in single-precision floating-point format. +* Compute/Computes the nth Lucas number as a single-precision floating-point number. */ float stdlib_base_lucasf( const int32_t n ); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/index.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/index.js index cc55a0cb05d1..9267ab2895da 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/index.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/index.js @@ -19,7 +19,7 @@ 'use strict'; /** -* Compute the nth Lucas number in single-precision floating-point format. +* Compute the nth Lucas number as a single-precision floating-point number. * * @module @stdlib/math/base/special/lucasf * diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js index 3b4e97f459f6..0bd8937ed060 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js @@ -29,7 +29,7 @@ var LUCAS = require( './lucas.json' ); // MAIN // /** -* Cmopute/Computes the nth Lucas number in single-precision floating-point format. +* Compute/Computes the nth Lucas number as a single-precision floating-point number. * * @param {NonNegativeInteger} n - the Lucas number to compute * @returns {NonNegativeInteger} Lucas number diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js index 564e843875f6..2656672544ca 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js @@ -26,7 +26,7 @@ var addon = require( './../src/addon.node' ); // MAIN // /** -* Compute/Computes the nth Lucas number in single-precision floating-point format. +* Compute/Computes the nth Lucas number as a single-precision floating-point number. * * @private * @param {NonNegativeInteger} n - the Lucas number to compute diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/package.json b/lib/node_modules/@stdlib/math/base/special/lucasf/package.json index 6edefcb98bf9..1d0d38074671 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/package.json +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/package.json @@ -1,7 +1,7 @@ { "name": "@stdlib/math/base/special/lucasf", "version": "0.0.0", - "description": "Compute/Computes the nth Lucas number in single-precision floating-point format.", + "description": "Compute/Computes the nth Lucas number as a single-precision floating-point number.", "license": "Apache-2.0", "author": { "name": "The Stdlib Authors", diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c index a6c43b7980de..5da0402c2202 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c @@ -58,7 +58,7 @@ static const int32_t lucas_value[ 35 ] = { }; /** -* Compute/Computes the nth Lucas number in single-precision floating-point format. +* Compute/Computes the nth Lucas number as a single-precision floating-point number. * * @param n input value * @return output value From 309b056e85be49b1f1d81b2aac74192ea280efa8 Mon Sep 17 00:00:00 2001 From: aayush0325 <ayush25khanna@gmail.com> Date: Tue, 17 Dec 2024 10:27:39 +0000 Subject: [PATCH 16/18] chore: correct descriptions --- lib/node_modules/@stdlib/math/base/special/lucasf/README.md | 6 +++--- .../@stdlib/math/base/special/lucasf/docs/repl.txt | 2 +- .../@stdlib/math/base/special/lucasf/docs/types/index.d.ts | 2 +- .../lucasf/include/stdlib/math/base/special/lucasf.h | 2 +- .../@stdlib/math/base/special/lucasf/lib/main.js | 2 +- .../@stdlib/math/base/special/lucasf/lib/native.js | 2 +- .../@stdlib/math/base/special/lucasf/package.json | 2 +- .../@stdlib/math/base/special/lucasf/src/main.c | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md index 2f2cba235fd7..f4e9c8dffa0d 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/README.md +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/README.md @@ -20,7 +20,7 @@ limitations under the License. # Lucas -> Compute/Computes the nth [Lucas number][lucas-number] as a single-precision floating-point number. +> Computes the nth [Lucas number][lucas-number] as a single-precision floating-point number. <section class="intro"> @@ -68,7 +68,7 @@ var lucasf = require( '@stdlib/math/base/special/lucasf' ); #### lucasf( n ) -Compute/Computes the nth [Lucas number][lucas-number] as a single-precision floating-point number. +Computes the nth [Lucas number][lucas-number] as a single-precision floating-point number. ```javascript var v = lucasf( 0 ); @@ -171,7 +171,7 @@ for ( i = 0; i < 35; i++ ) { #### stdlib_base_lucasf( n ) -Compute/Computes the nth [Lucas number][lucas-number] as a single-precision floating-point number. +Computes the nth [Lucas number][lucas-number] as a single-precision floating-point number. ```c float out = stdlib_base_lucasf( 0 ); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt index 5665879ab876..5290a55cefb7 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/repl.txt @@ -1,6 +1,6 @@ {{alias}}( n ) - Compute/Computes the nth Lucas number as a + Computes the nth Lucas number as a single-precision floating-point number. Lucas numbers follow the recurrence relation diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts index 86919640ae74..c1409866f9cc 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts @@ -19,7 +19,7 @@ // TypeScript Version: 4.1 /** -* Compute/Computes the nth Lucas number as a single-precision floating-point number. +* Computes the nth Lucas number as a single-precision floating-point number. * * ## Notes * diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h b/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h index 3bf927ee78e0..e78e7e40b6e3 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/include/stdlib/math/base/special/lucasf.h @@ -29,7 +29,7 @@ extern "C" { #endif /** -* Compute/Computes the nth Lucas number as a single-precision floating-point number. +* Computes the nth Lucas number as a single-precision floating-point number. */ float stdlib_base_lucasf( const int32_t n ); diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js index 0bd8937ed060..810bb1bb358b 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/main.js @@ -29,7 +29,7 @@ var LUCAS = require( './lucas.json' ); // MAIN // /** -* Compute/Computes the nth Lucas number as a single-precision floating-point number. +* Computes the nth Lucas number as a single-precision floating-point number. * * @param {NonNegativeInteger} n - the Lucas number to compute * @returns {NonNegativeInteger} Lucas number diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js index 2656672544ca..e19928603374 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/lib/native.js @@ -26,7 +26,7 @@ var addon = require( './../src/addon.node' ); // MAIN // /** -* Compute/Computes the nth Lucas number as a single-precision floating-point number. +* Computes the nth Lucas number as a single-precision floating-point number. * * @private * @param {NonNegativeInteger} n - the Lucas number to compute diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/package.json b/lib/node_modules/@stdlib/math/base/special/lucasf/package.json index 1d0d38074671..9822b046b63d 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/package.json +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/package.json @@ -1,7 +1,7 @@ { "name": "@stdlib/math/base/special/lucasf", "version": "0.0.0", - "description": "Compute/Computes the nth Lucas number as a single-precision floating-point number.", + "description": "Compute the nth Lucas number as a single-precision floating-point number.", "license": "Apache-2.0", "author": { "name": "The Stdlib Authors", diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c index 5da0402c2202..5d661617d820 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/src/main.c @@ -58,7 +58,7 @@ static const int32_t lucas_value[ 35 ] = { }; /** -* Compute/Computes the nth Lucas number as a single-precision floating-point number. +* Computes the nth Lucas number as a single-precision floating-point number. * * @param n input value * @return output value From 2afbe932300924fc3fe02b7e58c780598841ac26 Mon Sep 17 00:00:00 2001 From: aayush0325 <ayush25khanna@gmail.com> Date: Tue, 17 Dec 2024 10:42:30 +0000 Subject: [PATCH 17/18] chore: correct descriptions --- .../@stdlib/math/base/special/lucasf/docs/types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts index c1409866f9cc..d4042fdb9a65 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts @@ -19,7 +19,7 @@ // TypeScript Version: 4.1 /** -* Computes the nth Lucas number as a single-precision floating-point number. +* Compute the nth Lucas number as a single-precision floating-point number. * * ## Notes * From 8fbf8876f1330eb8504b2846a7b879e2ee3dcc2e Mon Sep 17 00:00:00 2001 From: aayush0325 <ayush25khanna@gmail.com> Date: Wed, 18 Dec 2024 04:55:42 +0000 Subject: [PATCH 18/18] chore: fix linting errors --- .../@stdlib/math/base/special/lucasf/docs/types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts index d4042fdb9a65..c1409866f9cc 100644 --- a/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/math/base/special/lucasf/docs/types/index.d.ts @@ -19,7 +19,7 @@ // TypeScript Version: 4.1 /** -* Compute the nth Lucas number as a single-precision floating-point number. +* Computes the nth Lucas number as a single-precision floating-point number. * * ## Notes *